518 S ZORIENTOWANE OBIEKTOWO JI-ZYKI ZAPYTAŃ
*Ćwiczcnie 8.6.1. Należy zdefiniować abstrakcyjny typ danych „PC”, którego obiekty reprezentują komputery osobiste, przez zapis szybkości ich procesorów, wielkości RAM i dysku twardego, szybkości CD-ROM-u oraz ceny.
Ćwiczenie 8.6.2. Dla typu określonego w ćwiczeniu 8.6.1 należy zapisać poniższe funkcje w konwencji funkcji wewnętrznych rozszerzonego SQL3:
*a) Funkcja konstruująca o nazwie nowyPC, która pobiera wartości pięciu atrybutów typu ADT PC oraz tworzy nowy obiekt tego typu. Przypominamy, że w tej funkcji trzeba korzystać z konstruktora wbudowanego ?C (}.
*b) Funkcja wartość pobiera obiekt PC jako argument i zw-raca ,jakość” PC, czyli liczbę rzeczywistą, która określa, jak „dobry” jest ten komputer. Formuła wyliczenia jakości jest następująca: szybkość procesora plus pięcio-kroma wielkość RAM (w megabajtach) plus pięćdziesięciokrotna pojemność twardego dysku (w gigabajtach) plus 10 razy szybkość CD-ROM-u.
c) Funkcja lepszy pobiera obiekt typu ?C jako argument i zwraca inny PC z dwa razy większymi: szybkością procesora, RAM, twardym dyskiem, szybkością CD-ROM-u, ale w tej samej cenie. Można skorzystać z konstruktora nowyPC, utworzonego w punkcie a).
d) Funkcja równy PC, która testuje, czy komputery są takie same. Uznaje ona, że dwa PC są równe, jeśli mają taką samą szybkość procesora i wielkość dysku twardego, inne parametry nie są brane pod uwagę.
e) Funkcja mn?C, która określa relację mniejszości abstrakcyjnego typu PC. Uznaje ona, że p^< jeśli Jakość” komputera p\ jest niższa od Jakości” komputera p2, gdzie Jakość” jest zdefiniowana w punkcie b).
Ćwiczenie 8.6.3. Należy' zdefiniować abstrakcyjny typ Okręty, w którym będą opisywane okręty, przez zapis ich: nazw, dat wodowania, liczby dział, średnicy dział, wyporności oraz zakodowanych w formacie MPEG wideoklipów okrętów w akcji oraz postskriptowego dokumentu opisującego historię okrętu.
Ćwiczenie 8.6.4. Należy utworzyć deklaracje i definicje następujących funkcji odnoszących się do typu AD T Okręty z ćwiczenia 8.6.3:
a) Funkcja siłaBojowa, której argumentem jest obiekt typu Okręt., a która zwraca „siłę bojową”, czyli iloczyn liczby dział i sześcianu średnicy.
b) Funkcja odtwórzWideo, której argumentem jest obiekt typu Okręt, a która powoduje wyświetlenie na ekranie wideoklipu tego okrętu, korzystając w tym celu z funkcji zewnętrznej (trzeba ją zadeklarować), nazywanej odtwórzMpeg, która wyświetla film zapisany wr formacie MPEG.
c) Funkcja konstruująca nowyOkręt, której argumentem jest nazwa (innych składowych się nie pobiera), a która tworzy nowy obiekt typu Okręt o podanej nazwie.
d) Funkcja równyOkręt, która testuje, czy okręty są takie same. Uznaje ona, żc dwa okręty są równe, jeśli mają taką samą nazwę i rok wodowania, inne parametry nie są brane pod uwagę.
e) funkcja mnOkręt, która określa relację mniejszości abstrakcyjnego typi Okręt. Uznaje ona, 2e si< s2, jeśli nazwa okrętu s\ jest alfabetycznie wcze śniejsza niż nazwa okrętu s2, a jeśli nazwy są takie same, to „mniejszy” jes statek o wcześniejszej dacie wodowania.
Po zapoznaniu się z dwoma głównymi standardami proponowanymi dh zorientowanych obiektowo systemów baz danych: 0DL70QL oraz SQL: określimy, na czym polegają główne różnice między nimi. Prawdą jest, żi podobieństwa przeważają nad różnicami i mimo że te standardy pochodzi z dwóch bardzo różnych modeli: języków programowania zoricntowanycł obiektowo oraz języków relacyjnych baz danych, to w każdym ze standardów w sposób efektywny adaptowano pojęcia z obcego mu modelu.
W bieżącym podrozdziale wymienimy podstawowe różnice oraz sposób w jaki w tych dwóch koncepcjach ustalono rożne rozwiązania kompromiso we. Poza tym wskażemy, czym różnią się typy krotkowe i abstrakcyjne typ\ danych z SQL3 od interfejsów' (czyli klas) w języku ODL. A tak naprawdę porównamy trzy koncepcje obiektowości: ODL/OQL, typy krotkowe $QL3 oraz typy wartości w SQL3.
1. Środowisko programistyczne. W systemie OQL zakłada się, żc jege instrukcje są osadzane w języku programowania, który ma wspólne z nim środowisko programowania i model danych. Zakłada się również, że jest to język programowania zorientowany obiektowo, np C++, Smalltalk lub Java. Natomiast w SQL3 przyjmuje się, że jegc obiekty nie należą do środowiska zewnętrznego języka podstawowego. Tak samo jak w pozostałych implementacjach SQL, tak i tu istnieje wąski interfejs, który umożliwia przekazywanie wartości międz\ strukturami danych SQL a zmiennymi środowiska. W uzupełnieniu zwykłego interfejsu między SQL a językiem podstawowym, któr\ opisywaliśmy w podrozdziale 7.1, powstała w systemie SQL3 koncepcja funkcji zewnętrznych abstrakcyjnych typów danych.
2. Rola relacji. W modelu danych SQL3 pojęcie relacji odgrywa główną rolę. Typy wiersza w rzeczywistości są opisem relacji, a typy ADT służą temu, by można było w sposób bardziej elastyczny definiować typy atrybutów relacji. Natomiast w języku OQL główną rolę odgrywają zbiory i wielozbiory obiektów lub struktur zc względu na funkcje pełnione w instrukcjach typu select-from-where. Kolekcje struktur w systemie ODL/OQL są bardzo zbliżone do pojęcia relacji $QL3.