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!