Why use OOP?
Ik ben druk bezig met verschillende dingen xD
Zoals onder andere Pg en OOP
Ik had alleen ff een vraag over OOP..
Want ik zit daar al tijd over na te denken..
Het zit zo, ik wil misschien met een mmog beginnen ( gaap originaliteit, ik hoop dat het spel wel origineel wordt ) maar ik wil niet een of ander half kwaliteit kut spel maken die nooit afkomt en alles los aan elkaar hangt.
Daarom wil(de) ik goede technieken leren.
Eerst heb ik PDO geleerd toen begonnen aan OOP(nog mee bezig) en toen Pg(ook nog druk mee bezig).
Maar ik kleef steeds aan de vraag:
"Waarom wil ik nou eigenlijk OOP gebruiken, wat heeft het voor nut in een mmog ? "
Kan iemand mij hier verder mee helpen?
Ik had ook nog een ander klein vraagje: weet iemand misschien een tutorial waarin staat hoe je bijvoorbeeld een gastenboek in classes etc. moet opdelen want dat vind ik redelijk lastig.
Mvg, Vincent
Tip: ga je eens verdiepen in het MVC model.
Hergebruik, beter te onderhouden en het wordt eenvoudiger om samen te programmeren.
@Jonathan: Er bestaat nog wel meer dan alleen MVC, dat is slechts 1 van de mogelijkheden.
Jonathan schreef op 05.02.2008 19:39:
MVC model
Wat houd dat ongeveer in, wat is het verschil met gewoon OO ?
Jonathan schreef op 05.02.2008 19:39:
Je zult code niet 10x hoeven neer te zetten.
Als ik gewoon functies gebruik kan dat toch ook ?
juist ja
OOP doe je gewoon omdat je het prettiger vindt of niet. Je kan in C-land blijven, altijd programmeren met 'resources', dat zijn variabelen die x, y en z bevatten en waar je eigenlijk gewoon maar beter niet direct aan kan zitten zonder je functies want je hebt geen idee meer wat er eigenlijk in zit. Of je neemt een stapje verder en komt in OOP-land waar je variabele x, y en z onderbrengt in een object, net als de functies die x, y en z voor je aanpassen.
In PHP houdt OOP programmeren denk ik in eerste instantie vooral in dat je dag zegt tegen de arrays met data, en hallo tegen de objecten met data en methods. Waar de arrays in PHP de structs van C zijn, worden dat je objecten. En als bonus mag je je functies er ook nog eens bijin stoppen, en kan je objecten afdwingen als argumenten.
Overigens vergt het wel enige oefening voor je dit resultaat hebt.
Anders dan de post van Jonathan doet vermoeden hoef je niet meteen met MVC aan de gang om deze resultaten te behalen al zal het je wel helpen om je code nog beter te scheiden.
MVC is vooral handig als je bijvoorbeeld in het geval van java zowel een webUI als een SwingUI wil maken, dan kan je gewoon je controllers en models mee nemen en hoef je alleen met je views aan de gang.
- Je hebt een klasse, dat is een soort concept, dus bijvoorbeeld een klasse gastenboek?
- daarbinnen verschillende objecten? hoe defineer je die precies, (ja ik ben noob met oop) en wat zijn het precies?
1.
Voornamelijk hoefde ik maar 1 bron aan te passen ipv alle andere pagina's.
2.
Zo creëerde ik een eigen functie bibliotheek waardoor ik het weer makkelijk kon hergebruiken, scheelde me tijd omdat ik dan niet telkens iets opnieuw hoefde te programmeren aan functie's omdat ik niet meer wist waar ik een bepaalde code had staan (als je 2000MB al aan webdesign en code hebt, kan het extreem lastig worden)
Als je al baat hebt met mijn bovengenoemde punten, heb je al reden genoeg om met OOP aan de slag te willen gaan.. Je moet je nu niet overrompeld voelen als je op php.net of andere tutorials kijkt waar alle ins & outs worden uitgelegd over wat allemaal mogelijk is.
Als beginner zijnde, zonder enige OOP ervaring vanuit een andere taal dan heb je misschien de neiging om er niet eens aan te willen beginnen.
En je zult na enige tijd, steeds meer lichtpuntjes zien.. bepaalde termen gaan begrijpen (in het engels klinkt het soms nogal technisch en moeilijk) maar hoe vaker je ermee bezig bent, hoe logischer het wordt en daarmee ga je een moeilijke term ineens in een ander daglicht zien.
Je kan echt heel goed motiveren =)
Nu krijg ik er steeds meer zin in.
Zoals je zegt met die moeilijke termen dat dacht ik eerst ook met gewoon php maar bleek erg mee te vallen, zoals ik hierboven al vroeg kom ik uit een paar termen toch echt niet uit.. misschien weet jij raad ?
Gewijzigd op 01/01/1970 01:00:00 door Vincent
- een klasse is een blauwdruk van een object.
In een klasse beschrijf je dus wie je object is(naam), wat hij heeft (attributen) en wat hij kan(methods).
Als je een klasse instantieerd:
Heb je dus een object. Je kunt met 1 Klasse meerdere objecten maken dus.
Dit is eigenlijk wel het basis principe. Probeer eens wat voorbeeldjes te zoeken of neem idd het gastenboek idee wat je hebt en probeer daar objecten/onderdelen in te zoeken.
Dus een klasse kan je ook zoiets bij schetsen:
Klasse = Voertuigen
object - trein
met attributen zoals: mensen_vervoeren
en methods: rijden, brandstof_verbruiken
object - auto
met attributen zoals: mensen_vervoeren
en methods: rijden, brandstof_verbruiken
etc..
en die objecten geef je dan weer in functies etc?
Over het algemeen begin je met een zo algemeen mogelijke klas. Daarna krijgen de erfgenamen steeds meer specifieke dingen.
Je kunt bijv een klasse 'dier' hebben. Daarvan afgeleid kun je een klasse 'zoogdier' hebben en weer daarvan afgeleid een klasse 'tijger'. Vervolgens ga je kijken welke eigenschappen specifiek bij welke klasse horen.
Een functie voortplanten () kun je in de klasse 'dier' stoppen, want dat doen ze allemaal. Een functie geef_melk () kun je in de klasse 'zoogdier' stoppen.
Je zou ook weer kunnen zeggen: alle dieren voeden hun jongen. Dan is het weer handiger om een interface 'dier' aan te maken met een blauwdruk voor de functie voeden (). Maar goed dat gaat al weer een stap verder. Eerst maar eens verdiepen in de basis van OOP.
Alvast succes!
Wat ik wel al doe, wat ook een goede voorbereiding is op het echte OOP werk is alles in functies schrijven. Het is vanaf daar (heb ik van mensen die wel met OOP werken) maar een relatief kleine stap naar OOP. Zeker als je gewend bent om "Normaal" te programmeren (gewoon zoals veel beginners dat doen) is de stap om eerst met functies te gaan werken wat kleiner. Je hebt wel al (deels) de voordelen van het OOP programmeren, omdat je functies ook gewoon kan hergebruiken.
Vincent schreef op 05.02.2008 21:37:
Ah Ypma ik denk dat je me op het goede spoor hebt gezet!
Dus een klasse kan je ook zoiets bij schetsen:
Klasse = Voertuigen
object - trein
met attributen zoals: mensen_vervoeren
en methods: rijden, brandstof_verbruiken
object - auto
met attributen zoals: mensen_vervoeren
en methods: rijden, brandstof_verbruiken
etc..
en die objecten geef je dan weer in functies etc?
Dus een klasse kan je ook zoiets bij schetsen:
Klasse = Voertuigen
object - trein
met attributen zoals: mensen_vervoeren
en methods: rijden, brandstof_verbruiken
object - auto
met attributen zoals: mensen_vervoeren
en methods: rijden, brandstof_verbruiken
etc..
en die objecten geef je dan weer in functies etc?
De methods rijden en brandstof_verbruiken horen eerder in de klasse 'voertuig', want dat kunnen ze allemaal. De method 'mensen_vervoeren' hangt van het type voertuig af. In plaats van 'rijden' is 'voortbewegen' een betere naam i.v.m. boten en vliegtuigen enz.
Ik zie nu idd ook wat ik fout heb gedaan!
Robert functies gebruik ik ook =) dat is ook 1 van de redens waarom ik me in OOP ben gaan verdiepen in het begin, want ik hoorde dat OOP veel functie werk is en dat vind ik goed overzichtelijk.
Nou jongens ik denk dat ik hier wel verder mee kan, ik ga zo snel mogelijk een gastenboekje boven in OOP om te kijken of ik het snap, daarna post ik hem hier in dit topic en kunnen jullie je kritiek er lekker overheen laten gaan!
Bedankt voor de reacties,
Groeten Vincent
Hieronder een voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
interface mens {
public function ontharen ();
}
class man implements mens {
private $geslacht;
public function __construct () {
$this->geslacht = 'man';
}
public function ontharen () {
return '<p>Ik ben aan het scheren</p>';
}
}
class vrouw implements mens {
private $geslacht;
public function __construct () {
$this->geslacht = 'vrouw';
}
public function ontharen () {
return '<p>Ik ben aan het waxen</p>';
}
}
$m = new man ();
$v = new vrouw ();
echo $m->ontharen ();
echo $v->ontharen ();
?>
interface mens {
public function ontharen ();
}
class man implements mens {
private $geslacht;
public function __construct () {
$this->geslacht = 'man';
}
public function ontharen () {
return '<p>Ik ben aan het scheren</p>';
}
}
class vrouw implements mens {
private $geslacht;
public function __construct () {
$this->geslacht = 'vrouw';
}
public function ontharen () {
return '<p>Ik ben aan het waxen</p>';
}
}
$m = new man ();
$v = new vrouw ();
echo $m->ontharen ();
echo $v->ontharen ();
?>
Elk voortuig kan ook mensen vervoeren voor zover ik weet. Al is het alleen de chauffeur.. :) Volgens mij kan dat wel bij alle voertuigen. Alleen verschillende voertuigen vervoeren verschillende aantallen mensen.
Maar is het dan niet handig om een class vervoer te maken, waaronder je de methods: personen, goederen enz. (wat maar mogelijk is, containers bijvoorbeeld bij schepen) plakt?
Zoals ik al zei ben ik niet echt bezig met OOP, maar probeer er wel wat van mee te pakken en wat te leren van topics als deze
tutorial
Men noemt MVC een design pattern, de eerste keer dat ik iets las over design patterns dacht ik aan iets heel anders.. maar zo ben ik, ik verwacht altijd het ergste ;-)
Maar:
Model, een model kun je net zo zien als een radio bestuurbare auto. De auto heeft een accu, heeft een motor, een stuur inrichting, een ontvangst en zend unit, eventueel verlichting.. enz..
View, een view is niet meer het tonen van informatie, staan de lampjes aan?, hoe vol is de accu, heb ik communicatie?.. enz..
Controller:
De radio grafische besturing die je in de hand houd, die stuurt commando's door naar je auto. Je drukt op een knop, de wagen start.. en de lampen gaan aan.
Dus als je op de Controller, een knop drukt... stuur je 1 commando, maar zal in het Model 2 functie's aan roepen (motor start, licht aan) en via View wordt er dan op je radio grafische bediening een aantal lampjes aan gezet om aan te geven dat de motor draait en de lampen aan staan.
Goed, zo zou je MVC kunnen zien als concept, maar dit is wel mijn visie (ben altijd nerveus voor de betere OOPérs die het soms beter weten ;-) )
Toevoeging:
De relatie tussen MVC en OOP is eigenlijk gewoon de manier waarop je OOP gebruikt, MVC is geen functie van OOP, het bepaald niet hoe OOP werkt, maar gewoon hoe je vorm geeft aan je Class structuur.
Dus:
Class AutoModel
{
functie 1 : Motor aan
(start motor)
-> toon lampje, motor aan. (AutoView)
functie 2 : Lichten aan.
(lichten aan)
-> toon lampje, licht aan (AutoView)
}
Class AutoView
{
functie 1 : Lampje motor, aan.
functie 2 : Lampje lichten, aan.
}
Class AutoController
{
functie : druk deze knop om motor te starten, lichten aan te doen
-> roep de twee functie's aan van het AutoModel
}
Dit is natuurlijk geen echte manier van OOP nu, ik visualiseer dit nu eventjes zo voor je.
Wat betreft MVC, ik vond dit zelf wel een handige Men noemt MVC een design pattern, de eerste keer dat ik iets las over design patterns dacht ik aan iets heel anders.. maar zo ben ik, ik verwacht altijd het ergste ;-)
Maar:
Model, een model kun je net zo zien als een radio bestuurbare auto. De auto heeft een accu, heeft een motor, een stuur inrichting, een ontvangst en zend unit, eventueel verlichting.. enz..
View, een view is niet meer het tonen van informatie, staan de lampjes aan?, hoe vol is de accu, heb ik communicatie?.. enz..
Controller:
De radio grafische besturing die je in de hand houd, die stuurt commando's door naar je auto. Je drukt op een knop, de wagen start.. en de lampen gaan aan.
Dus als je op de Controller, een knop drukt... stuur je 1 commando, maar zal in het Model 2 functie's aan roepen (motor start, licht aan) en via View wordt er dan op je radio grafische bediening een aantal lampjes aan gezet om aan te geven dat de motor draait en de lampen aan staan.
Goed, zo zou je MVC kunnen zien als concept, maar dit is wel mijn visie (ben altijd nerveus voor de betere OOPérs die het soms beter weten ;-) )
Toevoeging:
De relatie tussen MVC en OOP is eigenlijk gewoon de manier waarop je OOP gebruikt, MVC is geen functie van OOP, het bepaald niet hoe OOP werkt, maar gewoon hoe je vorm geeft aan je Class structuur.
Dus:
Class AutoModel
{
functie 1 : Motor aan
(start motor)
-> toon lampje, motor aan. (AutoView)
functie 2 : Lichten aan.
(lichten aan)
-> toon lampje, licht aan (AutoView)
}
Class AutoView
{
functie 1 : Lampje motor, aan.
functie 2 : Lampje lichten, aan.
}
Class AutoController
{
functie : druk deze knop om motor te starten, lichten aan te doen
-> roep de twee functie's aan van het AutoModel
}
Dit is natuurlijk geen echte manier van OOP nu, ik visualiseer dit nu eventjes zo voor je.
Gewijzigd op 01/01/1970 01:00:00 door Danny Roelofs
Als method zou ik niet personen of goederen maken.
Ik zou bijv een klasse per voertuig maken, dus een klasse "boot". Als je dan een klasse 'cruiseschip' laat erven van de klasse 'boot', dan zou die klasse 'cruiseschip' een membervariabele 'personen' kunnen hebben, als array. Die array kun je dan vullen met variabelen van de klasse 'persoon'.
Bedankt voor de verdere uitleg.