Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Abstract a interface...
Szymciosek
post
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


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.
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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ą.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Szymciosek
post
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Nadpisać tzn jak ?
Jak np mogą pozwalać na to modyfikatory dostępu ?
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


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


Ten post edytował kpt_lucek 7.05.2012, 12:49:13


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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ć.

Ten post edytował mortus 7.05.2012, 13:12:33
Go to the top of the page
+Quote Post
redeemer
post
Post #7





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


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


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 11:33