Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ php | oop ] Dziedziczenie czy agregacja ?
DhuCerbin
post 4.05.2004, 16:33:17
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.06.2003

Ostrzeżenie: (0%)
-----


Witam

Mam problem natury projektowej :-)

Mam dana klase systemu szablonów, chce stworzyc klase pozwalajaca na szybką obsługe tego, jakby wzorzec adaptera. Nie wiem jednak czy moze skorzystac z dziedziczenia. Czyli dwie mozliwosci :

:arrow: Klasa macierzysta 'Template' jest przodkiem klasy sterujacej 'TplManager', która wychdozi z tego jest rozszerzeniem jej. Wtedy w konstruktorze uruchamiamy konstruktur
[php:1:a538664b0b]
function __construct($param){
parent::__construct($param);
}
[/php:1:a538664b0b]
Co daje mi pełna włądze nad kodem i proste odwołania przez pseudozmienna $this.

:arrow: Drugie - Klasa 'Template' jest zawierana przez referencje we właściwości.
[php:1:a538664b0b]
function __construct($params){
$this -> tpl =& new Template($params)
}
[/php:1:a538664b0b]
Mam tu z kolei władze poprzez referencje w wartosci.

:?: teraz pytanie : która możliwosć jest lepsza pod wzgledem nie wydajnosciowym, ale bardziej mi chodzi, o zgodnosć z zasadami oop.

:idea: Wedle mnie pierwszy sposób moze i wygodniejszy, ale nijak ma sie do zasady : "Stosuj kompozycje niz dziedziczenie" - Wtedy jednak mam wydaje mi sie pełniejsza kontrole nad klasą, za sprawą uzycia public/protected/private - moge zapezpieczać na dwa poziomy, tzw. zewnetrzny i rodzinny [ protected a private]. Drugi sposób byłby jednak zgodny ze znanym wzorcem adaptera, który to wymyslili ludzie doswiadczenni. Jednak wydaje mi sie tu problemem jeden fakt. Jeśli klasa Template sie rozrośnie, to moze zostać zachwiana zasada 'otwarcia i zamkniecia', gdy w pierwszym rozwiazaniu, zmieniam tylko slowo po 'extends'.

Wiec co bedzie lepsze ?

pozdrawiam DhuCerbin
Go to the top of the page
+Quote Post
Ludvik
post 5.05.2004, 11:59:17
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Ja bym poszedł pierwszą drogą... Dziedziczenia się używa, jak chcesz poszerzyć możliwości klasy, dodać kilka funkcji. Agregacja w tym przypadku wydaje mi się niewygodna. Z resztą sam zobacz, gdy będziesz chciał się odwołać do szablonu będziesz musiał użyć przy agregacji zawsze zapisu $agregacja->$tpl->... W przypadku dziedziczenia zapis staje się łatwiejszy.
Go to the top of the page
+Quote Post
halfik
post 5.05.2004, 19:34:24
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

Ostrzeżenie: (10%)
X----


"'Template' jest przodkiem klasy sterujacej 'TplManager'" -> odpowiedziales sobie na wazne pytanie... dziedziczenie smile.gif


--------------------


"Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski)
dev: gazeta.ie
Go to the top of the page
+Quote Post
DhuCerbin
post 5.05.2004, 21:40:34
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.06.2003

Ostrzeżenie: (0%)
-----


To jest moje załozenie. W pierwszej metodzie chce utworzyc 'TplManager' jako potomka.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:56