Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska
Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych, która definiuje programy za pomocą obiektów elementów łączących: stan (dane = atrybuty), zachowanie (procedury = metody). Program obiektowy to zbiór obiektów komunikujących się pomiędzy sobą w celu wykonywania zadao. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane.
Cechy obiektowych języków programowania https://www.c-sharpcorner.com/uploadfile/d0a1c8/object-oriented-programming-in-c-sharp-
Cechy obiektowych języków programowania Abstrakcja - każdy obiekt w systemie służy jako model abstrakcyjnego "wykonawcy", który może wykonywad pracę, opisywad i zmieniad swój stan, oraz komunikowad się z innymi obiektami w systemie, bez ujawniania, w jaki sposób zaimplementowano dane cechy. Enkapsulacja (hermetyzacja) - ukrywanie implementacji. Zapewnia, że obiekt nie może zmieniad stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu.
Cechy obiektowych języków programowania Polimorfizm - referencje i kolekcje obiektów mogą dotyczyd obiektów różnego typu, a wywołanie metody dla referencji powoduje 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++.
Cechy obiektowych języków programowania Dziedziczenie - porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych.
Pojęcia klasy i obiektu Obiekt - podstawowe pojęcie wchodzące w skład paradygmatu obiektowości w analizie i projektowaniu oprogramowania oraz w programowaniu. struktura zawierająca dane i metody klasy, czyli funkcje służące do wykonywania na tych danych określonych zadao. Każdy obiekt ma trzy cechy: tożsamośd, czyli cechę (atrybuty) umożliwiającą jego identyfikację i odróżnienie od innych obiektów stan, czyli aktualny stan danych składowych zachowanie (ang. behaviour), czyli zestaw metod wykonujących operacje na tych danych.
Pojęcia klasy i obiektu Klasa - zbiór obiektów wyróżniających się wspólnymi cechami takimi jak struktura i zachowanie; częściowa lub całkowita definicja dla obiektów Klasa to zdefiniowanie własnego typu danych - wymyślony na potrzeby danego programu.
Składniki klasy Deklaracja klasy informuję kompilator: o tym, co oznacza nazwa klasy, jakie pola zawiera klasa (jakie informacje przechowuje), jakie metody zawiera klasa (co potrafi robid).
Tworzenie obiektów Obiekt to indywidualne wystąpienie klasy. Definiowanie nowego obiektu wygląda tak samo, jak definiowanie zwykłej zmiennej. Do usuwania obiektu służy polecenie delete ( detelet obiekt )
Definicje metod składowych klasy Wewnątrz klasy Na zewnątrz klasy
Enkapsulacja sposoby ukrywania informacji Elementy klasy mogą byd: prywatne (private) - składniki klasy dostępne są tylko i wyłącznie w klasie i poprzez funkcje składowe klasy. publiczne (public)- składniki klasy dostępne zarówno dla funkcji składowych klasy jak również poza klasą. chronione (protected) - składniki klasy nie dostępne poza klasą, jednak dostępne dla klas pochodnych. Domyślnie wszystkie pola i metody klasy są prywatne!
Enkapsulacja sposoby ukrywania informacji Jeśli składnik klasy jest prywatny, żadna funkcja oraz metoda nie należąca do klasy nie ma do niego dostępu!
Dostęp do danych i metod składowych klasy obiekt - do danej składowej klasy można odwoład się poprzez operator. obiekt.skladnik obiekt.metoda() wskaźnik - do danej składowej obiektu wskazanego przez wskaźnik można odwoład się poprzez operator -> wskaznik -> skladnik wskaznik -> metoda() referencja - do danej składowej obiektu znanego z referencji można odwoład się poprzez operator. referencja.skladnik referencja.metoda()
Dostęp do danych i metod składowych klasy - przykład
Dostęp do danych i metod składowych klasy Jak najwięcej elementów klasy powinno byd prywatnych! Do elementów prywatnych klasy mamy dostęp za pomocą tzw. metod dostępu.
Dostęp do danych i metod składowych klasy Zwykle metody dostępu zaczynają się od słów get i set
Konstruktor i destruktor Konstruktor służy do inicjalizowania zmiennych wewnętrznych klasy ma taką samą nazwę jak nazwa klasy nie zwraca żadnej wartości (jest typu void) Destruktor służy do zwalniania miejsca w pamięci zarezerwowanego dla obiektu nazwa = ~ + nazwa klasy Jeżeli nie deklarujemy konstruktora klasy, to kompilator automatycznie tworzy konstruktor domyślny, który nie pobiera żadnych parametrów. Analogicznie, jeżeli nie zadeklarujemy sami destruktora, to kompilator zrobi to za nas.
Konstruktor i destruktor - przykład
Wskaźnik this Wskaźnik this wskazuje na obiekt, dla którego została wywołana metoda. Wskaźnika this nie można modyfikować. Prawie zawsze użycie delete na this jest poważnym błędem
Wskaźnik this
Wskaźnik this porównywanie obiektów
Dziedziczenie klas Dziedziczenie to mechanizm umożliwiający wykorzystanie nowych klas w oparciu o stare klasy. Dzięki mechanizmowi rzutowania możliwe jest interpretowanie obiektu klasy tak, jakby był obiektem klasy z której się wywodzi. Umożliwia to skonstruowanie szeregu klas wywodzących się z tej samej klasy i korzystanie w przejrzysty i spójny sposób z ich wspólnych możliwości.
Dziedziczenie klas Klasa bazowa klasa, z której dziedziczy klasa pochodna Klasa pochodna klasa, która dziedziczy po klasie bazowej Klasa pochodna może korzystad z funkcjonalności klasy bazowej i z założenia powinna rozszerzad jej możliwości (poprzez dodanie nowych metod, lub modyfikację metod klasy bazowej). http://www.egrafik.pl/kurs-c-plus-plus/7.1.php
Dziedziczenie klas Składnia: operator_widoczności: public - oznacza, że dziedziczone elementy (np. zmienne lub funkcje) mają taką widocznośd jak w klasie bazowej. public -> public protected -> protected private -> private Protected - oznacza, że dziedziczone elementy publiczne zmieniają się w chronione: public -> protected protected -> protected private -> private private - oznacza, że wszystkie elementy klasy bazowej zmieniają się w prywatne: public -> private protected -> private private -> private brak operatora - oznacza, że domyślnie zostanie wybrany operator private.
Dziedziczenie klas
Literatura Bruce Eckel, Thinking in C++, Helion