Aplikacje w Javie wykład 6 Klasy wewnętrzne, klasy anonimowe Typy i metody sparametryzowane (generics)
|
|
- Radosław Jóźwiak
- 6 lat temu
- Przeglądów:
Transkrypt
1 Aplikacje w Javie wykład 6 1 Klasy wewnętrzne, klasy anonimowe Typy i metody sparametryzowane (generics) Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, C. S. Horstmann, G. Cornell, Java. Podstawy, Helion, Gliwice 2008
2 Klasy wewnętrzne Klasa wewnętrzna to klasa zdefiniowana wewnątrz innej klasy. class A {... class B { Klasa B jest klasą wewnętrzną w klasie A. Klasa A jest klasą otaczającą klasy B. Klasy wewnętrzne (ang. Nested Classes) dzielą się na dwie kategorie: statyczne (static) i niestatyczne (non-static) class OuterClass {... static class StaticNestedClass {... class InnerClass {... 2
3 Klasy wewnętrzne 3 Klasa wewnętrzna może: być zadeklarowana ze specyfikatorem private (normalne klasy nie!), uniemożliwiając wszelki dostęp spoza klasy otaczającej, odwoływać się do niestatycznych składowych klasy otaczającej (jeśli nie jest zadeklarowana ze specyfikatorem static), być zadeklarowana ze specyfikatorem static (normalne klasy nie!), co powoduje, że z poziomu tej klasy nie można odwoływać się do składowych niestatycznych klasy otaczającej (takie klasy nazywają się zagnieżdżonymi, ich rola sprowadza się wyłącznie do porządkowania przestrzeni nazw i ew. lepszej strukturyzacji kodu) mieć nazwę (klasa nazwana) lub nie mieć nazwy (wewnętrzna klasa anonimowa), być lokalna zdefiniowana w bloku (metodzie lub innym bloku np. w bloku po instrukcji if) odwoływać się do zmiennych lokalnych, jeśli jest lokalna, a wartości zmiennych lokalnych, do których się odwołujemy nie mogą się zmieniać (do Javy 7 wymagane było by były ze specyfikatorem final).
4 Klasy wewnętrzne 4 Klasy wewnętrzne tworzymy i używamy ponieważ: Klasy wewnętrzne mogą być ukryte przed innymi klasami pakietu (względy bezpieczeństwa). Klasy wewnętrzne pozwalają unikać kolizji nazw (np. klasa wewnętrzna nazwana Vector nie koliduje nazwą z klasą zewnętrzną o tej samej nazwie). Klasy wewnętrzne pozwalają (czasami) na lepszą, bardziej klarowną strukturyzację kodu, bo można odwoływać się z nich do składowych (nawet prywatnych) klasy otaczającej, a przy tym zlokalizować pewne działania. Klasy wewnętrzne (w szczególności anonimowe) są intensywnie używane przy implementacji standardowych interfejsów Javy. Anonimowe klasy wewnętrzne pozwalają na traktowanie fragmentów kodu do wykonania (ściślej: metod przedefiniowywanych w tych klasach) jak obiektów, a wobec tego np. umieszczanie ich w tablicach, kolekcjach, czy przekazywanie innym metodom jako argumentów.
5 5 Klasy wewnętrzne Do statycznej klasy wewnętrznej mamy dostęp poprzez nazwę klasy otaczającej OuterClass.StaticNestedClass Np. aby stworzyć obiekt statycznej klasy wewnętrznej należy OuterClass.StaticNestedClass nestedobject = new OuterClass.StaticNestedClass(); Między obiektami statycznej klasy wewnętrznej a obiektami klasy otaczającej nie zachodzą żadne związki. Rozważmy klasy class OuterClass {... class InnerClass {... Dla nieprywatnych klas wewnętrznych możliwe jest odwoływanie się do nich spoza kontekstu klasy otaczającej: OuterClass.InnerClass
6 Klasy wewnętrzne Zawarcie klasy wewnętrznej w klasie otaczającej nie oznacza, że obiekty klasy otaczającej zawierają elementy (pola) obiektów klasy wewnętrznej. Obiekt niestatycznej klasy wewnętrznej zawiera referencję do obiektu klasy otaczającej, co umożliwia odwoływanie się do jej wszystkich składowych. Tworzenie obiektu niestatycznej klasy wewnętrznej wymaga zawsze istnienia obiektu klasy otaczającej. Mówi się, że obiekt klasy wewnętrznej opiera się na obiekcie klasy otaczającej. Dlatego tworzymy najpierw obiekt klasy otaczającej OuterClass outerobject = new OuterClass(); OuterClass.InnerClass innerobject = outerobject.new InnerClass(); lub jeśli nie potrzebujemy obiektu klasy zewnętrznej OuterClass.InnerClass innerobject = new OuterClass().new InnerClass(); Wewnątrz klasy otaczającej (OuterClass) tam, gdzie dostępne jest this, można po prostu napisać: InnerClass innerobject = new InnerClass(); 6
7 Klasy wewnętrzne- przesłanianie zmiennych 7 public class ShadowTest { public int x = 0; // x pole klasy zewnętrznej class FirstLevel { public int x = 1;// x pole klasy wewnętrznej void methodinfirstlevel(int x) { System.out.println("x = " + x);//x parametr metody System.out.println("this.x = " + this.x); System.out.println("ShadowTest.this.x = " + ShadowTest.this.x); public static void main(string... args) { ShadowTest st = new ShadowTest(); ShadowTest.FirstLevel fl = st.new FirstLevel(); fl.methodinfirstlevel(23); Wyjście: x = 23 this.x = 1 ShadowTest.this.x = 0
8 Anonimowe klasy wewnętrzne 8 Szczególną rolę odgrywają anonimowe klasy wewnętrzne. Klasy te nie mają nazwy. Najczęściej tworzymy je po to, by przedefiniować jakieś metody klasy bazowej przez klasę wewnętrzną bądź zdefiniować metody implementowanego przez nią interfejsu na użytek jednego obiektu. Referencję do tego obiektu chcemy traktować jako typu klasy bazowej lub typu implementowanego interfejsu. Nazwa takiej klasy wewnętrznej jest więc nam niepotrzebna i nie chcemy jej wymyślać. Wtedy stosujemy anonimowe klasy wewnętrzne. Definicja anonimowej klasy wewnętrznej : new NazwaTypu( parametry ) { // pola i metody klasy wewnętrznej gdzie: NazwaTypu nazwa nadklasy (klasy dziedziczonej w klasie wewnętrznej) lub implementowanego przez klasę wewnętrzną interfejsu, parametry argumenty przekazywane konstruktorowi nadklasy; w przypadku, gdy Typ jest nazwą interfejsu lista parametrów jest oczywiście pusta (bo chodzi o implementację interfejsu).
9 Anonimowe klasy wewnętrzne 9 Uwagi: anonimowe klasy wewnętrzne nie mogą mieć konstruktorów (bo nie mają nazwy), za pomocą anonimowej klasy wewnętrznej można stworzyć tylko jeden obiekt, bo definicja klasy podana jest w wyrażeniu new czyli przy tworzeniu obiektu, a nie mając nazwy klasy nie możemy potem tworzyć innych obiektów; jeśli jednak to wyrażenie new umieścimy np. w pętli to oczywiście stworzone zostanie tyle obiektów ile razy wykona się pętla, definiowanie klas wewnętrznych implementujących interfejsy stanowi jedyny dopuszczalny przypadek użycia nazwy interfejsu w wyrażeniu new anonimowe klasy wewnętrzne są kompilowane do plików.class o nazwach automatycznie nadawanych przez kompilator (nazwa składa się z nazwy klasy otaczającej i jakiegoś automatycznie nadawanego identyfikatora) Klasy wewnętrzne (nazwane i anonimowe) mogą być definiowane w blokach lokalnych (np. w ciele metody). Będziemy je krótko nazywać klasami lokalnymi. Wewnętrzne klasy lokalne są doskonale odseparowane (nie ma do nich żadnego dostępu spoza bloku, w którym są zdefiniowane), a mogą odwoływać się do składowych klasy otaczającej oraz zmiennych lokalnych zadeklarowanych w bloku (pod warunkiem, że są one niezmienne).
10 Anonimowe klasy wewnętrzne - przykład 10 Przykład: Listowanie katalogu z filtrowaniem nazw (pliki.java) Obiekty plikowe (pliki i katalogi) są obiektami klasy File z pakietu java.io. Wobec katalogu można użyć metody list z klasy File, która zwraca tablicę nazw plików (i podkatalogów) w nim zawartych. Używając metody list z argumentem typu FilenameFilter możemy określić kryteria filtrowania wyniku wg nazw (np. otrzymać tylko listę plików o rozszerzeniu.java). FilenameFilter jest interfejsem, w którym zawarto jedną metodę boolean accept(file dir, String filename). Musimy zatem mieć obiekt klasy implementującej FilenameFilter, w której to klasie zdefiniujemy metodę accept i podać referencję do tego obiektu jako argument metody list. Metoda accept będzie wtedy wywoływana dla każdego obiektu plikowego, zawartego w katalogu z argumentami katalog, nazwa pliku lub podkatalogu. Powinniśmy ją zdefiniować w taki sposób, by zwracała true tylko wtedy, gdy nazwa spełnia wymagane przez nas kryteria, a w przeciwnym razie false. Naturalnym sposobem oprogramowania jest tu umieszczenie definicji anonimowej klasy wewnętrznej implementującej FilenameFilter w wyrażeniu new podanym jako argument metody list. A ponieważ listowanie umieszczamy w jakiejś metodzie, to ta anonimowa klasa będzie lokalną klasą wewnętrzną.
11 Anonimowe klasy wewnętrzne - przykład 11 void listjavafiles(string dirname) { // argument - nazwa katalogu File dir = new File(dirName); // katalog - obiekt typu File // listowanie z filtrowaniem nazw; kryteria wyboru nazw // podajemy za pomocę implementacji metody accept // w lokalnej anonimowej klasie wewnętrznej String[] fnames = dir.list( new FilenameFilter() { public boolean accept(file directory, String fname) { return fname.endswith(".java"); );// for (int i=0; i < fnames.length; i++) { // lista -> stdout System.out.println(fnames[i]);
12 Anonimowe klasy wewnętrzne przykład 2 12 Lista plików z rozszerzeniem.java, które zmodyfikowano po 21 sierpnia. Calendar c=calendar.getinstance(); c.set(2014,8,22,0,0); long time=c.gettimeinmillis(); File[] files = dir.listfiles( new FileFilter(){ ); public boolean accept(file file) { return file.isfile() && file.getname().endswith(".java") && file.lastmodified() >= time; //w kodzie anonimowej klasy wewnętrznej odwołujemy się do //zmiennej lokalnej time, od wersji Java 8 nie musimy //takiej zmiennej deklarować jako final, taka zmiena musi //być effectively final - tzn. nie zmieniać swoich wartości, //klasa wewnętrzna otrzymuje jej kopię
13 Anonimowe klasy wewnętrzne przykład 3 13 public class HelloWorldAnonymousClasses { interface HelloWorld { public void greet(); public void greetsomeone(string someone); public void sayhello() { class EnglishGreeting implements HelloWorld { String name = "world"; public void greet() { greetsomeone("world"); public void greetsomeone(string someone) { name = someone; System.out.println("Hello " + name); HelloWorld englishgreeting = new EnglishGreeting();
14 Anonimowe klasy wewnętrzne przykład 3 cd 14 //klasa anonimowa HelloWorld frenchgreeting = new HelloWorld() { String name = "tout le monde"; public void greet() { greetsomeone("tout le monde"); public void greetsomeone(string someone) { name = someone; System.out.println("Salut " + name); ; englishgreeting.greet(); frenchgreeting.greetsomeone("fred"); public static void main(string[] args) { HelloWorldAnonymousClasses myapp = new HelloWorldAnonymousClasses(); myapp.sayhello();
15 Opakowanie typów prostych 15 Często występuje potrzeba traktowania liczb jako obiektów, np. kolekcje mogą zawierać tylko referencje do obiektów. Tymczasem liczby są reprezentowane przez typy proste (pierwotne) (i nie są obiektami). Dlatego w standardowym pakiecie java.lang umieszczono specjalne klasy opakowujące liczby (w ogóle wszystkie typy pierwotne) i czyniące z nich obiekty. Należą do nich następujące klasy: Long Integer Short Byte Double Float Obiekty tych klas reprezentują (w sposób obiektowy) liczby odpowiednich typów. Mówimy tu o opakowaniu liczby, bowiem liczba ta jest umieszczana "w środku" obiektu odpowiedniej klasy, jako jego element. We wcześniejszych wersjach Javy operatory arytmetyczne można było stosować tylko do liczbowych typów prostych. Zatem, gdy potrzebowaliśmy liczby jako obiektu, a jednocześnie typu prostego do wykonywania operacji arytmetycznych, to musieliśmy umieć zapakować liczbę do obiektu klasy opakowującej i wyciągnąć ją stamtąd.
16 Opakowanie typów prostych 16 Typy proste możemy pakować i rozpakowywać "ręcznie", np. obiektowy odpowiednik liczby 5 typu int możemy uzyskać tworząc obiekt klasy Integer: Integer a = new Integer(5); Z obiektu takiej klasy możemy liczbę wyciągnąć za pomocą odpowiednich metod, np. int i = a.intvalue(); // zwraca wartość typu int, Podobnie: Double dd = new Double(7.1); //"zawartą" w obiekcie a double d = dd.doublevalue(); // d == 7.1 Aby uprościć powyższe przekształcenia, w Javie 5 wprowadzono mechanizm zwany autoboxingiem.
17 Opakowanie typów prostych - Autoboxing Autoboxing to automatyczne przekształcanie między typami prostymi a typami obiektów klas opakowujących typy proste. Przykład: int n = 1; Integer in = n; //boxing, czyli automatyczne opakowanie // warości typu prostego w nowy obiekt klasy (nie musimy // już pisać new Integer(n), robi to za nas kompilator) n = in + 1 //unboxing - automatyczne pobranie wartości typu // prostego z obiektu klasy opakowującej(nie musimy już // pisać in.intvalue() + 1) in += 5; //obiekty typów opakowujących są niemodyfikowalne // powstaje nowy obiekt Automatyczne przekształcenia autoboxing zachodzą nie tylko przy przypisaniach, ale również przy przekazywaniu argumentów metodom i konstruktorom oraz przy zwrocie wyników z metod. Np. metoda Arrays.asList(...), która ma zmienną liczbę argumentów typu referencyjnego, może być zastosowana tak: Arrays.asList(1,2,11,12,23,24), umożliwiając w ten sposób szybką inicjację elementów niemodyfikowalnej listy liczb całkowitych (typ Integer). 17
18 Opakowanie typów prostych - Autoboxing 18 Przy posługiwaniu się autoboxingiem należy zwrócić uwagę na możliwe przypadki wypakowania wartości typów prostych z nieistniejących obiektów klas opakowujących (gdy referencja na obiekt ma wartość null) Opakowywanie typów postych zachodzi również przy przypisaniach na zmienne typu Object, np. Object o = 1; spowoduje stworzenie obiektu klasy Integer opakowującego liczbę 1, jednak wypakowanie nie jest już automatyczne, przy próbie podstawienia int x = o;// błąd wystąpi błąd kompilacji, należy użyć rzutowania int x = (Integer) o;// ok Autoboxing nie działa też na tablicach, niedopuszczalne jest przypisanie: int[] a = {1,2,3; Integer[] ia=a;// niedopuszczalne, ale Integer[] iaa={1,2,3; // jest OK - autoboxing System.out.println(Arrays.asList(a));//metoda traktuje //tablicę a jako jedyny argument i wywołuje metodę tostring //dla tablicy domyślnie zwraca identyfikator obiektu z nazwą // klasy
19 19 Klasy opakowujące - metody W klasach opakowujących typy pierwotne zdefiniowano statyczne metody: public static ttt parsettt(string s) zwracające wartości typu ttt reprezentowane przez napis s, gdzie: ttt nazwa typu pierwotnego (np. int, double), Ttt - ta sama nazwa z kapitalizowaną pierwszą literą (np. Int, Double) A więc, po to by przekształcić napis s reprezentujący liczbę rzeczywistą do typu double należy napisać: double d = Double.parseDouble(s); np. String s = "12.4"; double d = Double.parseDouble(s); // d == 12.4 Użytecznych dodatkowych metod dostarcza klasa Character (opakowujaca typ char). Należą do nich metody stwierdzania rodzaju znaku: isdigit() // czy znak jest znakiem cyfry isletter() // czy znak jest znakiem litery isletterordigit() // litera klub cyfra iswhitespace() // czy to "biały" znak (spacja, tabulacja etc.) isuppercase(); // czy to duża litera islowercase(); // czy to mała litera Metody te zwracają wartości true lub false.
20 Klasy opakowujące - stałe 20 W klasach opakowujących typy numeryczne zdefiniowano także wiele użytecznych statycznych stałych. Należą do nich stałe zawierające maksymalne i minimalne wartości danego typu. Mają one nazwy MAX_VALUE i MIN_VALUE. Dzięki temu nie musimy pamiętać zakresów wartości danego typu. Możemy np. zsumować wszystkie dodatnie liczby typu short: public class MaxVal { public static void main(string[] args) { long sum = 0; for (int i=1; i <= Short.MAX_VALUE; i++) sum +=i; System.out.println(sum); //licznik i nie może być typu short, bo po dojściu do //Short.MAX_VALUE i zwiększeniu licznika o 1 i otrzyma //wartość Short.MIN_VALUE (arytmetyczne przepełnienie) //pętla nieskończona
21 Typy i metody sparametryzowane (generics) 21 Często konstrukcje różnych klas oraz metod w klasach są funkcjonalnie podobne (czyli służą wykonaniu tych samych czynności), różnią się natomiast tylko typami danych, na których czynności te są wykonywane. Po to, by nie powielać tego samego kodu dla różnych przypadków do języków programowania wprowadzono szablony (templates) - klasy oraz metody parametryzowane typami przetwarzanych danych. W Javie - poczynając od wersji pojawił się odpowiednik szablonów tzw. generics. Przy wprowadzaniu koncepcji generics do Javy w dużo mniejszym stopniu akcent położono na uogólnianie kodu (pierwotny motyw szablonów C++). Dość wysoki stopień uogólniania kodu był i jest bowiem w Javie dostępny poprzez: zagwarantowane dziedziczenie klasy Object, implementację interfejsów, mechanizmy refleksji (czyli np. dynamiczne, w fazie wykonania programu, odwołania do pól i metod klas). (Ale przy takim podejściu mamy pewne problemy: kompilator nie ma możliwości dokładnego sprawdzenia zgodności typów i błędy związane z użyciem niewłaściwego typu pojawią się dopiero w fazie wykonania, ponadto jesteśmy zmuszeni do stosowania konwersji zawężających, co czasem może być uciążliwe i zmniejsza czytelność kodu.)
22 Typy i metody sparametryzowane (generics) 22 Do tych - od dawna dostępnych możliwości - wprowadzenie generics (typów sparametryzowanych) dodaje ułatwienia w postaci: unikania konwersji zawężających, tworzenia bardziej czytelnego kodu, wykrywania błędów w fazie kompilacji i unikania wyjątku ClassCastException. Typ sparametryzowany - to typ (wyznaczany przez nazwę klasy lub interfejsu) z dołączonym jednym lub większą liczbą parametrów. Definicję typu sparametryzowanego wprowadzamy słowem kluczowym class lub interface podając po nazwie (klasy lub interfejsu) parametry w nawiasach kątowych. Parametrów tych następnie używamy w ciele klasy (interfejsu) w miejscu "normalnych" typów class interface Nazwa < ParametrTypu1, ParametrTypu2,... ParametrTypuN> { //...
23 23 Typy i metody sparametryzowane - przykład class Para<S, T> { S first; T last; public Para(S f, T l) { first = f; last = l; public S getfirst() { return first; public T getlast() { return last; public void setfirst(s f) { first = f; public void setlast(t l) { last = l; Możemy teraz tworzyć różne pary: Para<String, String> p1 = new Para<String, String> ("Jan", "Kowalski"); Para<String, Data> p2 = new Para<String, Data> ("Jan Kowalski", new Data(" ")); Para<Integer, Integer> p = new Para<Integer, Integer>(1,2);
24 Typy i metody sparametryzowane 24 Para<String, String>, Para<String, Data> Para<Integer, Integer> - to konkretyzacje sparametryzowanej klasy Para<S, T>,zaś <String, String> - argumenty typu. Przy tworzeniu konkretnych instancji w wyrażeniu new do wersji Java 7 musieliśmy po obu stronach przypisania podawać typy, np. Para<String, String> p1 = new Para<String, String> ("Jan","Kowalski"); w wersji Java 7 wprowadzono operator <> (diamond operator): Para<String, String> p1 = new Para<> ("Jan","Kowalski"); Argumenty typu potrzebne w new są określane przez kompilator na podstawie typów argumentów konstruktora, a jeśli ich nie ma, to na podstawie typu argumentów podanych z lewej strony przypisania. W Javie 8 konkludowanie typów przy pomocy operatora <> poszerzono. Umożliwiono m.in. określenie ich przez kompilator nawet, gdy wyrażenie new nie ma ani lewej strony, ani argumentów konstruktora: ArrayList<String> metoda(arraylist<string> list){ list.add("a"); return list; System.out.println(metoda(new ArrayList<>())) ; //w Javie 8 wyprowadzi [a], wcześniej to był błąd kompilacji
25 Typy sparametryzowane 25 Argumentami typu nie mogą być typy proste, muszą je zastąpić typy opakowujące. Przy podawaniu argumentów konstruktora możemy podawać typy proste, zadziała wówczas autoboxing. Zastosowanie sparametryzowanej klasy Para umożliwia unikanie konwersji zawężających (jak przy dziedziczeniu po Object), bo kompilator zna argumenty typu i dopisuje za nas odpowiednie rzutowania: Para<String, Integer> pg = new Para<> ("Ala", 3); //autoboxing System.out.println(pg.getFirst() + " " + pg.getlast()); String name = pg.getfirst(); // bez konwersji! int m = pg.getlast(); // bez konwersji! pg.setfirst(name + " Kowalska"); pg.setlast(m+1); // autoboxing System.out.println(pg.getFirst() + " " + pg.getlast()); Wyjście: Ala 3 Ala Kowalska 4
26 Typy surowe i czyszczenie typów 26 W Javie - inaczej niż w C++ - po kompilacji dla każdego "szablonu" (typu sparametryzowanego) powstaje tylko jedna klasa (plik klasowy), współdzielona przez wszystkie konkretyzacje tego typu sparametryzowanego. import java.lang.reflect.*; class Para<S, T> { static int nr = 0; S first; T last; public static int getnr() { return nr; public Para(S f, T l) { first = f; last = l; nr++; public S getfirst() { return first; public T getlast() { return last; public void setfirst(s f) { first = f; public void setlast(t l) { last = l;
27 Typy surowe i czyszczenie typów 27 public class GenTest2 { public static void main(string[] args) { Para<String, Integer> p1 = new Para<>("Ala", 3); System.out.println(p1.getNr()); //1 Para<String, String> p2 = new Para<>("Ala","Kowalska"); System.out.println(p2.getNr()); //2 // Mamy tylko klasę Para surowego typu "Raw Type" Class p1class = p1.getclass(); System.out.println(p1Class); // Metodami refleksji możemy się przekonać, że // w definicji klasy Para typem fazy wykonania dla parametrów // jest Object "type erasure" - czyszczeniem typów Method[] mets = p1class.getdeclaredmethods(); // zwraca tablicę metod deklarowanych w klasie for (Method m : mets) System.out.println(m);
28 Typy surowe i czyszczenie typów 28 Po jego uruchomieniu uzyskamy następujący wydruk. 1 2 class Para public static int Para.getNr() public java.lang.object Para.getFirst() public java.lang.object Para.getLast() public void Para.setFirst(java.lang.Object) public void Para.setLast(java.lang.Object) Wydruk ten oznacza, że: jest tylko jedna klasa Para dla wszystkich konkretyzacji klasy sparametryzowanej Para<S, T>; typ wyznaczany przez tę klasę nazywa się typem surowym ("raw type"), z definicji klasy Para zniknęły wszystkie parametry typu i zostały zastąpione przez Object; ten mechanizm nazywa się czyszczeniem typów ("type erasure"), ponieważ jest tylko jedna klasa Para - zmienne reprezentowane przez pola statyczne są wspólne dla wszystkich instancji typu sparametryzowanego; zmienna nr jest wspólna dla Para<String, Integer> i Para<String, String> - dlatego zwiększa się w sposób ciągły (1, 2).
29 Generics - restrykcje 29 Przyjęte w Javie rozwiązanie (jedna klasa w fazie wykonania, czyszczenie typów) ma swoje zalety i wady. Do zalet zaliczyć można: mniejszą liczbę klas po kompilacji, zgodność kodu binarnego z kodem nie używającym "generics" ("czyszczenie typów" stanowi właśnie o kompatybilności kodów używających generics z kodami nie używającymi ich). W definicjach klas (i metod) sparametryzowanych nie do końca możemy traktować parametry typu jak zwykłe typy. Możemy: podawać je jako typy pól i zmiennych lokalnych, podawać je jako typy parametrów i wyników metod, dokonywać jawnych konwersji do typów oznaczanych przez nie (ale to będzie tylko ważne na etapie kompilacji, po to by uniknąć błędów niezgodności typów, natomiast nie uzyskamy w fazie wykonania faktycznych konwersji np. zawężających, no bo jak?), wywoływać na rzecz zmiennych oznaczanych typami sparametryzowanymi metody klasy Object (i ew. właściwe dla klas i interfejsów, które stanowią tzw. górne ograniczenia danego parametru typu).
30 Generics - restrykcje 30 Nie możemy (w definicjach sparametryzowanych klas i metod): tworzyć obiektów typów sparametryzowanych (new T() jest niedozwolone, no bo na poziomie definicji generics nie wiadomo co to konkretnie jest T), używać operatora instanceof ( z powodu j.w.), używać ich w statycznych kontekstach (bo statyczny kontekst jest jeden dla wszystkich różnych instancji typu sparametryzowanego), wywoływać metod z konkretnych klas i interfejsów, które nie są zaznaczone jako górne ograniczenia parametru typu (w najprostszym przypadku tą górną granicą jest Object, wtedy możemy używać tylko metod klasy Object).
31 Generics - restrykcje 31 Również użycie typów sparametryzowanych obarczone jest restrykcjami. Nie wolno np.: używać typów sparametryzowanych przy tworzeniu tablic (podając je jako typ elementu tablicy). Wynika to z istoty pojęcia tablicy oraz ze sposobu kompilacji generics. Tablica jest zestawem elementów tego samego typu (albo jego podtypu). Informacja o typie elementów tablicy jest przechowywana i JVM korzysta z niej w fazie wykonania, aby zapewnić, że do tablicy nie jest wstawiany element niewłaściwego typu (wtedy generowany jest wyjątek ArrayStoreException).Gdyby dopuścić tablice elementów typów sparametryzowanych kontrakt ten zostałby zerwany (bowiem w fazie wykonania nic nie wiadomo o konkretnych instancjach typów sparametryzowanych, zatem nie można zapewnić odpowiedniej dynamicznej kontroli typów). w obsłudze wyjątków (bo jest to mechanizm fazy wykonania),
32 Ograniczenia parametrów typu 32 Jednym ze sposobów zwiększania funkcjonalności generics Javy jest użycie (jawnych) ograniczeń parametrów typu. Dzięki temu w klasach i metodach sparametryzowanych możemy korzystać z metod, specyficznych dla podanych ograniczeń. Ograniczenie parametru typu określa zestaw typów, które mogą być używane jako argumenty typu (i podstawiane w szablonie w miejscu parametrów typu), a w konsekwencji zestaw metod, które mogą być wołane na rzecz zmiennych oznaczanych parametrami typu Ograniczenia parametru typu wprowadzamy za pomocą składni: ParametrTypu extends Typ1 & Typ2 & Typ3 &... & TypN gdzie: Typ1 - nazwa klasy lub interfejsu Typ2-TypN - nazwy interfejsów Uwaga: typy Typ1-TypN mogą być sparametryzowane, typy ograniczające nie mogą się powtarzać, w tym nie mogą występować powtórzenia dla typów sparametryzowanych TP<X> TP<Y> (ze względu na czyszczenie typów). W przypadku ograniczanych parametrów typu "type erasure" daje typ pierwszego ograniczenia. Np. w fazie wykonania, w kontekście class A <T extends Appendable>, T staje się Appendable.
33 Ograniczenia parametrów typu 33 Przykład public class NaturalNumber<T extends Number> { private T n; public NaturalNumber(T n) { this.n = n; public boolean iseven() { return n.intvalue() % 2 == 0; //...
34 Parametry uniwersalne (wildcards) W Javie ArrayList<Integer> i ArrayList<String> nie są podtypami ArrayList<Object>. Powstaje pytanie jak stworzyć metodę wypisującą zawartośc dowolnej listy ArrayList? Do tego służą parametry uniwersalne (wildcards) - oznaczenie "?". Są trzy typy takich parametrów: ograniczone z góry <? extends X> - oznacza "wszystkie podtypy X" ograniczone z dołu <? super X> - oznacza "wszystkie nadtypy X" nieograniczone <?> - oznacza "wszystkie typy" Notacja ta wprowadza do Javy wariancję typów sparametryzowanych. Typ sparametryzowany C<T> jest kowariantny względem parametru T, jeśli dla dowolnych typów A i B, takich, że B jest podtypem A, typ sparametryzowany C<B> jest podtypem C<A> (kowariancja - bo kierunek dziedziczenia typów sparametryzowanych jest zgodny z kierunkiem dziedziczenia parametrów typu) Kowariancję uzyskujemy za pomocą symbolu <? extends X>, co oznacza np. że List<? extends Number> jest nadtypem wszystkich typów sparametryzowanych, gdzie parametrem typu jest Number albo typ pochodny od Number. 34
35 Parametry uniwersalne (wildcards) 35 Typ sparametryzowany C<T> jest kontrawariantny względem parametru T, jeżeli dla dowolnych typów A i B, takich że B jest podtypem A, typ sparametryzowany C<A> jest podtypem typu sparametryzowanego C<B> (kontra - bo kierunek dziedziczenia jest przeciwny). Kontrawariancję uzyskujemy za pomocą symbolu <? super X>. Np. Integer jest podtypem Number, a List<Number> jest podtypem List<? super Integer>, wobec czego możemy podstawiać: List<? super Integer> list = new ArrayList<Number>(); Biwariancja oznacza równoczesną kowariancję i kontrawariancję typu sparametryzowanego Kowariancja typów sparametryzowanych umożliwia pisanie uniwersalnych metod (w rodzaju "wypisz dowolną kolekcję" albo "pokaż dowolną listę", Np. void showemployee(arraylist <? extends Pracownik> a) { //... Bez tego nie moglibyśmy np. jako argumentów przekazywać listy dyrektorów, kierowników, asystentów etc. ( bo między ArrayList<Pracownik> i ArrayList<Asystent> nie ma relacji nadtyp - podtyp).
36 Metody sparametryzowane i konkludowanie typów 36 Parametryzacji mogą podlegać nie tylko klasy czy interfejsy, ale również metody. Definicja metody sparametryzowanej ma postać: specyfikatordostępu [static] <ParametryTypu> typwyniku nazwa(lista parametrów) { // Argumenty typów (podstawiane w fazie kompilacji w miejsce parametrów, choćby po to by zapewnić zgodność typów oraz automatyczne konwersje zawężające) są określane na podstawie faktycznych typów użytych przy wywołaniu metody. Proces wyznaczania aktualnych argumentów typów nazywa się konkludowaniem typów (ang. type inferring). PRZYKŁAD. Poniższy program zawiera przykład sparametryzowanej metody wyznaczającej maksimum z tablicy elementów dowolnego typu pochodnego od Comparable. Konkretne argumenty typu (odpowiadające parametrowi T użytemu zarówno na liście parametrów metody, jak i jako typ jej wyniku) są konkludowane z wywołań.
37 Metody sparametryzowane i konkludowanie typów public class Metoda { public static <T extends Comparable<T>> T max(t[] arr) { T max = arr[0]; for (int i=1; i<arr.length; i++) if (arr[i].compareto(max) > 0) max = arr[i]; return max; public static void main(string[] args) { Integer[] ia = { 1, 2, 77 ; int imax = max(ia); // w wyniku konkluzji T staje się Integer Double[] da = {1.5, ; double dmax = max(da); // w wyniku konkluzji T staje się Double System.out.println(imax + " " + dmax); 37
Programowanie w Javie wykład 9 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące
1 Programowanie w Javie wykład 9 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 Barteczko,
Bardziej szczegółowoAplikacje w środowisku Java- wykład 6 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące Typy i metody sparametryzowane (generics) wildcards
1 Aplikacje w środowisku Java- wykład 6 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące Typy i metody sparametryzowane (generics) wildcards Treści prezentowane w wykładzie zostały oparte o: Barteczko,
Bardziej szczegółowoInterfejsy 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ółowoObszar 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ółowoPolimorfizm, 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ółowoLaboratorium 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ółowoKurs 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ółowoDokumentacja 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ółowoTypy uogólnione. Robert A. Kªopotek Wydziaª Matematyczno-Przyrodniczy. Szkoªa Nauk cisªych, UKSW
Typy uogólnione. Robert A. Kªopotek r.klopotek@uksw.edu.pl Wydziaª Matematyczno-Przyrodniczy. Szkoªa Nauk cisªych, UKSW 23.03.2017 Typy uogólnione (1/2) Typy uogólnione (generyczne) s to typy parametryzowane
Bardziej szczegółowoInterfejsy. 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ółowoWykł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ółowoAplikacje 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ółowoPolimorfizm 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ółowoJAVA 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ółowoJava - 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ółowoJava 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ółowoWykł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ółowoProgramowanie 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ółowoRozdział 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ółowoJava: 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ółowoKonstruktory. 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ółowoDefiniowanie 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ółowoWykład 2: Podstawy Języka
Wykład 2: Podstawy Języka 1.wprowadzenie 2.podstawy języka 3.sterowanie 4.inicjacja i sprzątanie 5.kontrola dostępu 6.dziedziczenie 7.polimorfizm 8.obsługa błędów 9.kolekcje obiektów 10.wejście i wyjście
Bardziej szczegółowoInformatyka 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ółowoAplikacje 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ółowoProgramowanie 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ółowoKurs 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ółowoWykł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ółowoPHP 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ółowoProgramowanie 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ółowoJava. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Bardziej szczegółowoKurs 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ółowoKurs 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ółowoKlasy 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ółowoInformacje 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ółowoJęzyki i metody programowania Java. Wykład 2 (część 2)
Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego
Bardziej szczegółowoProgramowanie 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ółowo1 Atrybuty i metody klasowe
1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich
Bardziej szczegółowoTypy 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ółowoPlatformy 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ółowoProgramowanie 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ółowoWykł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ółowo1. 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoDziedziczenie. 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ółowoEnkapsulacja, 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ółowoKurs 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ółowoTechnologie 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ółowoPodstawy 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ółowoProgramowanie 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ółowoInformatyka 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ółowoWykł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ółowoProgramowanie 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ółowoJAVA- wykład 2 Klasy
JAVA- wykład 2 Klasy 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/ C. S. Horstmann, G. Cornell,
Bardziej szczegółowoPodstawy Języka Java
Podstawy Języka Java Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania, w którym programy definiuje się za pomocą obiektów elementów łączących
Bardziej szczegółowoWykład 2 Wybrane konstrukcje obiektowych języków programowania (1)
MAS dr. Inż. Mariusz Trzaska Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) Zagadnienia o Podstawy o Kontrolowanie sterowania o Klasy o Interfejsy o Obsługa błędów o Pojemniki o System
Bardziej szczegółowoTEMAT : 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ółowoProgramowanie 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ółowoKurs 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ółowoWspółbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
Bardziej szczegółowoKlasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13
Klasy Klasa to grupa obiektów, które mają wspólne właściwości, a obiekt jest instancją klasy. Klasa w języku Java może zawierać: pola - reprezentują stan obiektu (odniesienie do pola z kropką), methods
Bardziej szczegółowoKlasa 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ółowoPodstawy i języki programowania
Podstawy i języki programowania Laboratorium 2 - wprowadzenie do zmiennych mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 23 października 2017 1 / 26 mgr inż. Krzysztof Szwarc Podstawy i
Bardziej szczegółowoDariusz 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ółowoDawid 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ółowoObiekt 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ółowoProgramowanie w Javie - wykład 2
Programowanie w Javie - wykład 2 Java-wprowadzenie (instrukcje sterujące) Klasy podstawy Pakiety Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN,
Bardziej szczegółowoKOTLIN. 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ółowoProgramowanie obiektowe
Programowanie obiektowe Laboratorium 3 i 4 - przypomnienie wiadomości o OOP na przykładzie Javy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 8 marca 2017 1 / 20 mgr inż. Krzysztof Szwarc
Bardziej szczegółowoProgramowanie 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ółowoSzablony 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ółowoPARADYGMATY 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ółowoKlasy 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ółowoPolimorfizm. 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ółowoJęzyk JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język
Bardziej szczegółowoWywoływanie metod zdalnych
Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia
Bardziej szczegółowoDziedziczenie. 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ółowoMultimedia 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ółowoDefinicje klas i obiektów. Tomasz Borzyszkowski
Definicje klas i obiektów Tomasz Borzyszkowski Podstawy Do tej pory używaliśmy klas jedynie po to, by zdefiniować metodę main(). Klasy mają znacznie szersze zastosowanie w Java. W OOP (także w Java) klasy
Bardziej szczegółowoPodstawowe części projektu w Javie
Podstawowe części projektu w Javie Pakiet w Javie to grupa podobnych typów klas, interfejsów i podpakietów. Pakiet w Javie może być wbudowany lub zdefiniowany przez użytkownika. Istnieje wiele wbudowanych
Bardziej szczegółowo1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Bardziej szczegółowo2. Składnia, środowisko i konwencje w Javie
Gdańsk, 2014 Ogólnie o Javie Środowisko Java jest językiem programowania, którego podstawowym celem jest realizacja zasady write once, run anywhere. Oznacza to możliwość wykonania tego samego programu,
Bardziej szczegółowoProgramowanie w środowisku graficznym- wykład 2 Java - Klasy
Programowanie w środowisku graficznym- wykład 2 Java - Klasy 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ółowo10. 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ółowoProgramowanie 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ółowoPodstawy 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ółowoProgramowanie 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ółowoJAVA. 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ółowoProgramowanie 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ółowoDziedziczenie. 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ółowoMetody sparametryzowane
Metody sparametryzowane Nie tylko klasy i pola można parametryzować. Parametry typu można zastosować również do pojedynczych metod. Podstawienie typu zostanie wykonane podczas wywołania metody. class Box
Bardziej szczegółowo.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ółowoAplikacje 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ółowoAplikacje w Javie- wykład 11 Wątki-podstawy
1 Aplikacje w Javie- wykład 11 Wątki-podstawy 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/ http://docs.oracle.com/javase/9/docs/
Bardziej szczegółowoPodstawy programowania obiektowego
Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie
Bardziej szczegółowoKlasy 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ółowoJę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ółowoProgramowanie 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ółowoTechniki 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