System zdarzeń - wyzwalanie i nasłuchiwanie

Wielkość: px
Rozpocząć pokaz od strony:

Download "System zdarzeń - wyzwalanie i nasłuchiwanie"

Transkrypt

1 System zdarzeń - wyzwalanie i nasłuchiwanie Informacje o module Opis modułu W tym rozdziale dowiesz się czym są zdarzenia silverlight, jakie rodzaje zdarzeo obsługuje oraz jakie strategie informowania o zajściu zdarzenia wykorzystano tworząc strukturę komponentów wizualnych. Dowiesz się jak zaprojektowad własny system zdarzeo. Nauczysz się wykorzystywad elastycznośd systemu zdarzeo Silverlight w projektowaniu logiki twojej aplikacji. Cel modułu Celem modułu jest przedstawienie koncepcji programowania z wykorzystaniem systemu zdarzeo i komend. Nadrzędnym celem jest zrozumienie różnic pomiędzy wyzwoleniem zdarzenia, jego obsługą oraz strategią roznoszenia informacji o jego zajściu. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: wiedział czym są zdarzenia oraz jakie koncepcje programistyczne rządzą ich zachowaniem, potrafił wykorzystad siłę systemu zdarzeo komponentów Silverlight, rozumiał jak budowad, wyzwalad i nasłuchiwad własnych zdarzeo. Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: znad podstawy języka C# rozumied mechanizm delegowania metod,

2 Przygotowanie teoretyczne Przykładowy problem Chcesz zaprojektowad aplikację pozwalająca przetwarzad dokumenty tekstowe. Z każdym dokumentem wiążesz proste menu obsługujące operacje nao przeprowadzane. Niemniej chcesz zaprojektowad aplikację elastycznie, aby umożliwid przenoszenie fragmentów treści pomiędzy oknami, zapisywanie wszystkich dokumentów, zamykanie itp. Aplikację tego typu stworzyd można w sposób piękny inżynieryjnie albo w sposób ekstremalny (tzw. kod spaghetti). Niezależnie którą metodę wybierzesz powinieneś dopasowad się do wzorców informowania o zajściu określonych zdarzeo. Dodatkowo powinieneś umied tworzyd własne wzorce zdarzeo oraz metody je obsługujące. Przygotowanie teoretyczne Technicznie, zdarzenie to nic innego jak zmienna typu delegowanego poprzedzona słowem kluczowym event, np.: public event SimpleOne NaszEvent; Słowo kluczowe event pozwala na wywołanie delegowanego kodu tylko z poziomu właściciela zmiennej. Jeśli typ delegowany nie zwraca żadnej wartości, wtedy przy pomocy operatorów += oraz -= możemy zarejestrowad (wyrejestrowad) więcej niż jedną metodę. Delegowany kod wykonywany jest (zdarzenie jest wyzwalane) przy spełnieniu określonego warunku np.: if ( zdjęcia_wybrane.count > 0 ) NaszEvent(zdjęcia_wybrane); Podsumowując, system zdarzeo wykorzystuje w standardowy mechanizm delegowania kodu który znasz z C#. W poprzednim module poznałeś zdarzenia zdefiniowane w klasie UIElement odpowiedzialne za interakcję z kursorem myszy czy klawiaturą. W Silverlight zwyczajowo zakłada się że wzorzec delegacji posiada format gdzie: void NazwaTypu(Object sender, EventArgs arg) sender referencja do obiektu który wyzwala zdarzenie, arg pozwala przekazad informacje o specyficznych własnościach zdarzenia. Podobnie w zwyczaju jest umieścid metodę pozwalającą klasom potomnym wyzwolid zdarzenie (wzorzec OnEvent), czyli np.: protected void OnMojeZdarzenie(EventArgs arg) If (MojeZdarzenie!=null ) MojeZdarzenie(this, arg); Przykładem zdarzenia które wykorzystuje standardowe mechanizmy CLR jest LayoutUpdated klasy FrameworkElement, zdefiniowane jako: public event EventHandler LayoutUpdated Wyzwalane jest wtedy gdy zaszła zmiana wielkości lub położenia komponentu lub jego kontrolkidziecka. Mimo tego, że zdarzenie to ma prototyp: public delegate void EventHandler(Object sender, EventArgs e) Nie możemy zakładad, że sender wskazywał będzie na kontrolkę na która wykonała zmianę wyglądu. Zdarzenie to zawsze wyzwalane jest z pierwszym argumentem wynoszącym null. Zachowanie to tłumaczy się potrzebą generowania kodu który będzie bezpośrednio związany z kontrolką. Jeśli znasz

3 WPF (Windows Presentation Foundation) to pewnie zauważyłeś, że tam zdarzenie zawiera niepustą referencję na obiekt na którym zaszło. Dodatkowo jest to zdarzenie innego typu niż zwyczajowy EventHandler, jest to mianowicie RoutedEventHandler. Rozgłaszanie zdarzeń Niektóre zdarzenia po ich wyzwoleniu informują inne kontrolki o fakcie wyzwolenia zdarzenia. Proces ten nazywany rozgłaszaniem zdarzeo. Weźmy pod uwagę następujący fragment kody XAML: <StackPanel> <TextBlock Text= Wybierz tło /> <StackPanel> <TextBlock Text= Zwykłe > <Image /> <Image /> </StackPanel> <StackPanel> <TextBlock Text= Obrazy > <Image /> </StackPanel> </StackPanel> Definiuje on drzewo wizualne postaci: StackPanel TextBlock StackPanel StackPanel TextBlock Image Image TextBlock Image Rys. 1 Drzewo wizualne Jeśli na którymś z obiektów Image wyzwolono zdarzenie MouseLeftButtonDown wtedy oczywiście wykonany jest kod obsługujący to zdarzenie. Dodatkowo jednak to zdarzenie obsłużone jest na jego bezpośrednim ojcu, a następnie na ojcu ojca itd. StackPanel MouseLeftButtonDown TextBlock StackPanel StackPanel MouseLeftButtonDown TextBlock Image Image TextBlock Image MouseLeftButtonDown Rys. 2 Rozgłaszanie zdarzenia Strategia takiego rozgłaszania komunikatów w górę znana jest np. z WPF (pod nazwą bąbelkowania, ang. Bubling). Jest to jedyna standardowo wbudowana w Silverlight strategia rozgłaszania komunikatów.

4 Warto podkreślid, że o zajściu zdarzenia informowani są tylko bezpośredni rodzice. Proces rozgłaszania przypomina ścieżkę czyli inne kontrolki niż te leżące na ścieżce nie zostaną poinformowane o zajściu MouseLeftButtonDown. Częstym scenariuszem użycia jest obsługa zdarzenia tylko na ważnym panelu, który możemy ukryd po wybraniu któregoś elementu. Pojawiają się naturalne pytania: Jak znaleźd obiekt na którym zdarzeni zostało wyzwolone na początku ścieżki rozgłaszania? Czy rozgłaszanie można zablokowad? Technicznie zdarzenia które mogą być (nie wszystkie są) rozgłaszane dziedziczą z klasy RoutedEvent. Ogólny wzorzec delegacji ma postad: public delegate void RoutedEventHandler(Object sender, RoutedEventArgs e) Jedyną różnicą jest typ argumentu mamy tutaj mianowicie klasę RoutedEventArgs. Klasa ta dziedziczy z EventArgs, ale udostępnia nam własnośd OriginalSource. Odczyt możliwy jest zawsze i winien wskazywad na kontrolkę na której wyzwolono zdarzenie (początek ścieżki rozgłaszania komunikatu). Odpowiedź na pytanie jak zablokowad rozgłaszanie komunikatu nie jest tak łatwa. Niektóre typy argumentów eksponują własnośd Handled typu logicznego. Przypisanie tej własności wartości true skutkuje często zatrzymaniem rozgłaszania. Nieco dokładniej rozgłaszanie jest kontynuowane, ale kod wykonywany jest warunkowo (warunek to!handled). Jeśli rozgłaszania nie można powstrzymad przy pomocy Handled (bo np. nie istnieje taka własnośd), zawsze można porównad referencje sender oraz OriginalSource, pozwoli to wykonywad kod tylko na kontrolce na której zdarzenie zaszło. W Silverlight 4 nie można definiowad własnych zdarzeo rozgłaszanych. Można natomiast zaprojektowad własny system zdarzeo pozwalający na wykonanie podobnej strategii, więcej na ten temat znajdziesz w module Własności zależne i doczepiane. W poniższej tabeli zabrano standardowe zdarzenia których zajście jest rozgłaszane. Zdarzenie Typ argumentu Handled KeyDown KeyUp MouseLeftButtonDown MouseRightButtonDown MouseLeftButtonUp MouseRightButtonUp KeyEventArgs MouseButtonEventArgs (patrz moduł poprzedni) MouseMove MouseEventArgs NIE MouseWheel MouseWheelEventArgs TAK DragEnter DragLeave DragOver Drop DragEventArgs (patrz dalsza częśd modułu) GotFocus RoutedEventArgs NIE TAK TAK TAK

5 LostFocus Używając standardowego systemu zdarzeo Silverlight 4 pamiętad należy, iż implementacja kontrolki może mied wpływ na odziedziczony system zdarzeo. Standardowym przykładem jest kontrolka Button. Przycisk dziedziczy z klasy ButtonBase w której zdefiniowano nowe zdarzenie Click. Dodatkowo przycisk posiada własnośd ClickMode której można przypisad jedną z trzech wartości: Hover Click wyzwalany jest gdy kursor znajdzie się nad kontrolką, Press - Click wyzwalany jest gdy przyciśnięto lewy przycisk myszy, Release Click wyzwalany jest gdy zwolniono wcześniej wciśnięty przycisk myszy. Standardowe zdarzenie MouseLeftButtonUp zostanie wyzwolone tylko w przypadku pierwszym (Hover), pozostałe dwa automatycznie ustawiają własnośd Handled. Pokazuje to zmiany w strategii wyzwalania które mogą wprowadzad kontrolki na gruncie ich implementacji. Mimo tego, że delegacja Click jest typu RoutedEventHandler oraz argument posiada własnośd Handled, zdarzenie nie rozgłasza swego wyzwolenia. Obsługa przeciągnij i upuść Silverlight wspiera obsługę mechanizmu Przeciągnij i Upuśd (ang. Drag and Drop). W chwili obecnej przeciągad można lokalne pliki klienta do aplikacji. Jak wspomniano wcześniej mechanizm oparto zdarzenia rozgłaszane. Argument wszystkich metod jest typu DragEventArgs w szczególności eksponuje on własnośd Data. Własnośd zawiera referencję do obiektu implementującego interfejs IDataObject. Interfejs ten umożliwia wydobycie danych na potrzeby naszej aplikacji. Zdarzenia pozwalające obsłużyd przeciąganie to: DragEnter wyzwalane gdy nad powierzchnią kontrolki znalazł się obiekt możliwy do opuszczenia (można wtedy np.: wygenerowad podgląd tego co stanie się gdy obiekt będzie opuszczony), DragLeave wyzwalane gdy obiekt możliwy do opuszczenia znalazł się poza powierzchnią kontrolki, DragOver - wyzwalane gdy obiekt znajduje się nad powierzchnią kontrolki. Dodatkowo po opuszczeniu pliku nad powierzchnią kontrolki wywoływane jest zdarzenie Drop. Aby mechanizm działał nad powierzchnią kontrolki musi zostad ustawiona wartośd AllowDrop oraz kontrolka musi byd widoczna. Dostęp do danych za pośrednictwem interfejsu IDataObject, który w szczególności zawiera następujące metody: GetData pozwala wydobyd dane. Jedynym prawidłowym argumentem jest w chwili obecnej DataFormat.FileDrop. GetFormats zwraca format danej lub formaty do których można daną konwertowad. GetDataPresent informuje czy dane posiadają zadany format lub mogą byd do niego konwertowane Przykładowe wydobycie danych może odbywad się następująco: IDataObject dane = e.data; If (data.getdatapresent(dataformats.filedrop)) FileInfo[] pliki = data.getdata(dataformats.filedrop) as FileInfo[]; foreach (var plik in pliki)

6 Wzorzec komendy Ważnym elementem pozwalającym oddzielid cześd wizualną aplikacji od logiki biznesowej jest system komend. Komendy (and. Command) pozwalają na komunikację między kontrolkami nie tylko w obrębie ścieżki rozgłaszania komunikatu. Ogólnie rzecz ujmując w chwili zajścia określonego zdarzenia Silverlight może wywoład pewną metodę podobnie jak wywołuje się zwykłe zdarzenie. Skoro tak, to jaka jest różnica pomiędzy zwykłym zdarzeniem a komendą? Komendy mogą mied wpływ na element który je wykonuje (mogą np. zabronid wykonania). Inną istotną cechą jest możliwośd definiowania komend na podstawie interfejsów i danych. Nazwy komend wraz ich argumentami definiowane są z poziomu składni XAML, a szczegółowe znaczenie nadawane jest przez bieżącą implementację zdefiniowaną przez własnośd DataContext dziedziczoną z klasy UIElement. Komendy pozwalają na realizację wzorca projektowego MVVM (ang. Model-View View-Model) czy wzorca MVC (ang. Model View Controller), dzięki temu szczególnego znaczenia nabierają przy projektach większej skali. Kontrolki które wspierają komendy to: Button oraz HyperlinkButton. Posiadają one własności: Command typu ICommand interfejs implementujący komendę, CommandParameter typu Object argument przekazany komendzie. Interfejs ICommand ma postad: Public interface ICommand void Execute(Object Parameter); bool CanExecute(Object Parameter); event EventHandler CanExecuteChanged; Metoda Execute powinna zawierad kod wykonywany w chwili uruchomienia (wyzwolenia) komendy. Argumentem komendy w chwili wyzwolenia staje się CommandParameter. Metoda CanExecute uzyskuje ten sam argument co metoda Execute ale nie powoduje wykonania wyzwolenia komendy informuje czy dla tego argumentu można komendę wykonad. Gdy zwróci wartośd false, oba przyciski przejdą w stan wyłączony (tj.!enabled). Zdarzenie CanExecuteChanged wyzwolone zostanie wtedy gdy zmieni się wartośd metody CanExecute (np.: poprzednie argumenty były prawidłowe, a nowy argument jest niezrozumiały). Standardowy przypadek użycia to zamiana tła kontrolek na czerwony gdy podano nieprawidłowy argument. Silverlight nie wymusza stosowania określonego wzorca projektowego a tym samym nie dostarcza gotowych implementacji interfejsu ICommand. Posiadamy pełną swobodę projektowania. Można pokusid się o stworzenie złożonego systemu komend pozwalających np.: grupowad i wyzwalad inne komendy. Temat komend rozwinięty jest w module Łączenie danych i automatyzacja wyświetlania. Kontekst danych i odświeżanie zawartości Ważną klasę zdarzeo stanowią zdarzenia związane z odświeżaniem zawartości komponentów których zawartośd generowana jest na podstawie kolekcji. Ponieważ zagadnienie to jest blisko związane z budową systemu komend zarysujemy tutaj technikę tworzenia takich komponentów oraz odświeżania ich zawartości.

7 W klasie UIElement istnieje specyficzna własnośd DataContext. Własnośd ta najogólniej rzecz biorąc pozwala z dowolnym komponentem wiązad zbiór danych (np.: klasę). Tak utworzona przestrzeo danych widoczna jest przez wszystkie kontrolki dzieci komponentu któremu przypisano DataContext. Załóżmy, że posiadamy implementację następującego interfejsu: public interface WyborTla ; ICommand checkcommand set; get; ObservableCollection<DaneTestowe> data get; Z poziomu kodu XAML powinniśmy dołączyd nasza implementację do zasobów aplikacji, można uczynid to w poniższy sposób: <UserControl.Resources> <loc:testowyviewmodel x:key="testvm" /> </UserControl.Resources> Zasoby to nic innego jak słownik. Dołączony zasób powinien mied zdefiniowany domyślny konstruktor (bezargumentowy). Każdy zasób winien byd nazwany dzięki x:key. Tak opakowane dane możemy przypisad do kontekstu danych dowolnej kontrolki, np.: <Grid DataContext="StaticResource testvm"> </Grid> Zapis powyższy nakazuje wyszukanie zasobu o nazwie testvm oraz a następnie przypisanie tego zasobu jako wartości DataContext. Innym sposobem dostępu do danych jest wiązanie danych (ang. Binding). Na przykład jeśli kontrolkądzieckiem powyższego panelu Grid jest Button wtedy możemy z bieżącego kontekstu danych wybrad komendę której nazwę zawiera interfejs WyborTla, np.: <Grid DataContext="StaticResource testvm"> </Grid> <Button Command="Binding checkcommand" /> Użycie słowa Binding powoduje dowiązanie wartości Command to obiektu przechowywanego nie w zasobach ale w lokalnym kontekście danych. Dowiązanie wykonane zostanie na etapie uruchomienia. Więcej o zasobach i wiązaniu danych znajdziesz w module zasoby i wiązanie danych. Jednym z paneli które pozwalają na automatyzację pracy ze zbiorami elementów jest panel ListBox. Zawiera on własnośd ItemsSource którą możemy dowiązad do dowolnej kolekcji elementów. W poniższym przykładzie <ListBox ItemsSource="Binding data" > </ListBox> Kolekcja wyszukiwana jest w bieżącym kontekście danych. Komponent ListBox przegląda element po elemencie takiej kolekcji i do swojej zawartości dodaje kontrolkę powstałą na bazie wzorca. Wzorzec kontrolki, typu DataTemplate, należy przypisad własności ItemTemplate. Np.: <DataTemplate> <StackPanel> <TextBlock Text="Silverlight" />

8 <Image Width="200" Height="200" /> </StackPanel> </DataTemplate> Oznacza to, że wzorzec kontrolki składał się będzie z obiektu StackPanel na którym znajdzie się TextBlock a następnie Image. Więcej o wzorcach i stylach dowiesz się w module Style i automatyzacja wyświetlania. Najważniejsze z punktu widzenia jest to, że w chwili tworzenia dowolnej kontrolki na podstawie ItemTemplate jej kontekst danych rozszerzany jest o dane elementu kolekcji przypisanej do ItemSource. Zatem skoro kolekcja data jest typu ObservableCollection<DaneTestowe>, to każda budowana kontrolka będzie miała dostęp do danych elementów kolekcji. Załóżmy, że klasa DaneTestowe ma postad: public class DaneTestowe public String nazwa; public Uri uri; Wtedy prawidłowe jest wiązanie: <ListBox ItemsSource="Binding data"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="Binding nazwa" /> <Image Width="200" Height="200" Source="Binding uri" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> Dochodzimy zatem do meritum sprawy. O ile wyświetlenie nie stanowi problemu, to co się stanie gdy kolekcja data zmieni swoją zawartośd? Ze względów wydajnościowych zawartośd kolekcji data jest wstępnie klonowana, dopiero później rozpoczyna się proces Budowy kontrolek. Oznacza to, że jeśli zawartośd kolekcji zmieni się, może to pozostad bez skutku ekranowego. Z jednej strony można dzięki temu przygotowad nową tablicę danych podczas gdy użytkownik widzi poprzednią zawartośd (np.: etap ładowania danych), ale z drugiej kiedyś należy poinformowad ListBox aby zaktualizował zawartośd. Na szczęście typ ObservableCollection implementuje zdarzenie CollectionChanged. Ponieważ na etapie wiązania ListBox deleguje kod do obsługi tego zdarzenia. Każda zamiana zawartości kolekcji skutkuje zamianą zawartości komponentu ListBox. Klasa ListBox umożliwa wybór jednego lub wielu elementów, zaimplementowano bowiem zdarzenie SelectionChanged. Dostęp w wybranego elementu uzyskuje się przez własnośd SelectedItem. Dostęp do grupy wybranych elementów możliwy jest przez własnośd SelectedItems.

9 Przykładowe rozwiązanie Chcemy zaprojektowad wyszukiwarkę teł do foto-książki. Tła pobierane mają byd domyślnie z serwera niemniej aby nie pobierad wszystkich teł natychmiast chcemy pobrad tylko ich nazwy wraz z towarzyszącym im URI do pliku. Użytkownik wprowadzi fragment nazwy która go interesuje i będzie musiał wcisnąd przycisk aby obrazy pobrad obrazy pobrad. Przy okazji wykonamy pierwszy krok projektując kod testowy przypominający wzorzec MVVM. Załóżmy, że mamy do zaimplementowania interfejs WyborTla (pojawił się wcześniej w przygotowaniu praktycznym), następującej postaci: public interface WyborTla ; ICommand checkcommand set; get; ObservableCollection<DaneTestowe> data get; event EventHandler BackgroundSelected; void PictureSelected(String name); Komenda checkcommand realizowała będzie wybór tła, data będzie punktem wejścia do danych wyświetlanych przez ListBox, a BackgroundSelected będzie to zdarzenie wyzwalane gdy wybrano tło. Załóżmy, że to klasa danych implementowała dziedziczyła będzie z ObservableCollection, np.: public class TestowyViewModel : ObservableCollection<DaneTestowe>, WyborTla public TestowyViewModel() DaneTestowe[] dane = new DaneTestowe("Tulipany", new Uri("Tulips.jpg", )), ; new DaneTestowe("Pingwiny", new Uri("Penguins.jpg", )) Ponieważ tworzymy wersję testową powinniśmy utworzyd dane testowe. Tworzona komenda powinna posiadad referencje do klasy TestowyViewModel oraz, dla potrzeb prototypu, referencję do kolekcji danych z których mamy wybrad tło. Nazwijmy klasę komendy CheckCMD, może ona mied definicję: protected class CheckCMD : ICommand public event EventHandler CanExecuteChanged; private DaneTestowe[] t; private TestowyViewModel tloi; public CheckCMD(DaneTestowe[] tab, TestowyViewModel tloi) t = tab;

10 this.tloi = tloi; Metoda CanExecute powinna zadziaład wyłącznie wtedy gdy argumentem jest niepusty łaocuch. Metoda ta winna stwierdzid czy istnieją tła posiadające w nazwie podany fragment znaków. Przykładowo: public bool CanExecute(Object param) if (param is String) String selector = param as String; if (selector!="") foreach (DaneTestowe dt in t) return false; if (dt.nazwa.contains(selector)) return true; Odrobinę ciekawsza jest metoda Execute która winna dodad do danych wszystkie elementy które posiadają w nazwie zadany ciąg znaków, przykładowo: public void Execute(Object param) String selector = param as String; if (selector!= "") tloi.clear(); foreach (DaneTestowe dt in t) if (dt.nazwa.contains(selector)) tloi.add(dt); Pozostaje zaimplementowad dostęp do danych, czyli: public ObservableCollection<DaneTestowe> data get return this;

11 Właśnie zakooczyliśmy budowę zaplecza naszego rozwiązania. Kolejny krok budowa części wizualnej. Większośd zaprezentowano już w części teoretycznej, teraz więc pokusimy się o przedstawienie znaczącej zawartości kontrolki: <UserControl.Resources> <loc:testowyviewmodel x:key="testvm" /> </UserControl.Resources> <StackPanel DataContext="StaticResource testvm" > <ListBox ItemsSource="Binding data" > <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="Binding nazwa" /> <Image Source="Binding uri" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <TextBox Name="textBox" VerticalAlignment="Top" Text="wpisz fragment nazwy" /> <Button Content="Pobierz" Name="Przycisk" Command="Binding checkcommand" CommandParameter="Binding Path=Text, ElementName=textBox"/> </StackPanel> Jedyna zmianą jest wiązanie argumentu komendy z własnością Text komponentu o nazwie textbox. Pozostaje obsługa samego wyboru tła. Realizujemy to obsługując zdarzenie SelectionChanged zależnie od potrzeb aplikacji możemy wyzwolid zdarzenie BackgroundSelected z jednym obrazem tła albo z wieloma. Rys. 3 Rezultat do ulepszenia przez grafika

12 Porady praktyczne Często założenie o sposobie wyzwalania zdarzenia zależy od implementacji kontrolki. Brak wyzwolenia albo wyzwolenie w innym momencie, to podstawowe problemy implementacyjne (patrz Button) dlatego uważnie badaj kontrolki których używasz. Problemem są różnice w wyzwalaniu komunikatów pomiędzy WPF a Silverlight, np.: WPF zdarzenia MouseEnter oraz MouseLeave wyzwalane są nawet w przypadku nieruchomego kursora (wystarczy, że np. animowany element znajdzie się pod kursorem myszy) natomiast w Silverlight zdarzenia te wyzwalane są tylko w przypadku poruszania kursorem myszy. Gdy nie jesteś pewien działania a znasz już WPF zaprojektuj odpowiedni test w Silverlight. Nie zawsze zdarzenia typu RoutedEventHandler rozgłaszają informacje o wyzwoleniu. Na potrzeby mechanizmu Drag and Drop powinieneś ustawid parametr windowless na wartośd true. Czasem będziesz musiał dopisad wrapper w JavaScirpt poza aplikacją Silverlight aby przenoszenie działało prawidłowo. Komendy to doskonały mechanizm rozgłaszania wyzwolenia zdarzenia. Przykładem komend wbudowanych jest mechanizm Kopiuj/Wklej. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: Rozumiesz pojęcie wyzwalania zdarzenia, Rozumiesz pojęcie komendy oraz jej wyzwalania, Potrafisz zakooczyd proces rozgłaszania zdarzenia, Potrafisz dowiedzied się który komponent wyzwolił zdarzenie rozgłaszane, Umiesz zaprojektowad kod wykorzystujący system komend, Potrafisz zaprojektowad własne zdarzenia, Potrafisz wyzwolid własne zdarzenia, Wiesz jak działa mechanizm przeciągnij i upuśd. Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów.

13 Dodatkowe źródła informacji Więcej o zdarzeniach w Silverlight 4 znajdziesz: Więcej o sposobach przygotowania komend znajdziesz:

14 Laboratorium podstawowe Zadanie 1 (czas realizacji 20 minut) Twój nowy klient poprosił o prototyp interfejsu do wyboru odcienia płytek podłogowych. Jego życzeniem jest paleta kolorów rozłożonych dookoła wspólnej osi obrotu przesuwając kursor obracasz elementy. Zatwierdzasz wybór odpowiednim przyciskiem. Ponieważ jego firma udostępnia oprogramowanie na ekranach dotykowych starej konstrukcji (ang. SingleTouch) możesz wykorzystad tylko zdarzenia MouseLeftButtonDown, MouseLeftButtonUp oraz MouseMove.

15 Zadanie 2 (czas realizacji 25 minut) Twój główny klient pragnie wzbogacid oprogramowanie o menu służące do wybory rodzaju pisma. Jednak nie chce klasycznego menu gdzie osobno wybiera się czcionkę, jej wielkośd, styl oraz kolor. Przygotował pieczołowicie tablice danych krojów które jego odbiorcy będą mieli do wyboru. Wizualna cześd menu powinna wyświetlad podgląd kroju na tekście przykładowym. Masz jak zawsze niewiele czasu na realizację tego zadania.

16 Laboratorium rozszerzone Zadanie 1 (czas realizacji 40 minut) Zaprojektuj typ generyczny ułatwiający pracę z komendami. Typ powinien byd tworzony na podstawie klasy oczekiwanego argumentu. Dodatkowo powinno byd możliwe rejestrowanie metod wykonanych przy okazji wykonania metody Execute. Zadanie 2 (czas realizacji 45 minut) Zaprojektuj typ generyczny ułatwiający pracę z komendami złożonymi. Komenda złożona winna wykonywad kolekcję komend prostych. Wskazówka. Możesz założyd, że jeśli co najmniej jedna komenda może byd wykonana to również komenda złożona może byd wykonana. Natomiast Execute wykonaj tylko na komendach dla których CanExecute jest prawdą. Zadanie 3 (czas realizacji 90 minut) Do zadania 3 z poprzedniego modułu (foto-książka) dołącz możliwośd przeciągania zdjęd z zasobów użytkownika. Wskazówka. Powinieneś zaimplementowad alternatywę do przycisku dodawania zdjęd. Zadanie 4 (czas realizacji 90 minut) Do zadania 3 z poprzedniego modułu (foto-książka) dołącz możliwośd wyboru teł. Wskazówka. Dowolny panel gdy jest niewidoczny (!Visible), nie bierze udziału w przydziale miejsca. W ten sposób schowasz Panel wyboru tła gdy nie będzie potrzebny.

MVVM Light Toolkit. Julita Borkowska

MVVM Light Toolkit. Julita Borkowska MVVM Light Toolkit Julita Borkowska Czym jest MVVM Light Toolkit? MVVM Light Toolkit został stworzony w 2009 roku przez Laurenta Bugnion. Jest to biblioteka dostarczająca zestaw komponentów pomocnych podczas

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 07 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami tworzenia aplikacji okienkowych w C#. Wprowadzenie teoretyczne. Rozważana w

Bardziej szczegółowo

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania 1) Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z podstawowymi elementami obiektowymi systemu Windows wykorzystując Visual Studio 2008 takimi jak: przyciski, pola tekstowe, okna pobierania danych

Bardziej szczegółowo

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Dodanie nowej formy do projektu polega na:

Dodanie nowej formy do projektu polega na: 7 Tworzenie formy Forma jest podstawowym elementem dla tworzenia interfejsu użytkownika aplikacji systemu Windows. Umożliwia uruchomienie aplikacji, oraz komunikację z użytkownikiem aplikacji. W trakcie

Bardziej szczegółowo

Rozwój aplikacji modułowych Paweł Brudnicki. Dodanie modułu

Rozwój aplikacji modułowych Paweł Brudnicki. Dodanie modułu Rozwój aplikacji modułowych Paweł Brudnicki Moduł jest podstawową jednostką funkcjonalności. Stanowi on część, która może być niezależnie pisana, testowana a nawet wdrażana. W przewodniku dodamy niezależny

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Laboratorium programowania urządzeń mobilnych

Laboratorium programowania urządzeń mobilnych Laboratorium programowania urządzeń mobilnych Wprowadzenie Hierarcha klas dla aplikacji typu Silverlight tworzonej przez Visual Studio jest następująca: Obsługa ekranu W urządzeniach z Windows Phone 7

Bardziej szczegółowo

Rys. 3. Kod elementów na stronie po dodaniu kontrolek podstawowych.

Rys. 3. Kod elementów na stronie po dodaniu kontrolek podstawowych. 1 2 Kontrolki standardowe WP7 Michał Ręczkowicz, Opublikowano: 2012-02-08 http://msdn.microsoft.com/pl-pl/library/rozpoczecie-pracy-z-windows-phone--kontrolki-standardowe W tym samouczku dowiesz się, jakie

Bardziej szczegółowo

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation). Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation). 1. Programowanie zdarzeniowe Programowanie zdarzeniowe

Bardziej szczegółowo

Programowanie zaawansowane

Programowanie zaawansowane Programowanie zaawansowane Ćwiczenie 6 Komunikacja silnie typowana I. Utwórz aplikację okienkową realizującą proste obliczenia arytmetyczne. Obsługa zdarzeń w aplikacji typu Windows Form Application odbywa

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.

Bardziej szczegółowo

Wprowadzenie do programowania

Wprowadzenie do programowania do programowania ITA-104 Wersja 1 Warszawa, Wrzesień 2009 ITA-104 do programowania Informacje o kursie Zakres tematyczny kursu Opis kursu Kurs przeznaczony jest do prowadzenia przedmiotu do programowania

Bardziej szczegółowo

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy - Narzędzie Windows Forms - Przykładowe aplikacje 1 Narzędzia Windows Form Windows Form jest narzędziem do tworzenia aplikacji dla

Bardziej szczegółowo

Instrukcja laboratoryjna cz.3

Instrukcja laboratoryjna cz.3 Języki programowania na platformie.net cz.2 2015/16 Instrukcja laboratoryjna cz.3 Język C++/CLI Prowadzący: Tomasz Goluch Wersja: 2.0 I. Utworzenie projektu C++/CLI z interfejsem graficznym WPF 1 Cel:

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium

Bardziej szczegółowo

xmlns:prism=http://www.codeplex.com/prism c. <ContentControl prism:regionmanager.regionname="mainregion" />

xmlns:prism=http://www.codeplex.com/prism c. <ContentControl prism:regionmanager.regionname=mainregion /> 1 Tworzenie Shella a. W pierwszej kolejności tworzymy nowy projekt: WPF Application. Name: Shell SolutionName: PrismApp b. Dodajemy bibliotekę PRISM za pomocą NuGet Managera (dla.net Framework 4.5 Prism

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku Przykładowa dostępna aplikacja w Visual Studio - krok po kroku Zadaniem poniższego opisu jest pokazanie, jak stworzyć aplikację z dostępnym interfejsem. Sama aplikacja nie ma konkretnego zastosowania i

Bardziej szczegółowo

Przewodnik krok po kroku:

Przewodnik krok po kroku: Przewodnik krok po kroku: Aplikacja jest rozbudowywana. Jej podstawą jest: https://msdn.microsoft.com/enus/library/ff921174(v=pandp.40).aspx Do aplikacji dodajemy nowy moduł, który posłuży nam do dodawania

Bardziej szczegółowo

Aplikacje Internetowe

Aplikacje Internetowe Aplikacje Internetowe ITA-103 Wersja 1 Warszawa, październik 2008 2008 Piotr Bubacz. Autor udziela prawa do bezpłatnego kopiowania i dystrybuowania wśród pracowników uczelni oraz studentów objętych programem

Bardziej szczegółowo

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger: Logger Na początku stworzymy własny logger. Do tego calu trzeba utworzyć klasę naszego loggera, która będzie implementować interfejs ILoggerFacade. Oto kod tej klasy: public class SimpleLogger: ILoggerFacade

Bardziej szczegółowo

Soneta Sp. z o.o. Standardowe kreatory CRM

Soneta Sp. z o.o. Standardowe kreatory CRM Soneta Sp. z o.o. Standardowe kreatory CRM Spis treści 1. Wstęp...2 2. Kreatory w enova CRM...2 3. Uruchomienie kreatora...3 4. Formularz kreatora Kampania z korespondencją...3 5. Formularz kreatora Nowy

Bardziej szczegółowo

Wzorce projektowe. dr inż. Marcin Pietroo

Wzorce projektowe. dr inż. Marcin Pietroo Wzorce projektowe dr inż. Marcin Pietroo Adapter - strukturalny wzorzec projektowy, którego celem jest umożliwienie współpracy dwóm klasom o niekompatybilnych interfejsach - adapter przekształca interfejs

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Kurs programowania 2 - listy

Kurs programowania 2 - listy Kurs programowania 2 - listy Listy rozwijane (ComboBox) Listy rozwijane (rozwijalne) można tworzyć przy użyciu klasy ComboBox. W tabeli poniżej właściwości udostępniane przez tę kontrolkę. Najważniejsza

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Zagadnienia 1. Delegaty wiązane, właściwości indeksowane 2. Delegaty niewiązane 3. Nowa wersja kalkulatora, delegaty

Bardziej szczegółowo

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface) Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface) 1. Udostępnianie wszystkich prywatnych atrybutów do prezentacji, wprowadzenie standardu nazewnictwa plików nazwy plików

Bardziej szczegółowo

Tworzenie oraz zarządzanie użytkownikami w AD -Win Serwer 2008

Tworzenie oraz zarządzanie użytkownikami w AD -Win Serwer 2008 Tworzenie oraz zarządzanie użytkownikami w AD -Win Serwer 2008 Jedną z podstawowych czynności jakie musi wykonad administrator zaraz po instalacji usługi domenowej w usłudze Active Directory jest utworzenie

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 11 - przegląd wybranych wzorców mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 24 maja 2017 1 / 38 mgr inż. Krzysztof Szwarc Programowanie obiektowe Wzorce

Bardziej szczegółowo

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

Graphic User Interfaces pakiet Swing

Graphic User Interfaces pakiet Swing Graphic User Interfaces pakiet Swing Streszczenie Celem wykładu jest zaprezentowanie podstaw tworzenia graficznych interfejsów przy użyciu pakietu Swing. Czas wykładu 90 minut. Można śmiało stwierdzić,

Bardziej szczegółowo

Instrukcja laboratoryjna nr.4

Instrukcja laboratoryjna nr.4 Języki programowania na platformie.net cz.2 2016/17 Instrukcja laboratoryjna nr.4 Język Visual Basic for.net Prowadzący: Tomasz Goluch Wersja: 3.1 I. Współpraca Visual Basic z C# Cel: Wykorzystanie w kodzie

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

Wprowadzenie do projektu QualitySpy Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Systemy wirtualnej rzeczywistości. Komponenty i serwisy Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Systemy wirtualnej rzeczywistości Laboratorium Komponenty i serwisy Wstęp: W trzeciej części przedstawione zostaną podstawowe techniki

Bardziej szczegółowo

using System;... using System.Threading;

using System;... using System.Threading; Kontekst synchronizacji Wątek w platformie.net może posiadać kontekst synchronizacji reprezentowany przez instancję klasy SynchronizationContext lub jej klasy potomnej. Jeżeli wątek posiada taki kontekst

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w

Bardziej szczegółowo

Wprowadzenie do środowiska Visual Studio cz. 2 (ćwiczenie wykonywane zdalnie) Wykorzystanie Wirtualnego portu COM

Wprowadzenie do środowiska Visual Studio cz. 2 (ćwiczenie wykonywane zdalnie) Wykorzystanie Wirtualnego portu COM Wprowadzenie do środowiska Visual Studio cz. 2 (ćwiczenie wykonywane zdalnie) Wykorzystanie Wirtualnego portu COM 1.1 Cel ćwiczenia: Celem dwiczenia jest zaznajomienie studenta z tematyka tworzenia aplikacji

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Specyfikacja projektów zaliczeniowych

Specyfikacja projektów zaliczeniowych Wymagania ogólne: Projektowanie obiektowe i programowanie w Javie Specyfikacja projektów zaliczeniowych mgr inż. Adam Kozak 1. Projekty powinny spełniad wymogi opisane w opisie wymagao 2. Kod programu

Bardziej szczegółowo

Komponenty wizualne i XAML

Komponenty wizualne i XAML Komponenty wizualne i XAML Informacje o module Opis modułu W tym rozdziale poznasz strukturę komponentów wizualnych Silverlight: kształty, kontrolki i kontenery. Nauczysz się podstaw manipulacji własnościami

Bardziej szczegółowo

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Projekt Hurtownia, realizacja rejestracji dostaw produktów Projekt Hurtownia, realizacja rejestracji dostaw produktów Ćwiczenie to będzie poświęcone zaprojektowaniu formularza pozwalającego na rejestrację dostaw produktów dla naszej hurtowni. Dane identyfikujące

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Delphi podstawy programowania. Środowisko Delphi

Delphi podstawy programowania. Środowisko Delphi Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór

Bardziej szczegółowo

Szybki Start. Informacje o module

Szybki Start. Informacje o module Szybki Start Informacje o module Opis modułu W tym rozdziale utworzysz pierwsza aplikację Silverlight. Poznasz zasady pracy z Silverlight w środowisku Visual Studio 2010. Zobaczysz jak wygląda proces dystrybucji

Bardziej szczegółowo

10. Programowanie obiektowe w PHP5

10. Programowanie obiektowe w PHP5 Ogólnie definicja klasy wygląda jak w C++. Oczywiście elementy składowe klasy są zmiennymi PHP, stąd nieśmiertelne $. Warto zauważyć, że mogą one mieć wartość HHH mgr inż. Grzegorz Kraszewski TECHNOLOGIE

Bardziej szczegółowo

Java Podstawy. Michał Bereta

Java Podstawy. Michał Bereta Prezentacja współfinansowana przez Unię Europejską ze środków Europejskiego Funduszu Społecznego w ramach projektu Wzmocnienie znaczenia Politechniki Krakowskiej w kształceniu przedmiotów ścisłych i propagowaniu

Bardziej szczegółowo

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu

Bardziej szczegółowo

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego. Umiejętność czytania oraz tworzenia diagramów klas UML jest podstawą w przypadku zawodu programisty. Z takimi diagramami będziesz spotykał się w przeciągu całej swojej kariery. Diagramy klas UML są zawsze

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1 1 LINQ 1 1. Cel zajęć Celem zajęć jest zapoznanie się z technologią LINQ oraz tworzeniem trójwarstwowej aplikacji internetowej. 2. Zadanie Proszę przygotować aplikację WWW, która: będzie pozwalała na generowanie

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

MVVM Light Toolkit Przewodnik krok po kroku

MVVM Light Toolkit Przewodnik krok po kroku Julita Borkowska 242817 MVVM Light Toolkit Przewodnik krok po kroku W celu lepszego zrozumienia elementów MVVM Light Toolkit przedstawionych w prezentacji, zostanie poniżej krok po kroku napisany program

Bardziej szczegółowo

PHP 5 język obiektowy

PHP 5 język obiektowy PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Wzorce projektowe. dr inż. Marcin Pietroo

Wzorce projektowe. dr inż. Marcin Pietroo Wzorce projektowe dr inż. Marcin Pietroo Iterator czynnościowy wzorzec projektowy (obiektowy), którego celem jest zapewnienie sekwencyjnego dostępu do podobiektów zgrupowanych w większym obiekcie (np.

Bardziej szczegółowo

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 5 Okna MDI i SDI, dziedziczenie Wykład 5 Okna MDI i SDI, dziedziczenie Autor: Zofia Kruczkiewicz Zagadnienia 1. Aplikacja wielookienkowa. Zakładanie projektu typu CLR Windows Forms 1.1. Aplikacja typu MDI 1.2. Aplikacja typu SDI 2. Dziedziczenie

Bardziej szczegółowo

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych

Bardziej szczegółowo

Laboratorium Systemów Operacyjnych

Laboratorium Systemów Operacyjnych Laboratorium Systemów Operacyjnych Użytkownicy, Grupy, Prawa Tworzenie kont użytkowników Lokalne konto pozwala użytkownikowi na uzyskanie dostępu do zasobów lokalnego komputera. Konto domenowe pozwala

Bardziej szczegółowo

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Projekt Hurtownia, realizacja rejestracji dostaw produktów Projekt Hurtownia, realizacja rejestracji dostaw produktów Ćwiczenie to będzie poświęcone zaprojektowaniu formularza pozwalającego na rejestrację dostaw produktów dla naszej hurtowni. Dane identyfikujące

Bardziej szczegółowo

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.

Bardziej szczegółowo

OBIEKTY PHP. G. Panuś

OBIEKTY PHP. G. Panuś OBIEKTY PHP G. Panuś Podstawowym elementem programowania obiektowego jest klasa Klasa zawiera Zmienne właściwości Klasa Funkcje metody Definiowanie klasy Do definiowania klasy służy polecenie class class

Bardziej szczegółowo

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej. 1/8 Singleton Cel: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej. Przykład: Niekiedy ważne jest, aby tworzyć tylko jedną instancję jakiejś klasy. Globalne zmienne

Bardziej szczegółowo

oprogramowanie mobilne Instrukcja obsługi PSR 2010

oprogramowanie mobilne Instrukcja obsługi PSR 2010 oprogramowanie mobilne Instrukcja obsługi PSR 2010 Aplikacja mobilna systemu mlearning Wszystkie znaki handlowe i znaki towarowe stanowią własnośd ich legalnych posiadaczy. 2010. Wszystkie prawa zastrzeżone.

Bardziej szczegółowo

Numerowanie obiektów (wzorów, rysunków, tabel, literatury)

Numerowanie obiektów (wzorów, rysunków, tabel, literatury) Numerowanie obiektów (wzorów, rysunków, tabel, literatury) 1. Automatyczne numerowanie obiektów W celu utworzenia automatycznego numerowania w dokumencie należy wykorzystad w tym celu Pole z menu Wstaw.

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Wykład 12 Marcin Młotkowski 16 maja 2018 Plan wykładu 1 Analiza obiektowa Dziedziczenie Dziedziczenie a składanie 2 Marcin Młotkowski 482 / 537 Dziedziczenie Dziedziczenie a składanie Plan wykładu 1 Analiza

Bardziej szczegółowo

Ćwiczenie 8. Kontrolki serwerowe

Ćwiczenie 8. Kontrolki serwerowe Ćwiczenie 8 Temat: Kontrolki serwerowe ASP.NET cz.2 Cel ćwiczenia: W ramach tego ćwiczenie student zapozna się z kolejnymi kontrolkami serwerowymi oraz z metodami ich walidacji, a także z kontrolkami umożliwiającymi

Bardziej szczegółowo

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main Język obiektowy Wykład 13 Programowanie obiektowe z lotu ptaka, str 1 James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995(20latmłodszyodC) C jest językiem proceduralnym Java jest językiem

Bardziej szczegółowo

Twoja ulotka instrukcja obsługi programu

Twoja ulotka instrukcja obsługi programu Twoja ulotka instrukcja obsługi programu Spis treści: Wprowadzenie... 2 Instalacja... 3 Uruchomienie... 7 Wybór układu ulotki... 8 Ekran główny... 11 Tworzenie ulotki... 12 Dodawanie własnego produktu...

Bardziej szczegółowo

Klasy i obiekty cz II

Klasy i obiekty cz II Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Klasy i obiekty cz II Hermetyzacja, mutatory, akcesory, ArrayList Rozwijamy aplikację Chcemy, aby obiekty klasy

Bardziej szczegółowo

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop. 2016 Spis treści Część I Wzorzec MVVM. Podstawy XAML 7 Rozdział 1. Szybkie wprowadzenie do XAML 9 Wzorzec widoku autonomicznego 9 Tworzenie

Bardziej szczegółowo

Aplikacja (oprogramowanie) będzie umożliwiać przygotowanie, przeprowadzenie badania oraz analizę wyników według określonej metody.

Aplikacja (oprogramowanie) będzie umożliwiać przygotowanie, przeprowadzenie badania oraz analizę wyników według określonej metody. Załącznik nr 1 Specyfikacja przedmiotu zamówienia Aplikacja (oprogramowanie) będzie umożliwiać przygotowanie, przeprowadzenie badania oraz analizę wyników według określonej metody. Słowniczek pojęć Badanie

Bardziej szczegółowo

Zdarzenia i polecenia

Zdarzenia i polecenia WPF Programowanie w środowisku Windows Wykład 10-1 Zdarzenia i polecenia Wykład 10-2 Zdarzenia Metoda obsługi zdarzenia może być do niego przypisana w kodzie C# lub w XAML

Bardziej szczegółowo

Informatyka II. Laboratorium Aplikacja okienkowa

Informatyka II. Laboratorium Aplikacja okienkowa Informatyka II Laboratorium Aplikacja okienkowa Założenia Program będzie obliczał obwód oraz pole trójkąta na podstawie podanych zmiennych. Użytkownik będzie poproszony o podanie długości boków trójkąta.

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

KONFIGURACJA SERWERA USŁUG INTERNETOWYCH WWW ORAZ FTP

KONFIGURACJA SERWERA USŁUG INTERNETOWYCH WWW ORAZ FTP Zespół Szkół Technicznych w Suwałkach Pracownia Sieci Teleinformatycznych KONFIGURACJA SERWERA USŁUG INTERNETOWYCH WWW ORAZ FTP Opracował Sławomir Zielioski Suwałki 2012 Cel ćwiczenia Nabycie praktycznych

Bardziej szczegółowo

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C #import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 03 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas abstrakcyjnych i interfejsów. Wprowadzenie

Bardziej szczegółowo

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów A Zasady współpracy Ocena rozwiązań 3.0 25 40 punktów 3.5 41 65 punktów 4.0 66 80 punktów 4.5 81 100 punktów 5.0 101 130 punktów Warunki zaliczenia przedmiotu Student uzyska ocenę zaliczającą (3.0) o ile

Bardziej szczegółowo

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

Wstęp. Ale po co? Implementacja

Wstęp. Ale po co? Implementacja Wstęp Mechanizm sesji jest jedną z podstawowych form komunikacji pomiędzy skryptami jako jedyna tablica z super globalnych nie jest widoczna dla użytkownika. Mimo, że PHP od wersji 4 staje się coraz bardziej

Bardziej szczegółowo

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First) Microsoft.NET: ASP.NET MVC + Entity Framework (Code First) Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2012. W ramach projektu budowana jest prosta

Bardziej szczegółowo

Tworzenie prezentacji w MS PowerPoint

Tworzenie prezentacji w MS PowerPoint Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 08 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami powiązania modelu obiektowego z modelem okienkowym w C#. Wprowadzenie teoretyczne.

Bardziej szczegółowo

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44 Zaawansowane aplikacje internetowe EJB 1 Rozróżniamy dwa rodzaje beanów sesyjnych: Stateless Statefull Celem tego laboratorium jest zbadanie różnic funkcjonalnych tych dwóch rodzajów beanów. Poszczególne

Bardziej szczegółowo

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 4, część 1 1 Język JAVA podstawy Plan wykładu: 1. Podstawy modelowania obiektowego 2. Konstruktory 3. Dziedziczenie, związki pomiędzy klasami, UML 4. Polimorfizm 5. Klasy abstrakcyjne

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt

Bardziej szczegółowo

INSTRUKCJA INSTALACJI APLIKACJI PROF- EAN 2

INSTRUKCJA INSTALACJI APLIKACJI PROF- EAN 2 INSTRUKCJA INSTALACJI APLIKACJI PROF- EAN 2 1. Instalacja programu PROF-EAN 2 Instalacje uruchamiamy poprzez plik:, wówczas kreator automatycznie poprowadzi nas przez proces instalacji. 2. Deklaracja instalacji

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

Typy, klasy typów, składnie w funkcji

Typy, klasy typów, składnie w funkcji Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie

Bardziej szczegółowo

Zaawansowane aplikacje internetowe - laboratorium

Zaawansowane aplikacje internetowe - laboratorium Zaawansowane aplikacje internetowe - laboratorium Web Services (część 3). Do wykonania ćwiczeń potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2005. Ponadto wymagany jest

Bardziej szczegółowo

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java: otwórz okienko Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU klasy wewnętrzne, lokalne i anonimowe biblioteka AWT zestaw Swing JFrame JPanel komponenty obsługa zdarzeń

Bardziej szczegółowo

Platformy Programistyczne Podstawy języka Java

Platformy Programistyczne Podstawy języka Java Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo

Bardziej szczegółowo