Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Interfejsy[Wątpliwości]
daniel1302
post
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Witam, mam nadzieje, że to forum będzie trwało tyle co PHP, tyle mi już pomogło, że hej. Przejdę do sedna sprawy czyli do interfejsów.
Jak mi wiadomo, że można było dziedziczyć tylko z jednej Klasy(Króla)
ale co mi to da, że wprowadzę interfejs, jeśli i tak w klasach niższych(Mieszczanach) będę musiał powtórzyć kod funkcji?
W królu będe musiał dać funkcje
  1. <?php
  2. function Pierwsza()
  3. {
  4.  return func_num_args();
  5. }
  6. ?>


Jeśli w Mieszczanie będe musiał dać taki sam kod?

Czy dobrze zrozumiałem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
qrees
post
Post #2





Grupa: Zarejestrowani
Postów: 275
Pomógł: 44
Dołączył: 23.11.2007

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


Bo interfejsy służą do określenia jakie metody musi udostępniać klasa. Zatem trochę bez sensu byłoby określać najpierw jakąś metodą za wymaganą, a potem jej nie implementować. Jak nie potrzebujesz takiego wymagania to nie używaj interfejsów...

Masz dziedziczenie w którym możesz stworzyć sobie główną klasę która zaimplementuje wszystkie domyślne metody, a potem dziedziczyć po niej. W klasach które dziedziczą nie musisz nic implementować, albo implementować to co chcesz.
Go to the top of the page
+Quote Post
daniel1302
post
Post #3





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Więc jakie zadanie mają interfejsy, po co ich używać (określać jakie metody są wymagane)?
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #4





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




Implementację można całkowicie przenieść na klasy potomne. Wystarczy bazową oznaczyć jako abstrakcyjną.

  1. <?php
  2. interface Courtesy
  3. {
  4. public function sayGoodMorningTo($person);
  5. }
  6.  
  7.  
  8. abstract class A implements Courtesy
  9. {
  10. }
  11.  
  12. class B extends A
  13. {
  14. public function sayGoodMorningTo($person)
  15. {
  16. print "Good Morning ".$person."!";
  17. }
  18. }
  19.  
  20. $o=new B();
  21. $o->sayGoodMorningTo('daniel1302');
  22. ?>
Go to the top of the page
+Quote Post
daniel1302
post
Post #5





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Jak zaimpletuje to sprawdzi, czy ta metoda jest w obiekcie, jeśli niema to zwroci error, czy to jest ich zadanie?
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #6





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




Oj. Zobacz taki przykład:
  1. <?php
  2. interface Courtesy
  3. {
  4. public function sayGoodMorningTo($person);
  5. }
  6.  
  7.  
  8. abstract class Human implements Courtesy
  9. {
  10. }
  11.  
  12. class Man extends Human
  13. {
  14. public function sayGoodMorningTo($person)
  15. {
  16. print "Good Morning ".$person."!";
  17. }
  18. }
  19.  
  20. $o=new Man();
  21. $o->sayGoodMorningTo('daniel1302');
  22.  
  23. class CommunityMambers
  24. {
  25. public function addMember(Courtesy $member)
  26. {
  27.  
  28. }
  29. }
  30. ?>
Go to the top of the page
+Quote Post
daniel1302
post
Post #7





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


i co zrobi ten fragmęt
  1. <?php
  2. (Courtesy $member)
  3. ?>
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #8





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




Manual!!!
http://php.net.pl/manual/pl/language.oop5.typehinting.php
Go to the top of the page
+Quote Post
daniel1302
post
Post #9





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Już wiem a teraz pytanie główne. Czy interfejsy pełnią głównie rolę zabezpieczającą (pilnująca czy są wszystkie obiekt)?
A jak nie to na chłopski rozum w 1 zdaniu prostym jaką
Go to the top of the page
+Quote Post
smialy
post
Post #10





Grupa: Zarejestrowani
Postów: 60
Pomógł: 4
Dołączył: 23.05.2007
Skąd: Łódź

Ostrzeżenie: (10%)
X----


Interfesy maja zadanie dostarczyć funkcjonalności. PHP nie ma ścisłego typowania (może ale nie musi) ale w JAVA musisz tego pilnować więc interfesy w tym pomagają. Na podstawie interfesu wiesz odrazu co obiekt robi. Dostając sam interfesj bez reszty programu jesteś w stanie napisać daną klase.
Przydaje się przy wiekszych projektach. W grupowej pracy się przydaje (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Z czasem każdy zaczyna widzieć ich przydatność (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował smialy 23.02.2008, 19:24:53
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #11





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Interfejsy służą do tego, aby wymusić na danej hierarchi klas zdefiniowanie określonych metod. Po to się to stosuje, aby ustalić "protokół", sposób "porozumiewania się", czy też korzystania z tych klas. Załóżmy, że nad projektem pracuje kilku programistów, jeśli zdefiniuje się interfejsy to nie ważne co będzie w klasie implementującej jakiś tam interfejs, bo wiadome że w interfejsie są określone wymagane metody publiczne, z których to korzystamy z danej klasy. Programista wtedy wie, że trzeba dane metody, które służą do korzystania z obiektów danej klasy, zaimplementować, przez co jest zunifikowany dostęp do klas należącej do tej samej gałęzi hierarchi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Przeanalizuj przykład Cysiaczka. Można dopisać takie coś:

  1. <?php
  2. class Women extends Human
  3. {
  4. public function sayGoodMorningTo($person)
  5. {
  6. print "Good Morning ".$person."!";
  7. }
  8. }
  9.  
  10. class CommunityMambers
  11. {
  12. protected $member;
  13.  
  14. public function addMember(Courtesy $member)
  15. {
  16.  
  17. }
  18.  
  19.  public function sayGoodMorning($person){
  20. foreach($this->member as m){
  21. print $m->sayGoodMorningTo($person);
  22. }
  23.  }
  24. }
  25. ?>


Dzięki temu zapewniamy to, że klasa "Man" i "Woman" mają metody "sayGoodMorningTo", więc w metodzie CommunityMambers::sayGoodMorning() nie wyskoczy błąd, że dany obiekt nie posiada metody "sayGoodMorningTo".
Go to the top of the page
+Quote Post
daniel1302
post
Post #12





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Dziękuje Ci jakoś mi to podeszło twoje tłumaczenie oczywiście wszyscy wypowiadający się(mądrze dostają piwko) Do zamknięcia
Go to the top of the page
+Quote Post

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: 18.09.2025 - 08:49