Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> klasy abstrakcyjne
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Tworząc interfejs używamy słowa abstract przy definicji metod.

Po co używa się tego słowa przy definicji klas (lub funkcji - w przypadku gdy nie jest to interfejs) ?
W jakim celu tworzyć abstrackyjne klasy?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thornag
post
Post #2





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


@J4r0d Wracajac jeszcze do pytania abstrakcyjne. Pamietasz swoje pytanie dotyczace przekazywania parametrow do metod w stylu addItem(Item $item).

Jasnym jest ze mozesz przekazac tutaj wszystkie instancje class ktore implementuja interfejs Item. Powiedzmy ze ten interfejs wymusza implementacje metody Pokaz() i Schowaj().
A co jesli 4 klasy ktorych chcesz uzywac maja taka sama metode Schowaj() ?
Bedziesz ja przepisywac od nowa ? No nie a tak to mozesz utworzyc abstrakcyjna klase Item w ktorej bedzie ta wpolna metoda w pelni zaimplementowana no i wymuszisz implementacje Pokaz().

Mozna by powiedziec ze po co mi abstrakcja skoro mozna dziedziczyc po zwyklej. No tak ale zwykla klasa nie wymusisz implementacji metody Pokaz() pozatym nie ma sensu tworzyc instancji klasy zawierajacej sama metode Schowaj() wiec tutaj przydaje sie abstrakcja. Nie dosc ze masz zapewnione to ze wszystkie kalsy beda mialy zaimplementowane wymagane przez Ciebie metody to jeszcze korzystasz z zalet dziedziczenia. Swoja droga to sie chyba nazywa polimorfizm (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) to ze klasa wie od jakiej klasy pochodzi i mozna ja przekazac do metody jak wyzej.
Go to the top of the page
+Quote Post
Jarod
post
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(thornag @ 25.08.2006, 14:53 ) *
Jasnym jest ze mozesz przekazac tutaj wszystkie instancje class ktore implementuja interfejs Item. Powiedzmy ze ten interfejs wymusza implementacje metody Pokaz() i Schowaj().
A co jesli 4 klasy ktorych chcesz uzywac maja taka sama metode Schowaj() ?
Bedziesz ja przepisywac od nowa ? No nie a tak to mozesz utworzyc abstrakcyjna klase Item w ktorej bedzie ta wpolna metoda w pelni zaimplementowana no i wymuszisz implementacje Pokaz().

Powoli łapie ale pewnie jeszcze nie raz będę Was gnębił. Jeszcze nie pisze obiektowo (kiedyś troche w C++) ale już dostrzegam zalety programowania obeiktowego. Chcę to zrozumieć a nie pisać dla pisania.

Cytat(thornag @ 25.08.2006, 14:53 ) *
Mozna by powiedziec ze po co mi abstrakcja skoro mozna dziedziczyc po zwyklej. No tak ale zwykla klasa nie wymusisz implementacji metody Pokaz() pozatym nie ma sensu tworzyc instancji klasy zawierajacej sama metode Schowaj() wiec tutaj przydaje sie abstrakcja. Nie dosc ze masz zapewnione to ze wszystkie kalsy beda mialy zaimplementowane wymagane przez Ciebie metody to jeszcze korzystasz z zalet dziedziczenia. Swoja droga to sie chyba nazywa polimorfizm (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) to ze klasa wie od jakiej klasy pochodzi i mozna ja przekazac do metody jak wyzej.


No właśnie można dziedziczyć. Skąd wiesz że tylko metoda Schowaj()? Może byłoby coś więcej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Żartuje. Nie łąpie tylko jeszcze dlaczgo wszędzie wszystko wymuszać. WIem, że kilka osób może pisać różne części systemu, ale chyba powinni się najpierw zapoznać z projektem.

Mam jeszcze takie pytania

1. Interfejs zawiera tylko deklaracje metod. Metody te mogą być public (dostępne ze wsząd i dla każdego), private (dostępne tylko dla klasy je zawierającej, niedostępne dla klas które dziedziczą) i protected (dostępne tylko dla klas dziedziczących)? Interfejs gwarantuje, że dana metoda zostanie zaimplementowana w klasie, które implementuje interfejs. To, że klasa interpretuje interfejs nie oznacza, że nie może mieć innych metod?

2. Klasy abstrakcyjne pozwalają na wymuszanie implementacji metod w klasach dziedziczących. Różnią się od interfejsów tym, że mogą zawierać implementację metody. Tworzy się je przez
  1. <?php
  2. abstract class Klasa() {}
  3. ?>

?

Słowo abstract przed metodą klasy wymusza jej implementację w klasie dziedziczącej. Słowo final przed metodą nie pozwala przeciążyć metody w klasie dziedziczącej?

3. Klasa (abstrakcyjna lub konkretna) może zawierać metody statyczne i zwykłe. Do metod statycznych możemy się odwołać bez tworzenia instancji klasy. Metody statyczne tworzy się po to, żeby.. no właśnie po co?
Go to the top of the page
+Quote Post

Posty w temacie
- J4r0d   klasy abstrakcyjne   9.08.2006, 19:44:56
- - Apo   W przeciwieństwie do interfejsów w klasach abstrak...   9.08.2006, 19:56:25
- - envp   Heh wytlumaczone dobrze, ale dziwnie. J4r0d: poj...   10.08.2006, 03:10:21
|- - J4r0d   Cytat(envp @ 10.08.2006, 02:10 ) Heh wytl...   11.08.2006, 21:03:44
|- - Apo   Cytat2. Co dokładnie daje dodanie słowa static po ...   12.08.2006, 09:39:59
|- - J4r0d   Cytat(Apo @ 12.08.2006, 08:39 ) Nie musis...   24.08.2006, 20:20:40
- - Ludvik   Klasy abstrakcyjne nie są wygodnym narzędziem do d...   10.08.2006, 10:01:30
- - J4r0d   Mniej więcej łapie. Wychodzi na to, że lepiej używ...   10.08.2006, 19:17:10
- - Ludvik   CytatWychodzi na to, że lepiej używać klas abstrak...   10.08.2006, 19:29:19
|- - J4r0d   Cytat(Ludvik @ 10.08.2006, 18:29 ) Pamięt...   10.08.2006, 22:40:38
- - Ludvik   A sprawdziłeś czy to działa? Na mój gust działa......   10.08.2006, 22:46:40
|- - J4r0d   Cytat(Ludvik @ 10.08.2006, 21:46 ) A spra...   10.08.2006, 23:11:05
- - Ludvik   Kilka tematów niżej jest przykładowa odpowiedź.   10.08.2006, 23:14:54
- - Cysiaczek   Sporo sensu to ma. np. interfejsy: 1. save(), loa...   10.08.2006, 23:17:10
- - Ludvik   W definicji interfejsów nie używamy słowa abstract...   11.08.2006, 21:06:21
- - Cysiaczek   A do pozostałych nie - o to właśnie chodzi.Własni...   24.08.2006, 20:35:47
|- - J4r0d   Cytat(Cysiaczek @ 24.08.2006, 19:35 ) Jeś...   24.08.2006, 20:52:00
- - dr_bonzo   Nie ma klas statycznych, moga byc tylko metody sta...   24.08.2006, 20:51:28
- - Cysiaczek   Faktycznie - trochę nieściśle si...   24.08.2006, 21:27:43
- - thornag   @J4r0d Wracajac jeszcze do pytania abstrakcyjne. P...   25.08.2006, 15:53:26
|- - J4r0d   Cytat(thornag @ 25.08.2006, 14:53 ) Jasny...   25.08.2006, 22:59:29
- - thornag   Wroce do przykladu z ksiazki. Masz jakis mechanizm...   26.08.2006, 10:24:39


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: 28.12.2025 - 08:07