Języki obiektowe
Programowanie obiektowe
Założeniem programowania obiektowego jest jak najmocniejsze odzwierciedlenie rzeczywistości i modelowanie oprogramowania zgodny ze sposobami postrzegania świata przez człowieka.
- Elementy świata rzeczywistego oraz zachodzące w nim relacje przedstawiamy za pomocą obiektów.
- Każdy obiekt ma swoje stany określone przez wartości atrybutów/pól (parametrów) oraz dostępne metody (operacje/procedury, które może wykonywać) - analogicznie do obiektów świata rzeczywistego, które mają pewną charakterystykę (parametry - dane składowe) i zachowują się w określony sposób (mają takie same możliwe zachowania/możliwości). Obiekt to skomplikowana "zmienna", która przechowuje dane, ale na żądanie może także wykonywać na sobie pewne operacje.
- Obiek jest wyposażony w "pamięć", w której mogą występować inne obiekty. Czyli nowe obiekty mogą być zbudowane z wielu różnych obiektów.
- Program obiektowy to zestaw obiektów, ktore wzajemnie się komunikują, wysyłając do siebie żądania, przez wywoływanie swoich metod (wewnętrznych funkcji należących do konkretnych obiektów).
- Definiujemy grupy obiektów o wspólnych cechach/parametrach i funkcjonalnościach (KLASY). Klasa obiektów określa typ grupy obiektów, które posiadają takie same parametry - atrybuty/pola i funkcje - metody.
- Klasa to definicja grupy obiektów, a obiekt danej klasy to instancja - wystąpienie tej klasy.
- Utworzony obiekt danej klasy - instancja klasy - może zostać
jednoznacznie odróżniony od wszystkich innych obiektów. W Javie każdy obiekt
jest umieszczany w pamięci na tzw. stercie pod unikatowym adresem.
PRZYKŁADY KLAS I OBIEKTÓW:
klasa SamochódOsobowy
Klasa to definicja zbioru obiektów o takich samych atrybutach (cechach) i metodach (funkcjach). Klasa to "szablon" według którego mogą być utworzone obiekty danej klasy.
arybuty:- marka
- kolor
- liczba miejsc dla kierowcy i pasażerów
metody:
- uruchomSilnik()
- ustawBieg( int nrBiegu )
- zamknijOkno( int idOkna )
- zahamuj()
Przykłady instancji (obiektów) klasy SamochódOsobowyObiekt danej klasy to konkretny egzemplarz (instancja/wystąpienie) tej klasy - np. samochód określonej marki o określonym numerze nadwozia
- Syrena 105, kremowy - Nr nadwozia CNHW65KGHS
- Fiat 126p, czerwony - Nr nadwozia PF125MJDGZE4
- W kontekście programowania dane i procedury dostępne w obiekcie są ze sobą ściśle powiązane.
- W programowaniu zorientowanym obiektowo klasa (typ obiektów) to abstrakcyjny typ danych. Można tworzyć zmienne takiego typu (konkretne egzemplarze obiektów danej klasy).
- W programie obiektowym obiekty komunikują się ze sobą, wywołując swoje
metody w celu wykonania określonych zadań.
Cechy typowe dla programowania obiektowego- hermetyzacja danych - w programie obiektowym dostęp do składowych
elementów klasy lub obiektu jest ograniczony za pomocą dobrze
określonego interfejsu (gdzie interfejs, to zestaw metod służących do
odczytywania i zapisywania danych oraz uruchamiania i zatrzymywania
określonych akcji). Java ma mocno rozbudowane mechanizmy określania
dostępu do poszczególnych klas, obiektów, atrybutów i
metod.
class SamochódCiężarowy { private int szerokośćŁadowni; // Szerokość ładowni - zmienna prywatna - nie dostępna dla obiektów zewnętrznych public int getSzerokośćŁadowni() { // Publicznie dostępny interfejs umożliwiający odczytanie szerokości ładowni return szerokośćŁadowni; } } - dziedziczenie - mechanizm umożliwiający dziedziczenie /
wywodzenie nowych klas z klas już istniejących, wraz z przejmowaniem ich
atrybutów i metod. Obiekt klasy potomnej jest jednocześnie obiektem
klasy dziedziczonej (nadrzędnej w drzewie hierarchii dziedziczenia).

Na pokazanym wyżej diagramie obiekt klasy SamochódSpalinowy jest jednocześnie obiektem klasy Pojazd, obiektem klasy PojazdKołowy itd.
Czyli w rzeczywistości obiekt klasy SamochódSpalinowy jest "wyposażony" w następujący zestaw atrybutów i metod:

- abstrakcja - możliwość zredukowania właściwości opisywanego
obiektu do najbardziej podstawowych, a następnie tworzenia wielu
poziomów definicji obiektu o coraz większym stopniu
szczegółowości.
Przykład klasy zdefiniowanej jako abstrakcyjna. Klasie abstract musi wystąpić przynajmniej jeden element abstrakcyjny. Element abstrakcyjny to element bez implementacji - jedynie "szablon" - określający, że w każdej klasie nie abstrakcyjnej odziedziczonej z tej klasy abstract musi wystąpić zaimplementowana metoda o takiej samej nazwie, zwracanym typie oraz takich samych parametrach wywołania. Jeśli wszystkie elementy kasy są abstrakcyjne, wówczas taka klasa jest interfejsem a nie klasą i nie może występować jako abstract class, lecz musi występować jako interface.

- polimorfizm - wielopostaciowość; w Javie występują dwa typy
polimorfizmu - polimorfizm klas i polimorfizm metod;
polimorfizm klas
Klasa może dziedziczyć właściwości wielu Interfejsów. Interfejs określa zestaw atrybutów i metod, które dana klasa musi implementować. Interfejsy reprezentują różne typy obiektów. Klasa może implementować wiele interfejsów - może więc być reprezentowana przez różne typy. Na pokazanym niżej diagramie obiekt klasy LotokotMalezyjski implementującej zaprezentowane interfejsy może być traktowany jako obiekt typu FruitEatingAnimal, RunningAnimal, TreeClimbingAnimal oraz SoaringAnimal.
polimorfizm metod
W pokazanym niżej przykładzie każdy obiekt klasy PojazdSpalinowy jest "wyposażony" w trzy różne metody zatankujPaliwo(). Wszystkie metody zatankujPaliwo() muszą tak samo się nazywać i muszą zwracać taki sam typ wartości (w tym wypadku wszystkie muszą być typu void - nie zwracają żadnej wartości). Natomiast mogą różnić się pod względem ilości i typu parametrów wywołania metody.class PojazdSpalinowy extends Pojazd implements PojazdSilnikowy { ... public void zatankujPaliwo( ) { // Metoda bez argumentu - zatankuj do pełna [...implementacja metody...] } public void zatankujPaliwo( float ilośćPaliwa ) { // Metoda w której określona jest liczba litrów paliwa do zatankowania [...implementacja metody...] } public void zatankujPaliwo( int ilośćProcentPojemnościBaku ) { // Metoda w której określony jest procent pojemności baku // np. 50 oznacza połowę baku [...implementacja metody...] } }
- hermetyzacja danych - w programie obiektowym dostęp do składowych
elementów klasy lub obiektu jest ograniczony za pomocą dobrze
określonego interfejsu (gdzie interfejs, to zestaw metod służących do
odczytywania i zapisywania danych oraz uruchamiania i zatrzymywania
określonych akcji). Java ma mocno rozbudowane mechanizmy określania
dostępu do poszczególnych klas, obiektów, atrybutów i
metod.