mebus = OOP aan het leren=)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mebus  Hackintosh

Mebus Hackintosh

16/12/2006 09:54:00
Quote Anchor link
ik heb nu dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

$boek
= new Book();
echo $boek->getName();
echo $boek->getDescription();
echo $boek->getPrice();

?>


Het engiste voordeel van wat ik zie is dat dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$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
 
PHP hulp

PHP hulp

16/10/2021 00:59:10
 
Jelmer -

Jelmer -

16/12/2006 10:02:00
Quote Anchor link
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.

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.
 
Mebus  Hackintosh

Mebus Hackintosh

16/12/2006 10:11:00
Quote Anchor link
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?
 
Jelmer -

Jelmer -

16/12/2006 10:22:00
Quote Anchor link
Zou je kunnen doen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
   }
}

?>


De benen lopen voor je nu :)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
   }
}

?>
 
Mebus  Hackintosh

Mebus Hackintosh

16/12/2006 10:30:00
Quote Anchor link
O ja nouw zie ik het denk ik=) Je zorgt ervoor met de implementatie "Verplaatsbaar" voor dat het eene na een andere object kan gaan zeker? Maar weer niet dat een functie van een andere object zomaar gebruikt kan worden in een andere?

daarvoor heb je wel weer die extend nodig in de klas skater?
Gewijzigd op 01/01/1970 01:00:00 door Mebus Hackintosh
 
Jelmer -

Jelmer -

16/12/2006 10:38:00
Quote Anchor link
Die implement van Verplaatsbaar is er alleen maar omdat zowel Mens als Skater dat zijn, en beiden dus een functie moveTo bevatten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class Atletiekclub
{
   protected $deelnemers = array();
   public function abonneer(Verplaatsbaar $iemand)
   {

      array_push($this->deelnemers, $iemand);
   }


   public function start()
   {

      foreach($this->deelnemers as $deelnemer) {
         $deelnemer->moveTo(20, 20);
      }
   }
}

?>


En die extend bij Skater is gewoon omdat een Skater een Mens is, en hij dan de functie moveTo overerft :)
 
Jan geen

Jan geen

16/12/2006 10:44:00
Quote Anchor link
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.
 
Mebus  Hackintosh

Mebus Hackintosh

16/12/2006 10:51:00
Quote Anchor link
Oké:) maar wanneer je de klas "Legs" niet oproept in de klas "Mens" heb je dus eigenlijk niet veel aan die implement?

edit: Rik, weer wat bijgeleerd=) Hoop op een goede manier dan=P
Gewijzigd op 01/01/1970 01:00:00 door Mebus Hackintosh
 
Jelmer -

Jelmer -

16/12/2006 11:02:00
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.