Avatar billede Slettet bruger
19. marts 2010 - 15:58 Der 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?

Takker.
Avatar billede 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.
Avatar billede arne_v Ekspert
19. marts 2010 - 16:10 #2
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.
Avatar billede 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?
Avatar billede arne_v Ekspert
19. marts 2010 - 16:24 #4
Avatar billede arne_v Ekspert
19. marts 2010 - 16:27 #5
re 2)

Skal du have information fra N instanser af en klasse X over i den klasse som er emnet i #1?
Avatar billede 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.
Avatar billede arne_v Ekspert
19. marts 2010 - 16:38 #7
Er det ikke hvad abstrakte metoder er til for ?
Avatar billede Slettet bruger
19. marts 2010 - 16:39 #8
Jeg savner en rettefunktion :(

package.my.implementation
- public class Subclass extends Superclass
  - public String[] myMethod(String arg) { return null; }

#7
Det vil jeg ikke tro; hvad hvis jeg ikke ønsker at tvinge implementationen til at gøre brug af oplysningerne?
Avatar billede arne_v Ekspert
19. marts 2010 - 16:44 #9
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.
Avatar billede 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?
Avatar billede arne_v Ekspert
19. marts 2010 - 16:56 #11
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester