Statyczna kontrola typów w SBQL Rafał Hryniów Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa
Plan prezentacji Typy w modelu M0 Rozszerzenia dla modelu M1 Dalsze prace
Typy w modelu M0 Typy proste Typy złożone Zgodność typów Liczności i atrybuty
Typy proste Pięć typów prostych int float boolean string date Możliwość tworzenia nowych typów prostych typedef pesel = int;
Typy złożone Słowo kluczowe struct Dowolna złożoność struktury typedef Employee = struct { name : string; age : int; }; employee : Employee; employee2 : struct { name : string; age :int};
Zgodność W przypadku typów prostych – nazwowa typedef PESEL = int; pesel : PESEL; liczba : int; pesel = liczba – błąd typu W przypadku typów złożonych – strukturalne employee2 = employee – typologicznie poprawne
Atrybuty Liczność (UML) [0..1] [1..1] – domyślna [0..*] [1..*] Mutowalność Czy zbiór jest uporządkowany (ordered) Czy jest to zbiór (unique)
Przykładowa struktura Employee : struct { name : string; surname : string; salary : float; worksIn : ref to Department[0..1]; jobDescription : struct { jobName : string; jobDesc : string; }
I mapowanie dla niej Obiekty złożone: <i Employee, Employee, [name 1, surname 1, salary 1, worksIn [0..1], jobDescription 1 ]> powiązanie : Obiekty atomowe :
Problemy dla modelu M1 Dziedziczenie – co widzi programista Podtypowanie dla metod Polimorfizm Operacje imperatywne
Model M1 –co z dziedziczeniem Co powinien widzieć programista w przypadku gdy odwołujemy się do nadklasy obiektu Tylko atrybuty z nadklasy – typologicznie poprawne Wszystkie atrybuty -co z kontrolą typologiczną Dodać operator rzutowania i możliwość sprawdzenia typu przez programistę
Problem z podtypami Kowariancja Animal { eat(Food) } Cow extends Animal { eat(Grass) } Animal a = new Cow(); Food f = new Hamburger(); a.eat(f); //Food poisoning Kontrawariancja Animal { eat(Grass) } Cow extends Animal { eat(Food) } Bardzo mało elastyczne Inwariancja Animal { eat(Food) } Cow extends Animal { eats(Food) } Food { } Grass extends Food { }
Polimorfizm Uniwersalny Parametryczny Inkluzyjny Ad hoc Koercje Przeciążenia
Dalsze prace Obsługa operatorów imperatywnych Procedury i metody Typy w modelach M2 i M3