Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ocena - Klasy tworzenia planety.
q3trm
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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


Cześć.

Na początku zaznaczam, że to moje początki OOP, żeby nie było (IMG:style_emoticons/default/facepalmxd.gif) .


  1. class creatPlanet // klasa konstrukcyjna
  2. {
  3. public $planet;
  4.  
  5. public function __construct(Planet $class)
  6. {
  7. return $this ->planet = $class;
  8. }
  9.  
  10. }
  11.  
  12.  
  13. abstract class FuncPlanet // funkcje planet
  14. {
  15. public function __construct()
  16. {
  17. $this ->nameplanet = get_class($this);
  18. $this ->increase = strlen($this ->nameplanet);
  19. }
  20.  
  21. public function getParamPlanet() //wyświetla wszystkie parametry ustawione przez użytkownika
  22. {
  23. foreach ($this ->parameter as $param => $p)
  24. {
  25. echo '<br />'.$param. ' +' .$p;
  26. }
  27. }
  28. public function getIncrease() //szybkość rozwoju planety
  29. {
  30. return $this ->increase;
  31. }
  32. public function getNamePlanet() //nazwa planety użytkownika
  33. {
  34. return $this ->nameplanet;
  35. }
  36. }
  37.  
  38.  
  39. abstract class Planet extends FuncPlanet // ustawienie początkowych parametrów planety przez użytkownika
  40. {
  41. protected $increase;
  42. protected $nameplanet;
  43. protected $parameter = array();
  44.  
  45.  
  46. function __construct($economic = 0, $military = 0, $explorative = 0)
  47. {
  48. $this ->parameter = array (
  49. 'economic' => $economic,
  50. 'military' => $military,
  51. 'explorative' => $explorative
  52. );
  53. parent::__construct();
  54. }
  55. }
  56.  
  57.  
  58. class Mercury extends Planet {}
  59. class Venus extends Planet {}
  60. class Earth extends Planet {}
  61. class Jupiter extends Planet {}
  62. class Saturn extends Planet {}
  63. class Uranium extends Planet {}
  64. class Neptune extends Planet {}
  65.  


Ten post edytował q3trm 10.04.2013, 21:52:39
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
q3trm
post
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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



1. Chodzi ci o to, że dane nie są ze sobą powiązane?.

2. Tworzę grę na przeglądarkę. W tej grze użytkownik ma możliwość wyboru planety, oraz późniejszego jej rozwijania. Każda planeta ma jakąś metodykę rozwoju np: militarną, ekonomiczną, odkrywczą, którym użytkownik przydziela punkty(tylko podczas tworzenie planety). Wszystkie planety cechuję szybkość ogólnego rozwoju($increase), która różni się w zależności od wybranej planety(obliczanie na podstawie nazwy planety w skrypcie, jest tylko prowizorycznym zastosowaniem).

Krótko mówiąc, czysty model tworzenia planety za pomocą formularza. Nie chcę gotowca, prosiłbym o nazwę wzorca odpowiadającym do ww. logiki skryptu. Zastanawiam się nad wzorcem Decorator, Strategy.
Go to the top of the page
+Quote Post
Dejmien_85
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 23
Dołączył: 23.04.2013

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


Cytat(q3trm @ 19.04.2013, 13:36:37 ) *
Krótko mówiąc, czysty model tworzenia planety za pomocą formularza. Nie chcę gotowca, prosiłbym o nazwę wzorca odpowiadającym do ww. logiki skryptu. Zastanawiam się nad wzorcem Decorator, Strategy.


Wydaje mi się, że "The Strategy Pattern" by się tutaj świetnie spisał, mógłbyś stworzyć niezależne interfejsy oraz klasy zachowań poszczególnych planet, które można by nawet przydzielać planetom dynamicznie (w trakcie działania aplikacji).

Poniżej przykład mojego pierwszego kodu (napisanego milion lat temu) z implementacją "The Strategy Pattern" - wklejam prosto ze starych notatek, nie chce mi się go nawet poprawiać. Jego przejrzenie może dać ogólne pojęcie nt. odizolowania rzeczy statycznych od rzeczy zmiennych. Na jego przykładzie widać jak łatwo można implementować nowe zachowania, czy zmieniać je dynamicznie podczas działania aplikacji (at run-time).

  1. <?php
  2.  
  3. // Interfejs zachowań dla Zwierząt
  4.  
  5. interface Behaviours
  6. {
  7. public function tryToFly();
  8. public function makeSound();
  9. }
  10.  
  11. // Interfejs latania
  12. interface FlyBehaviour
  13. {
  14. public static function tryToFly();
  15. }
  16.  
  17. // Interfejs wydawania dźwięku
  18. interface SoundBehaviour
  19. {
  20. public static function makeSound();
  21. }
  22.  
  23.  
  24. class Szczekanie implements SoundBehaviour
  25. {
  26. public static function makeSound(){
  27. echo 'Szczeka... hał, hał... <br/>';
  28. }
  29. }
  30.  
  31.  
  32. class Miauczenie implements SoundBehaviour
  33. {
  34. public static function makeSound(){
  35. echo 'Miauczy... miau, miau... <br/>';
  36. }
  37. }
  38.  
  39.  
  40. class Mruczenie implements SoundBehaviour
  41. {
  42. public static function makeSound(){
  43. echo 'Mruczy... mrrr, mrrr... <br/>';
  44. }
  45. }
  46.  
  47.  
  48. class Latanie implements FlyBehaviour
  49. {
  50. public static function tryToFly(){
  51. echo 'Odbija się od ziemi i unosi się w przestworzach... <br/>';
  52. }
  53. }
  54.  
  55.  
  56. class LatanieNieudane implements FlyBehaviour
  57. {
  58. public static function tryToFly(){
  59. echo 'Próbuje wzbić się ponad ziemię, jednak mu się to nie udaje... <br/>';
  60. }
  61. }
  62.  
  63.  
  64. class LatanieSamolotem implements FlyBehaviour
  65. {
  66. public static function tryToFly(){
  67. echo 'Wsiada do samolotu i odlatuje! <br/>';
  68. }
  69. }
  70.  
  71. class Zwierzeta implements Behaviours
  72. {
  73. public $flying;
  74. public $sound;
  75. public $animal;
  76.  
  77. public function run(){
  78. echo $this->animal . ' ';
  79. echo 'Biegnie, ale szbko! <br/>';
  80. }
  81.  
  82. public function look(){
  83. echo "To jest " . $this->animal . "<br/>";
  84. }
  85.  
  86. public function makeSound(){
  87. echo $this->animal . ' ';
  88. $x = $this->sound;
  89. $x::makeSound();
  90. }
  91.  
  92. public function tryToFly(){
  93. echo $this->animal . ' ';
  94. $x = $this->flying;
  95. $x::tryToFly();
  96. }
  97.  
  98. public function changeBehaviour($zmiana){
  99. $this->flying = $zmiana;
  100. }
  101. }
  102.  
  103. class Pies extends Zwierzeta
  104. {
  105. public $flying = 'Latanie';
  106. public $sound = 'Szczekanie';
  107. public $animal = 'Pies';
  108. }
  109.  
  110. class Kot extends Zwierzeta
  111. {
  112. public $flying = 'LatanieNieudane';
  113. public $sound = 'Miauczenie';
  114. public $animal = 'Kot';
  115. }
  116.  
  117. ?>
  118. <!DOCTYPE html>
  119. <html>
  120. <head>
  121. <title></title>
  122. </head>
  123. <body>
  124. <?php
  125. $kot = new Kot;
  126. $kot->look();
  127. $kot->makeSound();
  128. $kot->trytofly();
  129. $kot->changeBehaviour('Latanie'); // Dynamiczna zmiana zachowania
  130. $kot->tryToFly();
  131.  
  132. echo '<br/>';
  133.  
  134. $pies = new Pies;
  135. $pies->look();
  136. $pies->makeSound();
  137. $pies->tryToFly();
  138. $pies->changeBehaviour('LatanieNieudane'); // Dynamiczna zmiana zachowania
  139. $pies->tryToFly();
  140.  
  141. echo '<br/>';
  142.  
  143. $kot->tryToFly();
  144. $s = 'LatanieSamolotem'; // Dynamiczna zmiana zachowania
  145. $kot->changeBehaviour($s);
  146. $kot->tryToFly();
  147.  
  148. ?>
  149. </body>
  150. </html>

UWAGA: Kod służył tylko do praktyki, tak więc latające koty i miauczące psy nie powinny nikogo dziwić. (IMG:style_emoticons/default/brzydal.gif)

Ten post edytował Dejmien_85 30.05.2013, 01:01:00
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 07:17