Skocz do zawartości

Zdjęcie
* * * * * 1 głosy

Agregacja w PHP

agregacja kompozycja php oop

9 odpowiedzi w tym temacie
  • Zaloguj się, aby dodać odpowiedź
writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 23 lipca 2014 - 20:11

#1

Witacie panowie.

hmm który to już mój temat? Oo czwarty. :P

 

Mam do was pytanie w temacie Agregacji w PHP. Niby wiem kiedy użyć dziedziczenia, a kiedy agregacji. Ale z tym drugim jest lekki problem, bo nie wiem jak to ugryźć. Na jakiej zasadzie się tego używa?

 

Mam, np. dwie klasy i chciałbym jednej użyć w drugiej.

 

 

gdzieś zobaczyłem coś takiego:

public function __construct(MojaKlasa $klasa) {
 //czoś tu? 
}

Wytłumaczcie mnie to? Czy to też podchodzi pod agregacje?

 

Gdzieś przeczytałem, że agregacja dzieli się na:

-częsciową

-kompozycje

 

Czym one się różnią? Jak je zastosować?

 

Pomożecie?


  • 0

logo-green-dark.png


Yeoman

    Stary wyjadacz

  • 358 postów
    • Czas spędzony online: 6d 19h 43m 48s
169
Znakomita!
  • LocationKatowice

Napisano 23 lipca 2014 - 20:24

#2

A czy nie możesz użyć extend'a  a później dać parent'a ?

class A {
    function example() {
        echo "Rodzic";
    }
}

class B extends A {
    function example() {
        parent::example();
    }
}

$b = new B;
$b->example();

Wybacz że nie odpowiem Ci na pytanie agregacji, aczkolwiek jutro bym Ci powiedział więcej jakby Cię moja odpowiedź nie za bardzo zadowoliła :P


  • 1

2ed58r7.png


writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 23 lipca 2014 - 20:40

#3

No to o czym mówisz to dziedziczenie. I jest to dobre gdy mam dwie klasy, które muszę połączyć. tzn. tworzę jakąś klasę odpowiadającą za model i potrzebuję metod klasy MODEL. A dziedziczyć można jedną klasę.

 

Ale dajmy na to, że chciałbym w tej klasie MODEL korzystać z metod klasy DB oraz kilku innych. Może powieninem skorzystać z interfejsu?

 

Czy interfejsy też podchodzą pod agregację?

 

Dobra pomińmy to. Chcę się po prostu dowiedzieć o co chodzi z tą agregacją i jak ją poprowanie stosować?


  • 0

logo-green-dark.png


unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 24 lipca 2014 - 08:04

#4

Imo dobrzy przykład z głowy:

class Car
{
  private $engine;
  public function __construct( Engine $myEngine )
  {
    $this->engine = $myEngine;
  }
  
  public function ride()
  {
     $this->engine->startEngine();
     ...
  }

  ...
}

class Engine
{
  private $isStarted;
  public function __construct()
  {
    $this->isStarted = false;
  }
  public function startEngine()
  {
    $this->isStarted = true;
  }
  ...
}

  • 2

webDeveloper


writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 24 lipca 2014 - 08:25

#5
Dzieki. Czyli nawet dobrze myslalem.


Wysłane z mojego LG-E400
  • 0

logo-green-dark.png


Yeoman

    Stary wyjadacz

  • 358 postów
    • Czas spędzony online: 6d 19h 43m 48s
169
Znakomita!
  • LocationKatowice

Napisano 25 lipca 2014 - 20:22

#6

A nie trzeba później w instancji obowiazkowo podać konstruktora ? tj:

$engine = new Engine(); 
$car = new Car($engine);

Tak na oślep piszę.


  • 0

2ed58r7.png


writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 25 lipca 2014 - 20:28

#7

Trzeba. A da się jakoś inaczej?

 

A czy poprawnie by było zrobić tak:

class engine {
         private $car;

         public function __contruct() {
                  $this->car = new Car();
         }
}

  • 0

logo-green-dark.png


vms

    Użytkownik

  • 81 postów
    • Czas spędzony online: 5h 33m 5s
28
Bardzo dobra

Napisano 26 lipca 2014 - 05:40

#8

 

A czy poprawnie by było zrobić tak:

 

Kod jest poprawny. Ale zasadniczo to samochód posiada silnik a nie odworotnie.

Po drugie lepiej przekazać obiekt silnika jako parametr, bo w razie potrzeby możesz użyć innego silnika, np. ulepszonego, który dziedziczy po Engine. Ewentualnie możesz przyjąć jakiś silnik jako domyślny, jeśli parametr Engine nie będzie ustawiony.


  • 1

writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 26 lipca 2014 - 10:20

#9
To byl tylko przyklad.
Ok. Dzieki.

Wysłane z mojego LG-E400
  • 0

logo-green-dark.png


Yeoman

    Stary wyjadacz

  • 358 postów
    • Czas spędzony online: 6d 19h 43m 48s
169
Znakomita!
  • LocationKatowice

Napisano 18 sierpnia 2014 - 23:20

#10


Ale zasadniczo to samochód posiada silnik a nie odworotnie

 

Dobra uwaga :D


  • 0

2ed58r7.png






Również z jednym lub większą ilością słów kluczowych: agregacja, kompozycja, php, oop

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych