2 Abstrakte datatyper.



Relaterede dokumenter
Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

4 Basal Objekt-orienteret Programmering I.

3 Algebraisk Specifikation af Abstrakte Datatyper.

30 Objekt-orienteret Programmering i Andre Sprog.

13 Objekt-orienteret Design.

29 Opsamling af Objekt-orienteret Programmering.

UML til kravspecificering

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Objektorientering. Programkvalitet

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Basale forudsætninger. Sortering ved fletning med tre bånd, i to faser.

Side 1. Databaser og SQL. Dagens gang. Databasebegreber. Introduktion til SQL Kap 1-5

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

ER-modellen. Databaser, efterår Troels Andreasen. Efterår 2002

Videregående Programmering for Diplom-E Noter

Noter til Perspektiver i Matematikken

Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl.

Ugeseddel 4 1. marts - 8. marts

Pointen med Funktioner

Objekt-orienteret programmering uden klasser: Self.

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Miniprojekt i Programmering (MIP) for DAT2 og SW2, Forår 2012

Appendiks 6: Universet som en matematisk struktur

Dynamisk programmering

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

ER-modellen. Databaser, efterår Troels Andreasen. Efterår 2002

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Datalogi OB, Efterår 2002 OH er, forelæsning 3/ forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Objects First with Java A Practical Introduction Using BlueJ

Objektorienteret design med arv og polymorfi:

1. Intoduktion. Undervisningsnoter til Øvelse i Paneldata

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002

Kapitel 21: Softwarearkitektur designprincipper

Moduler i Standard ML

En note om Programmering

Lektion 3. Grundlæggende programmering i VR

Abstrakte datatyper C#-version

12 Nedarvning III. Noter. Multipel nedarvning. Nedarvning og assertions. PS1 -- Nedarvning III. Kurt Nørmark, Aalborg Universitet, 1994.

5 Basal Objekt-orienteret Programmering II.

Fra Computer til Virkelighed. TPE-kursus Elektroniske Systemer P1

18 Multivejstræer og B-træer.

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

It og informationssøgning Forelæsning oktober 2006 Jakob Grue Simonsen. Klasser

Skriftlig eksamen i Datalogi

Undervisningsbeskrivelse

Citation for pulished version (APA): Nordbjerg, F. E. (1993). Objektorientering = Programkvalitet? Prosabladet. De it-professionelles fagblad, (4).

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Databasesystemer, forår 2005 IT Universitetet i København. Forelæsning 3: E-R modellering. 17. februar Forelæser: Rasmus Pagh

Metaklasser i Smalltalk.

Noter til dm529. Jonas Nyrup. 11. november 2011

5. OPSÆTNING DOKUMENTSKABELONER 5.1 TRIN

Bliv opdaget på Internettet! - 10 gode råd til at optimere din hjemmeside til søgemaskiner

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype.

Ugeseddel 12( )

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Database for udviklere. Jan Lund Madsen PBS10107

Vejledning til 5 muligheder for brug af cases

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

Kommentar fra KMS til Specifikation af Serviceinterface for Person

5 Ligninger og uligheder

Punktmængdetopologi. Mikkel Stouby Petersen. 1. marts 2013

Rettelser til Pilen ved træets rod

Gruppeteori. Michael Knudsen. 8. marts For at motivere indførelsen af gruppebegrebet begynder vi med et eksempel.

Funktioner og ligninger

Matema10k. Matematik for hhx C-niveau. Arbejdsark til kapitlerne i bogen

Rolf Fagerberg. Forår 2012

1 KlassifikationStruktur

Formål & Mål. Ingeniør- og naturvidenskabelig. Metodelære. Kursusgang 1 Målsætning. Kursusindhold. Introduktion til Metodelære. Indhold Kursusgang 1

Undervisningsbeskrivelse

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

Simulering af stokastiske fænomener med Excel

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Skriftlig eksamen, Programmer som Data Onsdag 6. januar Spørgsmål 1 (20 %): Regulære udtryk og automater

CCS klassifikation og identifikation

Undervisningsbeskrivelse

Affine rum. a 1 u 1 + a 2 u 2 + a 3 u 3 = a 1 u 1 + (1 a 1 )( u 2 + a 3. + a 3. u 3 ) 1 a 1. Da a 2

Kursusarbejde 3 Grundlæggende Programmering

Projekt 2.9 Sumkurver som funktionsudtryk anvendt til Lorenzkurver og Ginikoefficienter (især for B- og A-niveau)

Oprids over grundforløbet i matematik

Afstande, skæringer og vinkler i rummet

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Matricer og lineære ligningssystemer

Introduktion. Jan Brown Maj, 2010

Skriftlig eksamen i Datalogi

Projekt 4.6 Løsning af differentialligninger ved separation af de variable

Oversigt. Modellering.6. Begrebsmodellering. Begrebsapparat til OO. Fænomener og begreber. Objektorienteret modellering

Afstande, skæringer og vinkler i rummet

Lektion 6. Grundlæggende programmering i VR

Specifikationsdokument for LDAP API

Eksempel: Skat i år 2000

Dynamisk programmering. Flere eksempler

Computerstøttet beregning

Forelæsning Uge 4 Torsdag

Anden del af kapitlet fokuserer på rentebegrebet. I læseplanen fra Fælles Mål 2009 står der direkte, at eleverne skal arbejde med

Dynamisk programmering

Rolf Fagerberg. Forår 2015

Køreplan Matematik 1 - FORÅR 2005

Transkript:

2 Abstrakte datatyper. Motivere eksempel: top-down udvikling af program 'mini-bank' Strukturering af et program: efter data eller funktion? Definition af en abstrakt datatype og tilknyttede begreber. Fænomener, begreber og begrebsdannelse. Objekt-orienteret udvikling af programmet 'mini-bank'. Abstrakte datatyper udgør den allervigtigste ide i forhold til objekt-orienteret programmering. I denne forelæsning vil vi behandle emnet uafhængigt af programmeringssprog. 19

Topdown udvikling af programmet 'minibank' (1) Program mini-bank; Type Bankkonto-typedefinitioner af alle konto-arter; Transaktions-procedurer på de forskellige konto-typer; begin while not fyraften do begin indlæs kontotype KT; udfør en transaktion på KT For at forstå egenskaberne af et objekt-orienteret program baseret på abstrakte datatyper er det nyttigt at sætte fokus på en anden programudviklingsteknik. I denne forelæsning starter vi derfor med at studere et program udviklet ved såkaldt top-down programmering. Når et program udvikles top-down, startes med de overordnede dele af programmet, og dele deraf forfines trinvis, indtil alle detaljer er fuldt ud implementeret. En modsætning til top-down programmering kaldes bottom-up programmering. I en bottom-up teknik starter man med at udvikle detaljer, og bygger op til en helhed. Man kan naturligvis forestille sig kombinerede top-down og bottom-up teknikker. 20

Topdown udvikling af programmet 'minibank' (2) Eksempel på bankkonto typedefinition: check-konto = record id: KontoId; balance: Kroner; rente-sats: real; antal-udnyttede-checks: integer udfør en transaktion på kontotype KT : procedure transaktion(kt: kontotype); begin case KT of check-konto: check-konto-transaktion; aktionær-konto: aktionær-konto-transaktion; pensions-konto: pensions-konto-transakton; gevinst-konto: gevinst-konto-transaktion;... ; ; Her er vist et eksempel på en type-definition (af check-konti). Endvidere er det centrale fragment af hovedprogrammet forfinet i forhold til forrige slide. Denne forfining har vi givet status af en procedure, transaktion, som naturligvis så skal kaldes af hovedprogrammet. Procedurerne check-konto-transaktion, aktionær-konto-transaktion m.m., som kaldes i proceduren transaktion, vil vi på en naturlig måde kunne definere som lokale procedurer til transaktion. Typen med navnet kontotype kan være en enumeration type, altså en type defineret ved kontotype = (check-konto, aktionær-konto, pensions-konto, gevinst-konto,...). På næste slide viser vi en definition af proceduren check-konto-transaktion. 21

Topdown udvikling af programmet 'minibank' (3) procedure checkkonto-transaktion; var ck: check-konto; transaktions-procedurer på check-konto begin hent-konto(ck); indlæs transaktionstype TT; case TT of opret: opret-check-konto(ck); hæve: hæve-check-konto(ck); indsætte: indsætte-check-konto(ck); tilskriv-rente: tilskriv-rente-check-konto(ck); clear-check: clear-check(ck, check); nedlæg: nedlæg-check-konto(ck) For hver type af bank-konti BKT antager vi, at der findes en procedure BKT-kontotransaktion, som i interaktion med brugeren udfører en af flere mulige transaktioner på en konto. Vi har vist proceduren for check-konti. Man skal bemærke, at nogle af procedurerne tilsynelade mangler noget information for at kunne virke. F.eks. er det ikke oplagt, hvilke beløb der hæves og indsættes på kontoen af hhv. hæve-check-konto og indsætte-check-konto. Vi antager, at disse procedurer spørger brugeren af programmet om den mangle information. De enkelte transaktionsprocedurer antages at være lokale procedurer til den viste check-konto-transaktion, placeret under transaktions-procedurer på check-konto. Bemærk, at vi "uden videre" ved at udføre den trinvise forfinelse har fået procedurer i tre indlejrede niveauer. Dette er meget karakteristisk for denne udviklingsteknik. 22

Tabel med oversigt over bankkonto-operationer. Transaktions-type Kontotype Checkkonto Oprette Hæve Indsætte Rentetilskrivning hæve-checkkonto indsættecheck-konto tilskriv-rentecheck-konto opretcheck-konto... Aktionær konto Pensionskonto Gevinstkonto hæve-aktionærkonto hæve-pensionskonto hæve-gevinstkonto indsætteaktionær-konto indsættepensions-konto indsættegevinst-konto tilskriv-renteaktionær-konto tilskriv-rentepensions-konto tilskriv-rentegevinst-konto opretaktionær-konto opretpension-konto opretgevinst-konto... Med den skitserede fremgangsmåde kræves der en transaktionsprocedure pr. kontotype pr. transaktion. Dette giver et stort antal forskellige procedurer, som vist i tabellen ovenfor. Nogle af disse procedurer har sikkert lighedspunkter, som det kunne være hensigtsmæssigt at samle på ét sted. Hvis man ønsker at opretholde konto-type-definitionerne som hver sin record type, er det nødvig at have en procedure for hvert felt i tabellen. Procedurerne er struktureret således, at hver række af procedurer er lokale til den bank-konto type specifikke transaktionsprocedure. Man kan i Pascal arrangere tingene mere hensigtsmæssigt, nemlig ved at definere én type, som dækker alle konto-typer. En sådan record type skal have afdelinger med felter, der er specifikke for den enkelte konto-type. Sådanne records kaldes variantrecords. Hvis ikke man allerede har gjort det i forbindelse med "grundbegreber", anbefales det at repetere dette begreb, som bl.a. findes i Pascal. Opgave 1. Det blev observeret ovenfor, at vi primært har struktureret vores program efter rækker af operationer, og sekundært efter søjler. Demonstrer, at vi også kunne have valgt at gøre det omvt; altså primært at strukturere efter arten af vores transaktion, og sekundært efter kontotype. Skitser det resultere program. Hvilken af de to strategier (transaktions-art-først, kontotype-først) skal man foretrække, hvis vi antager, at der oftere skal tilføjes nye transaktioner nye kontotyper? Og oftere nye kontotyper nye transaktioner? Opgave 2. Antag nu, at vi definerer en variant-record, hvor felterne id og balance er fælles for alle kontotyper, mens andre felter er specifikke for de forskellige typer af bankkonti. Vi vil nu forvente, at vi kan programmere nogle af bankkonto operationerne på et "fælles niveau". Skitser nu proceduren transaktion og dets lokale procedurer, og illustrer hvor de enkelte operationer nu hører hjemme. 23

Strukturering af et program: Efter data eller funktion "Hvilke handlinger udfører programmet?" kontra "Hvad udfører programmet handlinger på?" Top-down udvikling af et program afspejler trinvis nedbrydning af et problem i mindre delproblemer og er som sådan med til at nedbringe "kompleksiteten" af problemløsningen. En funktionel strukturering af et program er mindre stabil en datastrukturering i programmets samlede levetid. "Rigtige systemer" har ingen top. Top-down udvikling og strukturering efter funktion virker hæmme på udvikling af genbrugelige programkomponenter. Mange af pointerne på denne slide er kondencerede udsagn fra Meyers: Object-oriented Program Construction, kapitel 4. 24

Definition af abstrakt datatype. En abstrakt datatype er en mængde af værdier samt en mængde af operationer på disse værdier. Et program arbejder på instanser af en ADT, ikke på typen som så. Instanser af en ADT kaldes også for objekter. Udvalgte operationer på en ADT udgør det interface, som en klient af typen benytter til manipulation af instanser af typen. En abstrakt datatype skjuler, beskytter og indkapsler data-repræsentationen for klienter af typen. Ved programændringer i interne dele af den abstrakte datatype udgør operations-interfacet en "brandmur" mellem klient og data-repræsentation. Operationsinterfacet opdeler operationerne på datatypen i interne og eksterne operationer. Mængden og naturen af interne operationer er af mindre betydning, sålænge de eksterne operationer fungerer, som det forventes (se nedenfor). Tilsvare er selve datarepræsentationen som regel skjult for klienter. Det betyder, at selv om en abstrakt datatype har en variable V som en del af sin repræsentation, kan man ikke udefra assigne til eller aflæse fra V direkte. Det skal ske gennem en operation. Det dermed skabte operations interface udgør et indirekte niveau med hensyn til både aflæsning af og skrivning i instanser af typen. Dette indirekte niveau er meget værdifuldt. Hvis der sker ændringer i typens interne dele (i interne operationer eller i repræsentation) kan man nøjes med at ændre i eksterne operationers definition, og ikke i deres anvelse rundt omkring i programmet. Det er på denne måde, at operationsinterfacet kommer til at spille rollen af en brandmur om datatypen. Spørgsmålet melder sig, om det er muligt at angive, hvordan eksterne operationer i typen skal fungere, uden at programmere dem. Det kan man godt! På dette kursus vil vi studere to forskellige måder at specificere abstrakte datatyper. Allerede i næste forelæsning vil vi introducere den første af disse. 25

Bestanddele af en abstrakt datatype Op1 Op2 Op3 Op4 Operationsinterface Op5 Op6 Data Repræsentation Interne operationer datarepræsentation Man kan naturligvis opfinde mange forskellige tekstuelle såvel som grafiske notationer for abstrakte datatyper. Her er bestanddelene af en abstrakt datatype illustreret grafisk. 26

En abstrakt datatype og dens instanser. Instans af T Instans af T Instans af T Instans af T Objekter Relation mellen instans og ADT En abstrakt datatype T Abstrakt datatype Ovenfor er abstrakte datatyper rektangulære, medens objekter har afrundede kanter. Forholdet mellem en abstrakt datatype og dets instanser er illustreret ved en pil fra instansen til dens ADT. Instanser indeholder selvfølgelig objektets tilstand (i form af variable af konkrete, primitive typer, eller af andre abstrakte datatyper). Derimod repræsenteres objekternes operationer sædvanligvis ikke i objekterne, men i den tilhøre klasse. Dette kan lade sig gøre, idet operationer er ens for alle instanser af en given abstrakt datatype. 27

Hvordan finder man objekter? Hvis et program modellerer en del af virkeligheden (såsom en bank), giver denne virkelighed ofte inspiration til hvilke objekter, og dermed abstrakte datatyper, et program skal indeholde. Referent system Model system Begreber Fænomener ADT-er Objekter Virkeligheden Et program Overskriften af denne slide skal læses som "hvordan finder man på, hvilke objekter der skal indgå i et program". Pointen er, at hvis programmet, man skal skrive, behandler data, som er en del af vores virkelighed, giver begreber og fænomener (ting) i denne virkelighed inspiration til abstrakte datatyper og objekter. Hvis programmet ikke retter sig mod virkeligheden, men måske internt mod maskinen, kan det være vanskeligere at finde på, hvilke abstrakte datatyper og hermed typer af objekter, der skal indgå i programmet. 28

Fænomener og begreber Fænomen: En ting i den virkelige (eller "tænkte") verden med individuel eksistens. Begreb: Et begreb er karakteriseret af: Navn. Intension : mængden af egenskaber, der karakteriserer begrebet. Extension : mængden af fænomener, som er dækket (beskrevet) af begrebet. Begreb Klassificering Eksemplificering Fænomen Begreber og fænomener hører til i den virkelige verden, i referent systemet. Abstrakte datatyper og objekter dannet ud fra abstrakte datatyper hører hjemme i programmeringsverdenen. Emnet på denne slide er ikke beskrevet i bøgerne, som vi benytter på dette kursus. Hvis man ønsker at vide mere henvises der til f.eks. Jørgen Lindskov Knudsen og Kristine Stougaard Thomsen "A Conceptual Framework for Programming Languages" (DAIMI PB-192, April 1985). Klassificering/eksemplificering er let at få øje på blandt begreber og fænomener i vores hverdag. Begrebet 'gravhund' kan have 'Fido' og 'King' som eksempler; omvt klassificerer 'gravhund' de nævnte to eksempler på hunde. 29

Begrebsdannelse. Hvordan danner man begreber ud fra andre begreber? Begreb Aggregering Begreb Begreb Begreb Begreb Dekomponering Begreb Begreb Begreb Begreb Generalisering Begreb Begreb Specialisering Begreb De fire nævnte former for begrebsdannelse forekommer i par. Aggregering samler et antal begreber i et nyt begreb. Dekomponering løsriver allerede samlede begreber i dets bestanddele. Et generaliseret begreb betegner et bredere dække begreb det specialiserede begreb. Ekstensionen af et specialiseret begreb er en delmængde af ekstensionen af det mere generelle begreb. Intensionen af det specialiserede begreb udvides typisk med nye egenskaber; det kan også forekomme, at eksistere egenskaber redefineres (pålægges bånd) når man beskriver et specialiseret begreb. Næste slide viser eksempler på de nævnte former for begrebsdannelse. 30

Eksempler på begrebsdannelse Aggregering Begrebet en flyvemaskine består af Et cockpit En krop Et haleparti To vinger Et antal motorer En record record f1: T1; f2: T2; f3: T3 er en aggregering af typerne T1.. T3 Specialisering Befordringsmiddel bil båd flyvemaskine personbil bus skib sejlbåd jetjager passagerfly færge DC10 Boing747 Indbyrdes generaliserede/specialiserede begreber danner et begrebshierarki. Roden i hierarkiet er det mest generelle begreb. Hvis A->B i hierarkiet er B en specialisering af A (og A en generalisering af B). Specialisering af abstrakte datatyper er et nøgleemne i objekt-orienteret programmering. Emnet vil komme til at spille en stor rolle senere i kurset. Den programmeringssproglige mekanisme, der understøtter specialisering af abstrakte datatyper, kaldes nedarvning. I senere kapitler af disse noter vil vi komme stærkt tilbage til dette. 31

Objekt-orienteret udvikling af 'minibank' (1) bank-konto check-konto aktionær-konto gevinst-konto ADT bank-konto id: KontoId rentesats: real balance: kroner opret (init-beløb: kroner) hæv (beløb: kroner) indsæt (beløb: kroner) tilskriv-rente () bank-konto ADT check-konto : bank-konto antal-udskrevne-checks: integer tilskriv-rente () clear-check(beløb: kroner) check-konto Tilsvare definitioner af aktionær-konto og gevinst-konto Generaliserings/specialiserings hierarkiet af bankkonto-typer fastlægges som det første. Dette er et meget vigtigt trin i designet af et hvilket som helst objekt-orienteret program, der manipulerer bank-konti. Hver af typerne, som indgår i hierarkiet, beskrives hvad angår repræsentation og operationer. Operationerne implementeres. På denne slide er implementationen af operationerne hverken vist eller antydet. Der er benyttet en pseudo-syntax for abstrakte datatyper, som ikke er en del af noget programmeringssprog. Det eneste formål med denne slide er at illustrere principperne i objekt-orienteret udvikling, som et modstykke til den allerede viste top-down udvikling af mini-bank programmet. En abstrakt datatype svarer til record-typen for bank-konto på den tidligere viste slide. Endvidere er udvælgelse af bank-konto operationen, som vist i check-konto-transaktion (se tidligere slide) implicit tilstede via mekanismer i det objekt-orienterede sprog. Vi mangler "blot" at lave en (eller flere) hovedprogrammer med en passe brugerinteraktion på instanser af typerne. Et sådan er skitseret på næste slide. 32

Objekt-orienteret udvikling af 'minibank' (2) procedure mini-bank-main-program var K: bank-konto begin while not fyraften do begin indlæs en bank-konto K indlæs en transaktions-type TT case TT of opret: instantiering af et nyt bank-konto objekt hæve: indlæs beløb B; K.hæv(B); indsætte: indlæs beløb B; K.indsæt(B); tilskriv-rente: K.tilskriv-rente; clear-check: indlæs beløb B; K.clear-check(B) nedlæg: nedlæg bank-konto instans ; Hovedprogrammet vist ovenfor er et af mange mulige hovedprogrammer, som kan programmeres med basis i de viste klasse-definitioner. Flere steder i ovenståe program forekommer notationen K.operation(parameter). Denne notation kaldes "dot notation", og udtryksformen forekommer i mange objektorienterede programmeringssprog. Betydningen er at operation udføres på kontoen K med den angivne parameter. I mere konventionel Pascal-stil ville man skrive operation(k, parameter). Det er værd at bemærke, at ovennævnte case-sætning kan bruges for alle typer af bankkonti forudsat at alle typer af bankkonti har det samme sæt af operationer. (Dette er ikke altid en realistisk antagelse. I så fald må man programmere en interaktion pr. kontotype). I ovenståe program vil det være op til den objekt-orienterede omgivelse at udvælge kontotype-specifikke operationer. Når, f.eks. K.indsæt(B) kaldes i ovenståe program, udvælger systemet således den indsættelsesoperation, som er relevant på netop typen af kontoen K. Dette er en meget vigtig og karakteristisk egenskab ved objekt-orienterede programmeringsomgivelser. Senere i kurset ver vi tilbage til dette under betegnelsen "dynamisk binding". 33