250 likes | 404 Views
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)
E N D
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
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
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
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 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 encounteredin the execution of theprogram and destroyed each time the program exits the blockin which it occurs • A freestoreobject, which is created using the n e w operator and destroyed using thed e l e t e operator • A nonstatic member object, which is created as a member of another class object andcreated and destroyed when the object of which it is a member is created anddestroyed • An array element, which is created and destroyed when the array of which it is an elementis created and destroyed • A local static object, which is created the first time its declaration is encountered inthe 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 theprogram’’ and destroyed once at the termination of the program • A temporary object, which is created as part of the evaluation of an expression anddestroyed at the end of the full expression in which it occurs This list is roughly sorted in order of importance. The following subsections explain thesevariousways of creating objects and their uses.