24. juni 2002 - 01:07Der er
6 kommentarer og 1 løsning
klasser..
Jeg har denne JTabbedpane hvor jeg smider mine klasser ind og de forskellige klasser bruger hinandens metoder på kryds og tværs. Nu er jeg så stødt ind på et problem hvor klassen reservationG skal benytte sig af klassen Opslag's metoder og omvendt, men det kan jeg ikke få den til?Problemet er at den ene klasse skal initilaseres før den anden klasse kan benytter sig af den og omvendt...
public MainFrame() throws IOException { ImageIcon icon = new ImageIcon("ikon.gif"); JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.setFont(new Font("Serif", Font.BOLD, 13));
Gaest g = new Gaest(db); Reservation r = new Reservation(db); Funktioner f = new Funktioner(); Værelse v = new Værelse(db);
checkInd ankomst = new checkInd(v);
Opslag opslag = new Opslag(r,v,g,db,ankomst);
ReservationG res = new ReservationG(r,f,g,opslag,tabbedPane,ankomst);
GaestG gæst = new GaestG(g,opslag,tabbedPane,res );
VærelseG vær = new VærelseG(g,v,opslag,tabbedPane);
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
uden at kunne hjælpe yderligere, må jeg da komme med et simpelt råd ?
du skulle lære at skrive variabelnavne uden brug af ÆØÅ... det er højst sandsyneligt ikke det der er problemet nu, men du kunne opleve problemer på et tidspunkt..... english english english :)
du kan sende en reference med til de klasser der skal have adgang til hinanden, eks: Opslag opslag = new Opslag(r,v,g,db,ankomst, referenceTilReservationG); ReservationG res = new ReservationG(r,f,g,opslag,tabbedPane,ankomst, referenceTilOpslag);
men så får du problemet: var det hønen eller ægget der kom først. Det kan dog løses med: Opslag opslag = new Opslag(r,v,g,db,ankomst, referenceTilReservationG); ReservationG res = new ReservationG(r,f,g,opslag,tabbedPane,ankomst); res.setReferenceTilOpslag(opslag);
det kræver så at begge klasser har en varibel som du sætter, eks i Opslag: private ReservationG referenceTilReservationG; public Opslag(r,v,g,db,ankomst, referenceTilReservationG) //konstruktør { .. this.referenceTilReservationG = referenceTilReservationG; }
når du så har gjort alt det kan du i respektive klasserne kalde: referenceTilReservationG.metode(parameter); og referenceTilOpslag.metode(parameter);
men, dit problem skyldes svagt design, min løsning gør det meget sværre at fejlfinde og udvide dit program - men det vil virke.
du har først opdaget at det er et problem nu (hvor du er i fuld gang med programmeringen), dvs. i designet af dit program har du ikke overvejet grundigt nok hvordan de forskellige klasser skal samarbejde.
jeg ville nok seperere gui fra model, udfra min forstilling om hvad programmet skal gøre, og så lade modellen være en aggregeringsstruktur hvor ejerskabet mellem klasserne er lagt fast (klasserne: reservation, gæst, værelse, osv).
soreno jeg er ikke helt med ...hvor skaber du denne metode:
res.setReferenceTilOpslag(opslag);
jeg får disse fejl:
C:\Program Files\nusphere\apache\htdocs\modelKomponent\MainFrame.java:26: cannot resolve symbol symbol : variable referenceTilReservationG location: class MainFrame Opslag opslag = new Opslag(r,v,g,db,ankomst,referenceTilReservationG); ^ C:\Program Files\nusphere\apache\htdocs\modelKomponent\MainFrame.java:30: cannot resolve symbol symbol : method setReferenceTilOpslag (Opslag) location: class ReservationG res.setReferenceTilOpslag(opslag); ^ 2 errors
Opslag opslag = new Opslag(r,v,g,db,ankomst); ReservationG res = new ReservationG(r,f,g,opslag,tabbedPane,ankomst, opslag); opslag.setReferenceTilReservationG(res);
hvor Opslag tilføjes denne attribut og metode: private ResergationG reservationG;
public void setReferenceTilReservationG(ResergationG reservationG) { this.reservationG = reservationG) }
og i ReservationG's konstruktør tilføjes, samt en ekstra attribut: private Opslag opslag; public ReservationG(r,f,g,opslag,tabbedPane,ankomst, opslag) { //gør hvad den gamle konstruktør gør + this.opslag = opslag; }
nu har du oprette reference mellem klasserne og kan bruge metoderne i klasserne, eks i opdigtet metode i Opslag: public void beregn() { int sum = reservationG.hentAlleReservationerSummetSammen(); System.out.println(sum); }
og samme princip i ReservationG: public void beregn() { int sum = opslag.hentNogetSomGiverMeningAtHente(); System.out.println(sum); }
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.