/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
spørgsmål!!
Fra : bah


Dato : 28-11-01 23:41

Man laver specialiseing med "extend" , laver nye objecter (aggregerer med
"new ()" ). Hvordan associerer man så? Er der en bestemt måde at gøre det
på?
FX. jeg vil associerer klassen "ejer" til klassen "bil" hvor klassen bil
består af subklasserne "BMV", "Ford" osv. Jeg vil have at hvergang jeg laver
en ejer så associeres den med en klasse fra "bil". Fra en anden klasse fx.
"funktion" kan jeg styre det sådan at hvergang jeg laver "ejer", samtidig
laver jeg også en "bil". Kan man klade denne fremgangsmåde som associering?
Jeg synes ikke det er særligt smart. Kan det her gøres ved at skrive et
simpelt linje i constructoren af klass ejer?

Jeg har hørt om svage og stærke aggregerings forbindelser. Kan man sige at
associering er en svag aggergering struktur og laves på samme måde som
aggregering med "..new() ", eller hvad?
Mvh
Emil



 
 
Lars Dam (29-11-2001)
Kommentar
Fra : Lars Dam


Dato : 29-11-01 10:12

On Wed, 28 Nov 2001 23:41:19 +0100, "bah" <hanapo@get2net.dk> wrote:

>Man laver specialiseing med "extend" , laver nye objecter (aggregerer med
>"new ()" ). Hvordan associerer man så? Er der en bestemt måde at gøre det
>på?

I java har du ikke den skelnen, idet du ikke selv kan nedlægge
objekter. Java's garbage collector sørger for at nedlægge dine
objekter for dig.

Java har kun 'referencer' til objekter, og dermed kan du kun associere
til objekter.

I f.eks. C++ har man pointere til associering, og (nu er det et stykke
tid siden, så jeg kan ikke huske hvad det hedder) variable, som
faktisk bor inden i andre objekter. Disse er aggregering, og de
forsvinder når du deleter 'parent' objektet.

Objekter i java bliver frigivet til garbage collection, når der ikke
er flere referencer der peger på dem. Dvs. har du et 'aggregeret'
objekt i java, hvor du giver reference til et andet objekt, så vil det
'aggregerede' objekt først blive frigivet, når begge referencer
cleares; så selv om dit 'parent' objekt clearer referencen først (og i
princippet dermed skulle det aggregerede objekt 'dø' fordi det er
aggregeret), vil det aggrerede objekt leve videre indtil det
'eksterne' objekt clearer sin reference.


vh. ld
---
"Time is the fire in which we burn"

Bertel Lund Hansen (29-11-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 29-11-01 15:05

bah skrev:

>FX. jeg vil associerer klassen "ejer" til klassen "bil" hvor klassen bil
>består af subklasserne "BMV", "Ford" osv.

Det kan du gøre ved at give bilen en privat variabel, ejer, som
f.eks. initialiseres i construktoren og ændres af setEjer().

Du kan også give ejeren en bil i stedet for. Det er et
designvalg.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Martin Ehmsen (29-11-2001)
Kommentar
Fra : Martin Ehmsen


Dato : 29-11-01 15:11

Bertel Lund Hansen wrote:
>>FX. jeg vil associerer klassen "ejer" til klassen "bil" hvor klassen
bil
>>består af subklasserne "BMV", "Ford" osv.
>
> Det kan du gøre ved at give bilen en privat variabel, ejer, som
> f.eks. initialiseres i construktoren og ændres af setEjer().
>
> Du kan også give ejeren en bil i stedet for. Det er et
> designvalg.

Nogen gange kan det også være en ide at gøre det begge veje, således at
det både er muligt at se hvem som ejer en given bil, men samtidig også
se hvilken (hvilke) biler en given ejer har.

Martin Ehmsen
--
"Life is good for only two things,
discovering mathematics and teaching mathematics"
Siméon Poisson

bah (30-11-2001)
Kommentar
Fra : bah


Dato : 30-11-01 09:23


> Det kan du gøre ved at give bilen en privat variabel, ejer, som
> f.eks. initialiseres i construktoren og ændres af setEjer().
>
> Du kan også give ejeren en bil i stedet for. Det er et
> designvalg.

Hej! Hvad skriver man mere præcis i ejerens constructor ??
Jeg ligger alle bilerne i en ArrayList. Jeg tror jeg skal så også have
bilerne i samme ArrayList. Hvis det er rigtigt hvordan får jeg bilerne med?

[Jeg har lavet en klasse der hedder indexElement(String "bilens navn", Bil
bil), og ligger hver enkelte object af denne i en klasse "Index" der
initialisere en ArrayList. Jeg vil gerne have ejeren med. ]

Mvh/Emil



Bertel Lund Hansen (01-12-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 01-12-01 12:11

bah skrev:

>> Det kan du gøre ved at give bilen en privat variabel, ejer, som
>> f.eks. initialiseres i construktoren og ændres af setEjer().

>Hej! Hvad skriver man mere præcis i ejerens constructor ??

Hvis du vil give bilen en ejer, skal du ikke skrive noget i
dennes constructor. Du skal derimod give bilen en reference til
ejeren.

Hvis du har en eller anden arraytype til ejerne og arrayet hedder
ejerArray, skal du give bilen en constructor a la det her:

class Bil {
   private ejerType minEjer;
   public Bil(ejerType ejer) {
      minEjer=ejer;
      ...
   }
   ...
   public void setEjer(ejerType ejer) {
      minEjer=ejer;
   }
   ...
}

Du skal også lave en constructor uden ejer-parameter hvis en bil
kan eksistere uden ejer, og du skal bruge setEjer() hvis en ny
bil får en ejer, eller en gammel skifter ejer.

>Jeg ligger alle bilerne i en ArrayList. Jeg tror jeg skal så også have
>bilerne i samme ArrayList. Hvis det er rigtigt hvordan får jeg bilerne med?

Du mener nok "ejerne" et sted i de linjer. Det er ulogisk at
bruge samme array til både biler og ejere. Det ville jeg ikke
gøre.

>[Jeg har lavet en klasse der hedder indexElement(String "bilens navn", Bil
>bil), og ligger hver enkelte object af denne i en klasse "Index" der
>initialisere en ArrayList. Jeg vil gerne have ejeren med. ]

Det kommer automatisk hvis du giver klassen Bil den private
variabel minEjer. Jeg ville i øvrigt også lave navnet til en
privat variabel. Så skal indexElement kun indeholde en reference
til instanserne af Bil.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

bah (05-12-2001)
Kommentar
Fra : bah


Dato : 05-12-01 23:49

Hej og mange tak for dit bestemt brugbart svar. Jeg tror det er det samme
jeg har gjort med constructoren, men for en sikkerhed skyld skriver jeg lige
her hvad jeg har gjort, Det er alligevel lidt anderledes med din setEjer()
methode. Jeg har ikke noget set metoder. Behøver jeg at have dem?
Jeg har meget generalt følgende code:
---------------------------------------------
classs Ejer{
String name=null;
adresse=null; ....andre oplysninger
Bil bil=null;
public Ejer(String name, String adresse...osv, Bil bil){
name=name; adresse= adresse; .... bil=bil;
}
public Ejer(){}
/* så har jeg methoder med get() */
public String getName(){ return name;} osv.
public Bil getBil(){ return bil;
}

Og klassen Bil ser ud som følgende:

class Bil{
String name=null;
String model=null;...osv.

public Bil(String name, String model...){
....
}
public Bil(){}

/* så har jeg igen methoder med get().. */
----------------------------------------------------------
Med hensyn til at en ejer skal kunne eje flere forskellige biller, får jeg
på denne måde samme ejeroplysninger flere gange. Det vil jeg helst undgå. Er
det en klodset måde jeg har gjort det på?

> Du mener nok "ejerne" et sted i de linjer. Det er ulogisk at
> bruge samme array til både biler og ejere. Det ville jeg ikke
> gøre.

Det er rigtigt at på denne måde komme bilerne automatisk med, og de kommer
på samme linje med Ejer. Men hvorfor ulogisk ?
Min indexElement bestod først af en "int recordNumber" og en "Ejer
ejerInfo)" men jeg syntes det var svært at finde fx. til en ejer med en
bestemt bil via recorNemuber. Grunden var at jeg fik med denne design flere
linjer i filen , der havde ejerInfo til fælles men var forsellige i bilens
navne og model osv. Men deres recordNumber blev også forskellige, selv om
det faktisk var samme ejer. Så skulle jeg finde ud af (på en eller anden
måde) at fx.en ejer med 3 biler får samme recordNember. Det syntes jeg var
svært, og vist lidt ulogisk.

Jeg har nu ændret denne klasse (indexElement) til IndexElement( Ejer
ejerInfo, Bil bilen ). Men om det kan give nogle fordele ved jeg ikke endnu,
for jeg er ikke helt færdig med at ligge funktioner i. Jeg vil meget gerne
have hjælp, hvis jeg er på den gale sti.

Med Tak.
Hilsen/ Emil



Martin Mouritzen (06-12-2001)
Kommentar
Fra : Martin Mouritzen


Dato : 06-12-01 00:53

After I finished the 3 Pan Galactic Gargle Blasters, "bah"
<hanapo@get2net.dk> just offered me, he muttered some weird stuff, and
I had to correct this gibberish:

>Jeg har meget generalt følgende code:

som iøvrigt er ret grim :/
prøv med lidt indrykninger :)
eller okay, jeg ved ikke om det er din news-klient der har fjernet
tabs, men grimt er det ihvertfald. :/
--
Martin Mouritzen.
The truth is out there! Does anyone know the URL?

Bertel Lund Hansen (06-12-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 06-12-01 15:31

bah skrev:

>Jeg har meget generalt følgende code:
>---------------------------------------------
>classs Ejer{
>String name=null;
>adresse=null; ....andre oplysninger
>Bil bil=null;
>public Ejer(String name, String adresse...osv, Bil bil){
>name=name; adresse= adresse; .... bil=bil;
>}

Princippet er o.k., men jeg skal lige være sikker på at du ikke
har en fejl (måske er det bare fordi du skrev hurtigt i
indlægget):

Hvis du skriver name=name, er det bare parameteren der bliver sat
til sig selv, mens instansvariablen forbliver null. Enten skal
parameteren hedde noget andet (min foretrukne løsning), eller
også skal du skrive this.name=name.

>Med hensyn til at en ejer skal kunne eje flere forskellige biller, får jeg
>på denne måde samme ejeroplysninger flere gange. Det vil jeg helst undgå.

Klasserne ser fornuftige ud, men ejeren skal have en datatype der
kan rumme flere elementer til biler. Du kan f.eks. give ejeren et
array med 10 pladser (hvis du ikke vil styre dynamiske strukturer
som faktisk er bedre i det her tilfælde). Altså i ejerklassen:

   Bil[] bil=new Bil[10];
og så også en tæller til at holde styr på hvor mange biler han
har:
   int antalBiler=0;

>Er det en klodset måde jeg har gjort det på?

Hvis du skriver samme ejer ind flere gange, så ja.

>Det er rigtigt at på denne måde komme bilerne automatisk med, og de >kommer på samme linje med Ejer. Men hvorfor ulogisk ?

Fordi biler og ejere er to helt forskellige ting. Der er dog ikke
noget forkert ved det i den forstand at det færdige program vil
kunne virke udnærket, men den der læser koden om 6 måneder eller
senere, vil undre sig og lettere blive forvirret - det gælder
også dig selv (ved jeg af bitter erfaring).

>Min indexElement bestod først af en "int recordNumber" og en "Ejer
>ejerInfo)" men jeg syntes det var svært at finde fx. til en ejer med en
>bestemt bil via recorNemuber.

Ja, det bliver det når du kun refererer fra ejeren til bilen.
Hvis det skal være nemmere, må du også referere fra bilen til
ejeren - men så bliver det straks mere komplekst.

>Grunden var at jeg fik med denne design flere
>linjer i filen , der havde ejerInfo til fælles men var forsellige i bilens
>navne og model osv. Men deres recordNumber blev også forskellige, selv >om det faktisk var samme ejer.

Det problem løses ved at give ejeren en container (omtalte array)
til hans biler.

PS. Du behøver ikke sætte nye variable til null. Det gør Java af
sig selv. Altså bare:

   Bil bil;

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste