Övningsuppgifter, avsnitt 4

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

Interface

Modifiera fordonsexemplet från avsnitt 3 så att det använder interface i stället för abstrakta klasser.

(Skansholm har fler övningsuppgifter med abstrakta klasser och interface i Kapitel 10, men tyvärr är de svårare.)

  1. Skansholm, kapitel 3, uppgift 1-2. Implementera en klass som håller reda på hur många objekt som skapats i klassen och ger varje objekt som skapats ett unikt id-nummer.
  2. Definiera en enkel klassmetod (till exempel: en metod som adderar två tal). Skriv ett program som läser in två tal via en dialogruta eller på kommandoraden och anropar metoden för att addera talen.
  3. Ta en andra titt på klassen Object i dokumentationen av Javas API.

    Jag har påstått att en variabel av typ Object kan bindas till vilken typ av objekt som helst. Skriv och provkör ett enkelt program för att kontrollera att det stämmer.

  4. Som jag påpekar i anteckningarna är den statiska konstanten PI deklarerad public i java.lang.Math. Är det en bra idé? Ge argument för eller emot.
  5. Definiera en klass Kvadrat, med en position och en storlek (höjd), samt en metod innehaller(int x, int y) som avgör om kvadraten innehåller en given punkt.

    På samma sätt, definiera en klass Cirkel, med en position och en storlek (diameter). Definiera även en metod innehaller(int x, int y) som avgör om kvadraten innehåller en given punkt.

    Skriv ett enkelt program för att testa ovanstående klasser.

  6. Skapa en abstrakt klass Figur och låt klasserna Cirkel och Kvadrat ärva från den. Deklarera en abstrakt metod innehaller(int x, int y) i Figur. Skriv ett testprogram som skapar en array av Figur och lägger in olika Cirklar och Kvadrater. Vad händer när du anropar metoden innehaller(x,y) (med lämpliga värden på x och y) för de olika figurerna?
  7. Prova att lägga till andra typer av figurer till lösningen av uppgift 6 eller 7, till exempel en klass Group som representerar en mängd av olika figurer.

Diverse

Skriv ett enkelt program som använder paket.

Kompilera och provkör.

Omslagsklasser

Jag påstår att användning av omslagsklasser kan göra programmet ineffektivt. Undersök om det stämmer. Skriv ett program i två versioner, en som använder de vanliga primitiva datatyperna och en som använder omslagsklasser. Hur mycket prestanda förlorar man på att använda omslagsklasser?