Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][OOP] wielokrotne dziedziczenie, pytanie natury projektowo-filozoficzno-dywagacyjnej
Kedan
post
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 20.07.2007

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


Mam zależność tego typu:
  1. <?php
  2. class myObject{
  3.    //...
  4. }
  5.  
  6. class myModule extends myObject {
  7.    //....
  8. }
  9.  
  10. class myModuleExt extends myModule {
  11.    //....
  12. }
  13. ?>


ale do tego mam zależność:
  1. <?php
  2. class myConcreteModule extends myModule {
  3.    //...
  4. }
  5.  
  6. // i tu pojawia się problem
  7. class myConcreteModuleExt extends myModuleExt, myConcreteModule {
  8.    //...
  9. }
  10. ?>


Od jakiegoś czasu główkuję jak to rozwiązać, ale nic sensownego nie przychodzi mi do głowy.

Ten post edytował Kedan 11.05.2009, 11:29:35
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Nieraczek -> mała uwaga, że dyskusja nie dotyczy wskaźników, tylko wielokrotnego dziedziczenia.

Wszystkiego trzeba używać z umiarem. Jak ktoś pakuje kompozycję wszędzie, gdzie się da, "bo można cośtam", to jest to takie samo nadużycie, jak próba rozwiązywania wszystkich problemów świata przez dziedziczenie albo wielokrotne dziedziczenie. Więc nie żadne książki itd. a zwykłe myślenie i ludzka inteligencja są najważniejsze, bo to programista pisze kod i programista wie (a przynajmniej powinien), w jakim kierunku powinien on podążać i co powinno być dozwolone. Co komu z tego, że przeczyta książkę o wzorcach projektowych i później najchętniej to by rozszerzanie modelu o własną funkcjonalność w Doctrine w oparciu o kompozycję robił "bo a nuż mu przyjdzie jakiś hardcore'owy pomysł na rozszerzanie tego w trakcie działania". Nieukiem to można być, rzucając się bez głębszego zastanowienia na każdą nowinkę, jaką się gdzieś przeczytało, a nie dlatego, że tu się użyło dziedziczenia, a tam nie. Mój przykład jako rozbudowa przykładu ndx:

1. Piszę szachy. Zasady tej gry powstały 1000 lat temu. Jaka jest szansa, że będę dodawać nowe ruchy itd? Zerowa. Więc dziedziczenie, bo jest prostsze i rozwiązywane w czasie kompilacji, zatem nie ma co się męczyć i spowalniać programu, bo jakaś książka mówi cośtam (mówi to przy założeniu, że autor myśli, co robi).
2. Piszę aplikację do grania w różne odmiany szachów. Każda odmiana ma różne specyficzne reguły, a ponadto np. w "szachach chłopskich" sposób poruszania się figury na planszy może ulegać zmianie w trakcie gry (a użytkownik może chcieć robić własne odmiany). Paradoksalnie, ilość możliwych kombinacji jest wystarczającym argumentem na to, aby tych ruchów nie kodować na sztywno w postaci mnóstwa klas - można je dość prosto opisać jakimś abstrakcyjnym językiem, napisać parser i zrobić jedną klasę, która potrafi się poruszać na podstawie zadanych reguł. Dopiero aby ruchy mogły zmieniać się w trakcie gry, użyłbym kompozycji, i to zorientowanej bardziej na zmianę danych opisujących ruch, a nie jednego obiektu na inny.

Dziedziczenie, wielokrotne dziedziczenie, kompozycja, to tylko narzędzia, a nie cel sam w sobie. Niektóre bardziej niebezpieczne i stwarzające problemy w samym języku (wielokrotne dziedziczenie), inne mniej, ale niewłaściwe użycie to niewłaściwe użycie. Czasem istnieje więcej, niż jedno dobre rozwiązanie i liczą się potrzeby. Dwie możliwe wypowiedzi dotyczące tego samego hipotetycznego kawałka kodu:

1. Użyłem tego rozwiązania, ponieważ daje ono możliwość XXX, z której w istotny sposób korzysta część aplikacji Y. Ponadto użytkownik musi mieć możliwość PPP do wykonania czynności Z, niezbędnej w niektórych sytuacjach.
2. Użyłem tego rozwiązania, ponieważ daje ono możliwość XXX. Jest ona bardzo przydatna, w przeciwieństwie do rozwiązania Y, które wielu często nadużywa, a które jej nie posiada, a wiele zalet tej możliwości można znaleźć np. w książce PPP.

Pozostawiam wam to do przemyślenia i dodam jedynie, że wolałbym pracować z programistą #1...
Go to the top of the page
+Quote Post

Posty w temacie
- Kedan   [PHP][OOP] wielokrotne dziedziczenie   11.05.2009, 11:28:38
- - phpion   [PHP] pobierz, plaintext <?phpclass myConcreteM...   11.05.2009, 11:48:03
- - Kedan   Nie o to chodzi. myConcreteModule ma posiadać tyl...   11.05.2009, 12:05:27
- - marcio   A klasy abstrakcyjne mozesz uzyc jak interfejsy ty...   11.05.2009, 12:29:42
- - batman   Cytat(marcio @ 11.05.2009, 13:29:42 )...   11.05.2009, 12:39:11
- - Kedan   Ostatecznie wymyśliłem coś takiego: [PHP] pobierz,...   11.05.2009, 13:48:53
- - okitoki   takie bajerki to C++ nam serwuje interface w php ...   11.05.2009, 15:26:58
- - Kedan   Cytattakie bajerki to C++ nam serwuje Wiem, tylko ...   11.05.2009, 15:48:26
- - okitoki   Cytat(Kedan @ 11.05.2009, 16:48:26 ) ...   11.05.2009, 18:42:48
- - Zyx   Żeby próbować odpalać interfejsy na PHP4 i złościć...   11.05.2009, 20:35:43
- - Spawnm   warto imho przyjrzeć się :: , czyli klasa::funkcja...   11.05.2009, 20:45:41
- - okitoki   Cytat(Zyx @ 11.05.2009, 21:35:43 ) Że...   11.05.2009, 21:37:00
- - Zyx   CytatO metodę krzyczał, a tam mu si...   11.05.2009, 22:31:10
- - Kedan   @Spawnm Metody statyczne nie są złe, ale...   11.05.2009, 23:47:12
- - okitoki   Cytat(Zyx @ 11.05.2009, 23:31:10 ) De...   12.05.2009, 05:27:42
- - nospor   @okitoki zyx jedynie napisał, ze w php4 nie b...   12.05.2009, 06:37:11
- - okitoki   nie zupełnie, tak jak piszesz, bo stwierdził fakt ...   12.05.2009, 17:10:41
- - Spawnm   skoro mowa o Wielodziedziczeniu , to mógł by mi kt...   12.05.2009, 17:14:01
|- - plurr   Cytat(Spawnm @ 12.05.2009, 18:14:01 )...   12.05.2009, 17:36:53
|- - rzymek01   Cytat(plurr @ 12.05.2009, 18:36:53 ) ...   12.05.2009, 18:03:23
|- - plurr   Cytat(rzymek01 @ 12.05.2009, 19:03:23...   12.05.2009, 18:06:10
- - marcio   Chodzi chyba o to ze np w jakies klasie mozesz uzy...   12.05.2009, 17:22:54
- - marcio   Cytatogolnie. Niezbyt oryginalna, spotykam sie z t...   12.05.2009, 18:40:51
- - rzymek01   jeszcze raz przytoczę: CytatOgolnie rzecz biorac, ...   12.05.2009, 19:07:40
- - nieraczek   Dziedziczenie złe ? Jeśli nie dziedziczenie to co ...   12.05.2009, 19:13:58
|- - rzymek01   Cytat(nieraczek @ 12.05.2009, 20:13:5...   12.05.2009, 19:15:00
- - plurr   chodzi mi o samo dziedziczenie - jest be. lepiej w...   12.05.2009, 19:18:02
|- - pyro   Cytat(plurr @ 12.05.2009, 20:18:02 ) ...   12.05.2009, 21:11:24
|- - plurr   Cytat(pyro @ 12.05.2009, 22:11:24 ) P...   12.05.2009, 21:35:55
|- - pyro   Cytat(plurr @ 12.05.2009, 22:35:55 ) ...   12.05.2009, 21:42:51
|- - plurr   Cytat(pyro @ 12.05.2009, 22:42:51 ) ....   12.05.2009, 21:46:33
- - okitoki   Cytat(nieraczek @ 12.05.2009, 20:13:5...   12.05.2009, 21:08:07
- - Spawnm   jest be puki nie chcesz klasą admin odziedziczyć k...   12.05.2009, 21:15:29
- - Crozin   @Spawnm: co mają do tego metody statyczne? Nie za ...   12.05.2009, 21:44:57
|- - pyro   Cytat(plurr @ 12.05.2009, 22:46:33 ) ...   12.05.2009, 21:48:05
|- - plurr   Cytat(Crozin @ 12.05.2009, 22:44:57 )...   12.05.2009, 21:49:57
- - ndx   Przeczytajcie sobie wszyscy najlepiej jakąś książk...   12.05.2009, 21:58:47
- - nieraczek   Nie wiem co poniektórym podoba się we wskaźnikach ...   13.05.2009, 08:54:52
- - Crozin   Cytat1. Sposób: Można zrobić sobie klasę ruch i ka...   13.05.2009, 09:27:34
- - Zyx   Nieraczek -> mała uwaga, że dyskusja nie dotycz...   13.05.2009, 09:43:56
- - plurr   Faktycznie przyklad szachow jest niezbyt trafiony,...   13.05.2009, 11:08:23
- - marcio   Zgadzam sie z wami @plurr i @Zyx dziedziczenie pow...   13.05.2009, 13:12:31
- - Crozin   CytatJedno jest pewne, nikt nie chcialby pracowac ...   13.05.2009, 13:26:20


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

 



RSS Aktualny czas: 5.10.2025 - 03:28