Helsingfors universitet / Institutionen för datavetenskap /
Fortsättningskurs i programmering / Copyright © 2008 Arto Wikla.

Fortsättningskurs i programmering, tentamen 8.12 2008/AW

Skriv namnet på kursen, datum för provet, ditt eget namn och ditt
studentnummer, samt din underskrift upptill på varje svarskoncept. Skriv
varje svar på sitt eget konceptark! Inget tilläggsmaterial är tillåtet
vid denna tent.

1.    Du har klassen InfoSökare till ditt förfogande: på ett eller annat
sätt kan den söka efter information någonstans, kanske från webben,
kanske från någon databas, vem vet. Du vet inte. Och du vet inte hur det
går till. Du känner endast till "API"-specifikationen för klassen:

  o public InfoSökare(String hemligKod) konstruerar objektet InfoSökare.
    En helig kod, som på något sätt - du vet inte hur - definierar gränserna
    för informationssökningen, ges som parameter. Observera att klassen 
    InfoSökare alltså endast har denna enda konstruktör.

  o public String vadÄr(String vem) ger som sitt värde informationen som
    anslutits till parametern, i form av en teckensträng.

  o public boolean raderaInfo(String vem) raderar informationen som anslutits
    till teckensträngen som getts som parameter.

  o public String toString() ger som värde en tydlig teckensträng som beskriver
    objektet InfoSökare. Innan du provar vet du inte hurdan den är, men du kan
    lita på att representationen är användbar.

Skapa en underklass Teleidentifieringsdata år den här klassen med 
"API"-specifikationen:

  o public Teleidentifieringsdata(String operatör, String hemligKod) konstruerar
    objektet Teleidentifieringsdata med den givna koden.

  o public Teleidentifieringsdata(String operatör) konstruerar objektet
    Teleidentifieringsdata med koden "007".

  o public String operatör() ger operatörens namn som sitt värde.

  o public String vadÄr(String vem) ger som sitt värde teleidentifieringsdatat
    som anslutits till parametern, i form av en teckensträng. 
    "Teleidentifieringsdata" avser här en sådan teckensträng som man får då man
    avlägsnar alla bokstäver från teckensträngen som metoden vadÄr i klassen
    InfoSökare returnerar. Du kan använda klassmetoden
    Character.isLetter(char ch) med värdet sant i klassen Character för att
    känna igen bokstäver. Den är sann då parametern är en bokstav, annars falsk.

  o public boolean raderaInfo(String vem) raderar informationen som anslutits
    till teckensträngen som getts som parameter.

  o public String toString() ger som värde en tydlig teckensträng som beskriver
    objektet Teleidentifieringsdata. Representationen består av namnet på
    operatören med teckenrepresentationen som erbjuds av klassen InfoSökare
    ansluten efter den. 

Programmera endast de nödvändiga delarna. Illustrera hur man använder
klassen du har programmerat med hjälp av ett litet huvudprogram.

                                                                     (16 poäng)


2. Förklara kort och exakt vad följande koncept inom Javaprogrammering betyder.
Hänvisa inte till andra uppgifter i detta svar, eftersom varje uppgift kommer
att kontrolleras av olika personer! Maximilängden på svaret är ett konceptark,
alltså 4 sidor.

  a. yliluokka ja aliluokka (superclass and subclass)
  b. abstrakti luokka (abstract class)
  c. rajapintaluokka (interface)
  d. polymorfismi (polymorfism)
                                                                     (16 poäng)


3. Skapa programmet RaknaAntalOrd, med vilket man kan studera antalet ord in
en textfil. Först ber programmet om namnet på textfilen som skall analyseras.
Sedan be programmet om orden som skall studeras, orden som skall räknas.
"Orden" kan vara vilken som helst, icke-tom String-teckensträng. Programmets
egentliga jobb är att räkna och utmata antalet av det givna ordet i den givna
filen. Programmet måste vara berett på fel och behandla avvikelser.
Felmeddelandena måste vara åskådliga.

Tips:

  o Du får, och det lönar sig att, använda klassen HashMap (men du
    måste inte!) Om du inte använder den kan du anta att det inte finns mer
    än 50 ord.

  o Om du använder klassen HashMap kan du ha nytta av följande del
    av API-beskrivningen:

    * public HashMap() skapar ett tomt objekt Hashtable som beskriver ett
      objekt av K-typ som ett objekt av V-typ.

    * public V put(K key, V value) ansluter associationen key-->value till
      objektet HashMap; om en association redan har anslutits till nyckeln
      ersätter metoden den med en ny och returnerar den gamlas betydelse som
      sitt värde; om ingen nyckel fanns returnerar metoden värdet null.

    * public V get(Object key) returnerar värdet på key-nyckeln som sitt
      värde; om det inte finns någon nyckel returnerar metoden null.

    * public boolean containsKey(Object key) true om det finns key bland
      nycklarna, annars false.

    * public V remove(Object key) raderar nyckeln key och dess värde, d.v.s.
      associationen key-->value raderas, returnerar det raderade värdet value
      som sitt värde; returnerar null om ingen nyckel finns.

    * public String toString() skapar en teckenrepresentation av objektet
      HashMap, komponenterna modifieras med sina egna metoder toString().

  o HashMap, som representerar teckensträngar som heltal, är av typ
    HashMap.

  o För utskrivningen av resultatet kan du nöja dig med den textrepresentation
    som HashMaps egen toString skapar, se exemplet nedan. Om du inte
    använd HashMap, hurdant som helst klar textrepresentation räcker.

  o Användarexempel (användarens text med kursiver nedan):

     Vilken fil skall analyseras? (en tom teckensträng kommer att avbryta programmet)
     flora.txt
     Finner inte filen flora.txt!
     Vilken fil skall analyseras? (en tom teckensträng kommer att avbryta programmet)
     fauna.txt
     Ge ord som skall analyseras (en tom teckensträng kommer att hejda inmatningen av ord)
     katt
     Ge ord som skall analyseras (en tom teckensträng kommer att hejda inmatningen av ord)
     mus
     Ge ord som skall analyseras (en tom teckensträng kommer att hejda inmatningen av ord)
     hund
     Ge ord som skall analyseras (en tom teckensträng kommer att hejda inmatningen av ord)
    
     Analys av filen fauna.txt:
     {mus=124, katt=35, hund=235}
   
                                                                          (18 poäng)



                         Lycka till med provet och god jul!