Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP/OOP]interfejsy,abstrakcja i metody statyczne
marcio
post
Post #1





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Shili
post
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
Go to the top of the page
+Quote Post

Posty w temacie
- marcio   [PHP/OOP]interfejsy,abstrakcja i metody statyczne   12.09.2008, 16:05:40
- - dr_bonzo   Jej, bylo z 5 razy, sa duze topiki na forum o abst...   12.09.2008, 16:34:51
- - marcio   CytatKlasa abstrakcyjna BEZ zaimplementowania zadn...   12.09.2008, 16:44:43
- - dr_bonzo   CytatCytatRoznica polega na tym ze dziedziczyc moz...   12.09.2008, 18:17:34
- - marcio   No ok a powiedz mi np co powinno sie dawac do klas...   12.09.2008, 18:53:17
- - Cysiaczek   Nie z całym systemem, tylko są wspólne d...   12.09.2008, 19:50:42
- - marcio   Hmmm czytam rozne tematy z tego forum czy taki prz...   12.09.2008, 22:28:53
- - dr_bonzo   RE: [PHP/OOP]interfejsy,abstrakcja i metody statyczne   13.09.2008, 12:09:34
- - marcio   Albo ja jestem tepy albo to jest takie "trudn...   13.09.2008, 16:52:34
- - dr_bonzo   /* Eeee, yyyy, teraz dopiero zauwazylem ze tam sa ...   13.09.2008, 17:24:09
- - marcio   Jesli chcialbym dodac do twojego kodu funkcje z mo...   13.09.2008, 20:20:15
- - dr_bonzo   Tak lepiej. CytatCo do 2 sposobu zamiast robic in...   13.09.2008, 20:34:30
- - marcio   @Dr_bonzo czy moglbys mi podac przyklad jakiejs kl...   15.09.2008, 17:31:27
- - Crozin   [PHP] pobierz, plaintext <?phpabstract class ro...   15.09.2008, 19:03:37
- - marcio   W sumie kazdy z kodow powyzej mozna by napisac za ...   15.09.2008, 20:02:01
- - Crozin   Zawsze początkującym mówię: napisz zestaw klas do ...   15.09.2008, 20:41:43
- - Shili   CytatW sumie kazdy z kodow powyzej mozna by napisa...   15.09.2008, 20:56:35
- - Crozin   Cytatak najbardziej. Dodałabym do tego tylko prywa...   15.09.2008, 21:22:36
- - Shili   Proponowałam prywatną ze względu na...   15.09.2008, 21:33:24
- - marcio   Ok dzieki ze mi tak tlumaczycie jestescie na medal...   15.09.2008, 21:41:55
- - Shili   To załóżmy, że robisz system domu. Na samej górze ...   15.09.2008, 21:55:57
- - marcio   Cytat(Shili @ 15.09.2008, 22:55:57 ) ...   15.09.2008, 22:02:51
- - mike   Programowanie obiektowe to sposób przedstawiania ś...   15.09.2008, 22:07:05
- - Shili   Próbowałam dać coś podobnego do wcz...   15.09.2008, 22:08:20
- - marcio   Cytatja bardziej się uczę na "błędach" n...   15.09.2008, 22:15:29
- - Crozin   Skoro nie znasz to tym lepiej - zobacz tylko w wik...   16.09.2008, 05:24:05


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: 4.10.2025 - 02:05