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
envp
post
Post #2





Grupa: Zarejestrowani
Postów: 359
Pomógł: 1
Dołączył: 16.04.2006
Skąd: Łódź

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


Heh wytlumaczone dobrze, ale dziwnie. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) J4r0d: pojęcie interfejsu znasz prawda? więc wyobraź sobie teraz ze masz 10 klas, ktore dziedzicza ten inerfejs (niech to bedzie metoda foo()) i dla tych klas metoda foo() wyglda tak samo, gdybys uzywal tylko interfesjow musail bys napisac 10 razy ten sam kod, a tak tworzysz sobie klase abstrakcyjna i ona zawiera juz cale cialo metody foo(). Dodatkowo powiem, ze nie mozesz utworzyc instacji ani odwolac sie do pola klasy abstrakcyjnej - czyli sama w sobie jest bezuzyteczna, uzywamy jej jedynnie jako rodzica innej klasy. Btw. Ten temat byl juz poruszany....

Ten post edytował envp 10.08.2006, 03:12:32
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(envp @ 10.08.2006, 02:10 ) *
Heh wytlumaczone dobrze, ale dziwnie. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) J4r0d: pojęcie interfejsu znasz prawda? więc wyobraź sobie teraz ze masz 10 klas, ktore dziedzicza ten inerfejs (niech to bedzie metoda foo()) i dla tych klas metoda foo() wyglda tak samo, gdybys uzywal tylko interfesjow musail bys napisac 10 razy ten sam kod,


Zgadza się. Dotąd rozumiem.

Cytat(envp @ 10.08.2006, 02:10 ) *
a tak tworzysz sobie klase abstrakcyjna i ona zawiera juz cale cialo metody foo().


No dobra, czyli masz interfejs:
  1. <?php
  2. interface Metody {
  3. abstract function metoda1();
  4. abstract function metoda2();
  5. }
  6. ?>

i klasę abstrakcyjną:
  1. <?php
  2. abstract class Abstrakcja {
  3. public function foo() {
  4. //... kod metody
  5. }
  6. }
  7. ?>



1. I jak teraz utworzysz klasę, która implementuje interfejs Metody i jednocześnie dziedziczą po klasie Abstrakcja ?

2. Co dokładnie daje dodanie słowa static po słowie function?


Cytat(Apo @ 9.08.2006, 18:56 ) *
(...)
Fajnym przykładem może być obsługa akcji w frameworkach np:
  1. <?php
  2. abstract class SzablonAkcji {
  3.  
  4. protected $przywileje = array('public');
  5.  
  6. abstract public function akcjaAlternatywna(); // wymuszamy utworzenie tej metody w klasach dziedziczących
  7.  
  8. final function OdpalAkcje() // w klasach dziedziczących nie mozemy nadpisac tej metody
  9. {
  10. $action = new HttpRequest->get('action');
  11. $action = $this->$action . '()';
  12.  
  13. if(method_exists($action, $this))
  14. $this->action;
  15. else
  16. $this->akcjaAlternatywna();
  17. }
  18. }?>


Coś jest nie tak w metodzie OdpalAkcje(). Nie powinno być:
  1. <?php
  2. $action = new HttpRequest();
  3. $action = action->get('action');
  4. $action = $this->$action . '()';
  5. ?>

? Nie czaje ale to może dlatego, że to jest kawałek kodu.
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: 25.12.2025 - 23:01