Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasy i metody abstrakcyjne i finalne, Do czego wykorzystać je w praktyce?
1010
post
Post #1





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

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


Witam, poznałem właśnie jak działają klasy i metody abstrakcyjne i finalne, ale zupełnie nie wiem do czego można by je wykorzystać w praktyce. Czy ktoś mógłby mi przedstawić jakiś prosty przykład, wraz z wytłumaczeniem "z czym to się je"?

Z góry dziękuje za pomoc...


PS. Moje początki w obiektówce są dosyć trudne.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@UDAT - Ze względów praktycznych to Cezar708 moim zdaniem dobrz to wyjaśnił, jeśli jednak chodzi o sama teorię, to logiczne jest, że wszystkie zwerzęta (uściślijmy - ssaki) mają pewien zbiór funkcji, które są wspólne, więc automatycznie podlegaja one dziedziczeniu. Np. zasnij, wydalaj, rozmnazajSie, ustawPlec() itp. Różnią się implementacją i interfejsem szczegółowym (tym który jest użyty bezpośrednio w implementacji)
Gdyby to była aplikacja symulująca zwierzę, to w klasie bazowej zawarłbyś takie składowe jak:
stan - np. czuwanie/sen
plec -samica/samiec

Używając interfejsu (bez dziedziczenia) powielałbyś te składowe w każdej pochodnej, podobnie jak niektóre metody. Skoro zatem tak, czy owak musiałbyś użyć jakiejś klasy bazowej (aby uniknąc tego powielania), to dlaczego od razu nie uprościć sprawy i nie zrobić klasy abstrakcyjnej?

Pozdrawiam.
Go to the top of the page
+Quote Post
UDAT
post
Post #3





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


Cytat(Cysiaczek @ 11.08.2007, 20:46:01 ) *
@UDAT - Ze względów praktycznych to Cezar708 moim zdaniem dobrz to wyjaśnił, jeśli jednak chodzi o sama teorię, to logiczne jest, że wszystkie zwerzęta (uściślijmy - ssaki) mają pewien zbiór funkcji, które są wspólne, więc automatycznie podlegaja one dziedziczeniu. Np. zasnij, wydalaj, rozmnazajSie, ustawPlec() itp. Różnią się implementacją i interfejsem szczegółowym (tym który jest użyty bezpośrednio w implementacji)
Gdyby to była aplikacja symulująca zwierzę, to w klasie bazowej zawarłbyś takie składowe jak:
stan - np. czuwanie/sen
plec -samica/samiec

Używając interfejsu (bez dziedziczenia) powielałbyś te składowe w każdej pochodnej, podobnie jak niektóre metody. Skoro zatem tak, czy owak musiałbyś użyć jakiejś klasy bazowej (aby uniknąc tego powielania), to dlaczego od razu nie uprościć sprawy i nie zrobić klasy abstrakcyjnej?

Pozdrawiam.


Rozumiem różnicę między interfejsem, a klasą abstrakcyjną. Jednak z twojej wypowiedzi zrozumiałem, że "w tym wypadku" oznacza ten konkretny, zaprezentowany przypadek. Później uściśliłeś, że twoja odpowiedź (jak i poprzednika) dotyczyła nie tego konkretnego przypadku, tylko możliwej implementacji hierarchi zwierząt. I w takim przypadku się zgadzam.

Jednak w przedstawionym przypdaku - klasa abstrakcyjna z samymi metodami abstrakcyjnymi uważam, że powinno się stosować interfejsy.

Pozdrawiam.
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 17:12