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 wątków
Typy danych Typy prymitywne Typy numeryczne: stało przecinkowe: 8bit byte (?),16-bit short, 32-bit int i 64-bit long Zmienno przecinkowe: 32-bit float i 64-bit double Typ znakowy (2 bajty): char Typ binarny: boolean (true/false) Typy Obiektowe Tablice: Point myp[] = new Point[10]; (bezpieczeństwo) (to jest obiekt) np. myp.length Napisy: String str; (to jest obiekt)
Operatory Operators postfix Operator Precedence Precedence expr++ expr-- unary ++expr --expr +expr -expr ~! multiplicative * / % additive + - shift << >> >>> relational < > <= >= instanceof equality ==!= bitwise AND & bitwise exclusive OR ^ bitwise inclusive OR logical AND && logical OR ternary? : assignment = += -= *= /= %= &= ^= = <<= >>= >>>=
Operacje Warunkowa: Pętle if (warunek_logiczny){ Ciąg instrukcji } for (inicjalizacja; warunek; dodatkowa instrukcja){ Ciąg instrukcji } for (Obiekt s : kolekcja) { ciąg instrukcji; } if (warunek_logiczny){ Ciąg instrukcji } else { Ciąg instrukcji } while (warunek_logiczny){ } do { ciąg instrukcji; } while (warunek_logiczny);
Zasady panujące w Javie Jeden plik to jedna klasa (publiczna) Nazwy klas i nazwy plików muszą być identyczne (!!!) Nazwy klas piszemy dużą literą Nazwy zmiennych i metod piszemy małą literą, jeśli nazwy wielowyrazowe to nie używamy łączników tylko sklejamy wyrazy począwszy od dużej litery np. zmienna: imiepracownika
Organizacja programu Programy składają się z pakietów (package) Każda klasa powinna należeć do pakiety, jeśli nie to pakiet domyślne Każdy pakiet w systemie plików reprezentowany jest przez katalog Pakiety można zagnieżdżać co odpowiada tworzeniu podkatalogów Kompilacja powoduje zamianę plików *.java na pliki *.class (z zachowaniem struktury katalogów) Pliki *.class można łączyć tworząc plik jar Plik jar to zwykłe archiwum zip Dodatkowe zewnętrzne biblioteki ustawiane poprzez zmienną CLASPATH
Organizacja programu Podział na pakiety plików Organizacja
Programowanie obiektowe a Java Oprócz typów prymitywnych wszystko jest obiektem!!! Obiekt to zbiór (zestaw) danych uzupełniony o zestaw funkcji (zwanych metodami) przeznaczonych do operacji na tych danych patrz struct w C lub record w Pascalu
Programowanie obiektowe Enkapsulacja Abstrakcja Polimorfizm Dziedziczenie
Programowanie obiektowe Enkapsulacja Dane w obiekcie schowane są za zbiorem funkcji. Dane opisują stan Metody opisują zachowanie obiektu Z zewnątrz mamy jedynie dostęp do zachowania. Stan ukryty jest za metodami
Programowanie obiektowe Abstrakcja Zestaw metod (czyli zachowanie) są zdefiniowane poprzez klasę obiektu. Wiemy jak dany obiekt będzie sią zachowywał, bo klasa obiektu jest niezmienna.
Programowanie obiektowe Polimorfizm Działanie metod (zachowanie) zależne od implementacji, możliwość redefiniowania działania metod UWAGA: W Javie wszystkie metody są wirtualne (virual) Innymi słowy: taka sama wiadomość wysłana do różnych obiektów prowadzi do różnych zachowań, zależących od natury obiektów odbierających wiadomość
Programowanie obiektowe Dziedziczenie Na podstawie już utworzonych klas definiowanie nowych, bardziej szczegółowych klas. Tworząc obiekt B pozwala na przejęcie funkcjonalności obiektu bazowego A i rozszerzenie jego funkcjonalności
Programowanie obiektowe Klasa a obiekt Klasa szablon opisujący zawartość obiektu, definiuje jego funkcjonalność (kody źródłowe metod) oraz pola (zmienne) i ich typy Obiekt rzeczywisty twór utworzony na bazie klasy. Klasa Obiekt
Programowanie obiektowe Klasa a obiekt
Konstruktor Konstruktor to metoda uruchamiana przetworzeniu obiektu. Służy inicjalizacji pój obiektu Pola obiektu, Zmienne definiujące jego stan Konstruktor
Konstruktor Konstruktor wywoływany jest tylko podczas tworzenia obiektu słówko new
Gdzie jest konstruktor
Programowanie obiektowe Do obiektów odwołujemy się przez referencje Referencja to ulepszony wskaźnik, wskazujący adres w pamięci RAM danego obiektu Wskaźnik
ziedziczenie Bezpośredni dostęp do pól obiektu Dostęp jedynie do metod obiektu
Tworząc Pracownika musimy stworzyć obiekt osoba. Osoba nie ma konstruktora domyślnego, Więc wywołujemy jawnie konstruktor klasy bazowej Dziedziczenie W przypadku konfliktu dostęp do pól obiektu poprzez słowo kluczowe this Polimorfizm Zmieniamy działanie metody wypisz() Zgodnie z konwencją dodać adnotację @Override (choć nie wymagane)
Dziedziczenie Ponieważ dziedziczymy to Pracownik jest też obiektem klasy Osoba
Dziedziczenie Wywołanie Wypisz obiektu klasy Pracownik Która metoda zostanie wywołana? Z klasy Osoba czy Pracownik
Dziedziczenie Wywołanie Wypisz obiektu klasy Pracownik Która metoda zostanie wywołana? Z klasy Osoba czy Pracownik
Dziedziczenie Metoda wypisz klasy osoba Można jednak wewnątrz klasy pochodnej wywołać metodę klasy bazowej przez super Tak powstaje rekurencja wywołamy samych siebie
Dziedziczenie i implementacja W Javie dziedziczenie jedno bazowe (nie można dziedziczyć po więcej niż jednej klasie) Można implementować intrfejsy (dowolną liczbę interfejsów) Interfejs określa jedynie listę metod publicznych dostępnych w klasie go implementującej. Zachowuje się jak klasa bazowa ale definiuje jedynie deklaracje metod klasy
Implementacja Pracownik jest IstotaZywa Stając się IstotaZywa mam dostęp jedynie do metod wypisz i jakdlugozyje
Rzutowanie Dobrze Źle
Modyfikatory dostępu Access Levels Modifier Class Package Subclass World Public Y Y Y Y protected Y Y Y N (no modifier) Y Y N N private Y N N N
Klasy abstrakcyjne Skrzyżowanie klas z interfejsami Używamy jak zwykłej klasy (dziedziczenie) ale nie można stworzyć instancji klasy. Wymusza na programiście własnoręczne zaimplementowanie określonej funkcjonalności.
static i final Dla metod final oznacza że metoda nie może być pokryta (override) Dla pól final oznacza że pole nie może ulec zmianie po inicjalizacji (const). Dla klas final oznacza że po klasie nie można dziedziczyć Nie wolno bo ClassA jest final Nie wolno bo a jest final Nie wolno bo geta() jest final
static i final Dla metod static oznacza że metoda jest związana z klasą a nie obiektem (nie ma dostępu do pól obiektu) (troche jak programowanie strukturalne) Dla pól static oznacza że pole jest związane z klasą a nie obiektem. Dla klas brak, chociaż
Klasy zagnieżdżone Tak nie wolno (Klasy statycznie nie mają dostępu do pól klasy zewnętrznej) Tak nie wolno (brak instancji klasy nadrzędnej)
Klasy anonimowe Możliwość definiowania klasy w miejscu jej użycia bez określania jej nazwy. Klasy anonimowe są deklarowane i inicjalizowane jednocześnie Klasy anonimowe muszą rozszerzać albo implementować jeden i tylko jeden interfejs Ponieważ klasy anonimowe nie mają nazwy, więc można je użyć tylko raz
Klasy anonimowe
Enumeratory Enumeratory typ wyliczeniowy. enum (stosowany gdy chcemy przedefiniować określoną listę wyboru np. dni tygodnia, dostępne opcje itp.) Rozszerzamy klasę abstrakcyjną Użycie enumeratora
Enumeratory Instrukcja SWITCH CASE Uwaga!!! Poniżej Javy 7.0 nie można Stosować switch case dla String ów, jedynie dozwolone typy prymitywne i wyliczeniowe
Enumeratory Enumerator jest obiektem więc może mieć pola i metody: