Języki programowania obiektowego Klasy i obiekty Andrzej Chybicki Andrzej.Chybicki@eti.pg.gda.pl Pok. 744
Klasy Klasa jest typem zmiennej, jest to typ własny, definiowany przez programistę. Programista sam definiuje co się znajduje w danej klasie (pola i funkcje) Wystąpieniem zmiennej typu klasa nazywany instancją danej klasy lub inaczej obiektem Definiowanie własnych klas-typów sprawia, że program jest bardziej zbliżony do modelowanego problemu, ułatwia programiście pisanie programu i rozwiązywanie zagadnień Struktura programu odpowiada strukturze problemu
Klasy a struktury Struktura jest klasą w której wszystkie pola i funkcje (ang. members) są jawne (public)
Dostęp do zmiennych klasy Public members Private members
Defining a member function
Konstruktory Aby utworzyć instancje danej klasy (obiekt) należy zainicjować zmienną typu klasa. Konstruktor jest jawną funkcją danej klasy inicjującą w odpowiedni sposób pola danej klasy Konstruktor zawsze jest jawny Konstruktor nie jest niczym innym jak zwyklą funkcją (zawsze jawną) danej klasy zwracającą obiekt typu klasy w jakiej jest zaimplementowany
Sposoby inicjalizacji obiektu
I jeszcze trochę o konstruktorach W praktyce warto definiować więcej niż jeden konstruktor danej klasy Ułatwia to inicjalizacje obiektów Tworzy klasy wszechstronniejszymi Przyśpiesza programowanie
Przykład
Możliwe wywołania
Zmienne statyczne Zmienna statyczna ma dokładnie jedno wystąpienie w całym programie ( w przeciwieństwie do zmiennej zwykłej, która ma każdą kopię dla danego obiektu) Zmienna statyczna jest deklarowana w ciele klasy i jest własnością klasy – NIE OBIEKTU!! Zmienne statyczne „zastępują” w programowaniu obiektowym zmienne globalne Aby skorzystać ze zmiennej statycznej nie trzeba inicjować obiektu danej klasy w której ta zmienna jest zadeklarowana
Funkcje Constant
Funkcje Const (Constant member functions) Nie zmieniają zmiennych na których operują Służą do odczytywania zmiennych z obiektu zapewniając ich niezmienność podczas odczytywania
Destruktory Konstruktor inicjuje obiekt, stwarza dla niego środowisko pracy zapewniając zasoby niezbędne do dzialania obiektu. Obiekty niektórych klas mogą wymagać stosunkowo dużej ilości pamięci (i nie tylko pamięci) niezbędnej dla dzialania obietku. Np. Dane przestrzenne, dane z baz danych itp… Gdy obiekt przestaje być potrzeby należy te zasoby zwolnić
Destruktory – ciąg dalszy Destruktory są funkcjami należącymi do danej klasy, które „niszczą” obiekt, zwalniając tym samym zasoby przez niego używane. Destruktory są często używane niejawnie kiedy obiekt przestaje być w programie użyteczny Tylko w nielicznych przypadkach programista zmuszony jest wywolywać destruktory bezpośrednio.
Przykład użycia desktruktora Klasa Table podczas inicjacji alokuje pamięć potrzebną do przetrzymywania „swoich” elementów W samej klasie Table trzymany jest jedynie wskaźnik do miejsca w którym same dane są przechowywane Podczas gdy obiekt staje się nam niepotrzebny chcemy tę pamięć zwolnić
Desktruktory - przyklad Podczas gdy obiekt staje się nam niepotrzebny chcemy mieć pewność ze zasoby pamięcia z których korzysta Table są też „uwolnione”. Desktruktory mają taką samą jak konstruktor poprzedzony znakiem „~” Używanie techniki desktruktorów jest szczególnie ważne w przypadku operowania na dużej ilości danych
Przypadki konstruowania i dekonstruowania obiektów w C++ A named automatic object, which is created each time its declaration is encountered in the execution of the program and destroyed each time the program exits the block in which it occurs A freestore object, which is created using the n e w operator and destroyed using the d e l e t e operator A nonstatic member object, which is created as a member of another class object and created and destroyed when the object of which it is a member is created and destroyed An array element, which is created and destroyed when the array of which it is an element is created and destroyed A local static object, which is created the first time its declaration is encountered in the execution of the program and destroyed once at the termination of the program A global, namespace, or class static object, which is created once ‘‘at the start of the program’’ and destroyed once at the termination of the program A temporary object, which is created as part of the evaluation of an expression and destroyed at the end of the full expression in which it occurs This list is roughly sorted in order of importance. The following subsections explain these various ways of creating objects and their uses.