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 -

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Programowanie obiektowe
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.
Języki programowania C++
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.
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.
Wskaźniki. Definiowanie wskaźników Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Real; Przykłady: Wskaźnik.
Struktury.
Tablice.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Projektowanie - wprowadzenie
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
Podstawy C# Grupa .NET PO.
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
Podstawy programowania
Informatyka I Wykład 10 WSKAŹNIKI I ADRESY Jerzy F. Kotowski.
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
Komendy SQL do pracy z tabelami i bazami
MICROSOFT Access TWORZENIE MAKR
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 ( )
Kurs języka C++ – wykład 9 ( )
PL/SQL – dalsza wędrówka
Programowanie w języku C++
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.
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.
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
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 ( )
Wprowadzenie do programowania obiektowego
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 Informacje wstępne

Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja - rodzaje transakcji n Obiekty trwałe u miejsce przechowywania u metody dostępu F pętla F nazwy n Obiekty ulotne n Klastry u - domyślne u - specyfikowane n Wersjonowanie u czasowe u pochodzeniowe n Ograniczenia u słabe u mocne n Triggery u wyzwalacze a transakcje u akcja wyzwalacza a akcja go wywołująca n Zdarzenia u zdarzenia proste u operatory zdarzeniowe u zdarzenia złożone u historie zdarzeń

Klasa database wprowadza funkcje do manipulacji bazą danych i nazwami trwałych obiektów. n Do obsługi bazy danych służą następujące funkcje: open - otwiera bazę danych identyfikowaną przez nazwę. Jeżeli wyspecyfikowanej bazy danych nie znaleziono baza danych zostanie utworzona. Przy prawidłowym wykonaniu funkcja zwraca wskaźnik do obiektu klasy database, a w przypadku błędu zwraca NULL; close - zamyka poprzednio otwartą bazę danych. Zwraca zero przy prawidłowym wykonaniu; remove - usuwa otwartą wcześniej bazę danych. Zwraca zero przy prawidłowym wykonaniu; Klasa database (1) database *db;... if((db=database::open("AW"))==0) { error; } db->close; db->remove;

Klasa database (2) n Do manipulacji nazwami trwałych obiektów służą funkcje: get_name - zwraca pełna nazwę wyspecyfikowanego obiektu; valid - zwraca true lub false w zależności czy argument odnosi się do trwałego obiektu czy też nie; get_type_name - zwraca nazwę typu trwałego obiektu do którego odnosi się argument funkcji; Tylko pierwsze trzy funkcje ( open, close, remove ) mogą być wywołane poza transakcją, reszta może być użyta tylko w ciele transakcji. persistent class1 *pv; db->get_name(pv); db->valid(pv); db->get_type_name(pv);

Transakcje (1) n Cały kod dotyczący interakcji z bazą danych, jak i manipulacji na obiektach znajdujących się wewnątrz bazy danych musi znajdować się wewnątrz transakcji. Domyślnie Ode używa 2PL. n Rozróżniamy trzy rodzaje transakcji: u modyfikującą u odczytującą u hipotetyczną n Maja one kolejno następujące formy: u trans {... } u readonly trans {... } u hipotetical trans {... } n Transakcję można rozpocząć tylko dla otwartej bazy danych. n Po zakończeniu wszystkich transakcji bazę danych należy zamknąć.

Transakcje (2) 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; }