Przykładowy
model obiektowy (notacja Coad/Yourdon)
- Produkt Servio Corp., od 1983 roku
- "Czysto" obiektowa b.d.
- Identyfikator typu surogatu OOP (Object Oriented Pointer),
niezależny od fizycznego położenia obiektu
- Każdy obiekt należy do jednej klasy
- Klasy są także obiektami
- Istnieją zmienne klasy -- wspólne dla wszystkich obiektów tej klasy
- Atrybuty prostych typów nie są obiektami
- Metody są zapisywane w języku OPAL
- Typizacja jest traktowana jako ograniczenia
- Dostęp do atrybutów tylko przez metody (wymiana komunikatów)
- Redefiniowanie dziedziczonych metod
- Struktura drzewiasta
(bez wielodziedziczenia)
- Wszystkie klasy pochodzą od klasy systemowej Object
- Każdy obiekt mający jakiekolwiek powiązanie (np. przez dziedziczenie) z
globalnym "korzeniem" jest trwały
- Obiekty są automatycznie usuwane gdy nie ma da nich żadnych odniesień
- Aktywne obiekty -- samokontrola
- Związki referencyjne dotyczą id (OOP)
- Nie ma operacji kasowania danych
- Specjalnego języka brak
- Do wyszukań w kolekcjach służą metody select
- Kopie rezerwowe on-line: pełne i przyrostowe
- Możliwość zapisu lustrzanego
- Autoryzacja dostępu: userid + hasło
- Uprawnienia dostępu:
- do segmentów zawierających obiekty
- do niektórych metod systemowych
- Wszystkie zmiany danych są wykonywane w trybie transakcyjnym
- Możliwość pracy readonly w trybie "beztransakcyjnym"
- Izolacja transakcji
- Wielodostęp do obiektów: słowniki obiektów dodaje się do list symboli
użytkowników
- Obiekty globalne są widziane przez wszystkich
- Blokady:
- podejście optymistyczne: system rozwiązuje konflikty w czasie zatwierdzania
- podejście pesymistyczne: jawne wykorzystanie blokad
- Dostępne interfejsy do C, C++, Smalltalk
- Obiekty zebrane w podsystemy i systemy
- Serwer-jądro Stone: zarządzanie zasobami dyskowymi
- Klient Gem: język OPAL i zarządzanie danymi
- Pochodna Smalltalk-80
- Programy są także obiektami
- Dostarcza predefiniowanych klas:
- proste typy danych
- różnym kolekcje
- Środowisko do budowy programów OPAL
- definiowanie klas i kolekcji
- narzędzia wspierające programowanie w OPAL, w tym debugger
- Narzędzia do projektowania formularzy
- Przeglądarki do struktur obiektów
- Produkt O2 Corp., Francja
- Stosunkowo popularny w środowiskach akademickich
- Każdy obiekt ma niezmienny identyfikator
- Obiekty trwałe mogą także mieć nazwy
- Obiekty i wartości
- obiekty -- mają tożsamość, wartości nie
- każdy obiekt ma wartość
- obiekty mogą być dzielone -- zawarte w innych obiektach, wartości mogą być
jedynie skopiowane
- Typy
- wartości mają typ (prosty lub złożony),
- składowe typu złożonego mogą być wartościami lub obiektami
- Klasy i obiekty
- każdy obiekt należy do jednej klasy
- klasy zawierają dane (wartość) oraz metody
- metody są pisane w języku O2C
- Własności:
- prywatne
- tylko do odczytu
- publiczne
- Metody:
- Enkapsulacja na poziomie schematów: eksport/import klas
- Redefiniowanie metod dziedziczonych
- Późne wiązanie
- Możliwość wywoływania (przykrytych) metod z klas nadrzędnych
- Możliwe dziedziczenie wielokrotne
- Korzeniem hierarchii jest klasa Object
- Trwałe są elementy (obiekty, wartości) którym nadano nazwę
- Trwałe są także wszystkie składniki (rekurencyjnie) danych trwałych
- Garbage collection na żądanie, obejmuje dane które utraciły cechę
trwałości
- Dane mające powiązania z innymi nie mogą być usunięte
- Związki referencyjne dotyczą id
- Można pracować w trybie read-only albo transakcyjnym
- Operacje na transakcjach:
- commit -- zatwierdza transakcję, zwalnia blokady i zasoby
- validate -- zatwierdza transakcję, zwalnia blokady ale zatrzymuje zasoby
- abort -- odrzuca transakcję
- transaction -- przejście do trybu transakcyjnego
- Izolacja transakcji
- Dwufazowe blokowanie na poziomie stron
- Brak autoryzacji dostępu
- Kopie rezerwowe:
- Możliwość prowadzenia dziennika transakcji (cold log)
- Automatyczne odtwarzanie po awarii na podstawie dzienników powtórzeń
(redo logs)
- O2API (biblioteka typu C)
- Interfejs do C
- Interfejs do C++ (ODMG)
- Interfejs do WWW
- Struktura bazy odpowiednia dla wielkich aplikacji:
- system danych składa się ze schematów
- elementy schematu są przypisane do baz (podział logiczny) a te do
wolumenów (podział fizyczny)
- Możliwość indeksowania list i zbiorów
- Możliwość łączenia danych w grona (clusters)
- Praca w architekturze klient-serwer
- Możliwości rozproszenia danych schematu:
- rozłożenia danych w wielu bazach (różne podziały obiektów)
- zapytań w OQL do rozproszonej kolekcji
- Możliwość współpracy z ORB (Object Request Broker) wg standardu
CORBA
- Obiektowy język 4GL, pochodna C
- Służy:
- jako DDL i DML
- do programowania metod obiektów
- do budowania aplikacji
- Powoływanie wartości (zmiennych):
o2 typ
zmienna[=wartość],...
- Zmienne mogą być obiektami lub wartościami
- Standardowe funkcje display, input służą do domyślnej obsługi wartości
- Krotka (tuple) -- podstawowy typ złożony
- definiowanie:
tuple(pole: typ, ... )
- dostęp do elementów:
nazwa.pole
- Lista
- definiowanie: list(typ)
- podstawianie:
lista = list(element, ...)
- dostęp: lista[indeks]
- dodawanie do listy:
lista += list(p)
- test przynależności do listy:
(element in lista)
- pętla sterowana listą:
for ( element in lista [where
warunek] ) { instrukcje }
- Zbiór
- definiowanie: [unique] set(typ)
- podstawienie:
zbiór = set(element, ...)
- dodawanie, test przynależności, pętla: jak dla listy
- Definicja klasy
- składnia:
class klasa [inherits rodzice]
type
typ_danych
[method sygnatury_metod]
end
- słowa private, read, public przed definicją typu, składowej typu lub
metody określają stopień enkapsulacji
- Powoływanie obiektów-instancji klas
- powołuje się komendą
instancja = new klasa
[(parametry)];
- powoduje to m.in. wykonanie metody init klasy (można jej przekazać
parametry j/w)
- Składnia odwołań do danych
- do własności: obiekt->własność
- do wartości obiektu: *obiekt
- Przykład definicji klasy:
class Person
type tuple
(
read name: tuple
(
last_name: string,
first_name: string
),
public address: Address,
private children: list(Person)
)
method
public is_adult: boolean,
public add_child(child: Person)
end
- Budowa
- sygnatura (nagłówek) w definicji klasy
- ciało -- definiowane osobno
- Self dotyczy obiektu, dla którego metodę wywołano
- Składnia wywoływania
- wiązanie późne:
obiekt->metoda(parametry)
- wiązanie
statyczne:
obiekt->metoda@klasa(parametry)
tak
można wywołać metodę z nadklasy)
- Standardowe metody: display, edit
- Nazwę można nadać obiektowi lub wartości
- Nazwany element i wszystkie jego składowe (rekurencyjnie) stają się trwałe
- Nadawanie nazwy:
- powoduje powstanie elementu
- składnia:
name nazwa: typ|klasa
- nazwany obiekt trzeba jeszcze zainicjować komendą new
- Wzorowany na SQL
- Jest podstawą standardu deiniowanego przez ODMG
- Umożliwia deklaratywne składanie zapytań do danych obiektowych
- Interaktywnie (zapytania ad hoc)
- komenda query w programach o2, o2dba itp.
- wynik jest przedstawiany w postaci graficznej obrazującej strukturę, z
hiperpołączeniami
- Embedded OQL -- wywoływanie z 3GL
- zapytanie jest wywoływane przez funkcję o2query
- Najprostsze zapytania
- o nazwany obiekt lub wartość:
nazwa
- o element listy w
krotce:
nazwa.składnik[indeks]
- Zapytanie select służy do przeszukiwania kolekcji:
- składnia: select [distinct] el
from el in
kolekcja
where warunek
- wyniki można łączyć w struktury:
select struct(
alias1:
el1,
alias2: el2, ...) ...
- Zapytania można dowolnie zagłębiać
(OQL jest ortogonalny)
- Można użyć wielu kolekcji w zapytaniu i wykonywać "złączenia"
- W zapytaniach można odwoływać się do metod (składnia "z kropką")
- group by łączy w zbiory obiekty o wspólnych wartościach wybranych atrybutów
- element wyjmuje obiekt z kolekcji jednoelementowej (np. z wyniku select)
- define tworzy nazwany obiekt z wyniku zapytania
- sort sortuje wynik zapytania
- count, exists, like -- jak w SQL
- Graficzne środowisko programisty O2C/OQL
- Zawiera:
- przeglądarkę i edytor struktur
- edytor do programów O2C
- narzędzia do zarządzania kodem źródłowym
- możliwość przechowywania wersji kodu żródłowego
- kompilator
- interfejs do OQL
- Narzędzie do tworzenia interfejsów graficznych
- Tworzy graficzne odwzorowania obiektów, umożliwiające
- przeglądanie
- manipulację
- wywoływanie metod z parametrami
- Narzędzia i biblioteki klas do tworzenia i edycji grafów i drzew
- Zbiór typowych klas wraz z metodami:
- obsługa dat
- dialogi
- edytor tekstu typu Emacs
- wyświetlarki do bitmapów
- obsługa map aktywnych