Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
Witam
dziś szukając informacji o abstrakcji obiektów natchnołem się na ten artykuł http://blog.dywicki.pl/2007/04/04/o-abstra...-i-interfejsow/ Zrozumiałem tyle: Abstrakcja -Wymusza tworzenie obiektów w klasach pochodnych -Przekazuje informacje o działającym skrypcie Interfejs -Wymusza użycie metod w klasach impletujących go -Przekazuje nadzędzia działającego systemu Używamy Klasę abstrakcyjną gdy: -Mamy mniejszy system -Musimy zawrzeć w funkcji która będzie wymuszona jakiś kod -Chcemy używać niektórych z jej metod Interfejs gdy: -Mamy wielki system -Wymuszamy użycie metod w których nie musimy zawierać kodu -Definiujemy medtody które zainicjujemy w klasach impletujących interfejs Nie zrozumiałem: -Co to jest Elastyczność obiektu -"Budowa złożonej aplikacji bez użycia interfejsów jest posunięciem wysoce nierozsądnym, ponieważ to właśnie dzięki nim, nawet w językach kompilowanych ze statycznym typowaniem jesteśmy w stanie zyskać nadzwyczajnie elastyczny kod" -"Nawet jeśli koncepcja implementacji obróci się o 180 stopni to nasz interfejs, będący swoistą fasadą, ukryje te zmiany przed osobami, których one nie dotyczą bądź nie interesują." Dziękuje z góry oraz proszę o wyrozumiałośc ale jeśli mi ktoś nie wytłumaczy nie pojmę niczego tego do końca. Ten post edytował daniel1302 17.08.2008, 09:26:03 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. |
Chodzi o to, aby zmiana implementacji jakiejś metody nie pociągała za sobą konieczności zmian w wielu miejscach, albo co gorsza, zmian w kodzie użytkującym tą metodę. np. Dwie klasy News (ahh, nieśmiertelny przykład) - ten sam interfejs, ale działanie kodu wewnątrz klas jest inne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Metoda News::getComment(), pobiera identyfikator jako parametr i wyszukuje odpowiadający mu obiekt w lokalnej kolekcji. Możemy też rozbudować funkcję tak, aby w przypadku nieznalezienia obiektu, szukała w bazie danych, a dopiero potem zwracała błąd. Zauważ, że zawsze przekazujemy tylko identyfikator - nie musimy nic zmieniać w wywołaniu tej metody. Teraz mając system, który ma np. 10 klas News (np dla Swiat, Polska, Warszawa), metoda wyszukiwania i pobierania Komentarzy może być różna dla każdej z nich. Jeszcze mały przykład (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
To jest właśnie elastyczność - ukrycie implementacji za interfejsem. Pozdrawiam. Przenoszę na OOP |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
Czyli elastyczność to zastosowanie interfejsów/ klas abstrakcyjnych które wymuszą użycie jednej metody która ma kilka zadań w zależności od klas?
|
|
|
|
Post
#4
|
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. |
Nie do końca. W pewnym stopniu tak, ale tu chodzi o ukrycie szczegółów implementacji, a metoda powinna robić zazwyczaj to samo, albo przynajmniej zwracać oczekiwane wyniki. Czyli kogoś, kto używa tej metody nie obchodzi jak ona działa. "Ten kto używa", to inny kod (tzw. użytkownik), albo inny programista.
To tak jak z samochodem - przekręcasz kierownicę w prawo i nie interesuje Cię w tym momencie, co się dzieje wewnątrz tego mechanizmu - interesuje Cię tylko to, że samochód skręca - bo taka była Twoja intencja, gdy przekręcałeś kierownicę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam. |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
Czyli Elastyczność to jest:
Ktośużywa funkcji (skrypt banu) z intencją zbanowania ale niewie jak to działa w środku skryptu wie co to robi lecz nie wie jak to jest napisane, na jakich tabelach/klasach operuje? Tutaj wyczytałem http://forum.php.pl/index.php?showtopic=65622&st=10 że interfejsy są bardziej potrzebne od strony dokumentacji kodu?? Ten post edytował daniel1302 17.08.2008, 16:27:51 |
|
|
|
Post
#6
|
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. |
To jest interfejs i wtedy masz rację. Zapewnia on elastyczność, ale jest ona widoczna dopiero z punktu widzenia.. z wewnątrz metody. Programista może napisać np. 10 wersji tej samej metody i zmieniać je jak rękawiczki (np. testować najbardziej wydajną). Nie musi jednak zmieniać sposobu, w jaki ktoś tej metody używa (interfejsu). Jeśli metoda jest w systemie często wykorzystywana (bywa i kilkaset razy), to zmiana jej działania wpływa od razu na cały system, bo ten operuje na wyższym poziomie - na interfejsie właśnie. Nie musisz latać po kodzie i zmieniać jakichś zmiennych, kopiować i wklejać fragmentów kodu itp.
|
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
Tutaj znalazłem zastosowanie interfejsów bo klasa abstrakcyjna nie wymusi metody u klasy wnuka A elastyczności nie mogę zrozumieć. Ok więc robie tak: Piszę klasy
I dam tą klase komuś i w zależności czy ktoś dopisze funkcje
czy
To zawsze doda gazu. Czy to jest elastyczność Z pewnego wątku na forum mam takie coś
Chodzi mi na temat o info o czymś takim budujSamolot(inteligencjaNaPewenymPoziomie $object) albo widzialem gdzieś takie coś funkcja(JakasKlasa $object)? |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
W PHP taka konstrukcja oznacza, że parametr $zmienna musi: 1) Obiektem klasy NAZWA 2) Obiektem, któego klasa dziedziczy po NAZWA 3) Obiektem, którego klasa implementuje interfejs NAZWA (dodatkowo takie wymusznie typu możesz zostosować jeszcze do tablic (array). I niestety tylko tyle) Co do interefejsów: Wyobraź sobie, że masz obok siebie cztery telewizory. Każdy z nich ma pięć przycisków: 1) Power (off/on) 2) Zwiększ głośność 3) Zmniejsz głośność 4) Kanał w górę 5) Kanał w dół Gdy chcesz włączyć którykolwiek z tych telewizorów wykonujesz następującą akację: wciskasz przycisk power. I z Twojej strony to już jest koniec operacji. Teraz wewnątrz telewizora jego elektornika włącza wyświetlacz (zwróć uwagę, że Ciebie to już nie interesuje czy to jest kineskop, ekran LCD czy plazma), głośniki (ponownie nie interesuje Cie czy to jest jeden głośnik mono czy stereo czy może telewizor korzysta z zewnętrznego układu głośników) itp. Jeszcze jeden przykład: Jakiego byś telewizoru nie kupił będziesz potrafił korzystać z jego podstawowych opcji na pilocie (5 punktów powyżej). Dlaczego? Ponieważ jest tam powtórzony pewien schemat, jednolity interfejs. Oczywiście pilot może oferować dużo większe możliwości (takie, których inne nie oferują) ale te, które są zapisane w interfejscie wykonuje dokładnie tak samo jak inne piloty. A więc interfejs ujednolica dostęp do określonych zachowań (w OOP można by przyjąć, że w polach przechowujemy stany obiektu (np. telewizor: włączony/wyłączony, glośność 80, 70, 100, kontrast: 75, 22) a w metodach mamy "zachowania" (zmiejsz/zwiększ kontrast, włącz/wyłącz)) Co do klas/metod abstrakcyjnych. One pozwalają na to by pewne zachowania były wspólne dla różnych obiektów. Dzięki temu, że raz zapiszemy pewne zachowanie w klasie abstrakcyjnej (którą dziedziczy klasa dziecko) nie musimy pisać tego samego kodu 5 razy. Ponownie przykład telewizorów:
Klasy abstrakcyjne pozwalają nam (programiście, nie uzytkownikowi (warto zaznaczyć, że programista jest czasami użytkownikiem)) zaimplementować pewne powatarzale zachowania. |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
Dziękuje rozjaśniło mi się Pozdrowienia dla dwóch osób które zechciały pomóc
|
|
|
|
![]() ![]() |
|
Aktualny czas: 19.12.2025 - 18:33 |