![]() |
![]() ![]() |
![]() |
![]()
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, |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zadanie proste choć nietypowe... Mogę Ci napisać rozwiązanie ale wytłumaczyć dokładnie do czego to można zastosować to na chwilę obecną nie mogę wymyślić jakoś :/
-------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Trochę durny pomysł z przekazywaniem tych trzech informacji (dwie liczby, operacja) w formie tablicy, ale mniejsza z tym.
Ogólnie w ćwiczeniu chodzi o pokazanie pewnej dosyć popularnej struktury kodu zwanej strategią. W wiki masz podany całkiem przyzwoity opis tego wzorca projektowego. Jaki jest sens tego wszystkiego? Przykładowo w tej chwili masz umożliwić realizację jedynie czterech operacji - dodawania, odejmowania, dzielenia oraz mnożenia. Mógłbyś to zrobić chociażby w takiej formie: Jaki jest problem tego kodu? W przypadku chęci zmiany czegoś bądź dodania nowej operacji musimy zmodyfikować ten kod, a to wiąże się z pewnymi komplikacjami. Dodatkowo w przypadku gdyby każda z tych czterech operacji wymagała nieco więcej niż jednej linijki kodu powstałby straszny śmietnik, trudny do utrzymania, udokumentowania czy testowania. Dlatego też same operacje wydzielamy do osobnych obiektów - wtedy wszystko mamy ładnie rozdzielone, dodanie nowej operacji jest proste i nieinwazyjne, a całością jest łatwiej zarządzać. W polskiej wiki masz to ładnie opisane spróbuj to zaimplementować. Jeśli nie dasz rady skorzystaj z innych źródeł (angielska wiki, bądź Google i fraza php strategy pattern). @Sephirus: Zadanie proste i bardzo, ale to bardzo typowe. ![]() Ten post edytował Crozin 15.03.2012, 13:52:23 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 15.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
@Sephirus:
Gdyby nie sprawiło ci to problemu to byłbym bardzo wdzięczny. Zadanie również wydaje mi się trochę zakręcone, ale chciałbym zobaczyć jak to działa w praktyce. Ten post edytował siuda 15.03.2012, 13:55:38 |
|
|
![]()
Post
#5
|
|
![]() 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:
Oczywiście trzeba wrzucić jeszcze ładowanie klas (include) przy odpowiednim założeniu co do nazewnictwa. Osobiście dorzuciłbym do tego jeszcze interfejs:
i wymusł jego używanie przy klasach typu Rozwiazanie_[operacja]:
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 ![]() ![]() EDIT: acha i teraz jak chcesz dodać nową operację arytmetyczną na przykład potęgę to wystarczy dać napisac nową klase:
Ten post edytował Sephirus 15.03.2012, 14:28:37 -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 15.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję bardzo za pomoc. To mi powinno trochę rozjasnić umysł. Największym problemem dla mnie jest chyba zmiana sposobu myślenia, wg wzorców projektowych, które jak widzę są koniecznością przy programowaniu obiektowym. Nie potrafię do końca sie "przełączyć" na OOP po wielu latach pisania proceduralnego, ale chyba nie jestem jedynym, który ma ten problem.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Najprosciej: Wyobraz sobie ze tych operacji arytmetycznych masz nie 4 a 300, i dodatkowo chcesz dac mozliwosc dodawania nowych operacji za pomocą plug-inów. Wtedy strategia staje sie baardzo sensowna.
Ogolnie strategia uczytelnia kod nawet dla kilku opcji, jesli sa one rozbudowane. Tworzysz klase abstrakcyjną - bazę ktora przechowuje wszystkie wspolne dla wszystkich strategii operacje, a do strategii finalnych dopisujesz tylko to czym sie roznia. Jesli masz wszystkie mozlwiosci "zahardkodowane" switchami i ifami, pisząc jedną czesc algorytmu mozesz popsuc drugą (pomijajac fakt ze to cholernie nieczytelne). Gdy masz wyiozolowane roznice miedzy algorytmami w postaci strategii robiac jedną nie masz jak popsuc drugiej. Dla prostych rzeczy wzorce projektowe wydaja sie nadmiarowe i niepotrzebne, swoja sile pokazuja przy duzych projektach. Ten post edytował Orzeszekk 15.03.2012, 15:28:36 -------------------- "The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 14:20 |