Michael says in dk.edb.programmering.pascal:
> Jeg sider og kigger lidt i noget Delphi materiale og har stødt på ordet
> 'abstract' et par gange uden nogen forklaring, og derfor spørger jeg jer, om
> i ved hvad en abstract klasse er og hvad den bruges til, evt. nogle links.
Et klassisk eksempel er at lave et program der kan vise
forskellige former på skærmen: Firkanter, cirkler og trekanter.
Jeg har Java i hovedet lige nu, så det kan være jeg roder lidt i
syntaksen:
Man definerer en abstrakt superklasse, lad os kalde den Shape.
I denne klasse angiver man en abstrakt metode der hedder
drawShape(wheretoDraw: TCanvas);
Derefter laver man nogle konkrete implementationer (Square,
Circle og Triangle), der arver fra Shape og implementerer
metoden drawShape.
Vi kan så lave en datastruktur der indeholder objekter af typen
Shape og vide at metoden drawShape eksisterer for disse
objekter. Altså anvende polymorfi.
var
myShapes: array of Shape;
begin
SetLength(myShapes, 4);
myShapes[0]:= Square.Create(10, 10, 30, 40);
myShapes[1]:= Circle.Create(20, 20, 25);
myShapes[2]:= Triangle.Create(5, 50, 30, 30, 20, 10);
myShapes[3]:= Triangle.Create(40, 0, 30, 40, 45, 65);
...
for i:= 0 to Length(myShapes)-1 do
myShapes[i].drawShape(myCanvas);
...
end;
Vi kunne også gøre dette ved at lave Shape konkret og lade den
indeholde en konkret metode drawShape, der så blot skulle gøre
ingenting.
Fordelen ved at erklære klassen & metoden abstrakt er
1) Man (eller lige så sandsynligt: Dem man arbejder sammen med)
kommer ikke til at lave instanser af Shape. Man får ikke lov
af compileren.
2) Når der nedarves fra Shape vil compileren brokke sig hvis man
ikke husker at lave en implementation af drawShape.
--
Toke Eskildsen <URL:
http://www.daimi.au.dk/~darkwing/>