Typy uogólnione. Programowanie obiektowe. Jacek Sroka na podstawie materiałów Janusza Jabłonowskiego. 8 kwietnia 2013

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

Download "Typy uogólnione. Programowanie obiektowe. Jacek Sroka na podstawie materiałów Janusza Jabłonowskiego. 8 kwietnia 2013"

Transkrypt

1 Programowanie obiektowe 8 kwietnia 2013

2 Po co są klasy i metody uogólnione w Javie? Klasy i metody uogólnione (generyki, ang. generics) - klasy i metody sparametryzowane typami. Czy zwiększają siłę wyrazu języka? Oczywiście nie (wszystkie sensowne języki programowania są równoważne maszynie Turinga). Czy wprowadzają możliwość pisania ogólnego kodu? Nie, ogólność w Javie już jest, dzięki zasadzie podstawialności i typowi Object. Po co więc??? Pozwalają na bezpieczne pisanie uogólnionego kodu.

3 Po co omawiać generyki na wykładzie z programowania obiektowego? Czy wykład z programowania obiektowego musi omawiać generyki? Nie. Nie są one częścią paradygmatu obiektowego. Czy wykład z programowania obiektowego powinien omawiać generyki? Tak, z kilku powodów (oczywiście o ile są dostępne w używanym języku): Są istotnym elementem wielu języków obiektowych. Ich znajomość jest potrzebna do omawiania istotnych hierarchii klas (np. kolekcji). Ich analiza może pozwolić dostrzec ciekawe zjawiska w używanym języku (np. anomalie typowania tablic w Javie). Są ciekawe i niebanalne.

4 Generyki Programowanie wymaga tworzenia abstrakcji. Klasy i ich hierarchie są bardzo efektywnym narzędziem do tworzenia abstrakcji. Parametryzowanie kodu pozwala abstrahować od pewnych szczegółów konkretnego zastosowania. Znamy już parametryzowanie: wartościami (parametry metod), czynnościami (parametry będące funkcjami - tak jak w C czy Pascalu - lub obiektami w językach obiektowych). Generyki pozwalają parametryzować typami.

5 Rodzaje polimorfizmu Polimorficzny (gr. polýmorphos od polýs liczny + morphé postać, kształt ciała ) wielokształtny, wielopostaciowy. Termin polimorfizm ma wiele znaczeń w informatyce. Na naszym wykładzie używamy go (poza tym slajdem) wyłącznie w znaczeniu obiektowym. Parametryzowanie kodu typami też jest nazywane polimorfizmem. Co gorsza jest wiele jego rodzajów 1 polimorfizm ad-hoc: sparametryzowany kod zachowuje się inaczej przy różnych typach parametryzujących. Przykład: przeciążanie nazw funkcji. polimorfizm parametryczny: sparametryzowany kod zachowuje się tak samo dla różnych typów parametryzujących. O tym będziemy dziś mówić na przykładzie Javy. polimorfizm podtypów: zastosowanie zasady podstawialności, zaczniemy od niego. 1 Nic dziwnego przy takiej nazwie....

6 Życie bez generyków Jest możliwe - skorzystajmy z zasady podstawiania. 1 public class PustyStos extends Exception { } 2 3 public class Stos { / / Uproszczona implementacja 4 private EltStosu wierzch ; 5 public boolean pusty ( ) { return wierzch == null ; } 6 public void wstaw ( Object e l t ) { 7 wierzch = new EltStosu ( e l t, wierzch ) ; } 8 public Object pobierz ( ) throws PustyStos { 9 i f ( pusty ( ) ) throw new PustyStos ( ) ; 10 Object wynik = wierzch. e l t ; 11 wierzch = wierzch. nast ; 12 return wynik ; 13 } 14 }

7 Życie bez generyków c.d. 1 class EltStosu { 2 public f i n a l Object e l t ; 3 public f i n a l EltStosu nast ; 4 / / Usprawiedliwić public! 5 public EltStosu ( Object e l t, EltStosu nast ) { 6 this. e l t = e l t ; 7 this. nast = nast ; 8 } 9 }

8 Życie bez generyków c.d. Mamy gotową maszynerię, zobaczmy jak działa. 1 public class Osoba { 2 private f i n a l S t r i n g i m i ę ; 3 4 public Osoba ( S t r i n g i m i ę ) { 5 this. i m i ę = i m i ę ; 6 } 7 8 public S t r i n g g e t I m i ę ( ) { 9 return i m i ę ; 10 } 11 }

9 Życie bez generyków c.d. I wreszcie korzystamy z naszego stosu. 1 Osoba os1 = new Osoba ( " Jasio " ) ; 2 Stos s = new Stos ( ) ; 3 4 s. wstaw ( os1 ) ; 5 Osoba os2 = s. pobierz ( ) ; Ups, nie kompiluje się. Słusznie, kompilator nie wie, czy na stosie była Osoba. 2 2 Miło żyć w kraju, w którym jest mnóstwo skojarzeń z byciem w kolejce a nie ma z byciem na stosie.

10 Życie bez generyków c.d. Teoretycznie możemy ten problem łatwo rozwiązać: 1 Osoba os2 = ( Osoba ) s. pobierz ( ) ; Ale to nie jest dobre rozwiązanie! Właśnie porzuciliśmy bezpieczny ocean języków ze statycznym sprawdzaniem typów i wpłynęliśmy na pełne wirów i raf morze tzw. dynamicznego typowania. 3 3 Może mniej finezyjnie, ale za to krócej: jest źle.

11 Rozwiązanie problemu Rozwiązaniem jest umożliwienie deklarowania klas sparametryzowanych typami. Pozwala to na: zachowanie ogólności - czyli na definiowanie jednej klasy pasującej do wielu typów. zachowanie bezpieczeństwa - kompilator może sprawdzać zgodność typów. Oprócz klas uogólnionych można też deklarować metody uogólnione.

12 Generyki w Javie a inne rozwiązania Rozwiązanie z Javy jest podobne do rozwiązań spotykanych w innych językach: C++: mechanizm szablonów - podobne przeznaczenie i składnia, kompletnie inna realizacja i moc wyrazu. Rozwiązanie z C++ pozwala na wykonywanie makroprogramów podczas kompilacji (sic!). C#: bardzo podobne rozwiązanie do tego z Javy, spójniejsze. Języki z dynamicznym typowaniem oczywiście nie mają i nie potrzebują takich mechanizmów Rozwiązanie z Javy musiało zachować zgodność z dotychczasową implementacją maszyny wirtualnej. Udało się, ale ma to swój koszt.

13 Przykład typu uogólnionego Chcemy stworzyć pojęcie pary 4. Nie chcemy z góry decydować, jakiego typu elementy będą występować w parach. Zatem definiujemy typ uogólniony, sparametryzowany typami elementów pary! 4 W sensie dwu elementów, a nie np. gazowego stanu wody.

14 Przykład typu uogólnionego cd 1 public class Para<T1, T2> { 2 private T1 pierwszy ; 3 private T2 d r u g i ; 4 public Para ( T1 pierwszy, T2 d r u g i ) { 5 this. pierwszy = pierwszy ; 6 this. d r u g i = d r u g i ; 7 } 8 9 public T1 getpierwszy ( ) { 10 return pierwszy ; 11 } public void setpierwszy ( T1 pierwszy ) { 14 this. pierwszy = pierwszy ; 15 } 16 / /... i analogiczne akcesory dla drugiego pola 17 }

15 Przykład typu uogólnionego cd 1 S t r i n g s = "... " ; 2 Osoba o = new Osoba (... ) ; 3 4 / / nie musimy jawnie rzutować 5 / / kompilator może pilnować że wszystko pasuje 6 Para<Osoba, String > para = new Para<Osoba, String >(o, s ) ; 7 para. setpierwszy ( o ) ; 8 o = para. getpierwszy ( ) ;

16 Przykład typu uogólnionego cd Przypomnienie uwagi o konwencji nazewniczej akcesorów. Składniowo definiowanie typów uogólnionych polega na podaniu nazw parametrów określających typy w kątowych nawiasach. Zwykle używa się pojedynczych liter T, T1, T2, S, E, ale to może być dowolny identyfikator. Można podać dowolnie wiele tych parametrów oddzielając je przecinkami. W treści klasy używamy ich 5 jak zwykłych typów. Ukonkretniony typ uogólniony jest tak samo dobrym typem jak każdy inny typ. 5 Parametrów, nie przecinków.

17 Uwagi o typach uogólnionych Oczywiście można by chcieć mieć tylko pary jednorodne, bardzo łatwo to osiągnąć 1 public class ParaJednorodna <T> { / / reszta definicji... Ale można jeszcze łatwiej! 1 public class ParaJednorodna <T> extends Para<T, T> { 2 public ParaJednorodna ( T pierwszy, T d r u g i ) { 3 super ( pierwszy, d r u g i ) ; 4 } 5 }

18 Uwagi o typach uogólnionych cd Argumenty typów uogólnionych muszą być typami referencyjnymi (więc np. nie można podać jako parametru typu int, ale można za to podać typ Integer). Kompilator generuje automatyczne konwersje typów prostych na odpowiadające im typy referencyjne i w drugą stronę (ang. autoboxing), dzięki czemu to ograniczenie nie będzie specjalnie kłopotliwe. 1 Para<int, int > para = new Para<int, int >(7, 1 3 ) ; / / błąd 2 Para< Integer, Integer > para = 3 new Para< Integer, Integer >(7, 1 3 ) ; / / autoboxing 4 i n t p1 = para. getpierwszy ( ) ; / / autounboxing

19 Uwagi o typach uogólnionych cd Oczywiści obiekty klasy Para przechowują jedynie referencje do oryginalnych obiektów (a nie ich kopie). Pary przydają się na przykład wtedy, gdy tworzymy metodę dającą jako wynik dwie wartości. Pary z różnymi typami parametrów są oczywiście różne, zatem poniższy fragment programu nie da się skompilować: 1 Para< String, Integer > p1 = null ; 2 Para< Integer, String > p2 = p1 ; / / nie kompiluje się Wynika z tego, że typem nie jest sam szablon Para, lecz dopiero jego ukonkretnienie z podanymi argumentami.

20 Uwagi o typach uogólnionych cd Co daje sprawdzanie wykonywane przez kompilator? 1 public class Para<T1, T2> { 2 / /... 3 public void b ł ędna ( ) { 4 System. out. p r i n t l n ( pierwszy. g e t I m i ę ( ) ) ; 5 } Kompilator nie domyśla się, że chcemy mieć Osobę jako pierwszy element Pary. I bardzo dobrze! Kompilator przyjmuje, że typ będący parametrem szablonu może być dowolną podklasą klasy Object (czyli, innymi słowy, dowolnym typem referencyjnym).

21 Co umie każdy obiekt - tostring 1 Para< Integer, Integer > para = 2 new Para< Integer, Integer >(7, 1 3 ) ; 3 System. out. p r i n t l n ( " Para : " + para ) ; Na ekranie wypisze się coś w tym rodzaju: Para: przykładydowykładu.para@61de33 Przedefiniujmy więc tostring w Parze. 2 public S t r i n g t o S t r i n g ( ) { 3 return " Para ( " + pierwszy + ", " + d r u g i + " ) " ; 4 } Teraz przedstawiony poprzednio fragment programu wygeneruje: Para: Para(7, 13)

22 Co umie każdy obiekt - equals Wbrew pozorom equals nie jest łatwe. W Object oznacza identyczność. 1 System. out. p r i n t l n ( "Równość par : " + 2 new Para< Integer, Integer > ( 0, 0 ). 3 equals (new Para< Integer, Integer > ( 0, 0 ) ) ) ; Na ekranie wypisze się false. Przedefiniujmy więc equals w Parze.

23 Co umie każdy obiekt - equals 2 public boolean equals ( Object o ) { 3 i f (! ( o instanceof Para <?,? >)) return false ; 4 Para<T1, T2> p = ( Para<T1, T2>)o ; 5 / / Ostrzeżenie kompilatora: unchecked cast 6 i f ( ( pierwszy!= null ) && ( d r u g i!= null ) ) 7 return pierwszy. equals ( p. getpierwszy ( ) ) && 8 d r u g i. equals ( p. getdrugi ( ) ) ; 9 else 10 i f ( ( pierwszy == null ) && ( d r u g i == null ) ) 11 return ( p. getpierwszy ( ) == null ) && 12 ( p. getdrugi ( ) == null ) ; 13 else / / dokładnie jeden z elementów pary jest null 14 i f ( pierwszy == null ) 15 return ( p. getpierwszy== null ) && 16 ( d r u g i. equals ( p. getdrugi ( ) ) ) ; 17 else / / drugi==null 18 return pierwszy. equals ( p. getpierwszy ( ) ) && 19 ( p. getdrugi ()== null ) ; 20 }

24 Co umie każdy obiekt - equals - komentarz Problem 0: zdecydowanie za długie. Problem 1: w nagłówku jest (słusznie zresztą) Object. Czy równe obiekty muszą mieć ten sam typ? Czyli czy użyć instanceof (nie muszą) czy getclass() (muszą)? Muszą: równość musi być symetryczna! Nie muszą: dwa napisy "Alamakota" zapisane w dwu podklasach klasy Napis, realizujących różne implementacje napisu powinny być równe! Pisząc implementację metody equals() chcemy by definiowała ona relację równoważności oraz wielokrotne wywołanie dawało ten sam wynik.

25 Co umie każdy obiekt - equals - komentarz Problem 2: Możliwe wartości null. Na szczęście dla null operator instanceof da wynik negatywny. Problem 3: o instanceof Para<?,?>. Czemu nie o instanceof Para<T1,T2>? Bo chcemy móc się porównać z dowolną parą. Bo się nie skompiluje - w czasie wykonania nie ma typów uogólnionych. o instanceof Para<Object,Object>) też nie. Można napisać o instanceof Para.

26 Co umie każdy obiekt - equals Jak zobaczymy przy kolekcjach zmieniając equals zwykle należy przedefiniować hashcode. Implikacja a.equals(b) a.hashcode() == b.hashcode(). 1 public i n t hashcode ( ) { 2 return pierwszy. hashcode ( ) & d r u g i. hashcode ( ) ; 3 / / a może: return 13;??? 4 / / wielokrotne wywołania muszą dać ten sam wynik, 5 / / więc implementacje nie może zależeć od składowych transient 6 }

27 a dziedziczenie Można dowolnie 6 mieszać. Zwykłe klasy mogą dziedziczyć po uogólnionych. 1 public class ParaInt extends Para< Integer, Integer > { 2 public ParaInt ( I n t e g e r pierwszy, I n t e g e r d r u g i ) { 3 super ( pierwszy, d r u g i ) ; 4 } 5 } Uogólnione po uogólnionych. 1 public class ParaJednorodna <T> extends Para<T, T> { 2 public ParaJednorodna ( T pierwszy, T d r u g i ) { 3 super ( pierwszy, d r u g i ) ; 4 } 5 } I uogólnione po zwykłych. 6 Prawie, wyjątki omawiamy na koniec.

28 Argumenty typów uogólnionych Mogą być dowolnie złożone (nie mogą być typami prostymi). Mogą być ukonkretnieniami typów złożonych 1 Para< Para< String, Integer >, String > dużapara = 2 new Para<Para< String, Integer >, String >( 3 new Para< String, Integer >( " Ola ma psa ", 13), 4 " Ala ma kota " ) ; Skrócona składnia od Javy Para< Para< String, Integer >, String > dużapara = 2 new Para < >( 3 new Para <>( " Ola ma psa ", 13), 4 " Ala ma kota " ) ;

29 Jeszcze jedna uwaga o equals Zauważmy, że nasza definicja equals daje zgodne z intuicją wyniki 1 ParaJednorodna < Integer > p j = 2 new ParaJednorodna < Integer >(13, 1 3 ) ; 3 ParaInt p i = new ParaInt (13, 1 3 ) ; 4 System. out. p r i n t l n ( "Równość par r óżnych klas : " + 5 p i. equals ( p j ) + " i " + 6 p j. equals ( p i ) ) ; Wynikiem jest true.

30 Metody uogólnione Są. Przy użyciu (zwykle) nie podaje się już argumentów będących typami. 1 public class TestMetodyUogó l n i o n e j { 2 <T> ParaJednorodna <ParaJednorodna <T>> 3 twórzparępar ( T e l t ) { 4 return new ParaJednorodna <ParaJednorodna <T>> 5 (new ParaJednorodna <T>( e l t, e l t ), 6 new ParaJednorodna <T>( e l t, e l t ) ) ; 7 } 8 9 void t e s t ( ) { 10 System. out. p r i n t l n ( " Para par I n t e g e r " + 11 twórzparępar ( 3 ) ) ; 12 System. out. p r i n t l n ( " Para par S t r i n g " + 13 twórzparępar ( " Ala ma kota " ) ) ; 14 } 15 }

31 Ograniczenia na parametry typów uogólnionych Dotąd poznany mechanizm nie jest wystarczający. 1 public class ParaPosortowana <T> extends ParaJednorodna <T> 2 public ParaPosortowana ( T pierwszy, T d r u g i ) { 3 super ( pierwszy, d r u g i ) ; 4 5 i f ( pierwszy. compareto ( d r u g i ) > 0 ) { 6 / / nie kompiluje się 7 setpierwszy ( d r u g i ) ; 8 setdrugi ( pierwszy ) ; 9 } 10 } Kompilator ma rację - nie każda klasa potrafi się porównywać.

32 Dygresja - interfejs Comparable Bardzo prosty i standardowy. 1 public interface Comparable<T>{ 2 public i n t compareto ( T o ) ; 3 }

33 Typ z ograniczeniami na parametry 1 public class ParaPosortowana <T extends Comparable<T>> 2 extends ParaJednorodna <T>{ 3 4 public ParaPosortowana ( T pierwszy, T d r u g i ) { 5 super ( pierwszy, d r u g i ) ; 6 7 i f ( pierwszy. compareto ( d r u g i ) > 0 ) { 8 setpierwszy ( d r u g i ) ; 9 setdrugi ( pierwszy ) ; 10 } 11 } 12 } Teraz się kompiluje!. Gdy jawnie nie podamy ograniczenia kompilator przyjmie extends Object.

34 Typ z ograniczeniami na parametry Można podać wiele ograniczeń na jeden parametr. Jeśli wśród ograniczeń jest klasa, to musi być jedna i na pierwszym miejscu (tu dla interfejsów też używamy extends). Stwórzmy parę sparametryzowaną typem elementów obu pól, który musi być klasą: będącą parą jednorodną (lub jej podklasą), implementującą porównywanie, implementującą serializację.

35 Typ z ograniczeniami na parametry 1 public class ParaWymagająca 2 <T1, T2 extends ParaJednorodna <T1> & 3 S e r i a l i z a b l e & Comparable<T2>> 4 extends ParaJednorodna <T2> { 5 public ParaWymagająca ( T2 pierwszy, T2 d r u g i ) { 6 super ( pierwszy, d r u g i ) ; 7 } 8 } 9 10 / / ParaPosortowana < String > pp = 12 new ParaPosortowana < String >( " jeden ", "dwa" ) ; 13 ParaWymagająca< String, ParaPosortowana < String >> pw = 14 new ParaWymagająca< String, 15 ParaPosortowana < String >>(pp, pp ) ;

36 Typ z ograniczeniami na parametry T1 było tylko pomocnicze. Java pozwala na użycie dżokerów?. W niektórych konstrukcjach nawet je preferuje.

37 Typ z ograniczeniami na parametry 1 public class ParaWymagająca2 2 <T extends ParaJednorodna <?> & 3 S e r i a l i z a b l e & Comparable<T>> 4 extends ParaJednorodna <T> { 5 public ParaWymagająca2 ( T pierwszy, T d r u g i ) { 6 super ( pierwszy, d r u g i ) ; 7 } 8 } 9 / / ParaWymagająca2<ParaPosortowana < S t r i n g >> pw2 = 11 new ParaWymagająca2<ParaPosortowana < String >>(pp, pp ) ;

38 Dalsze możliwości w skrócie Można wyrażać zależności między samymi parametrami 1 public <T1, T2 extends T1> 2 void wstaw ( C o l l e c t i o n <T1> a, T2 b ) { /... / } Dżokery pozwalają pomijać szczegóły... 1 public i n t ileelement ów( C o l l e c t i o n <?> c ) { /... / } 2 public <T> i n t ileelement ów( C o l l e c t i o n <T> c ) { /... / }... i opisywać ograniczenia górne 1 public <T> void wstaw ( C o l l e c t i o n <? super T> kol, T e l t ) ; Jeszcze do tego wrócimy po omówieniu kolekcji

39 Problemy z typami uogólnionymi w Javie Implementacja Javy musiała dopasować się do istniejących bibliotek i maszyn wirtualnych. Stąd pomysł z wymazywaniem typów (ang. type erasure) i wykorzystaniem dziedziczenia przez typy referencyjne po typie Object - kompilator sprawdza zgodność typów, a potem usuwa informacje o typach uogólnionych.

40 Problemy z typami uogólnionymi w Javie Maszyna wirtualna nie wie o typach uogólnionych więc Nie można tworzyć obiektów (ani tablic) typów będących parametrami typu uogólnionego - kompilator nie wie jakie konstruktory ma ten typ, a podczas wykonywania typ ten nie będzie znany. Rzutowania do typów uogólnionych powodują ostrzeżenia kompilatora, który nie może wygenerować kodu weryfikującego poprawność rzutowania (przykład dalej). Nie można stosować instanceof do typów uogólnionych (tylko z dżokerami lub surowymi) - poza tym jest tu problem z tym jak wygląda hierarchia klas. nie mogą być typami wyjątków - szukanie obsługi dzieje się na podstawie typu podczas wykonywania programu. Problemy z refleksją. No i problem z typami prostymi - nie mogą być argumentami typów uogólnionych.

41 Przykład 1 Para< String, String > ps = 2 new Para< String, String >( " ala ", " ola " ) ; 3 Para< Integer, Integer > p i = 4 new Para< Integer, Integer >(7, 1 3 ) ; 5 Para p = ps ; / / zastosowanie surowego typu 6 p i = ( Para< Integer, Integer >) p ; 7 / / Ostrzeżenie kompilatora: unchecked cast 8 System. out. p r i n t l n ( " p i = " + p i ) ; 9 / / pi jest parą napisów! pi = Para(ala, ola)

42 1 public class MyType<E> { 2 class Inner { } 3 s t a t i c class Nested { } 4 5 public s t a t i c void main ( S t r i n g [ ] args ) { 6 MyType mt ; / / warning: MyType is a raw type 7 MyType. Inner inn ; / / warning: MyType.Inner is a raw type 8 9 MyType. Nested nest ; / / no warning: not parameterized type 10 MyType<Object > mt1 ; / / no warning: type parameter given 11 MyType<?> mt2 ; / / no warning: type parameter given (wildcard OK!) 12 } 13 }

43 Podsumowanie Na pewno typy uogólnione są potrzebne. Realizacja tego mechanizmu w Javie zaspokaja większość potrzeb programistów. Mogłaby być lepsza, gdyby ten mechanizm został wbudowany w język od jego pierwszej wersji. Pełny opis typów uogólnionych wykracza poza ramy tego wykładu.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Problem: Jak zaimplementować stos? Co się stanie gdy dodamy do stosu obiekt typu Czlowiek? Co się stanie, gdy spróbujemy ten obiekt odczytać

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo

Klasy abstrakcyjne, interfejsy i polimorfizm

Klasy abstrakcyjne, interfejsy i polimorfizm Programowanie obiektowe 12 kwietnia 2011 Organizacyjne Klasówka będzie 20 IV 2011. Sale jeszcze są pertraktowane. Materiał do wyjątków włącznie. Można mieć swoje materiały nieelektroniczne. Wywołanie z

Bardziej szczegółowo

Dawid Gierszewski Adam Hanasko

Dawid Gierszewski Adam Hanasko Dawid Gierszewski Adam Hanasko Chcemy stworzyć klasę w której możemy przechowywać dwie zmienne dowolnych typów Tworzymy tyle różnych klas ile potrzeba: Class ParaInt{ int pierwszy; Int drugi; Class ParaButow{

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

Kurs programowania. Wykład 9. Wojciech Macyna

Kurs programowania. Wykład 9. Wojciech Macyna Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy

Bardziej szczegółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami

Bardziej szczegółowo

Polimorfizm a klasy generyczne w języku Java. Zdzisław Spławski 1

Polimorfizm a klasy generyczne w języku Java. Zdzisław Spławski 1 Polimorfizm a klasy generyczne w języku Java Zdzisław Spławski 1 Klasyfikacja polimorfizmów Polimorfizm ogólnie oznacza wielopostaciowość i umożliwia przypisanie różnych

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

Bardziej szczegółowo

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 7: Typy uogólnione. Stringi. 4/21/2013 S.Deniziak: Programowanie obiektowe - Java 1 Jak operować na danych różnych typów? Wymagana zgodność typów Rzutowanie w górę Tylko

Bardziej szczegółowo

Typy sparametryzowane

Typy sparametryzowane Typy sparametryzowane Streszczenie Celem wykładu jest zaprezentowanie typów sparametryzowanych. Czas wykładu 90 minut. Istnieją algorytmy, których zasada działania nie zależy od typu danych wejściowych.

Bardziej szczegółowo

Kolekcje w Javie cz. 1

Kolekcje w Javie cz. 1 Kolekcje w Javie cz. 1 Programowanie obiektowe Jacek Sroka na podstawie materiałów Janusza Jabłonowskiego 8 kwietnia 2013 Po co są kolekcje? Po co są kolekcje? A po co są programy? Żeby manipulować danymi.

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

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

Dziedziczenie. dr Jarosław Skaruz

Dziedziczenie. dr Jarosław Skaruz Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com Dziedziczenie specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami,

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

Polimorfizm. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody

Bardziej szczegółowo

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie

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

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Projektowanie obiektowe. Roman Simiński Polimorfizm

Projektowanie obiektowe. Roman Simiński   Polimorfizm Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Polimorfizm Koncepcja polimorfizmu Słowo polimorfizm pochodzi od dwóch greckich słów: poly czyli wiele, morphos czyli

Bardziej szczegółowo

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment

Bardziej szczegółowo

Programowanie w Javie - wykład 3

Programowanie w Javie - wykład 3 Pakiety import Klasy dziedziczenie Programowanie w Javie - wykład 3 Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik

Bardziej szczegółowo

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Informatyka I Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Dziedziczenie klas

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje

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

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to

Bardziej szczegółowo

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

TYPY GENERYCZNE (GENERICS)

TYPY GENERYCZNE (GENERICS) TYPY GENERYCZNE (GENERICS) ZAGADNIENIA: wprowadzenie, konwencje, metody, typy surowe parametry ograniczone podtypy, dziedziczenie, symbole wieloznaczne, ograniczenia. MATERIAŁY: http://docs.oracle.com/javase/tutorial/java/generics/

Bardziej szczegółowo

Programowanie obiektowe. Wykład 5. C++: szablony

Programowanie obiektowe. Wykład 5. C++: szablony Programowanie obiektowe Wykład 5. C++: szablony Szablony Szablony to technika realizacji polimorfizmu na innym poziomie niż za pomocą funkcji wirtualnych i dziedziczenia. Mechanizm ten można rozumieć jako

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Scala. Obiektowo-funkcyjny język programowania. Zbyszek Skowron

Scala. Obiektowo-funkcyjny język programowania. Zbyszek Skowron Scala Obiektowo-funkcyjny język programowania Zbyszek Skowron 4 czerwca 2007 Wprowadzenie Scala jest obiektowo-funkcyjnym jezykiem programowania zaprojektowanym przez Martina Odersky'ego. Inne projekty

Bardziej szczegółowo

Interfejsy i klasy wewnętrzne

Interfejsy i klasy wewnętrzne Interfejsy i klasy wewnętrzne mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Interfejs klasy sposób komunikacji z jej obiektami (zestaw składowych publicznych). Określa on zestaw

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe III. Refleksja Małgorzata Prolejko OBI JA16Z03 Plan Klasa Class. Analiza funkcjonalności klasy. Podstawy obsługi wyjątków. Zastosowanie refleksji do analizy obiektów. Wywoływanie

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy

Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy Janusz Jabłonowski Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy Przedefiniowywanie lub podmienianie (ang. overriding, czasami błędnie tłumaczone

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

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

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 9: Polimorfizm i klasy wirtualne Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Programowanie obiektowe i metody wirtualne 2 W programowaniu obiektowym polimorfizm

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Wykład 6: Dziedziczenie

Wykład 6: Dziedziczenie Wykład 6: Dziedziczenie Dziedziczenie Jeden z filarów obiektowości. Budowa jednej klasy na bazie drugiej, przez dodawanie/przesłanianie jej składowych: nad-klasa klasa bazowa pod-klasa klasa pochodna od

Bardziej szczegółowo

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

Stos liczb całkowitych

Stos liczb całkowitych Stos liczb całkowitych class StosInt int* tab; unsigned size ; StosInt(unsigned s=10) tab=new int[size=s];top=0; ~StosInt()delete[] tab; void push(int i)tab[top++]=i; int pop(void) return tab[--top]; int

Bardziej szczegółowo

Enkapsulacja, dziedziczenie, polimorfizm

Enkapsulacja, dziedziczenie, polimorfizm 17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 10 - klasy abstrakcyjne i interfejsy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 17 maja 2017 1 / 13 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Bardziej szczegółowo

Szablony. Szablony funkcji

Szablony. Szablony funkcji Szablony Szablony sa mechanizmem ponownego wykorzystania kodu (reuse) W przypadku funkcji ponownie wykorzystany jest algorytm W przypadku klas ponownie wykorzystane sa wszystkie skladowe Deklaracja szablonu

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie Języki Programowania II Wykład 3 Java podstawy Przypomnienie Analiza, projektowanie, programowanie, testowanie, wdrażanie Iteracyjnie nie kaskadowo Przypadki użycia = opowiastki o używaniu systemu = wymagania

Bardziej szczegółowo

Definiowanie własnych klas

Definiowanie własnych klas Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:

Bardziej szczegółowo

Java: interfejsy i klasy wewnętrzne

Java: interfejsy i klasy wewnętrzne Java: interfejsy i klasy wewnętrzne Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 INTERFEJSY Interfejs to opis co klasa implementująca dany interfejs powinna robić, ale bez określania

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

java.util.* :Kolekcje Tomasz Borzyszkowski

java.util.* :Kolekcje Tomasz Borzyszkowski java.util.* :Kolekcje Tomasz Borzyszkowski Wstęp Kolekcje w Java dają programiście pewien standardowy sposób radzenia sobie z przetwarzaniem grup obiektów. Implementacja kolekcji w Java składa się z następujących

Bardziej szczegółowo

Podstawy otwartych języków programowania Przechowywanie danych

Podstawy otwartych języków programowania Przechowywanie danych Podstawy otwartych języków programowania Przechowywanie danych Wiktor Wandachowicz Sposoby przechowywania danych Typy podstawowe Pojedyncze obiekty Tablice obiektów i tablice typów podstawowych jednowymiarowe

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Krzysztof Lemay, Naughton Barteczko R. Cadenhead JAVA, Java Podręcznik 2 wykłady dla kaŝdego Języka i ćwiczenia Programowania

Bardziej szczegółowo

Java Język programowania

Java Język programowania Java Język programowania Język Java Bazuje i jest zbliżony do C/C++ Porosty zbiór typów danych (podział na typy prymitywne i obiektowe) Zarządzanie pamięcią i Garbage Collection Zintegrowana synchronizacja

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

Programowanie Obiektowe Ćwiczenie 4

Programowanie Obiektowe Ćwiczenie 4 Programowanie Obiektowe Ćwiczenie 4 1. Zakres ćwiczenia wyjątki kompozycja 2. Zagadnienia Założeniem, od którego nie należy odbiegać, jest by każdy napotkany problem (np. zatrzymanie wykonywanej metody)

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne. Java podstawy jęyka Wykład 2 Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne. Wyjątki: obsługa błędów Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego 12.03.2015

Bardziej szczegółowo

KOTLIN. Język programowania dla Androida

KOTLIN. Język programowania dla Androida KOTLIN Język programowania dla Androida Historia Kotlin został opracowany przez firmę JetBrains Prace rozpoczęto w 2011 r., od 2012 r. dostępny na licencji Apache 2. Nazwa pochodzi od wyspy koło Petersburga

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

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

MATERIAŁY DO ZAJĘĆ II

MATERIAŁY DO ZAJĘĆ II MATERIAŁY DO ZAJĘĆ II Zmienne w C# Spis treści I. Definicja zmiennej II. Hierarchia typów (CTS) III. Typy wbudowane IV. Deklaracja zmiennych V. Literały VI. Pobieranie i wypisywanie wartości zmiennych

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

Programowanie w Javie wykład 8 Interfejsy

Programowanie w Javie wykład 8 Interfejsy 1 Programowanie w Javie wykład 8 Interfejsy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 Barteczko, JAVA Uniwersalne techniki programowania,

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera

Bardziej szczegółowo

.NET Klasy, obiekty. ciąg dalszy

.NET Klasy, obiekty. ciąg dalszy .NET Klasy, obiekty ciąg dalszy Przeciążanie operatorów 1 W języku C# istnieje możliwość zdefiniowania funkcjonalności dużej części operatorów dla typów stworzonych przez użytkownika. Dzięki takiemu zabiegowi,

Bardziej szczegółowo

Wykład 7: Pakiety i Interfejsy

Wykład 7: Pakiety i Interfejsy Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,

Bardziej szczegółowo