Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Abstract a interface...
Forum PHP.pl > Forum > Przedszkole
Szymciosek
Witam,
jaka jest pomiędzy nimi różnica i czym dokładniej są klasy/metody abstrakcyjne ?

Może źle rozumiem, ale mi się wydaje, że interface służy do deklarowania zmiennych i metod, które MUSZĄ znaleźć się w klasie, która implementuje dany interfejs. A abstract ?

Czytałem już kilka powiedzmy porównań znalezionych w internecie, czytam też Vademecum Profesjonalisty Cz. 4.
Fifi209
Bardzo dobrze rozumiesz, jaka różnica?

Nie piszesz ciała funkcji a jedynie zaznaczasz, że taka będzie i np. przyjmie 2 parametry.

W klasach abstrakcyjnych możesz za to napisać i w klasie dziedziczącej nadpisać metodę lub użyć o ile modyfikatory dostępu na to pozwalają.
Szymciosek
Nadpisać tzn jak ?
Jak np mogą pozwalać na to modyfikatory dostępu ?
kpt_lucek
Nie nadpisać a napisać
  1. function sprawdz($a, $b){}


a

  1. function sprawdz($a, $b)
  2. {
  3. //tutaj coś
  4. }


O ile się nie mylę smile.gif

co do modyfikatorów:
  1. protected $a;
  2. public $b;
  3. private function sprawdz($a, $b)
  4. {
  5. // ciało funkcji
  6. }
  7.  
  8. //etc
Crozin
1. http://docs.oracle.com/javase/tutorial/jav...epts/index.html
2. http://docs.oracle.com/javase/tutorial/java/IandI/index.html

Co prawda do Javy, ale w ~90% pokrywa się, zresztą tutaj jest jedynie wstęp do obiektówki, nie języka.
mortus
Interfejs to swego rodzaju wzorzec dla klas. Zadaniem interfejsu jest dostarczenie użytkownikowi informacji na temat tego, jakie publiczne metody (i tylko metody) musi zaimplementować w klasie bazującej na danym interfejsie.
Klasa abstrakcyjna reprezentuję szeroką grupę różnego rodzaju obiektów, które łączy tylko kilka wspólnych cech. Dobrym przykładem mogą być figury matematyczne, do których zaliczamy np. koło, kwadrat, czy trójkąt. Klasy ogólnej FiguraMatematyczna nie jesteśmy w stanie zdefiniować, wiemy jedynie, że "jednoczy" ona wszystkie figury, które mają określoną definicję. Co więcej dla każdej z tych figur możemy zdefiniować ogólne metody, których zadaniem będzie np. policzenie obwodu, czy pola. Będą to oczywiście metody abstrakcyjne, ponieważ obwód i pole prawie zawsze obliczamy inaczej. Trochę kodu:
  1. abstract class FiguraMatematyczna {
  2. abstract protected function obwod();
  3. abstract protected function pole();
  4. }
  5. class Trojkat extends FiguraMatematyczna {
  6. private $_bok_a;
  7. private $_bok_b;
  8. private $_bok_c;
  9. public function __construct($bok_a, $bok_b, $bok_c) {
  10. $this->_bok_a = $bok_a;
  11. $this->_bok_b = $bok_b;
  12. $this->_bok_c = $bok_c;
  13. }
  14. public function obwod() {
  15. return $_bok_a + $_bok_b + $_bok_c;
  16. }
  17. public function pole() {
  18. // ...
  19. }
  20. }

Oczywiście to tylko przykład, któremu z matematycznego punktu widzenia duuuuuuużo brakuje smile.gif

Edycja:
Klasa abstrakcyjna to taka, dla której nie możemy utworzyć instancji obiektu, bo nie miałoby to sensu, tzn. byłby to obiekt, który nie określałby na tyle szczegółowo właściwości interesującej nas "rzeczy", abyśmy mogli tę rzecz dokładnie zidentyfikować.
redeemer
Interfejs to jakby "pusta klasa", w której deklarujesz jakie metody muszą być zdefiniowane w klasie która go implementuje. Klasa abstrakcyjna to klasa gdzie oprócz "normalnych" metod, możesz zadeklarować metody abstrakcyjne, które muszą być zaimplementowane w klasie która po niej dziedziczy.

http://stackoverflow.com/questions/1913098...-abstract-class
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.