/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Hvad bruges "abstract" til?
Fra : Michael


Dato : 09-01-02 16:54

Hej i kloge hoveder,

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.


/michael



 
 
Thomas Rose (09-01-2002)
Kommentar
Fra : Thomas Rose


Dato : 09-01-02 18:44

Hej Michael,

"Michael" <michael@danfamily.org> wrote in message
news:3c3c677b$0$5482$edfadb0f@dspool01.news.tele.dk...
> Hej i kloge hoveder,
>
> 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.

Så vidt jeg ved bruger du "abstract" nøgleordet i forb. med klasser og deres
metoder. Du kan erklære en metode "abstract" (og typisk også "virtual") på
en klasse, for derved at angive, at klassen ikke selv implementerer metoden,
men at klasser der nedarver fra denne klasse selv skal sørge for at
implementere metoden. Om "abstract" anvendes i andre tilfælde, ved jeg ikke.

Cheers,
Thomas



Toke Eskildsen (10-01-2002)
Kommentar
Fra : Toke Eskildsen


Dato : 10-01-02 17:27

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

Michael (11-01-2002)
Kommentar
Fra : Michael


Dato : 11-01-02 16:03

Tak skal i havde, så blev jeg lidt klogere.

/md



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste