Övningsuppgifter, avsnitt 3

Sven-Olof Nyström
OOP med Java våren -25
Informationsteknologi
Uppsala Universitet

Skansholm, kapitel 2

Skansholm, kapitel 2:

  1. Konstruera en klass Räknare, enligt uppgift 1 i kursboken.
  2. Skriv ett Java-program som skapar en Räknare och använder den.
  3. Konstruera en klass Kort, enligt uppgift 3 i kursboken. Försök att hitta något sätt att provköra klassen.

Fordonsexemplet

Provkör

Koden för fordonsexemplet kommer bitvis, i löpande text. Försök sätta ihop koden så att den kan kompileras och provköras.

Kan en student vara cyklist?

Om klassen Person har en subklass Student, kan en student vara cyklist?

Om du är osäker, lägg till en klass Student i fordonsexemplet och försök skapa en cykel som cyklas av en student. Klassen Student ska förstås ärva av klassen Person.

Brott mot OOP

I klassen Person finns ett brott mot objektorienterade principer när det gäller hantering av ålder. Hur? Hur borde man göra istället?

Statiskt och Dynamiskt

Ge ett exempel på en situation där den dynamiska och den statiska typen hos ett objekt skiljer sig.

Var hör metoden hemma?

Nå, mycket kan hända om vi flyttar metoden. Ibland kompilerar inte programmet eller ger fel vid körning. Mer intressant är ju situationer när programmet fortfarande kan kompileras och köras men (kanske) ger ett annat resultat.

Ge gärna exempel!

Gemensam superklass

Jag nämner i anteckningarna att det ibland finns situationer när det är lämpligt att introducera en ny klass som är superklass till befintliga klasser. Kan du tänka dig någon sådan situation? (Det finns flera exempel i boken och i anteckningarna.)

Definition flera gånger

Konstruktorer i superklass och subklass

Anta att vi har två klasser A och B där A är en superklass till B. Båda klasserna definierar konstruktorer.

Kan subklassens konstruktor anropa superklassens konstruktor?

Finns det några begränsningar i hur de två konstruktorerna kan se ut?

Ge gärna exempel!

Typer

Nedanstående frågor bör vara enkla att besvara om du läst anteckningarna.

Abstrakta klasser

Hur använder man en variabel som deklarerats så här:

GeometricShape s;
där GeometricShape är en abstrakt klass.

Implementera fordonsexemplet med abstrakta klasser. Se till att definiera en lämplig main-metod så att du kan proköra.