Helsingin yliopisto
/
Tietojenkäsittelytieteen
laitos
/
Java-ohjelmointi
/
Copyright © 2000
Arto Wikla.
581325-0 Java-programmering tent, 18.12 2001/AW
Skriv namnet på kursen, datum för tenten, ditt namn, personnummer och
din namnteckning på varje svarspapper.
Skriv varje svar på ett skilt konceptark!
1. "Jag orkar inte med ditt prat om 'abstrakta datatyper' och
inkapsling'!" Så gnäller din kompis då han hört dig entuasmera om
god programmeringsstil. Din kompis vet nog hur man programmerar -
han kan det där med algoritmer och att kalla på metoder (dock endast
dedär 'små hjälpredorna för huvudprogram'), parameterförmedling
klarar han också av - men en av de centrla idéerna med
objektsprogrammering inger honom endast oförstående frustrering.
Hjälp din kompis förstå vad det egentligen är fråga om. Skriv
alltså en förklaring som innehåller belysande programmeringsexempel
(högst 1 konceptark). Då svaret bedöms tas den tilltänkta läsaren i
beaktande. Skriv alltså inte för bedömaren, som redan känner till
saken, utan för den där kompisen.
(15 poäng)
2. Bobban är en enkel men ändå mycket individuell figur. Varje bobba har
ett entydigt ordningsnummer som den får vid födelsen. Detta nummer
är dess s.k. individualitet som aldrig kan förändras, och som ingen
annan kan få.
Bobbans arvsanlag är ett String-objekt. Bobborna förökar sig endast
genom att paras. Barnet får någondera förälderns arvsanlag som
sådant. Sannolikheten är densamma för båda. Arvsanlaget kan lottas
ut med expressionen if (Math.random()<0.5) ...
a. Gör en modell av bobban som klassen Bobba, där alla fält
naturligtvis är private, och som har de följande publika redskapen
(konstruktör och accessor):
- public Bobba(String arvsanlag)
- public String vilketArvsanlag
- public Bobba paras(Bobba annan)
- public String toString(), utdatan tar formen: (individualitet):
arvsanlag, se exemplet.
b. DubbelBobban är bobbans släkting. Dess enda skillnad till bobban
är dess parningsmetod: DubbelBobbans barn får en katenation av
sina föräldrars arvsanlagssträng som sitt arv. Arvsanlagssträngarna
förenas alltså. Implementera klassen DubbelBobba som en underklass
till klassen Bobba. Programmera på nytt endast de behövliga delarna
- nya fält behövs till exempel inte. Exempel: (just såhär skall det
utmatas: figurens ordningsnummer hör alltså till utdatan, den
tredje utmatningen kan förstås vara antingen "(3): Maja" eller
"(3): Matts".)
Bobba pappa = new Bobba ("Matts");
Bobba mamma = new Bobba ("Maja"):
Bobba barn = pappa.paras(mamma);
System.out.printIn(pappa); // utdata: (1): Matts
System.out.printIn(mamma); // utdata: (2): Maja
System.out.printIn(barn); // utdata: (3): Maja
DubbelBobba gubbe = new DubbelBobba ("Kalle"); // nummer 4
DubbelBobba gumma = new DubbelBobba ("Kajsa"); // nummer 5
DubbelBobba unge = gumma.paras(gubbe);
System.out.printIn(unge); // utdata (6): KajsaKalle
(14 poäng)
3. Rubriken på en konstruktör är public Varelse(Inälva parameter).
Hur gör du en instans av klassen Varelse, om Inälva är
a) public abstract class Inälva {
public void görDittochDatt ();
}
b) pubic interface Inälva {
public void görDittochDatt();
} (10 poäng)
4. Du har klassen Inmatningsfil till att läsa textfiler. Klassen har
konstruktören Inmatningsfil(String namn). Filens namn ges som
parameter. Raderna läses med instansmetoden public String läsRaden().
När filen tar slut ger metoden värdet null. Man har inte förberett
sig på avvikelser i den här klassen! Den som kallar på konstruktören
och accessorn måste alltså själv behandla avvikelser.
a. Implementera klassen Heltalsfilter med hjälp av klassen
Inmatningsfil. Klassen heltalsfilter har konstruktören
Heltalsfilter(String filNamn).
Med hjälp av objektet Heltalsfilter kan man utläsa heltalen i en
textfil, så att alla andra tecken förbigås. (Alla enhetliga
sifferrader ses som heltal, förtecken tas inte i beaktande.)
Talen i filen läses med hjälp av accessorn public int
läsFöljandeSiffra(), som ger följande heltal som finns i textfilen
som sitt värde. När det inte finns fler heltal i filen ger metoden
värdet -1.
Avvikelser skall behandlas i klassen Heltalsfilter så att
användaren av instanserna inte behöver oroa sig för dem. Om
alstrandet av objektet Inmatningsfil misslyckats ger metoden
läsFöljandeSiffra -1 från början. För användaren av objektet
Heltalsfilter ser alltså en fil som är trasig eller fattas från
början ut som en fil där det inte finns några heltal. En fil som
går sönder mitt i allt ser ut att ta slut.
OBS! Det räcker att Heltalsfiltret behandlar avvikelser förorsakade
av Inmatningsfilen på det mest generella planet, som en
Exception-avvikelse.
OBS! Om du kan, får du använda metoden Integer.parseInt(String m).
b. Gör ett program som testar klassen Heltalsfilter genom att fråga
användaren om namnet och räknar ut medeltalet av heltalen i filen.
Om filen är
asdf10 asd4
ö2xcv?+das-9asd,
till exempel, ger programmet medeltalet 6.25.
OBS! Du har alltså redan klassen Inmatningsfil, börja inte
programmera den mera!
(14 poäng)
Lycka till
&
God Jul!