![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Witam wiem ze jest to drugi watek z rzedu ale na poprzedni nikt nie udzieli mi odpowiedzi wiec chce zapytac jeszcze raz ale dokladniej:
Nie rozumiem 3 rzeczy w 100%: -Metody statyczne -Klasy i metody abstrakcyjne -interfejsy Hmm skoro OOP to OOP i powinno sie pracowac na obiektach to po co sa "statyczne" w ktorych nie tworzy sie obiektu a operuje jak na zwyklych zmiennych czy ktos moze mi wytlumaczyc jej zastosowania? I teraz klasy abstrakcyjne i implementowanie interfejsow wiem ze klasy abstrakcyjne i interfejsy to klasy ktore rozszerzaja inne klasy(jesli klasa pochodna po niej dziedziczy) czytalem tez ze klasy abstrakcyjne uzywa sie do malych projektow a interfejsy do duzycy jednak nie rozumiem jednej rzeczy: http://webcity.pl/webcity/programowanie_ob...e_w_php_5_cz__3 a dokladnie pierwszy kod z uzyciem interfejsow i jego cytat: Cytat Moglibyśmy stworzyć tutaj abstrakcyjną klasę bazową, ale wtedy uniemożliwilibyśmy programistom dziedziczenie z innych klas i tego nie potrafie zrozumiec, i jeszcze jaka jest roznica miedzy klasa abstrakcyjna i interfejsem skoro obydwie "metody" maja rozszerzac inne klasy? P.S i jeszcze jedno skoro klasy abstrakcyjne i interfejsy maja rozszerzac mozliwosci innych klas to dlaczego odrazu w takiej klasie nie mozna dac implementacji funkcji ktora ma byc potem dziedziczona/implementowana, jaki to ma sens skoro kazda klasa dziedziczaca moze miec funkcje inaczej pracujace? Ten post edytował marcio 12.09.2008, 16:08:01 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat W sumie kazdy z kodow powyzej mozna by napisac za pomoca klas abstr jak i interfejsow jak dobrze widze Niekoniecznie. A raczej nie opłaca się ich przepisywać z interfejsu na klasę abstrakcyjną czy odwrotnie.W interfejsie nie zdefiniujesz żadnej metody ani właściwości. Interface to taki zbiór metod publicznych, które klasa musi implementować, a każda z klas implementujących interface może to robić zupełnie, ale to zupełnie inaczej. W klasie abstrakcyjnej możesz jak najbardziej implementować metody (nie tylko publiczne) i nadawać właściwości. Ale oczywiście możesz tylko je inicjować, bez implementacji (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Wyobraź sobie, że na przykład masz w sprzedaży ulotki i książki. Jedno i drugie ma: czytaj() porwij() ale więcej wspólnego nie mają - zero cech wspólnych, zero metod wspólnych (w metodzie porwij dla ulotki rwiesz jedną stronę, dla książki strona po stronie, podobnie dla czytaj), mają też inne właściwości (ulotka kolor tła, a książka ilość stron). Jak byk pasuje tutaj interfejs. Ale wyobraź sobie, że zamiast ulotek masz czasopisma. Mają te same metody czytaj() porwij() te same właściwości: ilość stron cena różnią się nieznacznie (ogólnie, jednak się różnią) i nie ma sensu robić tutaj interfejsu, skoro tak samo implementują pewne rzeczy. Jak znalazł klasa abstrakcyjna, jeśli oczywiście chcesz wymusić, żeby nie można było zainicjować takiej klasy (nazwijmy ją sobie Czytadło). W końcu nie wskazuje ona na konkretny obiekt po wywołaniu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Albo powiedzmy sobie, że mają jedną metodę xxx() którą obie muszą zaimplementować, ale implementują ją różnie - brak mi pomysłu na sensowny przykład. Wtedy metodę robisz abstrakcyjną, klasę abstrakcyjną i abstrakcja ma już sens. Czy jest sens pisać dom? Jak najbardziej. Dodałabym do tego tylko prywatną, czy też chronioną metodę do każego obiektu sprawdzającą czy jest sens zrobić appendChild (do inputa nie wciśniesz diva, w ogóle nic nie wciśniesz). Poza tym faktycznie fajne ćwiczenie. Ten post edytował Shili 15.09.2008, 21:05:15 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 02:05 |