ZSBD-2st-1.2-w4.tresc-1.1-Slajd16

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Polimorfizm i późne wiązanie

Polimorfizm i późne wiązanie


O obiektach składowanych w rozszerzeniach klas, które mają klasy pochodne mówi się, że są polimorficzne, bo mają różne cechy i metody. Na przykład wystąpienia klasy Figura mają określony atrybut „Typ służący do przechowywania informacji o typie figury oraz metodę „Powierzchnia służącą do wyznaczania powierzchni figur. Z kolei wystąpienia klasy pochodnej „Wielokąt oprócz odziedziczonego atrybutu „Typ mają dodatkowo wielowartościowy atrybut „Krawędzie ”. Odziedziczona po klasie „Figura metoda „Powierzchnia jest w klasie „Wielokąt redefiniowana ponieważ sposób wyznaczania powierzchni wielokątów jest inny niż uniwersalnych figur. Rozszerzenie klasy „Figura obejmuje zarówno obiekty klasy „Figura ”, jak również różniące się od nich obiekty, które są wystąpieniami klasy „Wielokąt ”.

Na poziomie składni języków obiektowych polimorfizm obiektów wyraża się w występowaniu zmiennych polimorficznych i podstawień polimorficznych. Przez zmienną polimorficzną rozumie się taką zmienną, pod którą są podstawiane obiekty, które są wystąpieniami różnych klas, ale które występują w relacji podtypu z typem zmiennej polimorficznej. W podanym przykładzie, zmienną polimorficzną jest zmienna „f ”. Mimo, że typem zmiennej „f jest klasa „Figura ”, to przypisywane są jej obiekty innych klas. Najpierw pod zmienną „f jest podstawiony obiekt typu „Koło ”, a później obiekt typu „Wielokąt ”. Następnie przez zmienną „f do przypisanych jej obiektów są przesyłane komunikaty o nazwie „Powierzchnia ”. Właściwy kod metody wyznaczania powierzchni jest ustalany dynamicznie na podstawie typu obiektu przypisanego w danym momencie zmiennej „f ”. W pokazanym przykładzie najpierw jest to kod metody „Powierzchnia zdefiniowanej w klasie „Koło ”, następnie kod metody „Powierzchnia klasy „Wielokąt ”.

Szczególnym przypadkiem zmiennych polimorficznych są nazwy rozszerzeń klas, które mają klasy pochodne. Nazwa rozszerzenia klasy bazowej pozwala przetwarzać obiekty należące do rozszerzeń wszystkich klas pochodnych.


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