ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Programowanie obiektowe
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Programowanie obiektowe
Programowanie obiektowe
Zmienne i Typy.
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Static, const, volatile.
formatowanie kodu źródłowego
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
ODE Zapytania. Pętla for (1) Do obiektów będących instancjami klas możemy uzyskać dostęp za pomocą pętli for Zakres tej pętli to wszystkie obiekty klasy.
Struktury.
Tablice.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Podstawy programowania
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
Informatyka I Wykład 10 WSKAŹNIKI I ADRESY Jerzy F. Kotowski.
Podstawy programowania
Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt.
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe 2013/2014
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Kurs języka C++ – wykład 3 ( )
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Klasy ( uzupełnienie ). Definicja klasy Klasa jest zbiorem logicznie powiązanych danych i funkcji, przeznaczonych do realizacji konkretnego zadania; Zamknięcie.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Przeładowanie funkcji. Dotychczas wiedzieliśmy, że: w danym zakresie ważności może być tylko jedna funkcja o danej nazwie. Kompilator języka C++ daje.
Typy liczbowe, zmienne, operatory Zajęcia 4. Zmienne Zmienna – to w programowaniu element programu, który może mieć przypisaną pewną wartość (wartość.
Dziedziczenie wielobazowe. dana klasa może mieć kilka bezpośrednich klas bazowych: dana klasa może mieć kilka bezpośrednich klas bazowych: kolorpołożenie.
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
Wykład 4 Klasa Vec, której konstruktory alokują pamięć dla obiektów 1.Przykład definicji klasy Vec 2.Definicje konstruktorów i destruktora 3.Definicja.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Programowanie Obiektowe – Wykład 6
Kurs języka C++ – wykład 3 ( )
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Kurs języka C++ – wykład 4 ( )
Założenia projektowe Javy
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
PGO Przeciążanie metod i konstruktorów
Zapis prezentacji:

ODE Triggery

Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione w następnych punktach. n Triggery muszą być jawnie aktywizowane dla każdego obiektu. n Tylko aktywny trigger może zostać wyzwolony. n Definicja triggera występuje w klasie i jest następująca: trigger nazwa_triggera(parametry) : [perpetual] [^] zdarzenie ==> [end | [!] dependent] action

n Mamy trzy rodzaje zdarzeń prostych: u zdarzenia oparte na metodach klas u zdarzenia transakcyjne u zdarzenia definiowane przez użytkownika Zdarzenia proste

Zdarzenia oparte na metodach klas n Wywołania publicznych metod trwałych obiektów powoduja jednocześnie zajście zdarzeń w ramach tych obiektów. Np. wywołanie: p-f(...) gdzie p jest trwałym wskaźnikiem na trwały obiekt a f metodą tego obiektu powoduje zajście zdarzenia before f - które zaszło dla obiektu wskazywanego przez p przed wywołaniem metody f i zdarzenia after f - które zaszło po zakończeniu działania funkcji f. n Jeżeli f jest funkcją przeciążoną np. void f(int); int f(float); float f(); wtedy przy zdarzeniach prostych muszą być użyte ich prototypy aby rozróżnić poszczególne wywołania: before f(int); before f(float); before f();

Zdarzenia oparte na metodach klas (cd.) n Bezpośredni dostęp do obiektu (np. czytanie lub przypisywanie wartości publicznym atrybutom klasy) nie generuje zdarzeń. n Zagnieżdżone wywołania funkcji trwałych obiektów w jego metodach poprzez użycie zmiennej this jawnie lub niejawnie nie powoduje zdarzeń. Jedynie specjalna zmienna pthis użyta w zagnieżdżonych wywołaniach powoduje wygenerowanie zdarzeń.

Zdarzenia transakcyjne n Transakcja odczytująca nie może zawierać instrukcji typu update. Ponadto program zawierający jakąkolwiek taką transakcję musi zostać skompilowany z opcją -D i stałą ODE_READONLY Transakcje tego typu rzadziej powodują deadlock, zakładają bowiem tylko blokady do odczytu, oraz nie zapisują informacji w plikach typu log. Transakcje hipotetyczne powalają użytkownikom generować scenariusze typu co by było gdyby. Użytkownik może zmieniać dane i obserwować działanie (należy pamiętać o aktywności systemu) tych zmian bez rzeczywistych zmian w bazie danych. Zmiany są widziane tylko wewnątrz transakcji i nie są widziane przez innych użytkowników. Ponadto nie ma żadnych wpisów do plików log. OO -DODE_READONLY

Transakcje – zatwierdzenie, wycofanie n System przystępuje do zatwierdzenia transakcji (commit) w następujących przypadkach: 1. wykonanie instrukcji break kończącej blok transakcji; 2. wykonanie instrukcji return kończącej blok transakcji; 3. normalne zakończenie bloku instrukcji ujętych w transakcję. n Transakcja kończy się wycofaniem jeśli wystąpi jeden z poniższych warunków: 1. użytkownik jawnie wywoła instrukcję tabort (wtedy również kończymy blok transakcji); 2. nastąpi zakleszczenie; 3. z jakichkolwiek powodów transakcja mogła zostać zakończona.

Obiekty trwałe n Obiekt jakiejkolwiek klasy jak i obiekt typu prostego jak np.: char, short, int, long, unsigned char, unsigned short, unsigned int, unsigned long, float i double może być utworzony jako obiekt trwały. Definicja klasy, której obiekty maja być trwałe musi być poprzedzona deklaracja, która ma następująca formę: persistent class class-name; Taka deklaracja pozwala na tworzenie obiektów klasy employee o charakterze zarówno trwałym jak i ulotnym. n Jeżeli klasa ma być użyta tylko do tworzenia obiektów trwałych, wówczas zamiast poprzedniej deklaracji można zastosować deklarację klasy bezpośrednio jako klasy trwałej: n Specyfikacja klasy jako trwałej nie jest potrzebna w programie, w którym nie manipulujemy, ani nie odwołujemy się do obiektów trwałych, będących instancjami tej klasy. persistent class employee; class employee { char addr[16];... }; persistent class employee { char addr[16];... };

Klasa cluster n Wszystkie obiekty w bazie danych składowane są wewnątrz klastrów (w odróżnieniu od systemów relacyjnych gdzie dotyczy to tylko określonych obiektów). Domyślnie, wszystkie obiekty typu np. telefon, są składowane w domyślnym klastrze powiązanym z typem telefon. Jeżeli wszystkie obiekty typu telefon są składowane w domyślnym klastrze, wówczas klaster ten reprezentuje zasięg obiektów typu telefon. Użytkownicy mogą jednak alokować swoje obiekty w zdefiniowanych przez siebie klastrach. W przykładzie ZepsuteTelefony i Dokumentacje są wskaźnikami na klastry nazwane odpowiednio zepsute i dokumenty. database *db;... if((db=database::open("AW"))==0) {... } trans{ cluster ZepsuteTelefony("zepsute", db), Dokumentacje("dokumenty",db);... }...

Klastry – cechy i ograniczenia n Jeżeli zamierzamy używać własnych klastrów musimy pamiętać o ograniczeniach i ich cechach: u deklaracja klastra musi występować wewnątrz transakcji u klaster może zawierać obiekty różnych typów u wskaźnik na klaster utworzony wewnątrz transakcji jest widoczny tylko w jej zasięgu i po jej zakończeniu wszelkie odwołania do niego są błędne. Wskaźniki na klastry są bowiem, tak jak zmienne, składowane na stosie i po zakończeniu bloku, w którym zostały zadeklarowane przestają istnieć. n Jest rzeczą oczywistą, że w momencie gdy tworzymy obiekty danego typu i nie definiujemy własnego klastra, lub tworzymy je nie umieszczając ich jawnie w zdefiniowanym klastrze, trafiają one do domyślnego (wcześniej omówionego) klastra.

Tworzenie i usuwanie trwałych obiektów n Obiekty trwałe są tworzone i usuwane poprzez użycie operatorów pnew i pdelete. Poza tym, że operatory te dotyczą obiektów w bazie danych a nie obiektów na stosie, ich semantyka jest podobna do operatorów new i delete. Operatory pnew i pdelete nie mogą być przeciążane. To jednak nie oznacza, że nie mamy prawa przeciążać lub też tworzyć własnych konstruktorów. n Operator pnew zwraca wskaźnik do obiektu trwałego. Wskaźniki takie noszą nazwę wskaźników trwałych. Wskaźniki trwałe są deklarowane tak samo jak zwykłe wskaźniki z wyjątkiem tego, że przy ich deklaracji jest użyte określenie typu - słowo kluczowe persistent. n Obiekty trwałe są wskazywane przez trwałe wskaźniki tak samo jak obiekty będące na stosie wskazywane są przez wskaźniki ulotne.

Tworzenie i usuwanie trwałych obiektów (przykład) (1) n Poniższy przykład pokazuje jak można tworzyć i manipulować trwałymi obiektami: persistent class osoba{... public:... int wiek; char nazwisko[20]; }; main() {... persistent osoba *ktos; trans {... ktos = pnew osoba;... ktos->wiek=40;... pdelete ktos; } n Domyślnie pnew tworzy obiekt w domyślnej bazie danych. Baza danych w której nowo tworzony obiekt ma zostać umieszczony może być jednak podana jawnie i może być różna od domyślnej (ostatnio otwartej) : ktos = pnew osoba in db;

Tworzenie i usuwanie trwałych obiektów (przykład) (2) n Obiekt umieszczony w domyślnej bazie danych lub też w jawnie podanej bazie jest umieszczony w domyślnym klastrze przypisanym obiektom tego typu. Można jednak zdefiniować dla obiektu alternatywny klaster. Umieszczanie obiektów w predefiniowanych klastrach daje większa kontrolę nad ich fizycznym i logicznym rozmieszczeniem przez co uzyskujemy większą wydajność i uporządkowanie bazy danych. n Poniższy fragment pokazuje w jaki sposób możemy używać klastrów n Pojedynczy klaster może zawierać obiekty różnych typów. persistent osoba *ktos; trans { cluster osoby("osobki", db); ktos = pnew osoba in osoby; }