19. marts 2010 - 15:58Der er
10 kommentarer og 1 løsning
Principielt spørgsmål (OOP-relateret)
Halløj,
Jeg sidder med et projekt, hvor jeg arbejder med to pakker: Den ene udgør et framework realiseret ved en enkelt klasse, og den anden udgør den specifikke funktionalitet, der anvender dette framework. Strukturen er meget enkel: Frameworket består essentielt af en enkelt klasse, der udfører en række operationer og uddelegerer arbejde til den specifikke kode i den første pakke.
To spørgsmål:
1) Bør jeg anvende et interface i den første pakke, som en klasse i den anden pakke så implementerer, således at min styrende klasse i den første pakke kan tilgå den specifikke funktionalitet i den anden, der så er specificeret i den implementerende klasse (Strategy Pattern?) - eller bør jeg lade min styrende klasse være abstrakt, så en klasse til specifik funktionalitet i den anden pakke kan nedarve fra og færdiggøre den (har denne teknik et navn?)? Jeg vil gætte på det første, men når der er tale om så enkel en struktur, er jeg ikke helt sikker på, hvad der er mest hensigtsmæssigt...
2) Jeg har behov for at lade instanser af den styrende klasse i den første pakkes omgivelser informere om visse begivenheder i løbet af eksekveringen - der er kun tale om information og ikke uddelegering af arbejde. Kan en række events klare det, eller er der en smartere løsningsmodel?
Digitalt forsvar handler ikke blot om det militære men om at beskytte civilsamfundets funktion, påpeger Thomas Nissen i Dansk Erhverv.
Slettet bruger
19. marts 2010 - 15:59#1
Rettelse:
Strukturen er meget enkel: Frameworket består essentielt af en enkelt klasse, der udfører en række operationer og uddelegerer arbejde til den specifikke kode i den første pakke.
Til:
Strukturen er meget enkel: Frameworket består essentielt af en enkelt klasse, der udfører en række operationer og uddelegerer arbejde til den specifikke kode i den ANDEN pakke.
Der er flere muligheder afhaengig af hvor taet tingene haenger sammen.
A) framework = abstrakt basis klasse implementation = konkret sub klasse der extender basis klasse og implementerer de abstrakte metoder
B) framework = klasse + interface, hvor klassens constructor tager et argument af interface typen implementation = klasse som implementerer interfacet
Hvis det er IsA saa vaelg A. Hvis det er HasA saa vaelg B. Hvis du er i tvivl saa vaelg B.
Synes godt om
Slettet bruger
19. marts 2010 - 16:17#3
Argh, så går der humanisme i datalogien :) Jeg vil dog mene, at det ligger tættest på "is a", og da funktionaliteten før nævnt er MEGET enkel, vil jeg fortsætte med den fremgangsmåde. Tak.
Hvad med 2) Jeg har behov for at lade instanser af den styrende klasse i den første pakkes omgivelser informere om visse begivenheder i løbet af eksekveringen - der er kun tale om information og ikke uddelegering af arbejde. Kan en række events klare det, eller er der en smartere løsningsmodel?
Skal du have information fra N instanser af en klasse X over i den klasse som er emnet i #1?
Synes godt om
Slettet bruger
19. marts 2010 - 16:34#6
package.my.framework - public abstract class Superclass - public abstract String[] myMethod(String arg);
package.my.implementation - public class Subclass extends Superclass - public String[] myMethod(String arg);
Da har jeg behov for at definere en handling i package.my.implementation.Subclass, der udføres ved bestemte situationer i metoder under package.my.framework.Superclass.
Abstrakte metoder er til hvis super klassens metoder skal kalde noget som super klassen ikke har implementation til, men som sub klasserne ved hvad skal goere.
En sub klasse kan godt implementere en tom metode hvis der ikek skal goeres noget.
Alternativt skal du nok over i noget subscribe publish (observer) model, hvor man beder om at blive kaldt i et bestemt tilfaelde.
Det vil dog nu vaere lidt usaedavenligt at bruge dette indenfor samme objekt.
Synes godt om
Slettet bruger
19. marts 2010 - 16:52#10
Så har du sgu nok ret i, at tomme metoder er vejen frem. Takker. Vil du bytte er svar for point?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.