Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ćwieczenie z PHP OOP.
siuda
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 15.03.2012

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


Witam,

Od pewnego czasu ucze się programowania obiektowego i natrafiłem na takie zadanie :

"Utwórz klasę "rozwiazanie", która będzie mogła wykonać operacje arytmetyczne na takich tablicach jak array(5, "plus", 4), oraz array(2, "razy", 8) i wykonaj na nich działanie arytmetyczne. Pamiętaj, że środkowa wartość w tablicy jest również nazwą klasy - zaimplementuj ją. W przyszłości może być potrzeba obsługi innej operacji arytmetycznej bez potrzeby zmiany kodu".

Trochę nie rozumiem po co mam tworzyć jedną klasę "rozwiazanie", która i tak będzie musiała za pomocą funkcji array_search szukać takich słów jak plus, razy, minus, podzielić i wykonać operację na pozostałych wartościach. Jaki jest sens i potrzeba tworzenia kolejnych klas? Jeżeli ktoś może mi to wytłumaczyć to będe bardzo wdzięczny za pomoc. Nie jestem w stanie nawet zrobić sobie szkicu takiego rozwiązania jak to miałoby wyglądać.


Pozdrawiam,
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Najprościej jak można:

  1. class Rozwiazanie_plus
  2. {
  3. public function wykonaj($a,$b)
  4. {
  5. return $a+$b;
  6. }
  7. }
  8.  
  9. class Rozwiazanie_razy
  10. {
  11. public function wykonaj($a,$b)
  12. {
  13. return $a*$b;
  14. }
  15. }
  16.  
  17. class Rozwiazanie
  18. {
  19. public function wykonaj(array $tablica)
  20. {
  21. list($a,$klasa,$b) = $tablica;
  22. $klasa = 'Rozwiazanie_'.$klasa;
  23. // Tu przydałoby się jeszcze zaimplementować jakieś wczytywanie klasy
  24. // inlcude itd...
  25. $klasa = new $klasa();
  26. return $klasa->wykonaj($a,$b);
  27. }
  28. }
  29.  
  30. $r = new Rozwiazanie();
  31. echo $r->wykonaj(array(1,'plus',2)); // 3
  32. echo $r->wykonaj(array(3,'razy',7)); // 21


Oczywiście trzeba wrzucić jeszcze ładowanie klas (include) przy odpowiednim założeniu co do nazewnictwa. Osobiście dorzuciłbym do tego jeszcze interfejs:

  1. interface iRozwiazanie
  2. {
  3. public function wykonaj($a, $b);
  4. }


i wymusł jego używanie przy klasach typu Rozwiazanie_[operacja]:

  1. class Rozwiazanie_plus implements iRozwiazanie
  2. {
  3. public function wykonaj($a,$b)
  4. {
  5. return $a+$b;
  6. }
  7. }
  8.  
  9. class Rozwiazanie_razy implements iRozwiazanie
  10. {
  11. public function wykonaj($a,$b)
  12. {
  13. return $a*$b;
  14. }
  15. }


aby było jasne jaką metodę mają posiadać klasy do operacji arytmetycznych...

A co do tego że to nietypowe zadanie - nietypowe jest dla mnie przekazywanie tej tablicy (IMG:style_emoticons/default/smile.gif) - dziwne (IMG:style_emoticons/default/tongue.gif)

EDIT: acha i teraz jak chcesz dodać nową operację arytmetyczną na przykład potęgę to wystarczy dać napisac nową klase:

  1. class Rozwiazanie_potega
  2. {
  3. public function wykonaj($a,$b)
  4. {
  5. return pow($a,$b);
  6. }
  7. }
  8.  
  9. $r = new Rozwiazanie();
  10. echo $r->wykonaj(array(3,'potega',2)); // 9



Ten post edytował Sephirus 15.03.2012, 14:28:37
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 00:59