[PHP]Verwerken van inheritance in een script

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
Voor school heb ik de opgracht gekregen om een systeem te schrijven in PHP 5 (Met de nieuwe OO addons) en daarin de nadruk leggen op 4 belangerijke onderdelen :


- Classes
- UML
- XML
- Inheritance (Overerving)


Nu is mijn plan eigenlijk al compleet klaar, maar blijf ik met een groot probleem zitten. Op de eerste 3 onderdelen heb ik goed de nadruk kunnen leggen, maar nu bemerk ik dat ik het erg moeilijk vind om "Overerving" hier ook in te gebruiken.
Tot voor kort had ik het eigenlijk zelf nog nooit gebruikt. En zelfs na meerdere tutorials op het net gelezen te hebben ontgaat mij hier compleet het nut van.


Dus mijn probleem :


Ik snap hoe het werkt en ik snap hoe ik het moet coden, maar ik moet natuurlijk ook een goede motivatie hebben waarom ik nou precies daar die "Overerving" gebruikt heb. Maar dat heb ik dus niet, omdat ik het nut ervan niet inzie.
Mijn vraag is dus, of iemand kan uitleggen in welke praktijk situaties "Overerving" van belang kan zijn, zodat ik mischien naar aanleiding van het praktijk voorbeeld het nut ervan snap.


Ik vraag dus niet of jullie mijn huiswerk willen maken, ik vraag gewoon simpel om een praktijk voorbeeld en waarom jij juist daar "Overerving" gebruikt zodat ik er het nut van inzie.

[ Voor 3% gewijzigd door CRiMiNaL op 30-08-2004 16:25 ]

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Wat vind jij er dan niet nuttig aan? Ik vind het vooral handig dat je centraal werkt:
een fiets
een mountainbike.


Met overerving heb je maar 1x de methode laatwieldraaien nodig omdat de mountainbike gewoon de methode van fiets kan gebruiken. Scheelt een hoop overbodige code.

Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
djluc schreef op 30 augustus 2004 @ 16:59:
Wat vind jij er dan niet nuttig aan? Ik vind het vooral handig dat je centraal werkt:
een fiets
een mountainbike.


Met overerving heb je maar 1x de methode laatwieldraaien nodig omdat de mountainbike gewoon de methode van fiets kan gebruiken. Scheelt een hoop overbodige code.
dus je bedoelt je hebt


Class fiets
{
function laatwieldraaien(....)
}


Class mountainbike
{
$fiets::laatwieldraaien(...)
}


Om het in het voorbeeld te houden, je wielen draaien wel hetzelfde, maar de aandrijving is verschillend. Of zit ik er nu naast ?

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je moet op een mountainbike toch hetzelfde trappen als op een andere fiets?

Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
djluc schreef op 30 augustus 2004 @ 18:10:
Je moet op een mountainbike toch hetzelfde trappen als op een andere fiets?
Whahaha sorry, het voorbeeld haalt mijn idee inderdaad een beetje onderuit.


Wat ik bedoel is dat je uiteindelijk een andere overbrenging hebt op een mountainbike dan op een fiets.


De rede waarom ik het nut dus nooit echt zag, was omdat ik niet veel situaties tegenkwam waar ik echt dezelfde function uit een andere class in een subclass ofzo nodig had. Meestal schreef ik ze dan toch opnieuw, en net iets anders, geschikt voor de nieuwe class.
Vandaar dat ik vroeg naar voorbeelden uit reallife coding, want ik zie de logica niet zo.

[ Voor 7% gewijzigd door CRiMiNaL op 30-08-2004 18:15 ]

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Een ander voorbeeldje, een CMS: voor alle items binnen je CMS heb je een object: (textobject, afbeeldingsobject enz.) Alle objecten kunnen verborgen worden middels een functie hide. Nu zou je deze overal neer kunnen planten, maar wat ook kan:


class cmsobject
{
function hide()
}


class cms_text
{
cmsobject::hide();
}


class cms_image
{
cmsobject::hide();
}

[ Voor 7% gewijzigd door djluc op 30-08-2004 18:19 ]


Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
Ik denk dat ik het wel begrijp, en overerving dus echt alleen handig is als je exact dezelfde fucntie nodig hebt.


Bedankt iig.

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
CRiMiNaL schreef op 30 augustus 2004 @ 18:31:
Ik denk dat ik het wel begrijp, en overerving dus echt alleen handig is als je exact dezelfde fucntie nodig hebt.
Bedankt iig.
Of een functie die je eenvoudig met behulp van enkele argumenten kan beïnvloeden.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

CRiMiNaL schreef op 30 augustus 2004 @ 18:31:
Ik denk dat ik het wel begrijp, en overerving dus echt alleen handig is als je exact dezelfde fucntie nodig hebt.


Bedankt iig.
Nee. Het punt is juist meer dat een mountain bike ook een fiets is dus hetzelfde kan als die fiets.


Een beter voorbeeld zou het volgende zijn (Ik gebruik (op java lijkende) psuedo code aangezien ik de oo syntax van php niet ken)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Fiets{

  public void trap(){
    \\implementatie
  }

  public void stuur(richting){
    //implementatie
  }
}

public class MountainBike extends Fiets{
  public zetInVersnelling(x){
    //implementatie
  }
}

Je hoeft in mountainbike juist alleen de extra's te implementeren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Overerving wordt vaak gebruikt in 2 verschillende situaties:
  • Je hebt een aantal eigenschappen/methoden/code/whatever in één klasse, en die hoort ook terug te komen in een andere klasse. Copy/pasten is slecht, zo hebben we geleerd, dus laten we die andere klassen de eigenschappen overnemen met overerving. Vaak zul je zien dat als je dit doet, de tweede klasse toch een logische specialisatie of uitbreiding blijkt te zijn van de eerste.
  • Als je in een systeem een aantal verschillende objecten uniform wilt kunnen behandelen, definiëer je 1 (abstract) basisobject met de acties die je op alle objecten toe wilt kunnen passen. Daarna ga je verschillende specialisaties van die klasse maken voor elk type object dat je wilt ondersteunen, en je overschrijft(override) elke "abstracte" actie zodat deze het gewenste doet op het betreffende object. Je weet dat alle objecten die je tegen kan komen de acties die je wilt doen ondersteunen (die hebben ze immers geërfd), en je weet dat door de overschrijving elk object ook doet wat het hoort te doen.
Pagina: 1