OOP dag 8

Øvelser

Kig på FalskTerning1 og Snydespil1 prøv at køre programmet med trinvis gennemgang.  
Prøv at bruge FalskTerning1 i stedet for Terning i nogle af dine gamle opgaver (tjek at den rent faktisk snyder).

Kig derefter på FalskTerning2 og Snydespil2 og på  FalskTerning3 og forvis dig om at du forstår hvad der sker.
Lav et program, der bruger FalskTerning3 og undersøg hvordan kaldene til superklassen foregår med trinvis gennemgang.

5.1.4 Opgaver

  1. Lav en LudoTerning, der arver fra Terning. Den skal opføre sig som en Terning (værdi mellem 1 og 6), men dens beskrivelse (toString()-metode) er anderledes, da den i stedet for teksten "3" giver teksten "stjerne" på en 3er og i stedet for "4" giver "globus" på en 4er.
    Tilsidesæt derfor toString()-metoden (vink: kopiér Terning's toString()-metode over i LudoTerning, og ret i den).
    Afprøv klassen (skriv en BenytLudoTerning-klasse med en main()-metode).

  2. Byg videre på opgave 4.10, og opret klassen Transportmiddel. Et transportmiddel har en farve, et navn, et antal tilbagelagte kilometer og en nypris. Definér metoderne

  3. public void bevæg(int antalKilometer) // opdaterer antal kilometre
    public double pris()
    // giver den vurderede salgspris
    public String toString()
    // giver en beskrivelse af transportmidlet
    Opret nedarvingerne Cykel, Skib og Bil med hver sin pris()-metode.

  4. Forestil dig en virksomhed, hvor der er forskellige slags personer: Ansatte og kunder. De ansatte er delt op i medarbejdere og ledere. Skitsér et passende klassediagram.

  5. Lav klasserne til et skak-spil: Definér superklassen Brik med egenskaben farve (sort eller hvid), position x og position y (hver mellem 1 og 8). Definér også metoden
    public boolean kanFlytteTil(int xNy, int yNy) // om brikken kan flytte dertil
    der (for Brik) returnerer sand, hvis positionen eksisterer (xNy og yNy er mellem 1 og 8).
    Definér nedarvingerne Bonde og Taarn med tilsidesat kanFlytteTil().

  6. Lav et system til at arbejde med forskellige geometriske figurer.
    Opret klassen Figur med metoderne beregnAreal() og beregnOmkreds().
    Lav nedarvingerne Punkt, Linie (med variablen længde), Cirkel (med variablen radius), Rektangel (med variablerne højde og bredde).

Kig derefter på opgaverne fra forrige gang og løs de opgaver du mener du vil lære mest af.











Skak-program

Arbejd derefter videre med skak-programmet.









xxxx









Grafikprogrammering

Hent GrafiskVindue.java og VisGrafiskVindue.java og gem dem sammen med de andre filer i dit projekt
(jbproject-kataloget eller hvor dit projekt forventer sine kildetekstfiler).

Gå derefter ind i JBuilder, tilføj filerne til projektet, højreklik på VisGrafiskVindue.java og vælg run for at prøve programmet.
Bemærk at koordinaterne x=0 og y=0 svarer til lidt over øverste venstre hjørne. 

Øvelser

9.3 Opgaver

  1. Ændr GrafiskVindue til at tegne nogle andre figurer.
    Prøv at skrive noget ud (med System.out.println() inde i paint()-metoden og hold øje med hvornår paint() bliver kaldt (prøv f.eks. at minimere og gendanne vinduet).

  2. Lav et program, der viser et digitalur som tekst (vink: Brug et Date-objekt).
    Sørg for, at uret opdateres hvert sekund (vink: kald repaint(1000) fra paint()-metoden).

  3. Lav et program, der viser et analogt ur.
    Lad urets størrelse afhænge af vinduets størrelse (vink: Brug getSize()).

  4. Ændr GrafiskVindue, så den tegner et skakbræt med sorte og hvide felter.
    En springer og en bonde tegnes derefter på brættet.

  5. Ændr programmet, sådan at det er nemt at ændre brikkernes koordinater. Koordinaterne gemmes i to Point-objekter, f.eks oprettet således:
    Point tårn = new Point(100,200);
    Point bonde = new Point(200,200);





Lister med Vector-klassen (skak-program)

Lav en liste af Point-objekter med positioner på bønder, f.eks. således:

Vector bondePositioner = new Vector();
bondePositioner.addElement( new Point(200,200) );
bondePositioner.addElement( new Point(300,200) );
bondePositioner.addElement( new Point(200,300) );

Løb derefter listen igennem og tegn alle bønderne.







Hvis der er tid (og lyst)

Kurvetegning

Prøv at lave et program der tegner en kurve over en matematisk funktion, f.eks. 0.2*x*x +0.5*x +2.

Graphics-objektet har ikke nogen drawPoint()-metode, så du må tegne punktummer i stedet (g.drawString(".",x,y))

Lav programmet, så det er nemt at se, hvor man skal rette for at ændre funktionen, intervalstart, intervalslut, skalering og forskydning af y-aksen. Dvs. lav det til variabler, og brug kommentarer til at markere stederne i programmet.

Prøv derpå at få det til at tegne grafen over kvadratrod-funktionen (Math.sqrt()).

Overvej om du kan ændre programmet til at tegne streger mellem kurvepunkterne.
Vink: Husk koordinaterne på det forrige punkt. 

Appletter og grafik

Appletter er små grafiske programmer der ligger i en HTML-side, typisk på internettet.

Hent MinApplet.html og MinApplet.java (højreklik og gem dem jbproject-kataloget, eller hvor dit projekt forventer sine kildetekstfiler).
Gå derefter ind i JBuilder, tilføj filerne til projektet, højreklik på HTML-filen og vælg run.
Læs mere om appletter i kapitel 10 i bogen.

Prøv derefter Kurvetegningsapplet.html og Kurvetegningsapplet.java.

Java2D

Prøv demonstrationen af Java2D i JDK'et.
Find Java-installationen på din computer (sandsynligvis C:\JBuilder4\jdk1.3) og kig i demo/jfc/Java2D.
Dobbeltklik på jar-filen eller skriv fra kommandolinien skriv: java -jar Java2Demo.jar. Kig på introduktionen på http://java.sun.com/docs/books/tutorial/2d/.  





Pakker

Læs kapitel 6 om pakker og løs

6.8 Opgaver (så langt du har lyst)

  1. Søg i din computer efter filer, der ender på .jar, og åbn dem med et program, der kan læse ZIP-komprimerede filer (f.eks unzip eller WinZip).
    Hvordan er filerne organiseret?

  2. Se, om du kan finde filen, der indeholder Vector-klassen.
    Hvilket underkatalog ligger den i?

  3. Opret nogle klasser i en pakke og en main()-klasse, der benytter dem
    (f.eks. BenytPakker.java, minPakke/Klasse1.java og minPakke/Klasse2.java - gå ind kapitlet om pakker på den elektroniske udgave af lærebogen, http://javabog.dk og kopier koden).

  4. Pak dem i en jar-fil.

  5. Prøv at oprette en eksekverbar jar-fil.

Hvis der er tid (og lyst)

Læs afsnit 4.11 Avanceret.
Kig på Konto og tegn klassediagrammet (klasserne vist i UML-notation) og prøv at bruge et par Konto-objekter fra BenytPerson.

Husk at lave små main()-programmer, der afprøver de ting, du programmerer. Tegn klasserne og deres relationer i UML-notation før du laver dem.

Udbyg Person-klassen med metoden formue(), der skal returnere summen af saldiene på personens konti.
Udbyg BenytPerson sådan at hver person har en eller flere konti (husk at en Konto oprettes med en Person i kontruktøren).

Lav en klasse, der repræsenterer en Postering på en bankkonto med tekst, indsat beløb (udtræk regnes negativt) og dato.
Udvid Konto med en liste af posteringer (Vector af Postering-objekter), og med metoden udskrivPosteringer(), der skal udskrive posteringerne og løbende saldo på skærmen.

Udbyg Person-klassen, så en person kan eje en bil. Udbyg metoden formue(), sådan at den husker at indregne bilens pris. Metoden skal virke både for personer med og uden bil (Person-objekter uden bil kan have denne variabel sat til null).