Compositie

Klasse

In dit voorbeeld wordt een vierkant klasse opgebouwd uit twee Punt klassen

Applet

H6P7.jpg (14475 bytes)

Programmacode

// De klassedefinitie van Vierkant 

public class Vierkant {  
   // stap1: compositie
   protected Punt linksboven;  
   protected Punt rechtsonder;

   // de constructor zonder argumenten
   public Vierkant()	 {
      linksboven  = new Punt(0, 0);
      rechtsonder = new Punt(1, 1);
   }

   // Constructor met argumenten
   public Vierkant( int lbx, int lby, int rox, int roy )	 {
   // linksboven moet ECHT links en boven rechtsonder zitten
      if (rox > lbx && roy > lby) { 	
         linksboven  = new Punt(lbx, lby); 
	rechtsonder = new Punt(rox, roy);
      }
   }

   // de hoogte van het vierkant
   public int hoogte()  { 
      return (rechtsonder.getY() - linksboven.getY() );
   }

   // Geeft de breedte van het vierkant
   public int breedte() { 
      return (rechtsonder.getX() - linksboven.getX() );
   }
   // berekent het oppervlak van het vierkant
   public int oppervlakte()  {
      return hoogte() * breedte();
   }

   // converteert de Vierkant naar een String
   public String toString() {
      String temp = "linksboven = " +  linksboven + " ; " ;
      temp += "rechtsonder = " + rechtsonder;
     return temp;
   }
}
// TestVierkant.java hoort bij Vierkant.java
import java.awt.Graphics;
import java.applet.Applet;

public class TestVierkant extends Applet {
   private Vierkant v1, v2;

   public void init()   {
      v1 = new Vierkant (1, 1, 3, 3);
      v2 = new Vierkant();
   }

  public void paint( Graphics g )  {
      g.drawString( "v1: " + v1, 25, 40 ); // toString() wordt aangeroepen
      g.drawString( "v2: " + v2, 25, 55 );
  }
}

Uitleg

Zoals bij de Punt en Cirkel klasse krijgt de Vierkant klasse een volledige verzameling methoden. Opdat de datamember verborgen zijn, maar via de methoden te benaderen.

Vierkant() constructor zet alles op 0
Vierkant(int x1, int y1, int x2, int y2) constructor met argumenten
hoogte() geeft de huidige hoogte van het vierkant
breedte() geeft de breedte van het vierkant
oppervlakte() geeft het oppervlak van het vierkant
toString() converteert de Vierkant klasse naar een String

stap1: compositie
Bij compositie bevat een klasse één of meerdere andere klassen. Bij het aanroepen van een memberfunctie van de containerklasse wordt vaak de uitvoering gedelegeerd aan de klasse binnen deze klasse.

De klassen binnen deze klassen hebben geen overervingsrelatie met deze klasse, dus kunnen protected datamember niet rechtstreeks benaderd worden. Als alle klassen in dezelfde package (directory) zitten dan de datamember als package aangeduid kunnen worden, waardoor geen memberfuncties nodig zijn voor de toegang.

Deze relatie wordt in de analyse aggregatie genoemd. En komt vaker voor dan overerving. Sterker nog. Als er onzekerheid bestaat of er sprake is van compositie of overerving, is het verstandig voor compostie te kiezen.

copyrights ® Little World 1997