Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl


LSM
Napisane: 26.03.2013, 10:09:35





Grupa: Zarejestrowani
Postów: 64
Dołączył: 20.03.2011
Skąd: Świdnica

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

Odpal sobie to i testuj. Może ułatwi Ci to pracę z kodem. Ilość IF'ów minimalnie zmniejszyłem ;-). Sprawa jest o tyle ciężka, że tutaj mamy przekazane parametry, które mogą, ale nie muszą być zmieniane w trakcie wykonania funkcji dlatego do funkcji getI, getU itd. trzeba przekazać wszystkie parametry. Jest na to sposób - zastosować klasę i zmienne klasy. Powodzenia.


  1. testLeitwerg();
  2.  
  3. function testSingle( $u, $r, $i, $g ) {
  4. $old = old_leitwert( $u, $r, $i, $g);
  5. $new = leitwert( $u, $r, $i, $g);
  6. $res = array_diff($old, $new);
  7. if( !empty( $res ) ){
  8. echo "ERR;";
  9.  
  10. } else {
  11. echo "OK;";
  12. }
  13. echo " params: $u, $r, $i, $g <br />";
  14. var_dump( $old );
  15. var_dump( $new );
  16.  
  17. }
  18.  
  19. function testLeitwerg(){
  20. /* testSingle( 0, 2, 2, 2 );
  21. testSingle( 2, 0, 2, 2 );
  22. testSingle( 2, 2, 0, 2 );
  23. testSingle( 2, 2, 2, 0 ); */
  24.  
  25. testSingle( 15, 6, 2, 2 );
  26. testSingle( 666, 8, 2, 2 );
  27. testSingle( 54, 2, 3, 6 );
  28. testSingle( 54544, 1, 2, 23 );
  29. }
  30.  
  31. function old_leitwert($u, $r, $i, $g) {
  32. # 1
  33. if ( $u AND $i ) {
  34. $r = $u/$i;
  35. $g = 1/$r;
  36. }
  37.  
  38. # 2
  39. if ( $i AND $r ) {
  40. $u = $r*$i;
  41. $g = 1/$r;
  42. }
  43.  
  44. # 3
  45. if ( $u AND $r ) {
  46. $i = $u/$r;
  47. $g = 1/$r;
  48. }
  49.  
  50. # 4
  51. if ( $g AND $i ) {
  52. $r = 1/$g;
  53. $u = $r*$i;
  54. }
  55.  
  56. #5
  57. if ( $u AND $r ) {
  58. $g = 1/$r;
  59. $i = $u/$r;
  60. }
  61.  
  62. # 6
  63. if ( $u AND $g ) {
  64. $i = $u*$g;
  65. $r = $u/$i;
  66. }
  67.  
  68. # 7
  69. if ( $i AND $r ) {
  70. $u = $i*$r;
  71. $g = 1/$r;
  72. }
  73.  
  74. # 8
  75. if ( $g ) {
  76. $r = 1/$g;
  77. }
  78.  
  79. # 9
  80. if ( $r ) {
  81. $g = 1/$r;
  82. }
  83.  
  84. return array('r' => $r, 'u' => $u, 'i' => $i, 'g' => $g );
  85. }
  86.  
  87. function leitwert($u, $r, $i, $g) {
  88. echo 'NEW: <br />';
  89. # 1
  90. $r = getR( $u, $r, $i, $g );
  91. $g = getG( $u, $r, $i, $g );
  92.  
  93. # 2
  94. $u = getU( $u, $r, $i, $g );
  95. $g = getG( $u, $r, $i, $g );
  96.  
  97. # 3
  98. $i = getI( $u, $r, $i, $g) ;
  99. $g = getG( $u, $r, $i, $g );
  100.  
  101. # 4
  102. $r = getR( $u, $r, $i, $g );
  103. $u = getU( $u, $r, $i, $g );
  104.  
  105. # 5
  106. $g = getG( $u, $r, $i, $g );
  107. $i = getI( $u, $r, $i, $g );
  108.  
  109. # 6
  110. $i = getI( $u, $r, $i, $g );
  111. $r = getR( $u, $r, $i, $g );
  112.  
  113. # 7
  114. $u = getU( $u, $r, $i, $g );
  115. $g = getG( $u, $r, $i, $g );
  116.  
  117. # 8
  118. $r = getR( $u, $r, $i, $g );
  119.  
  120. # 9
  121. $g = getG( $u, $r, $i, $g );
  122.  
  123. return array('r' => $r, 'u' => $u, 'i' => $i, 'g' => $g );
  124. }
  125.  
  126. function getR( &$u, &$r, &$i, &$g ){
  127. if ( $g OR ($g AND $i) ) {
  128. $r = 1/$g;
  129. }
  130. if ( ($u AND $g) OR ($u AND $i) ) {
  131. $r = $u/$i;
  132. }
  133. return $r;
  134. }
  135. function getG( &$u, &$r, &$i, &$g ){
  136. if ( $r OR ($r AND $u) OR ($r AND $i) OR ($g AND $i) OR ($u AND $i) ) {
  137. $g = 1/$r;
  138. }
  139. return $g;
  140. }
  141. function getU( &$u, &$r, &$i, &$g ){
  142. if ( $i AND ($g OR $r) ) {
  143. $u = $i*$r;
  144. }
  145. return $u;
  146. }
  147. function getI( &$u, &$r, &$i, &$g ){
  148. if ( $u AND $g ) {
  149. $i = $u*$g;
  150. }
  151. if ( $u AND $r ) {
  152. $i = $u/$r;
  153. }
  154. return $i;
  155. }
  Forum: PHP · Podgląd postu: #1034957 · Odpowiedzi: 5 · Wyświetleń: 454

LSM
Napisane: 1.12.2011, 09:58:24





Grupa: Zarejestrowani
Postów: 64
Dołączył: 20.03.2011
Skąd: Świdnica

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

Cytat
Jak zajdzie potrzeba zmian to kolega sobie to zrefaktoryzuje i juz

Dokładnie tak się powinno trworzyć aplikację. Uelastycznianie na wyrost to poważny błąd. A co jeśli w aplikacji będzie 4 aktorów o różnych imieniach i przez kolejne 10 lat nic poza tym ? Myślenie o elastyczności w takim przypadku nie ma sensu. Macie wszyscy po trochu racji, ale jak zwykle na tym forum.. eh nie ważne.
Każdy z was mówi o nieco innych przypadkach i podejściach. Najlogiczniejsze jest dla mnie to co pisze Orzeszekk. Dziedziczenie jest użyteczne, przy komplikowaniu się kodu w którym jest ono używane - należy go refaktoryzować w celu stosownia np. Strategii, ale nigdy tych czynności nie należy robić zbyt wcześnie ponieważ elastyczność potrafi niepotrzebnie skomplikować projekt.

A poza tym nie ma wiedzy jedynie prawdziwej, biorąc pod uwagę fakt oszczędzania czasu i nie marnowania go na "kombinatorykę elastyczną" - należy pójść na początku po najmniejszej linii oporu Orzeszka, jeśli zajdzie potrzeba użyć rozwiązania Crozina lub zupełnie innego, bo można ten apsekt zaprogramować na dziesiątki sposobów. Będzie to zależeć od wymagań jakie postawi nam dalszy rozwój aplikacji. Jeśli Crozin na początku zaczniesz wszystko uelastyczniać na "wydaje mi się" - możesz się zakopać w swoich kombinacjach i gdy przyjdzie czas na wdrożenie czegoś nowego okarze się, że tak uelastyczniłeś system, że stał się nieczytelny i trudny w rozwoju. Niekoniecznie to co napisałeś musi być jedynie prawdziwe i poprawne. Znajde Ci 10 sposobów różnych na to jak sprawić aby to rozwiązanie Człowieka było elastyczne i przygotowane na ewentualnie - każdą zmiane - ale takie myślenie nie ma zupełnie sensu, jest alogiczne, bo który sposób wybierzesz ? A jeśli strategia którą wybierzesz okarze się nieużyteczna i błędna to będziesz musiał zmienić większą ilość kodu niż przed wprowadzeniem strategii. Z elastycznością czeka się do ostatniego momentu - nigdy nie robi się tego na samym początku projektowania. Tak podpowiada mi moje doświadczenie.

oneeyedsmiley02.png
  Forum: Object-oriented programming · Podgląd postu: #918666 · Odpowiedzi: 23 · Wyświetleń: 1 742

LSM
Napisane: 11.12.2011, 19:58:51





Grupa: Zarejestrowani
Postów: 64
Dołączył: 20.03.2011
Skąd: Świdnica

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

Zawsze musi istnieć informacja o tym jaka klasa ma być użyta. To wiadome. Teraz od nas zależy kiedy tą informacje wykorzystamy - czy na poziomie kontrolera i tu:
Kod
class Controller {

$CommunicatorWithClients = new $NameFromPost();
$CommunicatorWithClients->sendMessage();
}

czy na poziomie fabryki, czy innego sposobu jak odrębnej klasy która wybiera nam klasę do zbudowania obiektu na zasadzie strategii. Temat o tyle śliski, że dosyć niejednoznaczny - który sposób wybrać. Sam zawsze mam z tym problemy ale tylko dlatego, że myślę o elastyczności zbyt wcześnie. Zależy to od innych rzeczy, które znajdują się w kodzie. Jeśli wiesz, że będziesz rozszerzać klasę komunikacji dobrze użyć Strategii w tym przypadku jak na moje oko ;-). W switchach nie ma nic złego dopóki nie zaczynają nam przeszkadzać. Dwa case'y w switch to nie tragedia, ja bym sie tym narazie nie przejmował. Nazwij tego switch'a jako funkcje TwinPeaks() i już ;-) .

Pozdrawiam.
  Forum: Object-oriented programming · Podgląd postu: #921592 · Odpowiedzi: 4 · Wyświetleń: 735

LSM
Napisane: 4.12.2011, 14:35:32





Grupa: Zarejestrowani
Postów: 64
Dołączył: 20.03.2011
Skąd: Świdnica

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

Napisane być i może ale niewiadomo jakie i ile mają serwerów + baz danych smile.gif Jeśli więc idzie o tą gre - zacząłbym od podstaw, potem przepisanie gry może być problematyczne ale nie musi - wsio zależy ot jak leży i jak to zakodujesz. A jeśli chodzi o ZF vs wydajność to bym uciekał jak od ognia.
  Forum: Object-oriented programming · Podgląd postu: #919554 · Odpowiedzi: 13 · Wyświetleń: 1 512

LSM
Napisane: 4.12.2011, 14:24:23





Grupa: Zarejestrowani
Postów: 64
Dołączył: 20.03.2011
Skąd: Świdnica

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

Pisanie we frameworkach tych znanych mija się z celem jeśli chodzi o osiągnięcie dużej wydajności. Samo PHP nie jest zbyt wydajne, jest jeszcze coś takiego jak HipHop: hiphop - wikipedia - to co zastosowali we Facebook. Ponoć rewelacyjnie przyspiesza działanie PHP.
  Forum: Object-oriented programming · Podgląd postu: #919550 · Odpowiedzi: 13 · Wyświetleń: 1 512

LSM
Napisane: 2.12.2011, 14:30:24





Grupa: Zarejestrowani
Postów: 64
Dołączył: 20.03.2011
Skąd: Świdnica

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

Czytaj czytaj i jeszcze raz czytaj. Mniej tego z forum, a więcej blogów i książek. Poświęc na samo czytanie tydzień lub dwa. Jeśli przestaniesz programować i przeczytasz przez dwa tygodnie wiele różnych informacji o OOP, wiele Ci się rozjaśni. Skup się również na refaktoryzacji. Jak przerobisz teorię - i popatrzysz na swój kod odrazu powinieneś być w stanie wyciągnąć te fragmenty, które stanowią jakąś odrębność. Spróbuj też pobawić się długopisem i kartką. Wszystko co wpadnie Ci do głowy określaj za pomocą Klas. Jeśli w grze masz Bohatera, Pojazd, Budynek, Trawe, Rzeke, Miecz, Statek kosmiczny, Planete a nawet czynność jak Poruszanie, Predkosc - zrób z nich klasy. Zobaczysz co i jaki ma sens i jak zmieni się sposób wykorzystania tych elementów tylko dlatego że opakowałeś to w nową strukturę. To tylko początek, ale zaczniesz widzieć na czym polega obiektowość. Zapoznaj się też z pojęciem "metafor" w Extreme Programming. Zacznij myśleć abstrakcyjnie - czyli nie myśl o funkcjach substr(), mysql_connect(), ale o wytnijLancuch() polaczMnieZbaza() ... implementacja niskopoziomowa to już pikuś polegający na zajrzeniu do dokumentacji. Naucz się myśleć w oderwaniu od języka programowania - jakiegokolwiek, nabierzesz podstaw myślenia obiektowego. businesssmiley.png
  Forum: Object-oriented programming · Podgląd postu: #919040 · Odpowiedzi: 13 · Wyświetleń: 1 512


New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 00:32