ZSBD-2st-1.2-w5.tresc-1.1-Slajd9
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.