Opgavesæt 3 i BlueJ

Lave egen klasser i BlueJ-miljøet

MODEL: mennesker på Helsingør Gymnasium
  1. Klargøring
    Kopierer filen "stdclass.tmpl" fra F:\datalogi til den mappe, hvor BlueJ lokalt er installeret (f.eks. C:\Programmer\BlueJ1.1.5\lib\english\templates\newclass). Filen erstatter den medleverede skabelon (template).
    Filen "stdclass.tmpl" er skabelon for oprettelse af en 'class' i BlueJ. Start WordPad, som findes under "Start", "Programmer", "Tilbehør". Åben filen "stdclass.tmpl" i denne editor. I skabelonen bliver "$CLASSNAME" erstattet med det class-navn, som du opretter. "void" foran metoden "setNavn" viser, at den ikke returnerer noget (void=tom). "String" foran "getNavn" viser, at den returnerer en tekststreng, som selvfølgelig indeholder navnet!
    Start BlueJ. Opret et nyt projekt med navnet "HG" på dit personlige J-drev. Der er nu skabt en mappe med navnet "HG". Åben denne, så du kan se filerne deri.
    Dobbeltklik i BlueJ på det hvide ark ("readme.txt"), og udfyld den. Den kan læses eksternt med Wordpad.
    Nu er vi klar til at oprette klasser selv!

  2. Oprette klasse
    Vælg "New Class", Class Type = Class, Class Name = hg_person. Flyt ikonen hen i midten foroven. Dobbeltklik på ikonen, og se koden (implementation). Det er jo bare "stdclass.tmpl" med "$CLASSNAME" erstattet med "hg_person"! Check mappen "HG" - der optræder nu en fil "hg_person.java", som netop er implementation.
    "Compile" klassen. Hvis alt går vel, så skifter ikonen (skravering forsvinder), og der kommer en ny fil "hg_person.class" i mappen "HG" (samt en BlueJ-fil "hg_person.ctxt", som holder rede på navne og parametre). Filen "hg_person.class" kan ikke læses i tekstbehandling.

  3. Oprette objekter
    Højreklik på klassen "hg_person", og opret 2 objekter.
    Giv dem navnene "Peter" og "Stine" v.hj.a. metoden "setNavn". Check navnet med inspect. Fjern objektet "Stine" igen med remove.

  4. Oprette ny klasse, som nedarver
    Opret en ny klasse (class) "elev". Placer ikonen nedenfor "hg_person" i højre side. Check mappen "HG" for nye filer.
    Dobbeltklik på ikonen "elev", og se koden, som ligner den fra før! Vi skal imidlertid se, hvordan den ændrer sig, når vi indfører arv (inheritance).
    Klik på den optrukne pil. Du får beskeden "Select the subclass", og klikker derfor på ikonen "elev". Derefter "Select the superclass", og du klikker på ikonen "hg_person". Der tegnes så en pil fra subclass (underklasse) til superclass (overklasse). Er der gået koks i det, så fjernes en pil med menuen "Edit", "Remove arrow". Hvis du flytter på ikonerne nu, så vil BlueJ selv tilpasse pilen!
    Dobbeltklik på klasseikonen "elev", og se at kildekoden (implementation) er ændret! Tidligere var klassen defineret med "public class elev", nu står der "public class elev extends hg_person", hvilket jo betyder, at klassen "elev" udvider klassen "hg_person", og således arver fra "hg_person". Mere præcist arves de 2 metoder "setNavn" og "getNavn".
    Et objekt af klassen "elev" får således navnet i "hg_person", så vi skal ændre kildekoden i "elev", så der i stedet for kan tildeles og aflæses, hvilken "klasse" eleven går i. I implementation ændrer du 'navn' til 'klasse', og omdøber metoderne til "setKlasse" og "getKlasse". Luk implementation, og tryk "Compile". Ikonen skifter, og der er oprettet en fil "elev.class" i mappen "HG".
    Opret et objekt af klassen "elev". Tildel denne Klasse=1x og Navn=Anne (bemærk, at navnet tildeles med en arvet metode fra "hg_person"). Check status med inspect.

  5. Tilføj nye attributter og metoder
    Gå ind i implementation for "hg_person", og tilføj 2 nye attributter (instance variable): alder (type=int dvs. helt tal) og koen (type=String), så vi kan holde rede på personens alder og køn:
    private String koen;
    private int alder;
    Du skal tilsvarende lave 2 metoder til hver attribut: "setAlder", "getAlder", "setKoen" og "getKoen". Det sker lettest ved at kopiere linierne fra "setNavn" og "getNavn", og så rette dieverse småting.
    Luk implementation og compiler koden. Hvis du får fejl, så er det nok fordi du har glemt, at alder er et tal!
    Bemærk, at tidligere oprettede objekter forsvinder, når kildekoden er ændret, og der compileres påny.
    Opret et objekt af klassen "elev", og tildel eleven: navn, alder, køn og klasse. Bemærk at de 3 første attibutter arves fra "hg_person".

  6. Flere klasser
    Opret en ny klasse "ansat" og placer ikonen nedenfor "hg_person" i venstre side.
    "ansat" skal arve fra "hg_person", så lav pilen!
    Ret i implementation af "ansat": attributten 'navn' erstattes med 'stilling', og resten af koden tilpasses.
    Compiler og opret et objekt, som du tildeler værdier med de givne metoder: navn, alder, køn og stilling (vælg f.eks. pedel Henrik).
    Fidusen ved nedarvning er, at vi samler alle fællestræk i "hg_person" (navn, alder, køn), og nøjes med de specifikke ting i "ansat" (stilling) hhv. "elev" (klasse). På den måde genbruges kode, og vi sparer tid.

  7. Interface
    Dobbeltklik på ikonen for "hg_person", og skift fra implemenattion til interface. Gentag for "ansat" og "elev".
    Kik i mappen "HG", og se, at der er skabt en mappen "doc" med en masse filer. Dobbeltklik på "hg_person.html", "ansat.html" og "elev.html", så de åbnes i browseren. De beskriver den viden, som en bruger af klasserne har brug for!