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.