Wprowadzenie w świat obiektów

Cechy podejścia obiektowego:

  1. Wszystko jest obiektem
    np. dowolna zmienna mająca dane wewnętrzne (opis), ale i wykonująca żądania (pewne operacje na sobie)
    np. pies, budynek, usługi…
  2. Program/zbiór obiektów, które poprzez komunikaty mówią sobie nawzajem, co robić.
  3. Każdy obiekt posiada własną pamięć, na którą składają się inne obiekty.
    //każdy obiekt składa się z innych obiektów
    , czyli, np. złożoność (obiekt grupuje już istniejące obiekty)
    (umożliwia to ukrywanie złożoności programu za prostotą obiektów)
  4.  Każdy obiekt posiada swój typ/klasę.
    (obiekt to instancja klasy/typu)
    (najistotniejsza cechą wyróżniająca klasę są zapytania/komunikaty, jakie można do niej wysyłać)
  5.  Wszystkie obiekty danego typu/klasy mogą otrzymywać te same komunikaty.

 

!!! Obiekt ma stan (dane wewnętrzne, opis), zachowanie (metody) i tożsamość (unikalny adres pamięci) !!!

 

Słowa typ można używać naprzemiennie ze słowem klasa

Dane składowe charakteryzują daną klasę.

Dostępne zachowania klasy, to inaczej jej możliwości (tzw. metody).

Przykładowy rysunek obrazujący obiekt:

 

 

 

Przykład utworzenia referencji do pewnej zmiennej obj typu Obiekt oraz przypisania do niej nowej instancji. Następnie wywołanie metody/(funkcji) z danego obiektu:

Obiekt obj = new Obiekt();
obj.metoda();

 

Przykład zobrazowania definicji w języku UML:

Rozgraniczenia w klasach (specyfikatory dostępu):

  • public (publiczny)
  • private (definicje są dostępne tylko dla twórcy danej klasy wewnątrz jej funkcji składowych)
  • protected ( tak jak private, tylko, że klasy dziedziczące z naszej klasy mają dostęp do elementów typu protected)
  • “domyślny” = “pakietowy” (do składowych pakietowych mogą się odwoływać inne klasy z tego samego pakietu, poza pakietem są widziane jako prywatne)

 

Kompozycja – jest to tworzenie nowych klas na podstawie już istniejących

Agregacja – kompozycja dynamiczna ( następuje w trakcie działania programu)

 

Dziedziczenie, czyli:

Dziedziczenie jest to ogółem wykorzystanie klasy już istniejącej ( klon, sklonowanie) i wykonanie na powstałej kopii wymaganych przeróbek i rozszerzeń

 

Dziedzicząc, używamy słowa kluczowego extends, czyli rozszerzać.

Przesłonięcie jest to zmiana zachowania istniejącej już metody bazowej.

 

Polimorfizm. Przykład:

void zrobCos ( Figura f ) {
f.wymaż();
//...
f.narysuj();
}


Okrag o = new Okrag();
zrobCos(o);

 

Graficzne przedstawienie polimorfizmu:

 

 

 

 

 

Kompilator i system czasu wykonania zajmują się szczegółami polimorfizmu, i są one zaimplementowane w język.

 

Kontenery, przykłady:

List – służy do przechowywania sekwencji

Map – tak jak tablice asocjacyjne, kojarzy jedne obiekty z innymi

Set – do przechowywania niepowtarzających się elementów

… kolejki, drzewa, stosy, itd…

 

Rzutowanie w dół – czyli, np. przy wstawianiu, wyjmowaniu z kontenera elementów, które domyślnie są reprezentantami klasy Object
//wyjątki, występują, np. przy rzutowaniach na niewłaściwy typ

Typy parametryzowane  są to klasy, które kompilator automatycznie dostosowuje do pracy z podobnymi typami-parametrami (<klasa/typ>)
Parametryzacja, np.:
np. ArrayList<Figura> figury = new ArrayList<Figura>();

Rezerwacja pamięci następuje poprzez słowo kluczowe “new”, czyli tworzenie dynamicznego egzemplarza/obiektu. Następuje wyłącznie na stercie! (nie stosuje stosu)

Czas życia obiektu jest wyznaczony poprzez odśmieczacz pamięci (garbage collector), który automatycznie wykrywa, który obiekt nie jest już używany, a następnie niszczy go (zwalnia przydzieloną mu pamięć)

Obsługa wyjątków – służy eliminowaniu błędów w programie

Słowa współbieżność (concurrency) można używać naprzemiennie ze słowem wielowątkowość (multithreading)

 

Java i Internet:

Występująca warstwa pośrednia (middleware) służy przeniesieniu przetwarzania zadania na inne maszyny po stronie serwera.

CGI (Common Gateway Interface – uniwersalny interfejs komunikacyjny)
//dostarczany przez wszystkie serwery WWW

/* Mono – implementacja platformy .NET w systemach Linux */

 

Program to ogółem definicje obiektów reprezentujących pojęcia z przestrzeni problemu (a nie kwestie związane z reprezentacją komputerową).