ZSBD-2st-1.2-lab9.tresc-1.3-Slajd18

Z Studia Informatyczne
Wersja z dnia 11:55, 10 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

Operator TREAT – PL/SQL

Operator TREAT – PL/SQL


Jak wspominano wcześniej, poprzez zmienne nadtypu dostępne są jedynie atrybuty, które zadeklarowano w nadtypie, natomiast wszelkie atrybuty charakterystyczne dla podtypów nie są dostępne w bezpośredni sposób. Obecnie przedstawiony zostanie sposób uzyskania dostępu do pól charakterystycznych dla podtypów. Do uzyskania takiego dostępu należy użyć operatora rzutowania w dół hierarchii dziedziczenia o nazwie TREAT. Składnia operatora jest następująca: TREAT (zmienna AS typ_obiektowy). Operator zmienia typ zmiennej na typ podany po słowie kluczowym AS. Jeżeli taka zamiana nie jest możliwa, to są dwa możliwe zachowania. W języku PL/SQL zgłaszany jest wyjątek, a w języku SQL operator zwraca wartość NULL. Program na przykładzie (1) demonstruje użycie operatora TREAT w języku PL/SQL. Program rozpoczyna się od deklaracji zmiennych F1 i F2 typu FIGURA, którym przypisywane są odpowiednio obiekty typu KWADRAT i KOLO. Dodatkowo, deklarowane są zmienne KW i KO, odpowiednio typów KWADRAT i KOLO oraz zmienne typu liczbowego o nazwach DLUGOSC_BOKU i PROMIEN. Pierwsze instrukcje programu demonstrują przypisanie do zmiennej podtypu obiektu zapisanego w zmiennej nadtypu. Są to przypisania, które zostały oznaczone znakiem zapytania na slajdzie pod tytułem „Polimorfizm”. W zmiennej F1 typu FIGURE zapisano obiekt typu KWADRAT. Za pomocą operatora TREAT typ zmiennej F1 jest zmieniany na typ KWADRAT i w rezultacie przypisanie wartości wyrażenia do zmiennej KW typu KWADRAT jest możliwe. Działanie kolejnego wiersza programu jest analogiczne. Kolejne dwa wiersze demonstrują dostęp do pól specyficznych dla podtypu za pomocą operatora TREAT. Ponieważ wartością operatora TREAT jest obiekt, to możliwe jest użycie operatora kropkowego w celu odczytania wartości atrybutu. W ten sposób odczytywane są wartości atrybutów DLUGOSC_BOKU i PROMIEN, które są następnie zapisywane do odpowiednich zmiennych. Ostatnie dwie linijki programu powodują błąd wykonania. W obu przypadkach mamy tutaj do czynienia z niedopuszczalną próbą zmiany typu. W zmiennej F2 typu FIGURE zapisany jest obiekt typu KOLO. Próba zmiany typu zmiennej F2 na KWADRAT musi się skończyć błędem, gdyż do zmiennych typu KWADRAT nie wolno przypisywać obiektów typu KOLO. Analogicznie, w zmiennej F1 zapisany jest obiekt typu KWADRAT. Próba zmiany typu zmiennej F1 na KOLO musi się skończyć błędem, gdyż do zmiennych typu KOLO nie wolno przypisywać obiektów typu KWADRAT.


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