Avatar billede tuidoi Nybegynder
28. januar 2009 - 23:57 Der 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.

Mange tak for jeres tid og hjælp!
Avatar billede tuidoi Nybegynder
29. januar 2009 - 00:18 #1
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.
Avatar billede arne_v Ekspert
29. januar 2009 - 04:08 #2
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.
Avatar billede tuidoi Nybegynder
29. januar 2009 - 15:27 #3
- 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.

 
Forresten tak for din hjælp.
Avatar billede arne_v Ekspert
29. januar 2009 - 20:55 #4
this.addMouseListener(listener);

er OK.

Jeg taenker slet ikke paa den son vaernde med this, da den kan skrives som:

addMouseListener(listener);

Den jeg ikke kan lide er:

addMouseListener(this);
Avatar billede arne_v Ekspert
29. januar 2009 - 20:57 #5
Spring er et kendt og meget brugt Java framework.

Saa kort sagt:
- laver du et specielt kald for at create et objekt
- hvilken klasse der faktisk loades bestemmer du i en XML config fil

Tricket er at saa kan du via konfiguration vaelge mellem single player og multi player.
Avatar billede arne_v Ekspert
29. januar 2009 - 20:58 #6
http://www.springsource.org/documentation vil fortaelle dig mere.

Lad dig ikks skraemme af hvcor stort det er - du skal kune bruge 1%.
Avatar billede tuidoi Nybegynder
29. januar 2009 - 21:52 #7
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 :)
Avatar billede arne_v Ekspert
29. januar 2009 - 22:16 #8
Der er altid tidspres i virkelige projekter.

Men udviklere sidder altsaa ikke og skriver kode i 8 timer om dagen.

I den tunge ende af software udvikling skal du regne med at en udvikler bruger 5% af
sin tid paa at skrive kode i sin IDE.

OOP, design patterns, CBD, SOA og andre teoretiske begreber er absolut en del af
de fleste software udvikleres hverdag.

Lige netop GRASP og boundary/controller er dog ikke blandt de mest brugte begreber.
Avatar billede arne_v Ekspert
29. januar 2009 - 22:16 #9
Og et svar.
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