login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Compositie vs overerving (Opgelost)

Offline erm - 07/12/2010 21:15 (laatste wijziging 07/12/2010 21:22)
Avatar van ermLid Beste,
Ik ben design patterns aan het bestuderen en mij is nog steeds niet duidelijk wat het verschil is. Als ik google kom ik op sites terug wat zegt dat Overerving gebruik maakt van extends. Composite maakt een nieuwe instantie aan in een classe.

Compositie:
  1. class A
  2. {
  3. private $b;
  4.  
  5. public function __contruct(B $b)
  6. {
  7. $this->b = $b;
  8. }
  9. }
  10.  
  11. class B
  12. {
  13. }



Overerving

  1. class A
  2. {
  3. }
  4.  
  5. class B extends A
  6. {
  7. }




Maar kan iemand mij precies vertellen wat het verschil en de voor/nadelen hiervan zijn? Waarom compositie boven overerving?

Alvast bedankt!

7 antwoorden

Gesponsorde links
Offline Stijn - 07/12/2010 21:28
Avatar van Stijn PHP expert Heel simpel trukje. Je moet de vraag stellen: "B is a A". Klopt die stelling, dan gebruik je overerving. Als de stelling eerder is als "A has a B", dan gebruik je compositie. Een voorbeeld. Een badkamer erft over van de kamer klasse omdat Badkamer is a kamer en een instantie van Toilet plaat je in de Badkamer klasse omdat Badkamer has a Toilet.

Wikipedia.org: is-a
Wikipedia.org: has-a
Offline avdg - 08/12/2010 09:45 (laatste wijziging 08/12/2010 09:50)
Avatar van avdg PHP gevorderde In het voorbeeld compositie heb je duidelijk te maken met een object van class B die je in een object van class A hebt gestoken. Dit betekent dat dat object niet meteen toegankelijk is van buitenaf, en minstens 1 actie moet doen via dat object van class A om dat object van class B te bewerken of terug te krijgen via bv. een getB() methode.

Om kort samen te vatten bewaard een object van class A een object van class B in een interne variabele.

In het voorbeeld overerving heb je slechts 1 object dat de methodes en variabelen van class A en B. Met een object van class B kan je de handelingen uitvoeren die aangemaakt werden in zowel class A en B, terwijl een object van class A alleen methodes kan doen in class A zelf.
In tegenstelling tot compositie bewaar je geen objecten, je neemt enkel de functionaliteit over.

Om dit kort samen te vatten, heeft object van class B de methodes en variabelen uit A (door de extend).

Conclusie: Er is een groot verschil.

Het grote verschil ga je merken dat je bij compositie een pattern hebt met objecten (je bewaard een object in een ander object), terwijl je bij overerving te maken hebt met een pattern op class-niveau - door middel van een extend - (ik hoop dat je goed het verschil kent tussen object en class).
Offline erm - 08/12/2010 10:46 (laatste wijziging 08/12/2010 11:20)
Avatar van erm Lid Ik wil eigenlijk weten wat de nadelen en voordelen zijn van die twee ontwerprinciepes.Qua code is mij dat wel duidelijk maar wat is nou het voordeel en nadeel?

Alvast bedankt!

Nadeel overerving
-Je verliest flexilibiteit omdat je van een implementatie afhankelijk bent.
-Je bent afhankelijk van een andere classe, mocht er iets in classe a veranderen dan heeft dit effect op classe a
-Als je een methode wilt veranderen dan moet je dit in alle classes veranderen.

Ik kan alleen weinig vinden over compositie

Voordeel overerving
-Data hiding met private bijv.
-Een object kan overerven van een ander object en krijgt daarmee alle methoden en
van variabelen (members) van het parent (bovenliggende) object mee. Dit biedt als
voordeel dat code uit het parent object opnieuw gebruikt kan worden, zonder of
met weinig modificatie.



Offline avdg - 08/12/2010 11:08 (laatste wijziging 08/12/2010 11:14)
Avatar van avdg PHP gevorderde Ik hou mij niet bezig met de voordelen en de nadelen, design patterns is voor mij meer met een doel beter inzicht te krijgen in het oop gebeuren en mogelijke technieken om problemen op te lossen.

Waarom geen voordelen en nadelen, ten eerste omdat het 2 totaal verschillende technieken zijn, en naarmate het wordt toegepast de ene altijd beter is dan de andere. Dit kan je niet met voordeel/nadeel lijstjes. Uiteindelijk zal je in de praktijk zonder die lijstjes moeten werken en zonder besef kunnen weten welk design pattern je gebruikt (en dit vaak zelfs zonder het zelf te beseffen) en hoe je je code op een propere manier kan opdelen/organiseren.
Offline erm - 08/12/2010 11:21
Avatar van erm Lid oke, kan iemand anders mij helpen met de voor/nadelen voor compositie? Ik weet dat de praktijk meer oplevert, maar voor nu wil ik mij alleen bewust zijn op theoretisch vlak.
Offline avdg - 08/12/2010 11:35
Avatar van avdg PHP gevorderde Je zal je meer voor moeten afvragen waar het toe te passen is, dit kan je doen door vele voorbeelden door te nemen. Neem een kijk op http://en.wikipedia.org/wiki/Composite_pattern
Offline erm - 08/12/2010 11:38
Avatar van erm Lid voor andere mensen die op het forum, hieronder de voor-nadelen die ik gevonden heb.
Nadeel overerving
Je verliest flexilibiteit omdat je van een implementatie afhankelijk bent.
Je bent afhankelijk van een andere classe, mocht er iets in classe a veranderen dan heeft dit effect op classe a
Als je een methode wilt veranderen dan moet je dit in alle classes veranderen.

Voordeel overerving
Data hiding met private bijv.

Een object kan overerven van een ander object en krijgt daarmee alle methoden en
van variabelen (members) van het parent (bovenliggende) object mee. Dit biedt als
voordeel dat code uit het parent object opnieuw gebruikt kan worden, zonder of
met weinig modificatie.

Voordeel compositie
On the fly code veranderen
Makkelijk code aanpassen / heregebruiken maakt gebruik van interface
Het makkelijker om een interface aan te passen dan een subklass

Nadeel compositie
Het is makkelijker om subclasses toe te voegen, dan nieuwe front end classes te maken. Oveerving maakt gebruik van polymorfisme.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.193s