Programowanie w języku Delphi

Abstract

  • 2010-10-31 18:27
  • 1 komentarz
  • 2299 odsłon
  • Oceń ten tekst jako pierwszy
abstract - słowo kluczowe języka Delphi

Klauzulą abstract może być opatrzona dowolna metoda w klasie. Wówczas taka metoda staje się metodą abstrakcyjną.

Metody abstrakcyjne są takimi metodami, które nie posiadają implementacji ? jedynie deklaracje w klasie. I wystarczy, że zapamiętasz to zdanie. Deklarowanie metod abstrakcyjnych wiąże się z dziedziczeniem ? projektant klasy bazowej zaznacza, że klasy potomne muszą zawierać metodę o danej nazwie.

Przykład: jeden programista w zespole tworzy klasę TBasePlayer, w której definiuje abstrakcyjną metodę Play (metoda jest w klasie, ale w kodzie nie znajduje się jej implementacja). Drugi programista tworzy klasę TSpiderMan, która dziedziczy po TBasePlayer i która będzie musiała zawierać metodę Play, jednak we wszystkich klasach potomnych metoda ta może wyglądać inaczej.

Metodę abstrakcyjną definiuje się z użyciem słowa kluczowego abstract:

  TBasePlayer = class
  // jedynie definicja metody
    procedure Play; virtual; abstract;
  end;


Taki kod zostanie skompilowany bez problemu, mimo że kod nie zawiera implementacji metody Play. Uwaga! Metoda abstrakcyjna musi być jednocześnie wirtualna lub dynamiczna (nie może być statyczna), w przeciwnym przypadku kompilator wyświetli komunikat o błędzie: [Error] Unit1.pas(38): Abstract methods must be virtual or dynamic.

Teraz można zadeklarować klasę potomną, która musi zawierać metodę Play:

  TSpiderMan = class(TBasePlayer)
  end;


Jeżeli jej nie zadeklarujemy, podczas próby utworzenia instancji klasy kompilator poinformuje o błędzie ([Error] Unit1.pas(103): Constructing instance of 'TSpiderMan' containing abstract method 'TBasePlayer.Play'):

var
  Player : TSpiderMan;
begin
  Player := TSpiderMan.Create;
  Player.Free;
end;


Możemy w tym momencie zadeklarować metodę Play w klasie TSpiderMan:

  TSpiderMan = class(TBasePlayer)
    procedure Play; override;
  end;


Jak będzie wyglądać implementacja klasy TSpiderMan? To już zależy od programisty:

var
  Player : TSpiderMan;
begin
  Player := TSpiderMan.Create;
  Player.Play;
  Player.Free;
end;
 
{ TSpiderMan }
 
procedure TSpiderMan.Play;
begin
  ShowMessage('Metoda Play z klasy TSpiderMan');
end;


Uogólniając, trzeba zapamiętać, że metody abstrakcyjne nie posiadają implementacji.

Zobacz też:

1 komentarz

Brak avatara
początkujący 2013-10-22 23:48

Mam pytanie
Metody abstrakcyjne stosuje się głównie/tylko w programach, które pisze więcej osób? (czyli że wyznaczam innym z jakich nazw metod mają korzystać) i też dzięki temu sam mogę odwoływać się w klasie do metod jeszcze nie istniejących(tych co zostaną napisane później) ?
no i pytanie wywodzące się z pierwszego, czy jeśli ktoś pisze prosty program(dokładniej mówiąc jest jedynym jego programistą) czy stosowanie metod abstrakcyjnych ma jakiś sens i jeśli ma to jaki ?
mam nadzieję że nie napisałem zbyt mętnie
wielki dzięki za odp.