73187 ullman254 (2)

73187 ullman254 (2)



514 s zorientowani: obiektowo języki zapytań

traktowano by jako równe, jeśli wyglądałyby tak samo po zdekodowaniu na ekranach o zbliżonej rozdzielczości, ale nie możemy więcej uwagi poświęcać temu zagadnieniu. Z instrukcji w wierszu 6) wiadomo, że operator < nie jest określony dla wartości typu Mpeg. Oznacza to. że jeśli A i B są wartościami tvpu Mpeg, to wyrażenie A < B jest niedopuszczalne.

Kod filmowy MPEG

Ponieważ filmy zajmują w pamięci wiele przestrzeni, więc zazwyczaj przechowuje się je w postaci kodowanej, przy czym istnieje wiele rożnych standardów kompresowania. Najbardziej popularny standard - MPEG -korzysta przy tworzeniu kodu z faktu, że bezpośrednio kolejne klatki filmowe są bardzo do siebie podobne. Zatem można klatki podzielić na obszary i obszar z jednej klatki traktować jako wskaźnik do obszaru z poprzedniej klatki. Obszar w' klatce poprzedniej może znajdować się w tym samym położeniu, jeśli jest to fragment tła, albo w innym (jeśli jest to fragment obiektu ruchomego).

Mimo że, stosując standard MPEG, uzyskuje się dużo lepsze wyniki niż przy zwykłych kompresjach tekstowych, to i lak po skompresowaniu godzinny film zajmuje około 1 gigabajta pamięci. A dodatkowo, ponieważ dopuszcza się niewielkie różnice w odpowiadających sobie obszarach, wice zarazem obraz traci na jakości. Proces dekompresji filmu jest także dość skomplikowany. Jednakże mimo tych kłopotów- standard MPEG stanowi niezły kompromis między jakością obrazu, objętością pliku oraz mocą obliczeniową potrzebną do przetwarzania.


8.6.2. Definiowanie mclod dla typów ADT

Tuż za listą atrybutów' w deklaracji typu ADT można umieścić dowolną listę deklaracji funkcji. Postać deklaracji funkcji jest następująca:

FUNCTICN <nazwa> (<argumenty>) returns <typ>;

Każdy argument składa się z nazwy zmiennej oraz typu zmiennej. Argumenty oddziela się przecinkami.

Funkcje mogą być wewnętrzne oraz zewnętrzne. Funkcje zewnętrzne zapisuje się w języku podstawowym, a w definicji typu ADT umieszcza się tylko ich sygnaturę. Funkcje zewnętrzne zostaną omówione w p. 8.6.3. Funkcje wewnętrzne pisze się w rozszerzonym SQL. Poniżej przedstawiamy kilka możliwości rozszerzenia zarówno $QL2, jak i zapytań SQL3.

•    jest stosow any jako operator przypisania.

•    Zmienne lokalne funkcji deklaruje się, umieszczając po dwukropku nazwę i typ zmiennej.

•    Operator kropka udostępnia wartości składowych struktur.

•    Wyrażenia logiczne takie same jak w klauzuli WHERE.

•    Treść procedury stanowią instrukcje ujęte w nawiasy REGIN i END.

Wielkie obiekty binarne

Wartości typu BLOB mogą wyglądać dla użytkownika jak wielkie ciągi bitów', ale ich implementacja jest dużo bardziej skomplikowana niż implementacja tekstów o długości nie przekraczającej 255 bajtów. Nie ma na przykład sensu przechowywanie obszernych tekstów jako składowych krotek, ponieważ i tak trzeba je przechowywać poza bazą danych, najczęściej w systemie plików.

1 jeszcze inny przykład: w modelu klient-serwer, opisanym w p. 7.3.4, zakłada się, że krotki mają umiarkowane rozmiary i serwer przesyła do klienta w odpowiedzi całą krotkę. Ale w przypadku wartości typu BLOB nie ma sensu natychmiastowe przesłanie całej jednostki danych. Jeśli na przykład do serwera zostało skierowane polecenie przesłania filmu, to serwer może go przesyłać w niewielkich porcjach, po kilka sekund wyświetlania. Klient może wówczas od razu to wideo wyświetlać i nie musi pamiętać całego filmu lokalnie, ani czekać zanim zostanie przesłana całość filmu.


PRZYKŁAD 8.32

Powrócimy do przykładu 8.30, gdzie zdefiniowano adres ADT. Na rysunku 8.19 przedstawiono kilka funkcji, które można dołączyć za pomocą instrukcji tworzenia typu z rys. 8.17.

W wierszach od 1) do 6) zamieszczono definicję konstruktora obiektów typu adres ADT. Przypomnijmy, że w języku SQL istnieje zero argumentowy wbudowany konstruktor obiektów dla typów ADT, w tym przypadku jest to funkcja o nazwie AdresADT. Jednakże my chcemy, aby konstruktor miał dwa argumenty, których wartości określą miasto i ulicę w tworzonym adresie. Można te funkcje nazwać jakkolwiek, ale jest dopuszczalne, a nawet wskazane, utycie nazwy konstruktora tej samej co nazwa klasy.

Deklaracja nowego konstruktora została zamieszczona w wierszu 1). Korzysta się tu z dwóch argumentów 5 i c, które oznaczają odpowiednio ulicę oraz miasto. Są one oba napisami o długościach odpow iednio 50 i 20 znaków. Wartość funkcji ma typ AdresADT. W wierszu 2) deklaruje się zmienną lokalną a typu AdresADT.

Treść funkcji została zapisana w wierszach od 3) do 6). W wierszu 3) tworzy sic nowy obiekt typu AdresADT i staje się on wartością zmiennej :a. Nie da się pomylić konstruktora wbudowanego z konstruktorem bieżąco two-


Wyszukiwarka

Podobne podstrony:
42460 ullman241 (2) 488 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ Korzystamy tutaj z podzapytania po
24504 ullman238 (2) 482 S ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ T cych klauzulę WHERE. Te nazwiska s
70029 ullman243 (2) 492 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ lect-from-whcre; przedstawiono ją n
82105 ullman255 (2) 516 S. ZORIENTOWANE OBIEKTOWO JEŻYKI ZAPYTAŃ 1)    B*UNCTION Adre
ullman247 (2) :>uu 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ8.5.1. Typ wiersza W języku SQL3 można
ullman250 (2) 506 8 ZORIENTOWANE OBIEKTOWO JEŻYKI ZAPYTAŃ która relacja jest relacją R? W rozpatry w
48057 ullman236 (2) 478 8 ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ8.2.2. System typów Struktura typów w
ullman249 (2) 504 fi ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ jako referencja. Rozpoczynamy od zdefinio

więcej podobnych podstron