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

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

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

INF1300 Introduksjon til databaser

OQL Object Query Language

INF1300 Introduksjon til databaser

Modeller for design av Web-Applikasjoner

Generiske mekanismer i statisk typede programmeringsspråk

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

INF212 - Databaseteori. Kursinnhold

INF1000: Forelesning 7

Databaser: Relasjonsmodellen, del I

Informasjonssystemer, DBMSer og databaser

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

INF1300 Introduksjon til databaser

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

INF1300 Introduksjon til databaser

Kapittel 7: Mer om arv

Læringsmål for forelesningen

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

CORBA Component Model (CCM)

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

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

INF3100 Databasesystemer

INF2810: Funksjonell Programmering

Hvordan databasesystemene kan hjelpe RAM-produsentene

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Introduksjon til objektorientert programmering

CORBA Objektmodell (Java RMI)

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering

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

Kap3: Klassemodellering

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

Semantisk Analyse del III

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

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

Fra krav til objektdesign

INF2810: Funksjonell Programmering. Tilstand og verditilordning

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

INF1010 våren Arv og subklasser del 1

IN2090 Introduksjon til databaser

UNIVERSITETET I OSLO

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

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

Eksamen. Objektorientert Programmering IGR 1372

Datatyper og typesjekking

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

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

INF1010 våren Arv og subklasser del 1

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

UNIVERSITETET I OSLO

Hvorfor objektorientert programmering?

Integritetsregler i SQL

INF2810: Funksjonell Programmering. Tilstand og verditilordning

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

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

AlgDat 12. Forelesning 2. Gunnar Misund

Datatyper og typesjekking

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

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

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Datatyper og typesjekking

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

Modellering av data. Magnus Karge, Kartverket

Enkle generiske klasser i Java

2 Om statiske variable/konstanter og statiske metoder.

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

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

INF Notater. Veronika Heimsbakk 10. juni 2012

2 Om statiske variable/konstanter og statiske metoder.

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

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

Gjennomgang av eksamen H99

INF3100 Databasesystemer

SOSI-forvaltning - logisk modell

INF2810: Funksjonell Programmering. Tilstand og verditilordning

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

INF2810: Funksjonell Programmering

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

Relasjonsdatabasedesign

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

INF2810: Funksjonell Programmering

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

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

Transkript:

UNIVERSITETET I OSLO Objektdatabaser ODMGs objektmodell og ODL (Object Definition Language) INF3100 19.2.2008 Ragnar Normann Institutt for Informatikk 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 relasjonsdatabasenes fremmednøkler, men en slik mekanisme passer ikke inn i «ren» objektorientering INF3100 19.2.2008 Ragnar Normann 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 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 19.2.2008 Ragnar Normann 3

Viktige OMG-standarder CORBA (Common Object Request Broker Architecture) Arkitektur for mellomvare mellom (objektorienterte) klienter og (objektorienterte) 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 19.2.2008 Ragnar Normann 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 OMGstandarden 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 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 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 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 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 9

Målet for OO-datamodellering: 1:1-modell av interesseområdet Interesseområdet (UoD) Tabellorientert datamodel 1:N DB 1:1 Objektorientert datamodel DB INF3100 19.2.2008 Ragnar Normann 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 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 19.2.2008 Ragnar Normann 11

ODB-eksempel Eksempelklasse: class Konto { integer real REF Kunde eier; ktonr; saldo; 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 ) Eksempelobjekter: O 1 = <, V 1, > O 2 = <, V 2, > O 3 = <, V 3, > INF3100 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 16

Klasser og typer Det er ikke full internasjonal enighet om terminologien 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 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 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 arv som leder til en typelattice (multippel arv for klasser fører til store problemer og er vanligvis ikke tillatt) INF3100 19.2.2008 Ragnar Normann 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 Sen binding Binde et operatornavn til en spesifikk implementasjon dynamisk under run-time (gjøres individuelt for hvert objekt) INF3100 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 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 19.2.2008 Ragnar Normann 22

Attributter I Syntaks: attribute <attribute-type> <attribute-elements> Exempel: class Bar (extent bars) { attribute string name; attribute Struct addr { string street, string city address; attribute Enum licensetype { full, beer, none license; name address license Bar INF3100 19.2.2008 Ragnar Normann 23

Attributter II Vi gir Struct-er og Enum-er navn fordi vi trenger å referere til dem name address license name address Eksempel: Bar frequents Drinker 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 19.2.2008 Ragnar Normann 24

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 19.2.2008 Ragnar Normann 25

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; Bar serves Beer class Beer { relationship Set<Bar> servedat inverse Bar::serves; INF3100 19.2.2008 Ragnar Normann 26

Assosiasjoner III 1:1 assosiasjoner realiseres med to enkle referanser (pekere) Eksempel: hasbestsellingbeer Manufacturer (one) bestseller (one) Beer isbestsellingbeerfor class Manufacturer { relationship Beer hasbestsellingbeer inverse Beer::isBestSellingBeerFor; class Beer (extent beers) { relationship Manufacturer isbestsellingbeerfor inverse Manufacturer::hasBestSellingBeer; INF3100 19.2.2008 Ragnar Normann 27

Assosiasjoner IV 1:n assosiasjoner realiseres med en enkel referanse på mange-siden og en mengde referanser på én-siden Eksempel: Manufacturer (one) madeby (many) Beer 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 19.2.2008 Ragnar Normann 28

Assosiasjoner V m:n assosiasjoner realiseres med to mengder referanser, en på hver side Eksempel: Bars (many) serves (many) Beers class Bar { relationship Set<Beer> serves inverse Beer::servedAt; class Beer { relationship Set<Bar> servedat inverse Bar::serves; INF3100 19.2.2008 Ragnar Normann 29

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: Price BBP Bar serves Beer thebar thebeer theprice class Price Bar { 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; Beer Price INF3100 19.2.2008 Ragnar Normann 30

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, C++ og Smalltalk) En metode kan returnere en verdi, og den kan kaste unntak (raise exceptions) Alle metodeparametre og en eventuell returverdi må være typet INF3100 19.2.2008 Ragnar Normann 31

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 19.2.2008 Ragnar Normann 32

Typesystemet I Basistyper: 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 19.2.2008 Ragnar Normann 33

Typesystemet 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 19.2.2008 Ragnar Normann 34

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 19.2.2008 Ragnar Normann 35

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 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 19.2.2008 Ragnar Normann 36

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 19.2.2008 Ragnar Normann 37

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; name manf Beer isa Ale color Interfacer kan bare arve fra andre interfacer, mens klasser kan arve fra både klasser og interfacer INF3100 19.2.2008 Ragnar Normann 38

Multippel arv angis med en kolon-separert liste av de interfacene man arver fra Multippel arv 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 color Eksempel: class Amphibian extends Car:Boat {... (Her er altså Car en klasse og Boat en interface) Car isa manf Amphibian color Boat isa manf INF3100 19.2.2008 Ragnar Normann 39

ODL som relasjonsspesifikasjonsspråk 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 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 ODL hvis hensikten er å designe en relasjonsdatabase! INF3100 19.2.2008 Ragnar Normann 40