Avatar billede Mikker Praktikant
19. juni 2005 - 20:48 Der er 21 kommentarer og
1 løsning

Objektorienteret programmering

Hej Eksperter

Jeg har programmeret en klasse: Firma. Et firma har en række medarbejdere (klasse: Medarbejder).

Jeg vil så lave en funktion/metode som tager firma-id som parameter og returnere medarbejderne i et array.

Så er spørgsmåel: Skal denne funktion/metode placeres i klassen Firma eller i klassen Medarbejder?
Avatar billede roenving Novice
19. juni 2005 - 20:51 #1
Da du jo har arrayet medarbejdere[] i firma-klassen, kan du ikke fange den fra medarbejder-klassen, så funktionen/metoden skal helt klart placeres i firma-klassen !-)
Avatar billede Mikker Praktikant
19. juni 2005 - 21:18 #2
Hvad nu hvis klassen firma kun indeholder attributter så som firmanavn, adresse o.s.v. og altså ikke noget medarbejder-array. Klassen medarbejder indeholder derimod attributten firma-id som afgøre hvilket firma medarbejderen tilhøre.
Avatar billede arne_v Ekspert
19. juni 2005 - 21:21 #3
det er måden du vel gemme det på i en relations database

det er ikke måden du vil gemme det på i en objekt orienteret domain model

firma skal have et array eller en collection af medarbejder
Avatar billede Mikker Praktikant
19. juni 2005 - 21:42 #4
Så du ville kun lave klassen Firma?
Avatar billede arne_v Ekspert
19. juni 2005 - 21:47 #5
nej

en klasse firma og en klasse medarbejder

og firma indeholder et antal medarbejdere
Avatar billede Mikker Praktikant
19. juni 2005 - 21:56 #6
Men jeg kan jo stadig have metoden findMedarbejdere(firmaId) i begge klasser? Eller hva'?
Avatar billede arne_v Ekspert
19. juni 2005 - 21:59 #7
nej

kun i firma klassen
Avatar billede Mikker Praktikant
19. juni 2005 - 22:09 #8
Hvorfor kan jeg ikke have den i medarbejder-klassen?
Avatar billede arne_v Ekspert
19. juni 2005 - 22:15 #9
fordi medarbejder klassen ikke vil vide noget om alle instanser af sig selv
Avatar billede Mikker Praktikant
19. juni 2005 - 22:38 #10
Så det er altså forkert at lave en funktion i medarbejderklassen som sender en query til databasen: "SELECT * FROM medarbejdere WHERE firma_id=" + firmaId ?
Avatar billede jakoba Nybegynder
19. juni 2005 - 22:59 #11
En medarbejder kunne have et aftenjob og høre til i 2 firmaer.
Avatar billede arne_v Ekspert
19. juni 2005 - 23:04 #12
ja

det vil være firma klassen som skal loade de medarbejdere som hører til firmaet
Avatar billede arne_v Ekspert
19. juni 2005 - 23:07 #13
jakob>

hvis det er muligt så er det ikke en 1:M relation i databasen og et array
af medarbejdere i firma klassen og en reference til firma i medarbejder klassen
men en M:M relation i databasen implementeret ved en seperat firma-medarbejder
tabel og et array af medarebjdere i firma klassen og et array af firmaer i
medarbejder klassen

men jeg mener ikke at det vil betyde noget specielt for arbejdesfordelingen
mellem klasserne
Avatar billede roenving Novice
20. juni 2005 - 01:03 #14
-- og det skal tilføjes, at det selvfølgelig er muligt at lave et opslag i en database, hvor man søger alle de medarbejdere, som har en givet firma som ansættelsessted ...

-- så har det bare ikke det fjerneste med objekt-orienteret programmering at gøre !-)
Avatar billede Mikker Praktikant
20. juni 2005 - 09:01 #15
Det vil altså sige at hvis jeg skal finde x antal medarbejdere i et firma så skal jeg kalde en metode i medarbejder-klassen. Men hvis jeg hente alle medarbejdere ud i et array eller finde én medarbejder med et bestemt ID skal jeg kalde en funktion i medarbejder-klassen, eller hva'? Så vil de to metoder jo være næsten ens.
Avatar billede arne_v Ekspert
20. juni 2005 - 09:48 #16
de ligner måske hinanden lidt på SQL niveau

men konceptuelt er det da 2 helt forskellige ting
Avatar billede Mikker Praktikant
20. juni 2005 - 13:20 #17
Mener du at de to metoder skal være i hver deres klasse:

Metoden hent_alle_medarbejdere() skal være i medarbejder-klassen.
Metoden hent_medarbejder_med_id(medarb_ID) skal være i medarbejder-klassen.

Metoden hent_medarbejdere_i_firma(firma_ID) skal være i firma-klassen?

Er det sådan?
Avatar billede arne_v Ekspert
20. juni 2005 - 13:27 #18
hent_medarbejder_med_id(medarb_ID) skal være i medarbejder-klassen

firma klassen skal loade alle de medarbejdere som firmaet har
enten i constructor eller senere

hvis medarbejerne skal kunne ses så skal firma klassen have en
hent_medarbejdere_i_firma metode uden argumenter

hent_alle_medarbejdere hører egentligt ikke hjemme i hverken
medarbejder eller firma klassen (måske i skattevæsenet klassen !)

du kan dog vælge at lave den som static metode i medarbejder klassen
som en service for kode som ikke kan bruge objekt modellen
Avatar billede arne_v Ekspert
24. juli 2005 - 15:58 #19
miclyk>

Tid at få afsluttet spørgsmålet ?

Bed dem som har hjulpet dig om at ligge et svar ig giv dem lidt tid inden du accepterer
Avatar billede Mikker Praktikant
28. november 2006 - 11:32 #20
Lukker
Avatar billede roenving Novice
01. december 2006 - 16:10 #21
Tak ,-(
Avatar billede Mikker Praktikant
01. december 2006 - 20:58 #22
Til arne_v og roenving: I skulle have haft point begge to. Læg et svar på http://www.eksperten.dk/spm/748315
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