![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 53 Pomógł: 1 Dołączył: 20.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam zależność tego typu:
ale do tego mam zależność:
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 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 53 Pomógł: 1 Dołączył: 20.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie o to chodzi.
myConcreteModule ma posiadać tylko i wyłącznie bazową funkcjonalność (myModule) + jakąś własną - unikalną. myConcreteModuleExt ma posiadać funkcjonalność rozszerzoną (myModuleExt + myModule). unikalną bazową (myConcreteModule) i dodawać własną unikalną rozszerzoną. Trochę to zakręcone, ale mam nadzieję że sa się to przeprojektować żeby wyglądało sensownie. Od razu uprzedzam ludzi piszących o interfejsach: nic mi po nich, bo nie mam zamiaru przy każdej klasie definiować wszystkich metod na nowo. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
A klasy abstrakcyjne mozesz uzyc jak interfejsy tylko ze mozesz odrazu implementowac w niej metody.
-------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
A klasy abstrakcyjne mozesz uzyc jak interfejsy tylko ze mozesz odrazu implementowac w niej metody. Nie może, ponieważ występuje ten sam problem co z klasami nieabstrakcyjnymi - nie można dziedziczyć po więcej niż jednej klasie. ~Kedan Niestety w PHP nie ma rozwiązania Twojego problemu. Pozostaje Ci zmiana założeń lub kombinowanie z przekazywaniem pomocniczego obiektu między klasami. -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 53 Pomógł: 1 Dołączył: 20.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ostatecznie wymyśliłem coś takiego:
Niby działa, ale pewnie jeszcze parę warunków trzeba będzie dopisać i dopiero przetestować w boju. Ten post edytował Kedan 11.05.2009, 15:21:42 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
takie bajerki to C++ nam serwuje
interface w php to porażka, nie wiem dlaczego, ale na kilka razy miałem z nimi problem, bo jakiś serwer chociaż miał PHP5 wywalał mi błędy na nich. przez swoją głupotę musiałem potem przerabiać wiele bibliotek, a dokładniej usuwać wszystkie informacje o interfejsach. może wiecie dlaczego się tak mogło dziać -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 53 Pomógł: 1 Dołączył: 20.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Cytat takie bajerki to C++ nam serwuje Wiem, tylko pewnie jeszcze troche czasu minie zanim bede serwisy w C++ pisał ![]() Co do interfejsów, może jak implementowałeś kilka w danej klasie to może zapomniałeś zdefiniować jakąś metodę. A jak jeszcze po tej klasie dziedziczyłeś to już w ogóle kiszka. IMO interfejsy są ogólnie be. Tak jak singletony ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
Wiem, tylko pewnie jeszcze troche czasu minie zanim bede serwisy w C++ pisał ![]() Co do interfejsów, może jak implementowałeś kilka w danej klasie to może zapomniałeś zdefiniować jakąś metodę. A jak jeszcze po tej klasie dziedziczyłeś to już w ogóle kiszka. IMO interfejsy są ogólnie be. Tak jak singletony ![]() właśnie nie bo by mi to nie działało, pisałem dość wielki projekt dla bigstara i tam właśnie się z tym spotkałem, ja wtedy u siebie na kompie miałem zainstalowany taki gotowiec, serwer krasnala, i właśnie mi wszystko hulało, jak to przegrałem na wewnętrzny serwer w BS to wszystko padło, i to na błędach krytycznych. jak usunąłem cały wpis o interfejsach to zaczęło działać, aha. O metodę krzyczał, a tam mu się sama deklaracja interfejsu nie podobała. -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Żeby próbować odpalać interfejsy na PHP4 i złościć się, że nie działają, to trzeba być naprawdę zdolnym... jak Ci niby mają zadziałać, jak PHP4 ich nie obsługuje? Inerfejsy od wielu lat świetnie się mają chociażby w Javie, skąd zostały żywcem zerżnięte do PHP. Wykorzystuje je wiele projektów i jakoś nikt nie narzeka.
Wielokrotne dziedziczenie jest dość niebezpieczne z kilku powodów. Po pierwsze, nie oddziela implementacji od publicznego interfejsu - da się przez to stworzyć hierarchię klas, gdzie zmiana implementacji może wymuszać zmianę interfejsu lub zmuszać do nieprawidłowego użycia obiektów. Innymi słowy, trzeba znać bardzo dobrze wewnętrzne mechanizmy języka i przestrzegać ściśle dyscypliny. Kolejny mój zarzut przeciwko wielokrotnemu dziedziczeniu to sprawianie złudnego wrażenia, że jest ono potrzebne, podczas gdy sytuacje takie są baaaaaaaardzo rzadkie i w większości wynikają po prostu z popełnionych błędów projektowych. Nie bez powodu w Javie nie zdecydowano się na wprowadzenie czegoś takiego. Kedan -> Twój problem może być bez trudu rozwiązany np. przez użycie kompozycji, albo przemyślenie, czy naprawdę musi to być w ten sposób właśnie robione... dokładną decyzję musisz podjąć sam, ponieważ to jest Twój kod i powinieneś najlepiej wiedzieć, co on ma odzwierciedlać. Przemyśl to, co napisałem. Tysiące, jeśli nie dziesiątki tysięcy projektów doskonale sobie bez wielokrotnego dziedziczenia radzą i mają się świetnie. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
warto imho przyjrzeć się :: , czyli klasa::funkcja() bez dziedziczenia
![]() |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
Żeby próbować odpalać interfejsy na PHP4 i złościć się, że nie działają, to trzeba być naprawdę zdolnym... jak Ci niby mają zadziałać, jak PHP4 ich nie obsługuje? Inerfejsy od wielu lat świetnie się mają chociażby w Javie, skąd zostały żywcem zerżnięte do PHP. Wykorzystuje je wiele projektów i jakoś nikt nie narzeka. oj zyx może tobie kupili peceta teraz na urodziny, a ja niestety nie programuje od wczoraj. na php4 ten projekt by poszedł dopiero po totalnej przeróbce gdyż był cały napisany w OOP. A jak piszesz takie bzdury, to znaczy że ty w ogóle nie wiesz jak wyglądała obiektowość w PHP4, a raczej jej zarys, bo do obiektowości jej sporo brakowało. -------------------- |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Cytat O metodę krzyczał, a tam mu się sama deklaracja interfejsu nie podobała. Deklaracja działającego w jednym miejscu interfejsu może się nie podobać tylko i wyłącznie PHP4 oraz starszym. To, że projekt był w obiektówce, jeszcze nie jest wyznacznikiem, że był pisany pod PHP5. Wprawdzie obiektówka była w czwórce marna, ale była i się z niej chcąc nie chcąc korzystało. Powtarzam: mnóstwo projektów sobie znakomicie z interfejsami radzi i jakoś bugtrackera PHP nie zalewa fala żalu o tym, jak to się kod działający na jednym serwerze totalnie sypie na innym. A wycieczki personalne możesz sobie darować, chyba że bardzo lubisz bliskie spotkania trzeciego stopnia z moderatorami. Ten post edytował Zyx 11.05.2009, 22:37:32 -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 53 Pomógł: 1 Dołączył: 20.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
@Spawnm
Metody statyczne nie są złe, ale trochę nieeleganckie. Zazwyczaj stosuję je gdy potrzebuję coś "na szybko" albo gdy dana metoda jest tak podstawowa, że praktycznie każdy obiekt w systemie powinien ją posiadać (choć staram się tego unikać i kiedy mogę stosuję dziedziczenie); @Zyx No właśnie przy pomocy kompozycji rozwiązałem to w ostatnim kodzie jaki podałem ![]() Co do interfejsów - częściej mam potrzebę stosowania właśnie wielokrotnego dziedziczenia (takie mi zboczenie po C++ zostało) - jest to IMO o wiele bardziej naturalna 'droga' i OOP dużo traci rezygnując z tego rozwiązania. Wiem że jest mnóstwo projektów radzących sobie bez MI, ale pewnie tylko dlatego że nie ma innego wyjścia ![]() Ten post edytował Kedan 11.05.2009, 23:54:25 |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
Deklaracja działającego w jednym miejscu interfejsu może się nie podobać tylko i wyłącznie PHP4 oraz starszym. To, że projekt był w obiektówce, jeszcze nie jest wyznacznikiem, że był pisany pod PHP5. Wprawdzie obiektówka była w czwórce marna, ale była i się z niej chcąc nie chcąc korzystało. Powtarzam: mnóstwo projektów sobie znakomicie z interfejsami radzi i jakoś bugtrackera PHP nie zalewa fala żalu o tym, jak to się kod działający na jednym serwerze totalnie sypie na innym. A wycieczki personalne możesz sobie darować, chyba że bardzo lubisz bliskie spotkania trzeciego stopnia z moderatorami. aż strach się bać ![]() -------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@okitoki zyx jedynie napisał, ze w php4 nie bylo interfejsow. Moze ty i programujesz od kilku lat, ale z czytaniem ze zrozumieniem masz niesamowite problemy. Az strach sie bac jak ty czytasz specyfikacje projektow.
Cytat aż strach się bać Tego typu posty oraz wycieczki personalne nie są mile widziane na forum, wiec przystopuj.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
nie zupełnie, tak jak piszesz, bo stwierdził fakt że próbowałem to odpalić na PHP4, jak by tak było to bym nie pytał, co mogło być powodem, bo w PHP siedzę od wersji 3
Żeby próbować odpalać interfejsy na PHP4 i złościć się, że nie działają, to trzeba być naprawdę zdolnym... jak Ci niby mają zadziałać, jak PHP4 ich nie obsługuje? Inerfejsy od wielu lat świetnie się mają chociażby w Javie, skąd zostały żywcem zerżnięte do PHP. Wykorzystuje je wiele projektów i jakoś nikt nie narzeka.
-------------------- |
|
|
![]()
Post
#18
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
skoro mowa o Wielodziedziczeniu , to mógł by mi ktoś powiedzieć jak się je robi za pomocą interfejsu ?
bo na phpedi pisze że można ![]() |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Chodzi chyba o to ze np w jakies klasie mozesz uzyc 1 lub wiecej interfejsow potem np po tej klasie dziedziczysz i mozesz sobie dodac nowe interjesy poprostu slowo implements nie ma ograniczen jak extends ze jesli damy wiecej niz 1 interfejs nie zadziala, tak mi sie wydaje ze o to chodzi w praktyce nie wiem jak z tym jest
![]() -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 175 Pomógł: 12 Dołączył: 28.06.2007 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
skoro mowa o Wielodziedziczeniu , to mógł by mi ktoś powiedzieć jak się je robi za pomocą interfejsu ? bo na phpedi pisze że można ![]() mozesz implementowac wiecej interfejsow, tym samym wymuszać na klasie pewne zachowania. Listing na przykladize wzorca registry - http://athlan.pl/code/RegistryExtended Jak sam autor tego listingu napisał, implementuje interfejsy: "Iterator ArrayAccess (na potrzeby poruszania się po instancji jak po tablicy) Countable (aby łatwo otrzymać liczbę przechowywanych danych) Serializable (żeby można było zaserializować i odserializować instancję obiektu)" Ogolnie rzecz biorac, wiele osob twierdzi ze dziedziczenie jest zle, po pewnych doswiadczeniach rowniez ja zgadzam sie z ta opinia. dziedziczenie < kompozycja http://art-of-software.blogspot.com/2008/0...-telefonie.html Ten post edytował plurr 12.05.2009, 17:37:12 -------------------- Wyobraźnia bez wiedzy może stworzyć rzeczy piękne.
Wiedza bez wyobraźni najwyżej doskonałe. Albert Einstein |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 18:13 |