Nada

Lösning till fiktiv tentamen i Prutt, 2D1385

1 Klasskamrater (5p)

Om man stoppar in segelytsklassen från nästa uppgift får man följande UML.
               ___________________
              |     Klasskamrat   |
              |___________________|
                 ^            ^
           ______|_____   ____|______        __________
          | Underklass | | Överklass |1    1| Segelyta |
          |____________| |___________|------|__________|     
 
 KLASS          DATAFÄLT            METODER
Klasskamrat    String namn        String getNamn()
               String adress      String getAdress()
                                  void setNamn(String namn)
                                  void setAdress(String adress)
Underklass     boolean knarkare   boolean knarkar()
               boolean svärare    boolean svär()
               boolean drinkare   boolean missbrukarSprit()
                                  void setKnarkare(boolean sant)
                                  void setSvärare(boolean sant)
                                  void setDrinkare(boolean sant)
Överklass      String Rolex       String getRolex()
               Segelyta segel     Segelyta getSegel();
                                  void setRolex(String Rolex)
                                  void setSegel(Segelyta segel)
Alla datafält är private, alla metoder public, ingenting static.

2 Kamratproblem (8p)

3 Kamratkön (10p)

Denna intressant uppgift kommer att diskuteras på den sista övningen, onsdag 9 maj 8-10.

4 Kamratsajten (7p)

<?xml version="1.0"?> 
<klasskamrater skola="KTH" klass="F-59"> 
  <kamrat enamn="Andersson" fnamn="Eva">
    <födelsedatum år="1940" månad="06" dag="23"> </födelsedatum>
    <barn fnamn="Bo" födelseår="1965"> </barn>
    <barn fnamn="Åsa" födelseår="1968"> </barn>
    <barn fnamn="Pia" födelseår="1976"> </barn>
  </kamrat>
  <kamrat enamn="Bengtsson" fnamn="Jan">
    <födelsedatum år="1939" månad="11" dag="01"> </födelsedatum>
    <dödsdatum år="1999" månad="12" dag="30"> </dödsdatum>
    <barn fnamn="Jon" födelseår="1961"> </barn>
  </kamrat>
  <kamrat enamn="Eriksson" fnamn="Henrik">
    <födelsedatum år="1942" månad="01" dag="19"> </födelsedatum>
    <barn fnamn="Viggo" födelseår="1964"> </barn>
    <barn fnamn="Kimmo" födelseår="1967"> </barn>
    <barn fnamn="Jonna" födelseår="1972"> </barn>
  </kamrat>
  - - -
</klasskamrater> 

5 Kamratträdet (8p)

Man skapar en rotnod med en sats av typen
root = new DefaultMutableTreeNode("KTH")
och sedan börjar man parsa xml-filen. Varje gång man stöter på starttaggen klasskamrater läser man av attributet skola och kollar att det har värdet KTH. I så fall skapar man en ny nod med det namn som attributet klass och adderar den som barn till rotnoden. När man stöter på starttaggen kamrat skapar man en ny nod och adderar den som barn till aktuell klassnod och när man hittar starttaggen barn skapar man en ny nod och adderar den som barn till aktuell kamratnod. På så sätt skapas ett träd där man kan klicka sej ner till Viggo.
Noderna vi talat om tillhör datamodellen men till varje nod hör också ett grafiskt objekt, till exempel en mappsymbol med namn på. När rotnoden skapades skickade vi med detta namn och det gjorde vi också för klassnoden. Men kamratnoder och barnnoder har så mycket information att den inte får plats på mappikonen. Man får skicka med den som ett informationsobjekt, alltså till exempel
new DefaultMutableTreeNode(new Barndata("Viggo",1964))
Objektet har en toString() som bestämmer vad som ska stå på mappikonen. På samma sätt gör man med kamratnoderna.
Den fullständiga informationen kan till exempel komma upp i en JOptionPane om man högerklickar på en kamrat eller ett barn.

6 Kamratikon (5p)

Se övning 3.

7 Kamrattjatt (7p)


Sidansvarig: <henrik@nada.kth.se>
Senast ändrad 3 maj 2001
Tekniskt stöd: <webmaster@nada.kth.se>