Objektdatabaser. ODMGs objektmodell og ODL (Object Definition Language) g Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Like dokumenter
UNIVERSITETET I OSLO. Objektdatabaser. ODMGs objektmodell og ODL (Object Definition Language)

Objektorienterte databasesystemer (OODBS)

objektrelasjonelle j databaser. SQL:1999

Distribuerte objekter og objekt-basert mellomvare

Distribuerte objekter og objekt-basert mellomvare

Distribuerte objekter og objekt-basert mellomvare

Databaser & objektorientering.

UNIVERSITETET SQL-99. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

INF1300 Introduksjon til databaser

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Informasjonssystemer, DBMSer og databaser

INF1300 Introduksjon til databaser

INF212 - Databaseteori. Kursinnhold

Generiske mekanismer i statisk typede programmeringsspråk

OQL Object Query Language

INF1300 Introduksjon til databaser

Et objektorientert spørrespr. rrespråk: Object Query Language (OQL)

Modeller for design av Web-Applikasjoner

INF1000: Forelesning 7

Databaser: Relasjonsmodellen, del I

INF1000: Forelesning 7. Konstruktører Static

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

Kapittel 7: Mer om arv

Læringsmål for forelesningen

CORBA Component Model (CCM)

INF1300 Introduksjon til databaser

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

Kap3: Klassemodellering

De aktuelle er altså databasene 1 til 3. I praksis brukes mest 2 og 3. Vi skal likevel se på OODBMS også, siden det må antas å være kommende.

Spesifikasjon av Lag emne

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF2810: Funksjonell Programmering

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

INF2810: Funksjonell Programmering

Introduksjon til objektorientert programmering

INF2810: Funksjonell Programmering

CORBA Objektmodell (Java RMI)

INF2810: Funksjonell Programmering

Etter uke 9 skal du. Introduksjon til objektorientert programmering. Innhold. Klasser som abstraksjoner

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

IN2090 Introduksjon til databaser

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Semantisk Analyse del III

INF3100 Databasesystemer

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

INF1010 våren Arv og subklasser del 1

Fra krav til objektdesign

INF1010 våren Arv og subklasser del 1

Spesifikasjon av Lag emne. Kursregistrering bruksmønstermodell (ny versjon) Dagens forelesning. Fra krav til objektdesign

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

UNIVERSITETET I OSLO

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

AlgDat 12. Forelesning 2. Gunnar Misund

Hvordan databasesystemene kan hjelpe RAM-produsentene

Eksamen. Objektorientert Programmering IGR 1372

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ragnar Normann 1

Hvorfor objektorientert programmering?

Datatyper og typesjekking

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Databasesystemer, oversikt

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

Modellering av data. Magnus Karge, Kartverket

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

ITGK - H2010, Matlab. Dagens tema : Teori - Databaser

Generiske mekanismer i statisk typede programmeringsspråk INF5110 April, 2009

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

Datatyper og typesjekking

Relasjonsdatabasedesign

I objektorientering er det mange elementer som inngår og et av problemene er mangelen på et formelt fundament. Det finnes ingen omforent og formell mo

UNIVERSITETET I OSLO. Relasjonsmodellen. Relasjoner og funksjonelle avhengigheter. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Distributed Component Object Model. Utvikling av distribuerte applikasjoner. Utvidelse av COM for støtte av distribuerte objekter

SOSI-forvaltning - logisk modell

Datatyper og typesjekking

INF1300 Introduksjon til databaser

Enkle generiske klasser i Java

2 Om statiske variable/konstanter og statiske metoder.

Oppdateringsanomalier Normalformer

Forelesere. Velkommen til programmeringsspråkenes verden IN211. Praktiske opplysninger. Faglige forutsetninger. Ragnhild Kobro Runde

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Parallelle og distribuerte databaser del III

INF1300 Introduksjon til databaser

Velkommen til. INF våren 2017

2 Om statiske variable/konstanter og statiske metoder.

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

Innhold uke 10. Objektorientert programmering i Python. Oblig 7 og 8. IN1000 Seminar! IN1000 Høst 2018 uke 10 Siri Moe Jensen

Transkript:

UNIVERSITETET IOSLO Objektdatabaser ODMGs objektmodell og ODL (Object Definition Language) g Institutt for Informatikk INF3100 24.2.2009 Ellen Munthe-Kaas 1

Databaser vs objektorientering Det er en inherent (iboende) konflikt mellom objektorientering og objektdatabasesystemer I objektorientering er innkapsling et sentralt begrep: Den eneste mekanismen som finnes for å la et objekt få vite noe om hvordan et objekt fra en annen klasse fungerer, er arv Objektdatabaser er databaser, og de skal ha et begrepsmessig skjema Dermed trenger objektdatabaser noe i tillegg til arv Det viktigste er en mekanisme som erstatter relasjons- databasenes fremmednøkler, men en slik mekanisme passer ikke inn i «ren» objektorientering INF3100 24.2.2009 Ellen Munthe-Kaas 2

OMG og ODMG Derfor har verden to industri- og universitetsoppnevnte standardiseringskomiteer for objektorientering OMG (Object Management Group) forvalter en de facto standard for hva objektorientering er OMG har klassisk objektorientering som sitt mantra, og de har ikke villet å gå på akkord for å tilfredstille till databaseindustrien ODMG (Object Data Management Group) forvalter en standard for objektdatabaser som tilfredstiller databaseindustriens krav, men som ellers ligger så nær opp til OMG-standarden som mulig INF3100 24.2.2009 Ellen Munthe-Kaas 3

Viktige OMG-standarder CORBA (Common Object Request Broker Architecture) Arkitektur for mellomvare mellom (objektorienterte) klienter og (objektorienterte) t t tjenere Omfatter språket IDL (Interface Definition Language) som brukes til å spesifisere objektklasser UML (Unified Modelling Language) Er på godt og vondt i ferd med å bli et enerådende sett av modelleringsspråk for objektorienterte systemer Er på rask fremmarsj både i industri og undervisning Hjemmesiden for OMG er http://www.omg.org/ INF3100 24.2.2009 Ellen Munthe-Kaas 4

ODMG-standarden I ODMG (Object Data Management Group) forvalter en standard for objektdatabaser bestående av En objektmodell som ligger så nær opp til OMG- standarden som mulig ODL (Object Definition Language) som er et språk for å definere objektklasser (OMGs IDL er inneholdt i ODL) OIF (Object Interchange Format) som er et format for å skrive og lese objekter til og fra fil OQL (Object Query Language) som er et spørrespråk hvis syntaks med vilje er gjort mest mulig lik SQL Språkbindinger for Smalltalk, C++ og Java (Simula er for gammel og C# for ung for at bindinger for disse språkene er med i standarden) INF3100 24.2.2009 Ellen Munthe-Kaas 5

ODMG-standarden II Merk at standarden ikke har noe datamanipuleringsspråk all oppdatering skal foregå via et vertsspråk Hovedhensikten med utvekslingsformatet OIF er å kunne utveksle objekter mellom ulike OODBMSer Gjeldende ODMG standard er ODMG 3.0 (2000) Der er ingen av språkbindingene fullstendig definert, så vi venter på en ny versjon av standarden Hjemmesiden for ODMG er http://www.odmg.org/ INF3100 24.2.2009 Ellen Munthe-Kaas 6

Elementer i ODMGs begrepsverden Objektidentitet og objektidentifikator (OID) Objekter og verdier (verdier er ikke objekter) Ekstensjon (Extent) instansene i en klasse Komplekse objekter og typekonstruktører Operatorer Programmeringsspråkkompatibilitet (sømløs overgang mellom database og applikasjonsprogrammer) Innkapsling (skjulte data) Type- eller klassehierarkier med arv og polymorfi INF3100 24.2.2009 Ellen Munthe-Kaas 7

Det objektorienterte paradigme Klassifikasjon og taksonomi Paradigme: OO er laget for å kunne modellere et interesseområde (ofte kalt miniverden eller UoD) som en samling av kommuniserende og samarbeidende entiteter (enheter) som vi kaller objekter Klassifikasjon: Objektene grupperes i klasser som er en felles beskrivelse (mal) for alle objekter som tilhører samme klasse, kalt klassens s intensjon (intent) samling av objekter med felles egenskaper, kalt klassens ekstensjon (extent) Taksonomi: Klassene ordnes i super- og subklasser Dette gir opphav til arv av egenskaper og polymorfi INF3100 24.2.2009 Ellen Munthe-Kaas 8

Abstraksjon og autonomi Objekt: <verdi, {operatorer}> Objektene er distinkte og universelt identifiserbare Operatorene er realisert (implementert) som metoder Verdi: Datastruktur Verdier kan være forskjellig fra andre verdier, men ikke distinkte og universelt identifiserbare Innkapsling: Et objekt kan inneholde og skjule intern informasjon (Forutsetter at objektene oppfører seg «pent» og ikke «snoker i andres interne data») Kontrakt: Et krav om at objekter oppfører seg (kommuniserer og samarbeider) i henhold til avtalte regler INF3100 24.2.2009 Ellen Munthe-Kaas 9

Målet for OO-datamodellering: 1:1-modell av interesseområdet Interesseområdet (UoD) Tabellorientert datamodel 1N 1:N DB 1:1 Objektorientert datamodel DB INF3100 24.2.2009 Ellen Munthe-Kaas 10

OO-modellering og objektdatabaser Sammenlignet med tradisjonelle datamodeller skal en OO-modell gi Høy modularitet gjennom meningsfulle abstraksjoner Bedre kontroll med kompleksitet Klar avgrensning mellom klassen som abstrakt datatype (ADT) og dens implementasjon OO-modellering skal fremme evolusjonær systemdesign med inkrementell programmering g og gjenbruk En objektdatabase (ODB) er en persistent samling av objekter Et ODB-objekt har formatet <OID, verdi, {operasjoner}> Et OODBMS er et DBMS som understøtter ODBer INF3100 24.2.2009 Ellen Munthe-Kaas 11

ODB-eksempel Eksempelklasse: class Konto { integer real REF Kunde } ktonr; saldo; eier; Eksempelverdier: V 1 = tuppel (ktonr: 65536, saldo = 34567.50, eier = ^K 1 ) V 2 = tuppel (ktonr: 17289, saldo = 24506.52, eier = ^K 2 ) V 3 = tuppel (ktonr: 87654, saldo = 21451.07, eier = ^K 1 1) Eksempelobjekter: O 1 = <, V 1, > O 2 =<, V 2, > O 3 =<, V 3, > INF3100 24.2.2009 Ellen Munthe-Kaas 12

Krav til OODBMSer i The OODB Manifesto (1990) Må ha OID (objektidentifikator) Komplekse og sammensatte objekter Brukerdefinerte typer Beregningskomplett språk Innkapsling Arv med type/klasse-hierarkier Polymorfi: overlasting, redefinisjoner, sen binding Bør ha Objektversjonering Støtte for distribusjon Nye transaksjonsmekanismer Støtte for regelbaserte systemer (aktive og deduktive DBer)... og mye mer... Alle er ortogonale egenskaper INF3100 24.2.2009 Ellen Munthe-Kaas 13

OID I Objekter eksisterer uavhengig av sine (nåværende) verdier Uansett hvordan verdiene i et objekt endres, er objektet det samme Objekter identifiseres entydig av sin OID Du får aldri feil objekt hvis objektet refereres via sin OID Begrepene identitet og likhet eksisterer begge, og de betyr ikke det samme At to objekter er identiske, betyr at de er samme objekt, dvs. at de har samme OID At to objekter er like, betyr at de tilhører samme klasse og har de samme verdiene En OID baseres aldri på foranderlige (mutable) data INF3100 24.2.2009 Ellen Munthe-Kaas 14

OID II En OID er (i praksis) alltid systemgenerert og -håndtert OIDer er unike (systemvidt, globalt og universelt) GUID: Globally Unique ID (egenskap i MS-verden) UUID: Universally Unique ID (egenskap i Unix-verden) En OID er uforanderlig (immutable) gjennom hele objektets liv, og den gjenbrukes ikke etter objektets død Noen eksempler på objektoperasjoner basert på OIDer: Å sammenligne objekter for identitet, likhet o.l. Å referere objekter Å finne og hente objekter INF3100 24.2.2009 Ellen Munthe-Kaas 15

Komplekse og sammensatte objekter OO-paradigmet krever støtte for komplekse objekter Det er to typer kompleksitet som støttes Ustrukturerte komplekse objekter Eksempler er tidsserieobjekter, fritekstobjekter og medieobjekter (lyd, bilde, video) Vi deler dem inn i to grupper: BLOBs (Binary Large Objects) CLOBs (Character Large Objects) Strukturerte komplekse objekter Det samme som sammensatte objekter, objekter som inneholder andre objekter eller deler av andre objekter INF3100 24.2.2009 Ellen Munthe-Kaas 16

Klasser og typer Det er ikke full internasjonal enighet om terminologien i I Skandinavia (og i det meste av verden) bruker vi ordene slik: En type, eller mer presist, en abstrakt datatype (ADT) er intensjonen til en klasse En klasse er en implementasjon av en type (ADT) Et objekt er en instansiering av en klasse (og ikke av en ADT) Brukerne kan lage sine egne klasser og typer Oppsummering: Et objekt har en type og er instans av en klasse INF3100 24.2.2009 Ellen Munthe-Kaas 17

Innkapsling Visible (synlig for klassens brukere) Definisjon av operatorenes interface Hidden (skjult for Klassens brukere) Implementasjon av operatorene Definisjon av verdityper (datastruktur for objektets tilstand (state)) INF3100 24.2.2009 Ellen Munthe-Kaas 18

Arv og type- og klassehierarkier Vi har to typer arv vi må skille mellom: Typearv hvor en ADT (subtypen) arver egenskaper fra en annen ADT (supertypen) Klassearv hvor en klasse (subklassen) arver implementasjon fra en annen klasse (superklassen) objekter i subklassen er objekter også i superklassen Vi skiller mellom Enkel arv som leder til et type- eller klassehierarki Multippel l arv som leder til en typelattice tti (multippel arv for klasser fører til store problemer og er vanligvis ikke tillatt) INF3100 24.2.2009 Ellen Munthe-Kaas 19

Polymorfi Polymorfi har tre fasetter: Overlasting Bruk av samme navn på forskjellige operatorer (i forskjellige ADTer) Redefinisjon Reimplementasjon av operatorer lengre ned i klassehierarkiet e a e Sen binding Binde et operatornavn til en spesifikk implementasjon dynamisk under run-time (gjøres individuelt for hvert objekt) INF3100 24.2.2009 Ellen Munthe-Kaas 20

Oversikt over begrepsapparatet i ODL I Object Definition Language (ODL) defineres: Klasser (class og interface) Attributter (attribute) Assosiasjoner (relationship) Metoder Typesystemet Ekstensjoner (extent) Nøkler (key eller keys) Arv INF3100 24.2.2009 Ellen Munthe-Kaas 21

Klassedeklarasjoner En ODL-klassedefinisjon består av et klassehode fulgt av en kropp omsluttet av krøllparenteser Klassehodet består av klassens navn og en parentes med navn på ekstensjonen og eventuelle nøkler Eksempel: class Student (extent studenter keys (fdato, personnr), brukernavn) { <klassekroppen> } Man må ikke navngi ekstensjonen, men det er nødvendig for å kunne bruke den i spørsmål Man kan angi null eller flere nøkler (to i eksemplet) INF3100 24.2.2009 Ellen Munthe-Kaas 22

Eksempelmodell ORM Eksempelmodell av barer, øltyper og ølkunder. Brukes som støtte for OQL-eksemplene på de etterfølgende lysarkene. Modellen er beskrevet i modelleringsspråket ORM. ORM er ikke pensum. En UML-versjon følger på neste lysark. INF3100 24.2.2009 Ellen Munthe-Kaas 23

Eksempelmodell UML Eksempelmodell av barer, øltyper og ølkunder. Brukes som støtte for OQL-eksemplene på de etterfølgende lysarkene. Modellen er beskrevet i modelleringsspråket UML. UML er ikke pensum. INF3100 24.2.2009 Ellen Munthe-Kaas 24

Attributter I Syntaks: attribute <attribute-type> <attribute-elements> Eksempel: class Bar (extent t bars) ) { attribute string name; attribute Struct addr { string street,, string city } address; attribute Enum licensetype { full, beer, none } license; } INF3100 24.2.2009 Ellen Munthe-Kaas 25

Attributter II Vi gir Struct-er og Enum-er navn fordi vi trenger å referere til dem Eksempel: class Drinker (extent drinkers) { attribute string name; attribute Struct Bar::addr address } MERK: Vi gjenbruker Struct-en addr i Bar som type for address-attributtet i Drinker Elementer i en annen klasse refereres ved klassenavnet og et dobbelt kolon: <class-name>::<element-name> INF3100 24.2.2009 Ellen Munthe-Kaas 26

Assosiasjoner I Assosiasjoner (relationships) forbinder objekter med hverandre Assosiasjoner opptrer alltid i par: Hvis A er assosiert med B, må B være assosiert med A Syntaks: relationship <relationship-type> <relationship-name> inverse <class-name>::<inverse-relationship-name> Eksempler: relationship Set<Person> haskids inverse Person::hasParents; relationship Person hasspouse inverse Person::hasSpouse; relationship Set<Car> hascars inverse Car::hasOwner; INF3100 24.2.2009 Ellen Munthe-Kaas 27

Assosiasjoner II Eksempel: Sammenhengen serves mellom Bar og Beer er representert med en assosiasjon i Bar som gir deg de ølmerker som selges der, og en invers assosiasjon servedat i Beer som angir de barene som selger dette ølet class Bar { relationship Set<Beer> serves inverse Beer::servedAt; } class Beer { relationship Set<Bar> servedat inverse Bar::serves; } INF3100 24.2.2009 Ellen Munthe-Kaas 28

Assosiasjoner III 1:1 assosiasjoner realiseres med to enkle referanser (pekere) Eksempel: class Manufacturer { relationship Beer hasbestsellingbeer inverse Beer::isBestSellingBeerFor; } class Beer (extent beers) { relationship Manufacturer isbestsellingbeerfor B inverse Manufacturer::hasBestSellingBeer; } INF3100 24.2.2009 Ellen Munthe-Kaas 29

Assosiasjoner IV 1:n assosiasjoner realiseres med en enkel referanse på mange-siden og en mengde referanser på én-siden Eksempel: class Manufacturer { relationship Set<Beer> makes inverse Beer::madeBy; } class Beer { relationship Manufacturer madeby inverse Manufacturer::makes; } MERK: Assosiasjonsnavnene følger leseretningen: Manufacturer makes Beer fra Manufacturer til Beer, og Beer madeby Manufacturer fra Beer til Manufacturer INF3100 24.2.2009 Ellen Munthe-Kaas 30

Assosiasjoner V m:n assosiasjoner realiseres med to mengder referanser, en på hver side Eksempel: class Bar { relationship Set<Beer> serves inverse Beer::servedAt; } class Beer { relationship Set<Bar> servedat inverse Bar::serves; } INF3100 24.2.2009 Ellen Munthe-Kaas 31

Assosiasjoner VI ODL tillater bare binære assosiasjoner Ternære (3-veis) og høyere ordens assosiasjoner må implementeres ved hjelp av en «kryssreferanseklasse» Eksempel: class Price { attribute real price; relationship Set<BBP> tobbp inverse BBP::thePrice } class BBP { relationship Bar thebar inverse ; relationship Beer thebeer inverse ; relationship Price theprice inverse Price::toBBP; } INF3100 24.2.2009 Ellen Munthe-Kaas 32

Metoder I En metode er et navngitt og parametrisert stykke eksekverbar kode (prosedyre, funksjon) som fungerer som en operator i klassens objekter Bare metodesignaturen (dvs. metodenavnet og mengden av parametere med tilhørende typer) er en del av ODL Selve koden (realiseringen) skrives i vertsspråket (Tillatte vertsspråk er Java, a, C++ og Smalltalk) a En metode kan returnere en verdi, og den kan kaste unntak (raise exceptions) Alle metodeparametre og en eventuell returverdi må være typet INF3100 24.2.2009 Ellen Munthe-Kaas 33

Metoder II I tillegg til at parametrene skal være typet, skal de merkes som in, out eller inout: in gir en kopi av parameterverdien til metoden (metoden kan ikke forandre den aktuelle parameteren) out for å gi verdier ut fra metoden inout begge de ovenstående, men gir en referanse (og ikke verdien) til den aktuelle parameteren To likeverdige eksempler: class Bar {... void availablebeers(out Set<Beer>);... } class Bar {... Set<Beer> availablebeers();... } INF3100 24.2.2009 Ellen Munthe-Kaas 34

Basistyper: Typesystemet y I integer, real, float, boolean, character string time, date, interval enumerated types og fler Typekonstruktør: Struct <navn> {<type><navn>, <type><navn>, } definerer en type som er en struktur satt sammen av type-og-navn-par, lik en Cobol- eller Pascal-record INF3100 24.2.2009 Ellen Munthe-Kaas 35

Typesystemet y II Samlinger (Collection types): Set<T> uordnet mengde av (distinkte) objekter av type T Bag<T> uordnet samling av objekter av type T hvor duplikater er tillatt List<T> ordnet samling av objekter av type T hvor duplikater er tillatt Array<T> ordnet og indeksert samling av objekter av type T hvor duplikater er tillatt Dictionary<S,T> mengde av objektpar av type S og T hvor det til et gitt objekt s i S forekommer maksimalt ett par (s,t) i dictionaryen Merk: Typen til en assosiasjon (relationship) må være en klasse eller en samling av klasser INF3100 24.2.2009 Ellen Munthe-Kaas 36

Klasser og ekstensjoner Når man har definert en klasse med nøkkelordet class, kan man generere objekter av denne klassen ved å bruke nøkkelordet new Hvert objekt tildeles sin unike OID, og mengden av genererte objekter utgjør klassens ekstensjon I ODL kan man navngi ekstensjonen med nøkkelordet extent Eksempel: class Student (extent studenter key fnr) {... } Det er nødvendig å navngi ekstensjonen for å kunne bruke OQL direkte mot den Eksempel: select... from studenter where... INF3100 24.2.2009 Ellen Munthe-Kaas 37

Interfacer I En interface er en klasse det ikke kan lages objekter av Interfacer defineres ved å bruke nøkkelordet interface i stedet for class Siden de ikke kan lages instanser av, er det meningsløst (og ulovlig) å bruke nøkkelordene extent og key (eller keys) i interfacer Ellers er det ingen forskjell mellom definisjonen i av en klasse og en interface Interfacer er nyttige når vi har flere ekstensjoner med (noen) felles egenskaper Vi lar da flere klasser arve samme interface Disse klassene arver da de attributtene, assosiasjonene og metodene som er definert i interfacen INF3100 24.2.2009 Ellen Munthe-Kaas 38

Interfacer II Her følger et eksempel som viser at både studenter og lærere er personer: interface Person { attribute integer ssn; attribute string name; attribute date born; integer age(){... };... } class Student : Person (extent students key ssn) {... } class Teacher : Person (extent teachers key ssn) {... } INF3100 24.2.2009 Ellen Munthe-Kaas 39

Arv sub- og superklasser En subklasse arver alle egenskapene til sin superklasse Eksempel: Ale får alle attributter, assosiasjoner og metoder til klassen Beer Superklasser angies ved å prefikse dem med: Kolon (:) for interfacer Nøkkelordet extends for instansierbare klasser Eksempel: Ale er øl med farge: class Ale extends Beer { attribute string color; } Interfacer kan bare arve fra andre interfacer, mens klasser kan arve fra både klasser og interfacer INF3100 24.2.2009 Ellen Munthe-Kaas 40

Multippel arv Multippel arv angis med en kolontliste av de interfacene man separert arver fra Det første leddet i listen kan være en instansierbar klasse, og den må da prefikses med nøkkelordet extends Navnekonflikter er ikke tillatt, og det er programmererens ansvar å unngå dem Eksempel: class Amphibian extends Car:Boat {... } (Her er altså Car en klasse og Boat en interface) INF3100 24.2.2009 Ellen Munthe-Kaas 41

ODL som relasjonsspesifikasjonsspråk j p Utgangspunktet er at hver klasse blir til en relasjon. Dette byr på mange problemer. Her er noen: I klasser uten nøkkel må man legge inn et fiktivt nøkkelattributt (en erstatning for OID) 1:n assosiasjoner kan oversettes til fremmednøkler, men m:n assosiasjoner må realiseres som egne relasjoner Rett frem oversettelse av struct-er t og samlinger (som Set og Bag) gir lett opphav til dårlig normaliserte tabeller (Læreboken har eksempler på oppdateringsanomalier som kan oppstå på grunn av dette) Konklusjon: Unngå åbruk av ODLh hvis hensikten er åd designe en relasjonsdatabase! INF3100 24.2.2009 Ellen Munthe-Kaas 42