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
|