Bjarke Walling Petersen wrote:
> Undskyld, men vil du evt. forklare dette lidt nærmere? - især
> "objektorienteret abstraktionslag" :)
Hvis vi holder os til 2D som jeg kender bedre, så er her et eksempel:
Procedural implementation:
void draw_line(int x1, int y1, int x2, int y2) { ... }
void draw_rect(int x1, int y1, int x2, int y2) { ... }
void draw_circle(int x, int y, int r) { ... }
osv.
Objektorienteret abstraktionslag:
struct Figure {
virtual void draw();
};
struct Line : Figure {
Line(int x1, int y1, int x2, int y2)
: x1(x1), y1(y1), x2(x2), y2(y2)
{}
virtual void draw() {
draw_line(x1, y1, x2, y2);
}
private:
int x1, y1, x2, y2;
}
struct Rect : Figure {
Rect(int x1, int y1, int x2, int y2)
: x1(x1), y1(y1), x2(x2), y2(y2)
{}
virtual void draw() {
draw_rect(x1, y1, x2, y2);
}
private:
int x1, y1, x2, y2;
}
osv.
Som du kan se, så ligger hele implementationen i det procedurale
lag, som du så smider en objektorienteret abstraktion ind over. Og
som du også kan se, så fylder det objektorienterede en hel del mere
end hvis du bare holdt dig til den procedurale implementation.
[...]
> Men du ret i det med kommunikationen - det er faktisk en del af problemet
> - alle funktionerne skal gerne kunne tilgå de samme variabler.
Netop. Det kunne jeg også forestille mig der ville være problemet i en
3D tegning. De forskellige objekter i modellen er ikke så afkoblede som
de er i 2D. Afkoblet handler her om, hvor meget objekterne skal vide
om hinanden for at kunne tegne sig selv. Det er simpelt i 2D - de tegner
bare ovenpå hinanden. I 3D skal de tage hensyn til alle mulige andre
ting, og det ødelægger den adskillelse af funktionerne som man netop
ellers gerne vil opnå ved at bruge objektorienteret programmering.
[...]
> Men egentlig behøver jeg jo ikke at grupere funktionerne - jeg kan nøjes
> med at gruppere dem vha. deres navn. Det ville blot være en smule lettere
> at arbejde med på den anden måde.
Lyder rigtigt. Jeg vil også sige, at det er bedre at få det til at
virke i første omgang og så senere gøre mere objektorienteret end
den anden vej rundt
-Claus