mebus = OOP aan het leren=)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
interface Product {
public function getName();
public function getDescription();
public function getPrice();
}
class Book implements Product {
public function getName() {
return 'Afblijven<br />';
}
public function getDescription() {
return 'Een verhaal van carry slee waarbij een meisje verslaafd raakt aan de drugs<br />';
}
public function getPrice() {
return '11,95<br />';
}
}
class Summary {
public function getSummary( Product $product ) {
$summary = 'Titel: '.$product->getName()."\n";
$summary .= 'Beschrijving: '.$product->getDescription()."\n";
$summary .= 'Prijs: '.$product->getPrice()."\n";
return $summary;
}
}
$boek = new Book();
$summary = new Summary();
echo $summary->getSummary($boek);
?>
interface Product {
public function getName();
public function getDescription();
public function getPrice();
}
class Book implements Product {
public function getName() {
return 'Afblijven<br />';
}
public function getDescription() {
return 'Een verhaal van carry slee waarbij een meisje verslaafd raakt aan de drugs<br />';
}
public function getPrice() {
return '11,95<br />';
}
}
class Summary {
public function getSummary( Product $product ) {
$summary = 'Titel: '.$product->getName()."\n";
$summary .= 'Beschrijving: '.$product->getDescription()."\n";
$summary .= 'Prijs: '.$product->getPrice()."\n";
return $summary;
}
}
$boek = new Book();
$summary = new Summary();
echo $summary->getSummary($boek);
?>
Ik snap ongeveer hoe het werkt maar ik zie alleen het nut er nog niet echt van
Want ik zouw toch ook gewoon dit kunnen doen:
Code (php)
Het engiste voordeel van wat ik zie is dat dit:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$boek = new Book();
$summary = new Summary();
echo $summary->getSummary($boek);
?>
$boek = new Book();
$summary = new Summary();
echo $summary->getSummary($boek);
?>
korter is.
Zouw iemand uit hier nog wat extra uitleg over kunnen geven?
GR. mebus
Gewijzigd op 01/01/1970 01:00:00 door Mebus Hackintosh
Maar even wat jij fout doet: jij wil OOP combineren met je procedural manier. Dat kan, maar dan mis je het echte voordeel van de objecten. Ik heb zelf altijd maar 2 type bestanden waar ik procedural code in heb staan: index.php (het initialiseren en de stappen doorlopen) en mijn templates. De rest is allemaal objecten die zichzelf en elkaar manipuleren. Ik kan nu bijvoorbeeld alle dingen aanpassen door 1 klasse aan te passen. Die verandering wordt dan meteen door de hele applicatie doorgevoerd. Ik kan hem ook gemakkelijk vervangen, zonder in al die procedure-scripts (want die heb ik immers niet) iets aan te hoeven passen. Hoogstens de klassen die er gebruik van maken.
En dat 'implements' is vooral voor de programmeur zelf, en eventueel later voor functies die aan de hand daarvan kunnen zien of ze iets kunnen doen met het object of niet.
Jelmer schreef op 16.12.2006 10:02:
OO programmeren is niet alleen je functies in objecten onderbrengen, maar in objecten bedenken. Een Summary is een object. Een Product is een object. Je zou zelfs de Price een object kunnen maken. Ieder object heeft zijn eigen 'features' en kan zichzelf aanpassen.
Oké ma wat nouw als ik een klas "mens" zouw hebben welke functies zouden daar in moeten zitten dan?
lopen
praten
kijken
horen
enz..
Maar een mens heeft ook benen, en welk lichaamsdeel van de mens zorgt ervoor dat ie kan lopen? de benen dus
zouw ik dan allemaal weer apparte klassen moeten maken ofniet?
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
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
<?php
interface Verplaatsbaar {
public function moveTo($x, $y);
}
class Legs {
public function moveTo($x, $y)
{
echo 'ik loop!';
}
}
class Mens implements Verplaatsbaar
{
protected $legs;
public function __construct()
{
$this->legs = new Legs();
$this->legs->setLength(90);
}
public function moveTo($x, $y)
{
$this->legs->walk($x, $y);
}
}
?>
interface Verplaatsbaar {
public function moveTo($x, $y);
}
class Legs {
public function moveTo($x, $y)
{
echo 'ik loop!';
}
}
class Mens implements Verplaatsbaar
{
protected $legs;
public function __construct()
{
$this->legs = new Legs();
$this->legs->setLength(90);
}
public function moveTo($x, $y)
{
$this->legs->walk($x, $y);
}
}
?>
De benen lopen voor je nu :)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
class Skates {
protected $speed = 5;
public function setSpeed($speed)
{
$this->speed = (int) $speed;
}
public function moveTo($x, $y)
{
echo sprintf('ik skate met %d meter per seconde!', $this->speed);
}
}
class Skater extends Mens
{
public function __construct()
{
$this->legs = new Skates();
$this->legs->setLength(90);
$this->legs->setSpeed(12);
}
}
?>
class Skates {
protected $speed = 5;
public function setSpeed($speed)
{
$this->speed = (int) $speed;
}
public function moveTo($x, $y)
{
echo sprintf('ik skate met %d meter per seconde!', $this->speed);
}
}
class Skater extends Mens
{
public function __construct()
{
$this->legs = new Skates();
$this->legs->setLength(90);
$this->legs->setSpeed(12);
}
}
?>
daarvoor heb je wel weer die extend nodig in de klas skater?
Gewijzigd op 01/01/1970 01:00:00 door Mebus Hackintosh
Code (php)
En die extend bij Skater is gewoon omdat een Skater een Mens is, en hij dan de functie moveTo overerft :)
Ik ben zelf ook bezig met oop, maar wat ik ervan heb begrepen zijn interfaces ook bedoelt voor typehinting. bij dat eerste voorbeeld, je hebt een interface product, en een paar klassen, boek, cd en dvd die product implementeren. Die laatste 3 zijn dat ook van het type product.
edit: Rik, weer wat bijgeleerd=) Hoop op een goede manier dan=P
Gewijzigd op 01/01/1970 01:00:00 door Mebus Hackintosh
implement is puur een verzekering dat bepaalde functies aanspreekbaar zijn. Meer is het niet. Je kan dus een functie een 'eis' geven aan zijn parameters, namelijk dat die parameter een bepaalde interface implementeert, en daarmee dus bepaalde functies heeft.