Paradygmaty programowania obiektowego

uzupełnić:

  • różnice między programowaniem obiektowym i innymi paradygmatami
  • podać przykłady zastosowania najważniejszych cech

Paradygmaty programowania obiektowego (prawdopodobieństwa i różnice w stosunku do innych podejść).

Paradygmat: zbiór mechanizmów, jakich programista używa, pisząc program, i o to, jak ów program jest następnie wykonywany przez komputer. paradygmat programowania to ogół oczekiwań programisty wobec języka programowania i komputera, na którym będzie działał program.

W programowaniu obiektowym program to zbiór porozumiewających się ze sobą obiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje

  • powiązanie danych (czyli stanu) z operacjami na nich (czyli poleceniami) w całość, stanowiącą odrębną jednostkę — obiekt.
  • mechanizm dziedziczenia, czyli możliwość definiowania nowych, bardziej złożonych obiektów, na bazie obiektów już istniejących.

Różnice między klasą (struktura klasy), a obiektem.

Klasa to opis zawartości obiektu.

Dla przykładu rozwazmy klase pozwalajaca tworzyc obiekty zawierajace informacje o paczkach, które na przykład trzeba przewiezc ciezarówka. Paczek jest wiecej niz moze pomiescic ciezarówka i chodzi o to, by załadowac na ciezarówke jak najwiecej paczek tak, aby suma wartosci tych paczek była maksymalna. Dla kazdej paczki musimy zatem dysponowac nastepujacymi danymi: długosc podstawy, szerokosc podstawy, wysokosc i oczywiscie wartosc paczki. Pierwsza wersja klasy Paczka (bez projektowania metod) moze wygladac nastepujaco

class Paczka 
{
  int dlugosc;
  int szerokosc;
  int wysokosc;
  int wartosc;
 
  public int ObliczObj()
   {
       return dlugosc*szerokosc*wysokosc
   }
}

Obiekt klasy Paczka mozemy utworzyc w dwóch etapach:
  • Najpierw trzeba zadeklarowac referencje do obiektu klasy Paczka:
Paczka telewizor;

Referencja czyli inaczej odnosnik identyfikuje dany obiekt. Mozemy sobie wyobrazic, ze referencja podaje miedzy innymi adres w pamieci, gdzie jest umieszczony obiekt, jego wielkosc itp. Po wykonaniu powyzszej instrukcji zmienna telewizor posiada wartosc null, czyli nie zawiera referencji do zadnego obiektu.
Aby utworzyc nowy obiekt, nalezy wykorzystac operator new:

telewizor = new Paczka();

Operator new tworzy nowy obiekt klasy Paczka, a referencja do niego jest przypisywana zmiennej telewizor (przy pomocy operatora =). Od tego momentu zmienna telewizor nie posiada juz wartosci null, lecz odnosi sie do pewnego obiektu klasy Paczka.
Obie powyzsze instrukcje mozna połaczyc i utworzyc obiekt klasy Paczka w jednym etapie:

Paczka telewizor = new Paczka();

Kazdy obiekt posiada własna kopie pól zadeklarowanych w klasie.Dostep do tych pól mozna uzyskac przy pomocy operatora ”.”. (kropka).
Ustawienie wartosci wszystkich pól dla obiektu, do którego referencja jest zmienna telewizor wyglada nastepujaco:

telewizor.dlugosc = 150;
telewizor.szerokosc = 80;
telewizor.wysokosc = 120;
telewizor.wartosc = 6000;

Obiektów danej klasy mozna utworzyc dowolnie duzo. Dla przykładu utworzymy jeszcze jeden obiekt klasy Paczka:

Paczka pralka = new Paczka();
pralka.dlugosc = 70;
pralka.szerokosc = 50;
pralka.wysokosc = 130;
pralka.wartosc = 5000;

Jeszcze raz podkreslmy, ze kazdy obiekt klasy Paczka ma swoja własna kopie pól zdefiniowanych w klasie.


Przykłady zastosowania najważniejszych cech języków obiektowych.

abstrakcja
Każdy obiekt w systemie służy jako model abstrakcyjnego "wykonawcy", który może wykonywać pracę, opisywać i zmieniać swój stan, oraz komunikować się z innymi obiektami w systemie, bez ujawniania, w jaki sposób zaimplementowano dane cechy.
Enkapsulacja
Czyli ukrywanie implementacji, hermetyzacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój "interfejs", który określa dopuszczalne metody współpracy. Pewne języki osłabiają to założenie, dopuszczając pewien poziom bezpośredniego (kontrolowanego) dostępu do "wnętrzności" obiektu. Ograniczają w ten sposób poziom abstrakcji.
Polimorfizm
Referencje i kolekcje obiektów mogą dotyczyć obiektów różnego typu, a wywołanie metody dla referencji spowoduje zachowanie odpowiednie dla pełnego typu obiektu wywoływanego. Jeśli dzieje się to w czasie działania programu, to nazywa się to późnym wiązaniem lub wiązaniem dynamicznym. Niektóre języki udostępniają bardziej statyczne (w trakcie kompilacji) rozwiązania polimorfizmu - na przykład szablony i przeciążanie operatorów w C++.
Dziedziczenie
Porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy. W typowym przypadku powstają grupy obiektów zwane klasami, oraz grupy klas zwane drzewami. Odzwierciedlają one wspólne cechy obiektów.
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License