Oefening 5: Meestal objectoriëntatie

Doel

Gebruik overerving om code te hergebruiken en pas polymorfisme toe.

Opdracht

Maak klassen om verschillende figuren voor te stellen. Voorzie hierbij methoden om de omtrek en oppervlakte te berekenen. Verzamel figuren in een ArrayList.

Overerving

  1. Maak een nieuw project Figuren.
  2. Maak een klasse Figuur. Voorzie attributen om de x en y coördinaten van het middelpunt als geheel getal bij te houden. Maak deze attributen protected. Dit betekent dat deze attributen enkel gebruikt kunnen worden in de klasse zelf en in alle ervende klassen.
  3. Maak een klasse Rechthoek, die erft van de Figuur klasse.
    public class Rechthoek extends Figuur
    {
     //...
    }
    
  4. Maak in de klasse Rechthoek twee nieuwe attributen die de hoogte en breedte voorstellen.
  5. Voorzie een constructor die alle attributen aan de hand van de parameters invult.
  6. Overschrijf de methodes omtrek en oppervlakte. Maak een implementatie die de omtrek en oppervlakte van een rechthoek berekent.
  7. Test deze methodes.

Super

  1. Maak een klasse Vierkant die van Rechthoek erft.
  2. Schrijf een constructor voor Vierkant die als parameter de coördinaten van het vierkant en de lengte van een zijde meegeeft.

    1. Maak gebruik van de super constructor, dit is de constructor van de klasse Rechthoek.

      public class Vierkant extends Rechthoek
      {
      public Vierkant(int x, int y, int z){
        super(x,y,z,z); //roept de constructor van Rechthoek aan waarbij h = z en b = z
      }
      }
      
  3. Test de methoden omtrek en oppervlakte van de klasse Vierkant. Merk op dat je deze niet hoeft te definiëren.

UML

  1. Figuur 1 geeft het klassendiagram van het project op dit punt.

    UML klassendiagram van het project Figuren

    Figuur 1: UML klassendiagram van het project Figuren.

    1. De protected toegangsvariabele wordt aangeduid met een kardinaalteken.
    2. De overervingsrelatie wordt aangeduid met een holle pijl. De pijl vertrekt vanuit de ervende klassen en wijst naar de super-klasse.
  2. Breid dit project uit met klassen voor een driehoek, ellips en cirkel. Tips:
    1. Voor een driehoek geldt:
      1. oppervlakte = basis * hoogte / 2
      2. omtrek = basis + hoogte + √(basis² + hoogte²)
    2. Voor een ellips geldt:
      1. oppervlakte = pi * grote straal * kleine straal
      2. omtrek ≈ pi * (grote straal + kleine straal)

Polymorfisme

  1. Maak een klasse Verzameling. Deze klasse bestaat uit een ArrayList van figuren.
  2. Maak een methode om een figuur toe te voegen. Bemerk dat alle objecten van subklassen van Figuur, ook tellen als het type Figuur. Dit betekent dat met deze methode een vierkant, rechthoek, driekhoek, ellips en cirkel toegevoegd kan worden.
  3. Maak een methode waarmee de som van alle omtrekken van de figuren in de verzameling kan berekend worden.
  4. Maak een methode filter die een verzameling teruggeeft waarmee aan de hand van een String parameter de klasse kan geselecteerd worden.

    1. Aan de hand van de instanceof operator kan bepaald worden wat de subklassen is van een object. bvb.
    Figuur f = new Vierkant(0,0,2);
    if(f instanceof Vierkant){
     //f is een vierkant
    }
    

Extra

  1. Het is niet de bedoeling dat er een object geïnstantieerd wordt van de klasse Figuur. Om dit te voorkomen is het mogelijk de klasse abstract te maken. Ook de methoden omtrek en oppervlakte kunnen dan abstract aangeduid worden. Voor een abstracte methode hoeft geen implementatie geschreven te worden.

    public abstract class Figuur
    {
     protected int xCenter;
     protected int yCenter;
    
     abstract double oppervlakte();
     abstract double omtrek();
    }
    
  2. Vervolledig het UML klassendiagram.
  3. Maak een uitbreiding op Bankrekening, zie extra van oefening 1. Maak een Spaarrekening en een Zichtrekening klasse. Op een spaarrekening kan het saldo niet onder nul gaan en op een zichtrekening kan dit tot een bepaalde limiet bvb. 1000.

results matching ""

    No results matching ""