Avatar billede nielsenmathias Nybegynder
11. oktober 2007 - 15:43 Der er 6 kommentarer og
1 løsning

Packages og interfaces

Hejsa!

Er begyndt at rode lidt med packages, så jeg kan samle klasser i grupper og sænke koblingen i mine programmer.

Men hvordan vil man typisk fortælle hvilke metoder en given package tilbyder udaftil?

Vil man definere et interface indeholdende alle public metoder der skal kunne kaldes udefra, lade dette interface blive implementeret af en slags pakkekontrol-klasse der igen ved hvilke klasser metoderne kan kaldes fra? Og så gøre alle andre pakke-specifikke metoder protected.

Eller vil man gøre det på en anden måde?


Mvh. Mathias
Avatar billede arne_v Ekspert
11. oktober 2007 - 15:56 #1
Du kan Java wise goere funktionalitet pakke lokal ved brug af package visibility fremfor public
visibility (package visibility = intet keyword i Java).

Du kan design wise lave et facade pattern, hvor du har et interface og en factory som
exposes eksternt. Interfacet er saa interfacet til komponenten (i bred forstand af
ordet). Factory kan levere en eller flere implementationer, som saa bruger resten
af klasserne.

De to tilgange foregaard paa forskellige niveauer men er naturligvis velegnede
til at blive kombineret.
Avatar billede nielsenmathias Nybegynder
11. oktober 2007 - 17:09 #2
Hej arne_v, og tak for svaret!

Forslaget med metoder erklæret uden keyword er også det jeg ville opnå med protected keyword, og det fungerer som sådan fint.
Men jeg ville bare gerne ha at min pakke kunne implementere et interface! Så hvis man ønskede at udskifte pakken med en anden, så havde man lidt retningslinier idet man som minimum skulle opfylde interfacet.

Jeg ved godt at en package ikke kan implementere et interface, men det er noget lignende jeg har brug for.

Hvis det er det du foreslår med facede, så er jeg ikke helt sikkert på jeg forstår hvad du mener :)
Avatar billede arne_v Ekspert
11. oktober 2007 - 20:29 #3
protected tillader dem at subclasse en klasse.

Det er praecis det jeg foreslaar.

De bruger:

FacadeInterfaceForModule i = FactoryForModule.getModule("id for den implementation der skal bruges");
i.doSomething();
Avatar billede arne_v Ekspert
11. oktober 2007 - 20:30 #4
Kig paa hvordan JDBC og XML parsere laves/bruges i Java som en model.
Avatar billede arne_v Ekspert
11. oktober 2007 - 20:30 #5
java.sql.Connection er et interface

DriverManager er en factory

getConnection metoden kan returnere forskellige klasser afhaengig af connection URL
Avatar billede nielsenmathias Nybegynder
12. oktober 2007 - 12:58 #6
Yes, nu har jeg læst om facade, og fået implementeret det der hvor jeg skulle bruge det! alle tiders, tak for hjælpen! post endelig et svar, så får du point

god weekend

mvh Mathias
Avatar billede arne_v Ekspert
12. oktober 2007 - 15:12 #7
ok
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