|
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
|