Tutankhamons Grav Et modellerings eksempel Virtuel rundvisning Tutankhamons Grav Et modellerings eksempel
Introducerende Objektorienteret Programmering Vores opgave Det Egyptiske museum i Cairo har bedt os om at lave en Web-baseret præsentation af Howard Carters udgravning af Tutankhamons grav, 1922-1928. Man skal kunne bevæge sig mellem de forskellige kamre i graven, se billeder fra udgravningen af disse kamre, samt få en detaljeret beskrivelse af det enkelte kammer. DAIMI Introducerende Objektorienteret Programmering
Vores Web præsentation DAIMI Introducerende Objektorienteret Programmering
Introducerende Objektorienteret Programmering Tutankhamons grav Problembeskrivelse: Ens ‘virtuelle’ jeg; kan flyttes ved angivelse af en kompasretning, e.g. “west” flytter “jeg’et” til forrummet. Annex Grav- kammer Forrum Skatkam. N Korridor Trappe (passer ikke, men hva’...) DAIMI Introducerende Objektorienteret Programmering
Introducerende Objektorienteret Programmering Problemstilling I datalogien har man lært nytten af at have ”skidt for sig og snot for sig”—at skille tingene af. En af de (dyrtkøbte) erfaringer i software udvikling er vigtigheden af at skille ens program af i to dele: brugergrænseflade og interaktion med brugeren modellen (basale elementer og begreber) Vi har i dette kursus fokuseret meget stærkt på modelbyggeri! DAIMI Introducerende Objektorienteret Programmering
Det er jo hele tre opgaver! Altså: Opgave 1: Et systemdesign som er en model der beskriver et antal forbundne rum samt et ’virtuelt’ jeg, som kan bevæge sig imellem rummene. Opgave 2: Et systemdesign for en brugergrænseflade som kan vise billeder, tekst og som har et redskab til navigation. Hvad er opgave 3 ? I denne lektion vil vi kigge på modellen—en senere lektion vil kigge på brugergrænsefladen. DAIMI Introducerende Objektorienteret Programmering
Introducerende Objektorienteret Programmering Opgave 1: Domænet Til at løse opgave 1 bruger vi Arnow&Weiss’ udmærkede model til system-design §5: Problembeskrivelse Find primære klasser/objekter Definere opførsel og samspil (testscenarie) Realisere de enkelte klasser. Nogle bud? DAIMI Introducerende Objektorienteret Programmering
<<testprogram>> UML klassediagram Er forbundet med 1 Kammer 1..4 Billede Beskrivelse 1 <<testprogram>> GravPræsentation Bevæger sig i/ befinder sig i 1 1 flytter 1 Virtuelle jeg præsenterer indtryk position Programlag DAIMI Introducerende Objektorienteret Programmering
Implementation, domæne... class Room { Vector exit; public Room( ... ) { ... exit = new Vector(); exit.addElement( null ); // north exit.addElement( null ); // east exit.addElement( null ); // south exit.addElement( null ); // west public Room leadsTo( int direction ) { return (Room) exit.elementAt(direction); } Er forbundet med 1 Kammer 1..4 Billede Beskrivelse Konvention: 0 = nord, 1 = øst, 2 = syd, 3 = vest DAIMI Introducerende Objektorienteret Programmering
Introducerende Objektorienteret Programmering Implementation... Forrum Annex annex Gravk. Korridor exit: Annex Grav- kammer forrum Forrum gravkammer Skatkam. Korridor korridor Trappe DAIMI Introducerende Objektorienteret Programmering
Introducerende Objektorienteret Programmering Implementation Det er svært at huske sådanne talværdier: Hvad var 2? Syd eller øst? Bedre at udtrykke dem ved hjælp af konstanter: class Room { … public final static int NORTH = 0; public final static int EAST = 1; public final static int SOUTH = 2; public final static int WEST = 3; } I klassen TutankhamonPresentation: public void northButtonPressed() { guest.move(Room.NORTH); } DAIMI Introducerende Objektorienteret Programmering
Implementation... Oprettelse af kamre og layout: Hvad med konsistens af referencer??? Room antechamber = new Room("You are a dark room known as the antechamber. "+ "There are a lot of precious antiques here, but ...”, "tutantechamber.jpg" ); antechamber.connectTo( staircase, Room.SOUTH ); antechamber.connectTo( annex, Room.NORTH ); antechamber.connectTo( tomb, Room.EAST ); DAIMI Introducerende Objektorienteret Programmering