Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP/OOP]interfejsy,abstrakcja i metody statyczne
marcio
post
Post #1





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Witam wiem ze jest to drugi watek z rzedu ale na poprzedni nikt nie udzieli mi odpowiedzi wiec chce zapytac jeszcze raz ale dokladniej:

Nie rozumiem 3 rzeczy w 100%:
-Metody statyczne
-Klasy i metody abstrakcyjne
-interfejsy

Hmm skoro OOP to OOP i powinno sie pracowac na obiektach to po co sa "statyczne" w ktorych nie tworzy sie obiektu a operuje jak na zwyklych zmiennych czy ktos moze mi wytlumaczyc jej zastosowania?

I teraz klasy abstrakcyjne i implementowanie interfejsow wiem ze klasy abstrakcyjne i interfejsy to klasy ktore rozszerzaja inne klasy(jesli klasa pochodna po niej dziedziczy) czytalem tez ze klasy abstrakcyjne uzywa sie do malych projektow a interfejsy do duzycy jednak nie rozumiem jednej rzeczy: http://webcity.pl/webcity/programowanie_ob...e_w_php_5_cz__3 a dokladnie pierwszy kod z uzyciem interfejsow i jego cytat:
Cytat
Moglibyśmy stworzyć tutaj abstrakcyjną klasę bazową, ale wtedy uniemożliwilibyśmy programistom dziedziczenie z innych klas

i tego nie potrafie zrozumiec, i jeszcze jaka jest roznica miedzy klasa abstrakcyjna i interfejsem skoro obydwie "metody" maja rozszerzac inne klasy?

P.S i jeszcze jedno skoro klasy abstrakcyjne i interfejsy maja rozszerzac mozliwosci innych klas to dlaczego odrazu w takiej klasie nie mozna dac implementacji funkcji ktora ma byc potem dziedziczona/implementowana, jaki to ma sens skoro kazda klasa dziedziczaca moze miec funkcje inaczej pracujace?

Ten post edytował marcio 12.09.2008, 16:08:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Hmmm czytam rozne tematy z tego forum czy taki przyklad na bazie innych ale wymyslony przez ze mnie jest wlasciwy:?
  1. <?php
  2. interface pies {
  3.  
  4. function hal($pies, $halas);
  5. }
  6.  
  7. interface kot {
  8.  
  9. function mial($kot, $halas);
  10. }
  11.  
  12. interface czlowiek {
  13.  
  14. function mowa();
  15. }
  16.  
  17. abstract class wlasciwosci {
  18.  
  19. abstract function waga($waga);
  20. abstract function wysokosc($wysokosc);
  21. abstract function iq($kto);
  22.  
  23. }
  24.  
  25. class stworzenie extends wlasciwosci implements pies, kot {
  26.  
  27. private $zwierze;
  28.  
  29. public function __construct($zwierze) {
  30.  
  31. $this -> zwierze = $zwierze;
  32.  
  33.  }
  34.  
  35.  
  36. function hal($pies, $halas) {
  37.  
  38. if(is_string($pies) && $pies == 'pies') return $halas;
  39.  
  40. else return 'Ta funkcja nie obsluguje halasu takiego zwoerzecia';
  41.  
  42. }
  43.  
  44.  
  45. function mial($kot, $halas) {
  46.  
  47. if(is_string($kot) && $kot == 'kot') return $halas;
  48.  
  49. else return 'Ta funkcja nie obsluguje halasu takiego zwoerzecia';
  50.  
  51. }
  52.  
  53. public function waga($waga) {
  54.  
  55. return $waga;
  56.  
  57.  }
  58.  
  59. public function wysokosc($wysokosc) {
  60.  
  61. return $wysokosc;
  62.  
  63.  }
  64.  
  65. public function iq($kto) {
  66.  
  67. if($kto == 'kot') $ile = rand(1,10);
  68. else if($kto == 'pies') $ile = rand(10,50);
  69.  
  70. return $ile;
  71.  }
  72.  
  73. public function zwroc_zwierze() {
  74.  
  75. if(is_string($this -> zwierze)) return $this -> zwierze;
  76.  
  77. else return 'Argument musi byc typu int';
  78.  
  79.  }
  80. }
  81.  
  82. $zwierze = new stworzenie('pies');
  83. echo($zwierze -> zwroc_zwierze().' wazy '.$zwierze -> waga(4).'kg ma '.$zwierze -> wysokosc(30).'cm a jego iq to '.$zwierze -> iq($zwierze -> zwroc_zwierze()));
  84. if($zwierze -> zwroc_zwierze() == 'pies') echo('<Br>'.$zwierze -> hal('pies', 'hal hal').'<Br>');
  85. else echo('<Br>'.$zwierze -> mial('kot', 'mial mial').'<Br>');
  86.  
  87. // i potem implementacja klasy czlowiek
  88. ?>

A moze cos bardziej w ten desen:
  1. <?php
  2. interface pies {
  3.  
  4. function hal($pies, $halas);
  5. }
  6.  
  7. interface kot {
  8.  
  9. function mial($kot, $halas);
  10. }
  11.  
  12. interface czlowiek {
  13.  
  14. function mowa($zdanie);
  15. }
  16.  
  17. abstract class wlasciwosci {
  18.  
  19. abstract function waga($waga);
  20. abstract function wysokosc($wysokosc);
  21. abstract function iq($kto);
  22.  
  23. }
  24.  
  25. class stworzenie extends wlasciwosci {
  26.  
  27. private $zwierze;
  28.  
  29. public function __construct($zwierze) {
  30.  
  31. $this -> zwierze = $zwierze;
  32.  
  33.  }
  34.  
  35. public function waga($waga) {
  36.  
  37. return $waga;
  38.  
  39.  }
  40.  
  41. public function wysokosc($wysokosc) {
  42.  
  43. return $wysokosc;
  44.  
  45.  }
  46.  
  47. public function iq($kto) {
  48.  
  49. if($kto == 'kot') $ile = rand(1,10);
  50. else if($kto == 'pies') $ile = rand(10,50);
  51. else if($kto == 'czlowiek') $ile = rand(50, 100);
  52.  
  53. return $ile;
  54.  }
  55.  
  56. public function zwroc_zwierze() {
  57.  
  58. if(is_string($this -> zwierze)) return $this -> zwierze;
  59.  
  60. else return 'Argument musi byc typu string';
  61.  
  62.  }
  63. }
  64.  
  65. class zwierzeta extends stworzenie implements pies, kot {
  66.  
  67. function hal($pies, $halas) {
  68.  
  69. if(is_string($pies) && $pies == 'pies') return $halas;
  70.  
  71. else return 'Ta funkcja nie obsluguje halasu takiego zwoerzecia';
  72.  
  73. }
  74.  
  75.  
  76. function mial($kot, $halas) {
  77.  
  78. if(is_string($kot) && $kot == 'kot') return $halas;
  79.  
  80. else return 'Ta funkcja nie obsluguje halasu takiego zwoerzecia';
  81.  
  82.  }
  83. }
  84.  
  85. class ludzie extends stworzenie implements czlowiek {
  86.  
  87. function mowa($zdanie) {
  88.  
  89. if(is_string($zdanie)) return $zdanie;
  90.  }
  91. }
  92.  
  93. $zwierze = new zwierzeta('kot');
  94. echo($zwierze -> zwroc_zwierze().' wazy '.$zwierze -> waga(4).'kg ma '.$zwierze -> wysokosc(30).'cm a jego iq to '.$zwierze -> iq($zwierze -> zwroc_zwierze()).'<Br>');
  95. if($zwierze -> zwroc_zwierze() == 'pies') echo $zwierze -> hal($zwierze -> zwroc_zwierze(), 'hal hal');
  96. else echo $zwierze -> mial($zwierze -> zwroc_zwierze(), 'mial mial');
  97.  
  98. echo('<Br>');
  99.  
  100. $czlowiek = new ludzie('czlowiek');
  101. echo($czlowiek -> zwroc_zwierze().' wazy '.$czlowiek -> waga(4).'kg ma '.$czlowiek -> wysokosc(30).'cm a jego iq to '.$czlowiek -> iq($czlowiek -> zwroc_zwierze()).'<Br>');
  102. echo $czlowiek -> mowa('Yoyo ziomale');
  103. ?>

A jesli zle to jakby napisac takie cos jak zrozumialem spruboje napisac jakas klase

P.S i po co jest takie cos:
  1. <?php
  2. function addItem(Item $item) {
  3.        foreach($this->items as $thisItem){
  4.            if($item === $thisItem){
  5.                return;
  6.            }
  7. ?>

Na czym polega tworzenie obiektu w funkcji?

Cytat
Metod statycznych używasz tam, gdzie wykonujesz operacje nie związane bezpośrednio z danym obiektem (to jest ważne - obiekt posiada tożsamość), ale związane tematycznie z daną klasą lub rodziną klas.

Dalej nie rozumiem masz jakis przyklad?
Go to the top of the page
+Quote Post

Posty w temacie
- marcio   [PHP/OOP]interfejsy,abstrakcja i metody statyczne   12.09.2008, 16:05:40
- - dr_bonzo   Jej, bylo z 5 razy, sa duze topiki na forum o abst...   12.09.2008, 16:34:51
- - marcio   CytatKlasa abstrakcyjna BEZ zaimplementowania zadn...   12.09.2008, 16:44:43
- - dr_bonzo   CytatCytatRoznica polega na tym ze dziedziczyc moz...   12.09.2008, 18:17:34
- - marcio   No ok a powiedz mi np co powinno sie dawac do klas...   12.09.2008, 18:53:17
- - Cysiaczek   Nie z całym systemem, tylko są wspólne d...   12.09.2008, 19:50:42
- - marcio   Hmmm czytam rozne tematy z tego forum czy taki prz...   12.09.2008, 22:28:53
- - dr_bonzo   RE: [PHP/OOP]interfejsy,abstrakcja i metody statyczne   13.09.2008, 12:09:34
- - marcio   Albo ja jestem tepy albo to jest takie "trudn...   13.09.2008, 16:52:34
- - dr_bonzo   /* Eeee, yyyy, teraz dopiero zauwazylem ze tam sa ...   13.09.2008, 17:24:09
- - marcio   Jesli chcialbym dodac do twojego kodu funkcje z mo...   13.09.2008, 20:20:15
- - dr_bonzo   Tak lepiej. CytatCo do 2 sposobu zamiast robic in...   13.09.2008, 20:34:30
- - marcio   @Dr_bonzo czy moglbys mi podac przyklad jakiejs kl...   15.09.2008, 17:31:27
- - Crozin   [PHP] pobierz, plaintext <?phpabstract class ro...   15.09.2008, 19:03:37
- - marcio   W sumie kazdy z kodow powyzej mozna by napisac za ...   15.09.2008, 20:02:01
- - Crozin   Zawsze początkującym mówię: napisz zestaw klas do ...   15.09.2008, 20:41:43
- - Shili   CytatW sumie kazdy z kodow powyzej mozna by napisa...   15.09.2008, 20:56:35
- - Crozin   Cytatak najbardziej. Dodałabym do tego tylko prywa...   15.09.2008, 21:22:36
- - Shili   Proponowałam prywatną ze względu na...   15.09.2008, 21:33:24
- - marcio   Ok dzieki ze mi tak tlumaczycie jestescie na medal...   15.09.2008, 21:41:55
- - Shili   To załóżmy, że robisz system domu. Na samej górze ...   15.09.2008, 21:55:57
- - marcio   Cytat(Shili @ 15.09.2008, 22:55:57 ) ...   15.09.2008, 22:02:51
- - mike   Programowanie obiektowe to sposób przedstawiania ś...   15.09.2008, 22:07:05
- - Shili   Próbowałam dać coś podobnego do wcz...   15.09.2008, 22:08:20
- - marcio   Cytatja bardziej się uczę na "błędach" n...   15.09.2008, 22:15:29
- - Crozin   Skoro nie znasz to tym lepiej - zobacz tylko w wik...   16.09.2008, 05:24:05


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: 4.10.2025 - 17:47