28. januar 2009 - 23:57Der er
8 kommentarer og 1 løsning
Boundary og Controller objekter - sammen med MouseListener?
Hej
Sorry den måske kryptiske headline.
Det jeg mener er at nu har jeg i skolen beskæftiget mig i noget tid med OOP og herunder begrebet GRASP.
Vi har beskæftiget os med boundary og controller objekter, hvor boundary objektet er det der "blot" udskriver/modtager inputs fra brugeren. Og controller objektet er der hvor selve programmet kører og styrer dets gang afhængig af inputene fra boundary objektet.
Jeg er nu begyndt, at lave et skakagtigt spil, hvor jeg har sat det op sådan, at man kan trække brikken rundt og dernæst placerede den et andet sted, men før den bliver placeret kunne jeg godt tænkte mig, at der først blev undersøgt om det overhovedet er muligt at placere brikken der.
Jeg blev hurtigt fristet til at placere en masse logik under de forskellige mouseevents, men er der ikke en mere "pæn" og korrekt måde at sætte dette op på, således at jeg kan få spillets gang styret i controlleren?. også jeg kan øve mig lidt i god kode skik.
Der må meget gerne kommes med små eksempler teoretiske eksempler.
Det skal lige siges at programmet skal kunne spilles af to personer over nettet. Derfor jeg godt kunne tænkte mig at rykke lidt mere logik ind i controlleren, så dette kunne blive det eneste sted der havde kendskab til mine klasser Sender og Reciever, altså det eneste sted der sender og modtager fra serveren.
Mit forslag vil være: - brug en separat normal klasse som listener - ikke this eller en anonym indre klasse, så er mouse events flyttet ud fra vew delen - den klasse kunne så load en "do the work" klasse via Spring og delegere til den - den klasse har så noget logik, bruger send og receive etc.
- brug en separat normal klasse som listener - ikke this eller en anonym indre klasse, så er mouse events flyttet ud fra vew delen:
Indtil videre har jeg når jeg har oprettet selve JPanelet, der holder brættet bare add'et en MouseListener til denne som jeg selv har defineret. Det gjorde jeg med: this.addMouseListener(listener); altså har jeg brugt this referencen som du nævner at jeg netop skal undgå. Jeg har også prøvet med en indre klasse da det herfra var nemmere at tilgå nogle informationer brættet holder. og dette er som du siger også noget vi prøver at undgå.
Så hvad jeg i virkeligheden skal gøre er at:
1. lave JFramet med de nødvendige JPaneler osv. 2. lave klasser der tager sig af at lytte til dele af JFramet. 3. lave klasse der opretter et JFrame objektet og tilføjer lyttere til de dele af framet der skal lyttes til.
- den klasse kunne så load en "do the work" klasse via Spring og delegere til den
Altså dette er den lytterklasse jeg lavede før eller er det den klasse der opretter lytterobjektet? hvad menes der med via Spring? er det noget bestemt i java jeg skal læse op på?
- den klasse har så noget logik, bruger send og receive etc.
Dette er jeg med på altså jeg skal lave en klasse der tager sig af næsten alt arbejdet og samler informationerne et sted så de nemme kan tilgås i programmet. Det er denne der kommer til at fungerer som min controller.
Det med Spring lyder super smart :D men holder mig fra det indtil videre da der alligevel kun skal være mulighed for multiplayer, altså ingen mulighed for at spille mod en bot i denne omgang. måske kommer det senere, men kommer lidt an på hvor meget tid der er til overs til det.
Men mange tak for hjælpen i hvert fald.
-Lig bare et svar!
I dit svar kunne jeg egentligt godt tænke mig en kommentar omkring det med GRASP principperne. Er det noget der bliver lagt meget vægt på under udviklingen i erhvervslivet? eller skal det bare laves i en mægtig fart? Jeg kunne forestille mig, at man jo nok ikk har så meget tid til at fedte rundt i koden ligesom jeg har i min fritid :)
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.