Abstrakcja danych i programowanie obiektowe w C++  -  czΩ╢µ I

WstΩp

Niniejszy cykl artyku│≤w chcia│bym po╢wiΩciµ zagadnieniom abstrakcji danych i programowania obiektowego w jΩzyku C++.

BΩd▒ w nim zawarte takie tematy jak tworzenie typ≤w abstrakcyjnych-klas, przeci▒┐anie operator≤w i funkcji, dziedziczenie i polimorfizm. MyslΩ, ┐e ka┐dy programista powinien poznaµ jΩzyk C++, gdy┐ po pierwsze jest to je┐yk zawadowych programist≤w, po drugie wytycza pewne szlaki w dziedzinie programowania obiektowego.

Abstrakcja danych

Nalezy rozr≤┐niaµ programowanie obiektowe od abstrakcji danych. Programowanie obiektowe pojawia siΩ wtedy, gdy korzystamy z dziedziczenia i polimorfizmy klas, natomiast klasa sama w sobie jest tylko nowym typem tworzonym przez programistΩ.

JΩzyk C++ dostarcza masΩ udogodnie± w tworzeniu w│asnych typ≤w. Najwa┐niejszym z nich jest mo┐liwo╢µ tworzenia klas. Klasa jest nowym typem, kt≤ry mo┐e byµ traktowany podobnie jak kt≤ry╢ z typ≤w standardowych, np int. Klasa sk│ada siΩ generalnie z interfejsu i implementacji. Interfejs to czΩ╢µ klasy widoczna na zewn▒trz, kt≤ra umo┐liwia jej funkcjonalno╢µ. Implementacja to wewnΩtrzna czΩ╢µ klasy, kt≤ra wykonuje "czarn▒ robotΩ",. Przyjrzyjmy siΩ prostej klasie CLicznik (Liter▒ C poprzedzam ka┐d▒ nazwΩ klasy - takie moje przyzwyczajenie):

class CLicznik 
{
 unsigned int Wartosc;
public:
 void Zwieksz();
 unsigned int DajWartosc();
};

DziΩki tej klasie stworzyli╢my sobie nowy typ - CLicznik. Narazie typ zosta│ tylko zadeklarowany (tzn. zdefiniowana zosta│a jego struktura). Trzeba jeszcze zdefiniowaµ cia│a wszystkich metod tej klasy. Celowo u┐y│em s│owa metoda zamiast funkcja, poniewa┐ funkcje klasy nazywamy metodami, a dane klasy (np. Warto╢µ) polami danych. Wszystkie sk│adniki klasy (pola i metody) nazywamy sk│adowymi klasy.
Co mo┐emy powiedzieµ o klasie CLicznik? Ot≤┐ na jej interfejs sk│adaj▒ siΩ dwie funkcje: Zwieksz, kt≤ra zwieksza stan licznika i DajWartosc, kt≤ra zwraca stan licznika.

Wa┐na rzecz, kt≤▒ umo┐liwiaja klasy to tzw. enkapsulacja danych, czyli ukrywanie pewnych czΩ╢µi kodu przed u┐ytkownikiem klasy. Jak pewnie zauwa┐yli╢cie deklaracja klasy CLicznik dzieli siΩ na dwie czΩ╢ci: przed s│owem public i po nim. Ot≤┐ to, co zadeklarowane w czΩ╢ci przed public mog│oby byµ poprzedzone s│owem private: , poniewa┐ stanowi ono prywatn▒ czΩ╢µ klasy, tzn. tak▒ do kt≤rej dostΩp maj▒ tylko metody klasy, a nie maj▒ do niego dostΩpu inne funkcje programu. Stanowi to o bezpiecze±stwie danych przechowywanych w czΩ╢ci prywatnej klasy, poniewa┐ np. ┐adna postronna funkcja nie mo┐e zmieniµ warto╢ci naszego licznika (mozna to zrobiµ tylko i wy│▒cznie za pomoca jego metod).

Poni┐ej znajduje siΩ szkielet "pe│nej" klasy w C++:

class NazwaKlasy
{
[ 
[private:]
deklaracje prywatnych p≤│ danych i metod
]
public:
deklaracje publicznych metod i p≤l, w szczeg≤lno╢ci 
konstruktor≤w, destruktor≤w i przeci▒┐enie operator≤w
};

Fragmenty w nawiasach kwadratowych s▒ opcjonalne.

Tak wygl▒da│by wstΩpny opis klasy. W nastΩpnej czΩ╢ci zajmΩ siΩ dok│adniejszym om≤wnieniem takich zagadnie± jak: konstruktor, destruktor, przeci▒┐anie operator≤w.

Do us│yszenia.

Mr Bin
delfisajt@poczta.onet.pl
www.polbox.com/t/tplsoft

 

 Copyright © 2000 PTiK. Wszystkie prawa zastrze┐one.
 Kopiowanie tekst≤w w ca│o╢ci lub we fragmentach bez zgody redakcji i autor≤w zabronione.