o.. oo... oop!
http://www.phphulp.nl/php/tutorial/overig/oop-beginnershandleiding-php5/701/inleiding/1841/
Als mijn vragen niet zo helder zijn dan komt dat omdat ik informatie aan het processen ben en hier en daar was sterretjes zie... * * * :-)
Hier dan even wat vragen:
- Is het zo dat je alles in zoveel mogelijk objecten moet stoppen? Dus stel je hebt een class / object huis, dan heb je bijv. ook een class 'kamer', 'deur', 'raam', 'muur' enzovoorts en ook een class 'slaapkamer' en 'woonkamer' die de class kamer extenden. Is dat correct? Je krijgt dan wel heeeel veel classes lijkt mij.
- Als je zo heel veel classes hebt plaats je die dan allemaal los in je library, of zet je classes die bij elkaar horen in een aparte folder?
- Is het gebruikelijk om meerdere classes in 1 bestand te zetten? Dus stel je noemt het bestand house.php en dat je daar dan een class 'room', 'door', 'window' etc. in zet? Of toch gewoon alle classes als een los bestand?
- Hoe strict is de naamgeving? Ik doe het namelijk anders. Ik schrijf een class naam als volgt met hoofdletters voor ieder nieuw woord, bijvoorbeeld 'MijnClass' en het bestand zou ik dan gewoon mijnclass.php noemen. In variabelen gebruik ik juist kleine letters en een underscore, bijvoorbeeld '$kamer_modern'. En een underscore voor een protected / private variabele of functie doe ik nooit (is dat wel aan te raden)?
- In de tutorial ging het over het maken van een tabel, en daarbij ook het aanmaken van een tabelcel. Je hebt dan een class Cell en bijvoorbeeld een class BorderCell die de class Cell extend. De class BorderCell zet een randje om de cel heen. Nu vraag ik me af... je zou ook 1 class Cell kunnen maken en dan als type 'border' kunnen meegeven, dus $cell = new Cell('border'). Wat is de beste manier?
Een heleboel vragen... ik ben benieuwd of iemand dit kan ophelderen!
Net even deze tutorial doorgelezen: Als mijn vragen niet zo helder zijn dan komt dat omdat ik informatie aan het processen ben en hier en daar was sterretjes zie... * * * :-)
Hier dan even wat vragen:
- Is het zo dat je alles in zoveel mogelijk objecten moet stoppen? Dus stel je hebt een class / object huis, dan heb je bijv. ook een class 'kamer', 'deur', 'raam', 'muur' enzovoorts en ook een class 'slaapkamer' en 'woonkamer' die de class kamer extenden. Is dat correct? Je krijgt dan wel heeeel veel classes lijkt mij.
- Als je zo heel veel classes hebt plaats je die dan allemaal los in je library, of zet je classes die bij elkaar horen in een aparte folder?
- Is het gebruikelijk om meerdere classes in 1 bestand te zetten? Dus stel je noemt het bestand house.php en dat je daar dan een class 'room', 'door', 'window' etc. in zet? Of toch gewoon alle classes als een los bestand?
- Hoe strict is de naamgeving? Ik doe het namelijk anders. Ik schrijf een class naam als volgt met hoofdletters voor ieder nieuw woord, bijvoorbeeld 'MijnClass' en het bestand zou ik dan gewoon mijnclass.php noemen. In variabelen gebruik ik juist kleine letters en een underscore, bijvoorbeeld '$kamer_modern'. En een underscore voor een protected / private variabele of functie doe ik nooit (is dat wel aan te raden)?
- In de tutorial ging het over het maken van een tabel, en daarbij ook het aanmaken van een tabelcel. Je hebt dan een class Cell en bijvoorbeeld een class BorderCell die de class Cell extend. De class BorderCell zet een randje om de cel heen. Nu vraag ik me af... je zou ook 1 class Cell kunnen maken en dan als type 'border' kunnen meegeven, dus $cell = new Cell('border'). Wat is de beste manier?
Een heleboel vragen... ik ben benieuwd of iemand dit kan ophelderen!
Gewijzigd op 28/01/2011 14:37:33 door Ozzie PHP
3: Nee
2/4: Klassen kan je indelen. Vaak gaat dit met de naam. Denk aan Kamer_Woon, Kamer_Bad oid. Kamer zit dan in je hoofdmap (Kamer.php) en Woon als Woon.php in de map Kamer. Deze naamgeving gebruiken de meeste frameworks en raad ik je ook aan. Heel strict is dit echter niet.
5: Dit hangt erg van het verschil tussen de items. Als ze dus meer dan alleen de naam verschillen, kan je beter een aparte klasse maken. Als het enige verschil dus die naam is, niet. De BorderCell heeft dus een eigenschap (bijv borderwidth) die andere cellen niet hebben, daarom moet het in een aparte klasse.
Dankjewel voor je uitleg. Ik heb weer wat bijgeleerd. Bij punt 2/4, begrijp ik het goed dat je eigenlijk iedere class gewoon in de library zet, maar alle classes die een andere class extenden in een aparte map die dezelfde naam heeft als de class die ze extenden? En geef je met die underscore aan dat de class in een aparte folder staat?
Bij punt 5 zou je toch ook kunnen zeggen dat border een property van cell is? En dat die property standaard op 0 staat? Ik probeer een beetje het principe te begrijpen wat er achter zit.
Als je zelf iets schrijft, geef vooraf aan hoe je dingen gaat doen, en hou je aan die regels. Het is niet ontzettend belangrijk hoe je dingen noemt zoals het voor de mensen die er mee moeten werken maar wel duidelijk is.
Ook over je mappenstructuur, hangt helemaal van jezelf af, maar als je echt een huis als voorbeeld neemt, zou ik ( persoonlijk ) in mappen werken. Anders krijg je op een gegeven moment echt heel veel files in je map.
Hoe zou je dat in het voorbeeld van het huis doen? Net als Pim zegt in de library room.php zetten en dan een map Room in de library zetten waar je dan bijv. bath.php en living.php zet? Of zou jij het anders aanpakken?
dus:
House
class.House.php
Rooms
class.Room.php
LivingRoom
class.LivingRoom.php
etc etc
BathRoom
class.BathRoom.php
etc etc
Gewijzigd op 28/01/2011 19:25:07 door Pieter Jansen
Ik volg je opbouw niet helemaal... wat hoort bij wat?
Stel nou dat je objecten hebt welke voor meerdere subklasses geldt, bijvoorbeeld een Lamp, dan kun je die onder Room zetten, of desnoods onder House. Immers elke room en sub klasses kunnen een lamp krijgen. Maar die mag ook onder House vallen, je kunt ook lampen aan de buitenkant van je huis hebben. Die valt dus onder /House/
Gewijzigd op 28/01/2011 19:33:12 door Pieter Jansen
Even tussen de code tags zetten ;)
Maar wat nu als je Lamp ook wil gebruiken voor iets wat niet bij het huis hoort? Bijvoorbeeld bij auto?
Dan moet je dus een niveau hoger. Wat je ook kunt doen is een interface gebruiken voor de Lamp. Of ( wellicht beter ) een abstracte klasse. Dit kun je als aparte groep hanteren.
jemig... ingewikkeld allemaal...
Ozzie PHP op 28/01/2011 19:46:46:
jemig... ingewikkeld allemaal...
Zoals gezegd, werk zoals je zelf het mooiste/makkelijkste vind, mocht je voor een bedrijf gaan werken vertellen die je wel hoe hun structuur in elkaar steekt.
Ga je met een groepje iets starten(Lees: 3-4 mensen) kan je met elkaar overleggen welke structuur.
Punt 5:
Je hebt wel gelijk, want elke klasse kan een border hebben. Een beter voorbeeld is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
abstract class Organisme {
protected $leeft = true;
public function gaDood() { $this->leeft = false; }
public function leeft() { return $this->leeft; }
}
class Dier extends Organisme {
protected $loopt = false;
public function gaLopen() { $this->loopt = true; }
public function staStil() { $this->loopt = false; }
public function loopt() { return $this->loopt; }
}
class Plant extends Organisme {
protected $doetFotosynthese = true;
public function belicht() { $this->doetFotosynthese = true; }
public function belichtNiet() { $this->doetFotosynthese = false; }
public function doetFotosynthese() { return $this->doetFotosynthese; }
}
?>
abstract class Organisme {
protected $leeft = true;
public function gaDood() { $this->leeft = false; }
public function leeft() { return $this->leeft; }
}
class Dier extends Organisme {
protected $loopt = false;
public function gaLopen() { $this->loopt = true; }
public function staStil() { $this->loopt = false; }
public function loopt() { return $this->loopt; }
}
class Plant extends Organisme {
protected $doetFotosynthese = true;
public function belicht() { $this->doetFotosynthese = true; }
public function belichtNiet() { $this->doetFotosynthese = false; }
public function doetFotosynthese() { return $this->doetFotosynthese; }
}
?>
Een wat abstract voorbeeld, maar ik hoop dat je het begrijpt. Hoewel zowel dieren als planten organismen zijn en dus de gedeelde eigenschappen van organismen hebben, kunnen dieren geen fotosynthese doen en planten niet lopen. Daarom zijn het verschillende klassen.
'Organisme' is abstract, omdat het alleen (in dit voorbeeld) als dier of als plant bestaat, niet als 'organisme'. Een 'dier' bestaat natuurlijk ook niet, maar je snapt het voorbeeld vast.
thanks voor je toelichting Pim. Lijkt me inderdaad logischer dat je dan border als onderdeel van een cel neemt in plaats van als nieuwe class.
(Beetje offtopic, maar goed.)
Maar je gaat voor zoiets "kleins" als een border toch niet een aparte class maken? Of wel??
Of het klein is maakt niet zoveel uit. Je scheid dan wel mooi alles. Zie ook low coupling high cohesion en GRASP[/google].
Ook moet je maar eens naar bijvoorbeeld de Dimension klasse van java kijken. Die doet ook niet veel...
(Java wordt toch gezien als de taal om OOP te leren.)
oke... vage shit... krijg je wel erg veel bestanden op deze manier :-/
zo met die letters, en dan steeds 1 meer :D
Niek s op 02/02/2011 00:32:18:
echt super grappig die topic title :D
zo met die letters, en dan steeds 1 meer :D
zo met die letters, en dan steeds 1 meer :D
LOOOOOOOL