![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 866 Pomógł: 32 Dołączył: 2.06.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Mam jedno pytanie: Do czego tak na prawdę mogą się przydać interfejsy w programowaniu? Bo za cholerę nie wiem. Szukam unikalnego zastosowania, którego nie dało by się z powodzeniem zastąpić czymś innym i nie znajduję. Do czego to więc?
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
(odpowiedz na ost. 2 strony postow)
@sztosz Cytat Cytat A co w takiej sytuacji: x = abc y = 2 z = x + y Co teraz ma zrobić kompilator/parser? Jeśli nie znałby typu (odziedziczonego po interface), wówczas niezłe rzeczy by się działy w pudełkach spod biurka Kompilator, parser sprawdza czy obiekt x posiada metodę =() i czy argumetnem tej metody może być string 1. Odroznij najpierw moment kompilacji od momentu uruchomienia. 2. W statycznych jezykach (java, c,..) w momencie KOMPILACJI kompilator musi wiedziec czy zmienna "x" ma metode "+". Sprawdzane jest to po typie zmiennej. Deklarujesz "x" jako 'PlusatorInterface x', ktory to interfejs posiada metode "+" i wszystko jest ok 3. Dla dynamicznych jezykow (Ruby, Python, PHP,...), sprawdzane jest czy OBIEKT! (nie zmienna i jej typ) przypisany do "x" posiada metode "+". To czy uzylismy tu interfejsu nie ma znaczenia, wazne jest tylko posiadanie metody. Dlatego dla tego typu jezykow intefejsy sa stworzone bardziej w celu dokumentacji, przedstawienia projektu fragmentu systemu, pokazaniu czemu te N klas ma takie same metody, niz sa potrzebne do uruchomienia kodu. Skad sie wziely interfejsy - bylo mowione 100 razy - zrezygnowano z wielodziedziczenia, autorzy Javy uzali je za ZLO, i zaproponowali interfejsy (chyba oni byli pierwsi). No i interfejsy sa konieczne w jezykach javo podobnych, ktora nie jest dynamiczna jak php, ruby, python - w ktorych to interfejsy maja mniejsze znaczeni. Cytat Interface nie zmienia i nie dodaje typu obiektu, z tego co ja się orientuje to obiekt może być tylko jednego typu. sztosz, nie obraz sie ale poucz sie javy czy c#. Chociazby podstaw bo z tego co widze to posiadasz znajomosc jedynie dynamicznych jezykow, i pewne rzeczy ci trudniej pojac. Cytat Czy na pewno to ze coś implentuje jakiś interfejs sprawia że obiekt staje się typu klasy której jest obiektem + interfejsów które implentuje i klass po których dziedziczy? Tak. Kod class Bubel extends Something implements Countable {...}
Bubel b = new Bubel(); b.bubluj(); // ZMIENNA b jest typu Bubel, na przypisana instancje Bubel i mozesz na niej uzywac metod zaimplementowanych przez ta klase Countable c = b; // tutaj przypisales do ZMIENNEJ typu Countable ten sam obiekt, klasy Bubel. Ale zmienna ma typ Countable, wiec uzyjesz TYLKO tych metod ktore posiada ten interfejs. System.out.println( c.count() ); |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 17:13 |