ZSBD-2st-1.2-w5.tresc-1.1-Slajd9

Z Studia Informatyczne
Wersja z dnia 16:25, 11 sie 2006 autorstwa PKrzyzagorski (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Polimorfizm i dynamiczne wiązanie

Polimorfizm i dynamiczne wiązanie


Język OQL umożliwia wykonywanie zapytań na kolekcjach obiektów polimorficznych. Kolekcje obiektów polimorficznych powstają w konsekwencji specjalizacji klas przez mechanizm dziedziczenia. Jak już to było mówione rozszerzenia klas bazowych obejmują rozszerzenia wszystkich klas pochodnych. W związku z tym, wynikiem zapytań mogą być kolekcje obiektów różnych klas tworzących jedną hierarchię dziedziczenia. Wszystkie te obiekty współdzielą funkcjonalność zdefiniowaną w klasie, która jest korzeniem takiej hierarchii.

Dodatkowo język OQL realizuje mechanizm dynamicznego wiązania nazw komunikatów z różnymi metodami polimorficznej kolekcji obiektów. Umożliwia to pisanie zapytań, w których przypisanie występującym w zapytaniu komunikatom właściwych metod odbywa się dopiero w trakcie wykonywania tego zapytania. Ponadto, w ramach pojedynczego zapytania przypisanie to może być różne dla różnych polimorficznych obiektów.

W zapytaniu pokazanym na slajdzie jest przetwarzany heterogeniczny zbiór figur. Obiekty, które będą wynikiem zapytania mogą być wystąpieniami klas Wielokąt lub Koło, które różnią się strukturą i implementacją metod. Klasy te różni na przykład sposób wyznaczania powierzchni. Zmienna f zdefiniowana w zapytaniu jest więc zmienną polimorficzną, bo w trakcie wykonywania zapytania przypisywane jej będą zarówno wielokąty, jak i koła. Komunikat powierzchnia() przesyłany do zmiennej f będzie wiązany dynamicznie. Oznacz to, że metoda przypisywana do tego komunikatu będzie zależna od klasy obiektu, który aktualnie jest przypisany zmiennej f. Dla kół metodą tą będzie metoda zdefiniowana w klasie Koło, a dla wielokątów metoda z klasy Wielokąt.


<< Poprzedni slajd | Spis treści | Następny slajd >>