Pozwala to na wykorzystanie go w wielu innych programach...

Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.
W sekcji interfejsu umieszcza się wówczas definicję typu, a w sekcji implementacji definicje metod. Zaletą takiego rozwiązania jest ukrycie szczegółowego kodu, którego modyfikacja nie jest potrzebna. Na wydruku 6.1 przedstawiona jest opracowana w ten sposób popra-wiona wersja typu obiektowego TPunkt.
Wydruk 6.1. Moduł Punkty.pas definiujący typ obiektowy reprezentujący punkt unit Punkty;
interface
type
PPunkt = ^TPunkt;
TPunkt = object
constructor Init(xPoc, yPoc: integer);
destructor Done; virtual;
procedure Pokaz; virtual;
procedure kryj; virtual;
procedure Rysuj; virtual;
function PodajX: integer;
function PodajY: integer;
function Widoczny: Boolean;
procedure PrzesunDo(xNowe, yNowe: integer); virtual;
procedure Przesun (xDelta, yDelta: integer); virtual;
private
x, y: integer;
Wid : Boolean;
end;
implementation
uses Graph;
constructor TPunkt.Init(xPoc, yPoc: integer);
begin
x := xPoc;
y := yPoc;
Wid := false;
end;
destructor TPunkt.Done;
Rozdział 6. ♦ Programy obiektowe
221
begin
if Wid then kryj;
end;
procedure TPunkt.Pokaz;
begin
Wid := true;
Rysuj;
end;
procedure TPunkt. kryj;
var
Color: word;
begin
Color := GetColor;
SetColor(GetBkColor);
Wid := false;
Rysuj;
SetColor(Color);
end;
procedure TPunkt.Rysuj;
begin
PutPixel(x, y, GetColor);
end;
function TPunkt.PodajX: integer;
begin
PodajX := x;
end;
function TPunkt.PodajY: integer;
begin
PodajY := y;
end;
function TPunkt.Widoczny: Boolean;
begin
Widoczny := Wid;
end;
procedure TPunkt.PrzesunDo(xNowe, yNowe: integer);
var
BylWidoczny: Boolean;
begin
BylWidoczny := Wid;
if BylWidoczny then kryj;
x := xNowe;
y := yNowe;
if BylWidoczny then Pokaz;
end;
procedure TPunkt.PrzesunO(xDelta, yDelta: integer);
begin
PrzesunDo(x+xDelta, y+yDelta);
end;
end.
222
Turbo Pascal i Borland C++. Przykłady
Definicja typu TPunkt składa się z domyślnej sekcji publicznej obejmującej metody i sekcji prywatnej opisującej pola. Dostęp do pól poza modułem jest możliwy tylko za pomocą metod. Wartości pól x, y i Wid udostępniają proste metody PodajX, PodajY
i Widoczny. Metody PrzesunDo i PrzesunO przesuwają punkt reprezentowany przez obiekt — pierwsza do pozycji o określonych współrzędnych, druga do pozycji przesuniętej względem jego położenia bieżącego o określony przyrost poziomy i pionowy.
Konstruktor Init inicjalizuje obiekt, nadając wartości początkowe wszystkim jego polom. Destruktor Done usuwa punkt z ekranu, gdy obiekt jest niszczony3. Metody Done, Rysuj, PrzesunDo i PrzesunO są wirtualne; można więc będzie je przedefiniować w typach pochodnych, gdy zajdzie taka potrzeba.
Klasa w C++ i jej moduł definiujący
Kluczową rolę w programowaniu obiektowym w języku C++ pełni klasa, stanowiąca odpowiednik typu obiektowego w Turbo Pascalu. Definicja klasy przypomina definicję struktury. Składowymi klasy są pola i funkcje, a poziom dostępu do nich określają specyfikatory dostępu (słowa kluczowe zakończone dwukropkiem): t private (prywatne) — dostępne tylko w klasie, w której są zdefiniowane, t protected (chronione) — dostępne również w klasach pochodnych, t public (publiczne) — dostępne w całym programie.
Brak specyfikatora dostępu oznacza, że składowe klasy są prywatne. Jak widać, mechanizm określania dostępu jest w C++ bardziej precyzyjny niż w Turbo Pascalu.
Nazwa konstruktora w C++ jest zawsze taka sama jak nazwa klasy, a nazwa destruk-tora również, z tym że jest poprzedzana znakiem tyldy (~). Obie funkcje nie zwracają żadnej wartości, nawet typu void, dlatego nie określa się ich typu.
Deklaracje funkcji wirtualnych poprzedza się w definicji klasy słowem kluczowym virtual. Funkcje udostępniające wartości pól są bardzo proste, toteż zazwyczaj definiuje się je, poprzedzając ich deklaracje słowem kluczowym inline lub umieszczając po nich właściwy kod funkcji [6, 14]. W miejscu wywołania takiej funkcji kompilator nie generuje żadnego kodu wywołującego, lecz udostępnia bezpośrednio wartość po-la, co przyśpiesza wykonanie programu.
WÄ…tki
Powered by wordpress | Theme: simpletex | © Jak ciÄ™ zÅ‚apiÄ…, to znaczy, że oszukiwaÅ‚eÅ›. Jak nie, to znaczy, że posÅ‚użyÅ‚eÅ› siÄ™ odpowiedniÄ… taktykÄ….