Prawo Farnsdicka - wydarzenia przechodzą ze złych w tragiczne, po czym proces ten cyklicznie powtarza się.
Java - Terminologia obiektowa
Obiekt  |   Klasa  |   Komunikat

Obiekt

Obiekt to element (materialny lub abstrakcyjny) wyróżniony z otoczenia, będący konkretyzacją (instancją, wystąpieniem, egzemplarzem, egzemplifikacją) pewnej klasy.

Każdy obiekt posiada nazwę, strukturę, właściwości (pola) i metody (zachowanie).

W środowisku programowania obiektowego nazwa obiektu oznacza unikalny odnośnik (referencję) do obiektu, dzięki której można się jednoznacznie do niego odwoływać. Odnośnik do obiektu może być implementowany na różne sposoby, np. jako jego wskaźnik (adres).

Strukturę obiektu określają jego pola, a stan określają wartości tych pól.
Atrybuty odpowiadają danym przechowywanym przez zmienne skojarzone z obiektem (zmienne wewnętrzne), które nazywane są polami.

Zachowanie obiektu zdefiniowane jest poprzez skojarzone z nim metody czyli usługi.
Usługi obiektu realizowane są przez podprogramy (funkcje i procedury), które są ściśle skojarzone z danymi (polami, atrybutami, własnościami) wewnątrz obiektu.

Pola i metody nazywane są składowymi obiektu.

Ukryte (niewidoczne) składowe tj. takie, do których inne obiekty nie mogą się odwoływać bezpośrednio, nazywane są prywatnymi i służą do utrzymywania wewnętrznej spójności obiektu. Składowe obiektu ogólnie dostępne nazywane są publicznymi. Obiekty współdziałają ze sobą wykorzystując składowe publiczne.

Obiekt



Mechanizm języka obiektowego pozwalający:
  • ściśle powiązać dane i podprogramy wewnątrz obiektu w postaci pól i metod,
     
  • ukrywać niektóre składowe poprzez zadeklarowanie ich jako prywatne,
     
nazywany jest hermetyzacją.

Obiekty, których pewne pola są również obiektami (lub referencjami do obiektów) nazywamy obiektami kompozytowymi. Tworzenie obiektów kompozytowych nazywa się agregacją (grupowaniem).
 

Klasa

Klasa jest abstrakcją zbioru obiektów posiadających identyczne pola i metody. Klasa reprezentuje pojęcie, którego obiekt jest konkretnym. Klasa stanowi definicję obiektowego typu danych i zawiera specyfikację pól (właściwości) oraz implementację metod (usług, wykonania operacji, a więc zachowania obiektu).

Konkretyzacja



Tworzenie instancji tj. egzemplarza obiektu określonej klasy nazywamy konkretyzacją. Klasa jest zatem prototypem, wzorcem tworzenia nowych wystąpień obiektów. Poszczególne egzemplarze obiektów danej klasy są zawsze rozróżnialne (posiadają nazwę: tożsamość). Mogą ponadto - ale nie muszą - różnić się wartościami atrybutów. Definicja klasy zawiera na ogół specjalne metody nazywane konstruktorami, których zadaniem jest utworzenie egzemplarza obiektu i zainicjowanie jego pól. W niektórych obiektowych językach programowania wywołanie konstruktora jest obowiązkowe, w innych może być wykonane w sposób niejawny. Pewne języki obiektowe wymagają definiowania i jawnego wywoływania metod zwanych destruktorami, których zadaniem jest niszczenie obiektu i odzyskiwanie zajmowanych przez niego zasobów systemowych.

Związek pomiędzy klasami, w którym klasa przejmuje strukturę albo zachowanie zdefiniowane w innej klasie nazywamy dziedziczeniem. Klasa dziedzicząca nazywana jest klasą potomną (subklasą, podklasą). Klasa (rodzic) po której dziedziczy dana klasa nazywana jest klasą bazową (superklasą, klasą nadrzędną, rodzicielską).

Dziedziczenie



Relacja dziedziczenia umożliwia tworzenie wielopoziomowej hierarchii klas. W hierarchii tej jedna klasa może mieć wiele klas potomnych bezpośrednich i pośrednich. Jeśli w hierarchii dziedziczenia dana klasa ma zawsze tylko jedną klasę bazową, to mówimy o dziedziczeniu jednokrotnym (prostym, jednobazowym). Jeśli klasa ma kilka niezależnych klas bazowych, to mamy do czynienia z dziedziczeniem wielokrotnym (mnogim, wielobazowym). Nie wszystkie obiektowe języki programowania wspierają dziedziczenie wielokrotne. W takich przypadkach dowolna klasa może mieć co najwyżej jedną klasę rodzicielską.

Dziedziczenie wielokrotne



Klasę, która stanowi bazę dla pewnej podhierarchii nazywamy klasą główną. Jeśli cała hierarchia klas posiada klasę główną to nazywamy ją klasą podstawową (pierwotną). Jest to najbardziej ogólna klasa w hierarchii klas.

Mechanizm dziedziczenia wprowadza pewne zależności:
  • klasa potomna przejmuje składowe klas przodków (pola, metody), może je zmienić lub przedefiniować zachowując nazwę (przesłanianie) oraz dodać nowe własne, tworząc klasę bardziej wyspecjalizowaną; taki zabieg nazywamy specjalizacją; klasy nadrzędne są bardziej ogólne od swoich podklas; ten związek nazywany jest generalizacją;
     
  • dowolne wywołanie metody dopuszczalna na danej klasie może być zastosowana na klasie podrzędnej dowolnego poziomu; dotyczy to również obiektów będących wystąpieniami odpowiednich klas; w klasach potomnych metoda dziedziczona może być redefiniowana zachowując swoją nazwę;
     
  • egzemplarz (instancja) podklasy jest jednocześnie wystąpieniem wszystkich jej klas nadrzędnych bezpośrednich i pośrednich; oznacza to, że obiekt może być argumentem operacji wszędzie tam, gdzie oczekiwany jest egzemplarz którejkolwiek klasy nadrzędnej.
     
Klasa bez egzemplarzy tj. taka, której instancji (obiektu) nie można utworzyć nazywana jest klasą abstrakcyjną. Klasy takie definiowane są w celu dalszej specjalizacji. Klasy abstrakcyjne powstają przez zadeklarowanie w nich metod abstrakcyjnych, tj. takich, które nie są zaimplementowane (klasa zawiera tylko deklarację metody czyli nagłówek, ale nie ma ciała metody). Implementacji dostarczają dopiero klasy potomne. Klasa, która może posiadać egzemplarze obiektów nazywana jest klasą konkretną.

Klasa abstrakcyjna



Klasa, która nie może posiadać podklas nazywana jest klasą finalną. Klasy finalne definiuje się w celu zapewnienia bezpieczeństwa. Definicja klasy nie może ulegać dalszym zmianom poprzez specjalizację gwarantując takie jej zachowanie jak w pierwotnej postaci. Cecha finalności może przysługiwać nie całej klasie, ale niektórym jej składowym. W przypadku pól znaczy to, że pole jest stałą. Metoda finalna to taka, która nie może być przesłonięta w klasach potomnych.

Klas finalna



Pewne składowe klasy tj. pola lub metody mogą być związane z klasą jako całością, a nie z konkretnymi jej egzemplarzami (obiektami). Składowe takie nazywamy statycznymi. Można się do nich odwoływać poprzez nazwę klasy (nie musi istnieć żaden obiekt klasy). Składowe niestatyczne są nazywane instancyjnymi.

Składowe statyczne



Składowe statyczne mogą się odwoływać tylko do innych składowych statycznych. Składowe instancyjne mogą odwoływać się zarówno do innych składowych instancyjnych jak i statycznych.

Klasy, których zadaniem jest realizowanie agregacji poprzez grupowanie innych obiektów w postaci list, kolekcji itd. nazywane są klasami kontenerowymi, a obiekty tych klas - kontenerami. Klasy kontenerowe dostarczają metod służących do operowania na kolekcjach obiektów składowych (dodawanie, usuwanie, zmiana kolejności itp.). Obiekty składowe nazywane są komponentami.

Oprócz agregacji i dziedziczenia relację między klasami i ich wystąpieniami mogą być tworzone poprzez mechanizm zagnieżdżania polegający na definiowaniu jednej klasy, nazywanej klasą zagnieżdżoną, w obrębie innej nazywanej klasą zawierającą (zagnieżdżającą). Zagnieżdżona klasa niestatyczna (instancyjna) nazywana jest klasą wewnętrzną.

Dziedziczenie, agregacja i zagnieżdżenie



Każde wystąpienie klasy zewnętrznej tworzy wystąpienia klas wewnętrznych. Do klasy zagnieżdżonej można odwoływać się w obrębie klasy zagnieżdżającej oraz poza nią za pomocą odwołania kwalifikowanego postaci:

	NazwaKlasyZagnieżdżającej.NazwaKlasyZagnieżdżonej

Klasa zdefiniowana w ciele metody nazywana jest klasą lokalną. Klasy lokalne nie są dostępne poza metodami w których zostały zdefiniowane.

Klasa lokalna


 

Komunikat

Obiekty mogą na siebie oddziaływać wpływając bezpośrednio na wartości (stan) pól lub żądając realizacji udostępnianych metod (usług). Żądanie usługi nazywane jest komunikatem. Komunikat składa się z następujących części (ostatnia jest opcjonalna):
  • wskazania obiektu-odbiornika, do którego kierowany jest komunikat (żądana jest usługa); najczęściej poprzez odwołanie się do nazwy obiektu, tj. do nazwy zmiennej przechowującej obiekt lub referencję do niego;
     
  • wskazania udostępnianej przez odbiornik usługi (metody), której wykonania żąda obiekt-nadajnik; realizowane poprzez wywołanie metody odbiornika o określonej nazwie;
     
  • dodatkowych informacji określających sposób realizacji żądanej usługi; dodatkowe dane przekazywane są przez nadajnik do metody odbiornika realizującej żądaną usługę jako parametry wywołania.
     

Komunikat



Przetworzenie komunikatu może zmienić stan obiektu-odbiornika, a do obiektu-nadajnika może być przesłana wartość powrotna (odpowiedź) - wynik wykonania metody odbiornika.

Metodę, która zmusza wywołującego do czekania na jej zakończenie, aby móc realizować kolejne instrukcje, nazywamy blokującą. W tym przypadku wywołujący czeka po prostu na rezultat działania metody.

Metodę, która zwraca sterowanie natychmiast po jej wywołaniu nazywamy nieblokującą. Metody nieblokujące realizowane są często jako metody typu callback (zwrotne). Metody typu callback jako jeden z parametrów otrzymują referencję (adres) wywołującego, aby po wykonaniu zadania lub w trakcie jego realizacji mieć możliwość komunikowania się z wywołującym.
« wstecz   dalej »