Rename og redefine. Abstrakte klasser. Dynamisk binding.

Størrelse: px
Starte visningen fra side:

Download "Rename og redefine. Abstrakte klasser. Dynamisk binding."

Transkript

1 11 Nedarvning II. Enkeltnedarvning i Eiffel. Rename og redefine. Initialisering af superklasse-dele af et objekt. Interfaces til klienter og subklasser. Typesammenlignelighed og polymorfi. Abstrakte klasser. Dynamisk binding. I dette kapitel vil vi studere emnerne fra Nedarvning I i en større detalje, og fra et Eiffel perspektiv. 155

2 Eiffel klasser med enkelt nedarvning. Syntaks: class name inherit superklasse rename navne tilpasninger export eksport tilpasninger redefine redefinitions tilpasninger tilpasning af nedarvede egenskaber fra superklasse. creation liste af navne på creation procedurer s Denne slide viser en skabelon af en klasse i Eiffel i det tilfælde, at der kun arves fra én superklasse. I det markerede afsnit på billedet ovenfor angives det, hvordan egenskaberne fra superklassen tilpasses, når disse egenskaber skal betragtes som være (nedarvede) egenskaber i klassen name. Bemærk at renaming, export og re-definition skal angives i netop ovenståe rækkefølge. Der findes to andre tilpasningsmuligheder: undefine og select. Undefine vil vi ikke bekymre os om i disse noter. (Hvis du er interesseret eller nysgerrig se afsnit i Eiffel the Language ). Select kommer vi ind på i forbindelse med mulitipel nedarving. I dette kapitel ser vi nærmere på de de forskellige tilpasningsmuligheder. 156

3 Rename i Eiffel. A f, h class B rename f as g, h as j andre tilpasninger Det overordnede problem: Hvis et navn er defineret i A kan navnet ikke umiddelbart benyttes til en i B. B Hvorfor bruge rename i klassen B? Give adgang til s i superklasser, som har samme navn som i B. For at klienter og subklasser af B kan benytte A-s med naturlig terminologi. For at løse op for navnesammenfald ved multipel nedarvning. I Eiffel er tilknytningen af et navn til en egenskab () ikke global og absolut, men relativ til en klasse. Gennem rename-delen under inherit er det muligt at tilpasse navnene på superklasseegenskaber. De nye navne har kun betydning i klassen B (samt dennes subklasser). De gamle navne (navnene på egenskaber i A, som bliver renamet i B s klassedefinition) er i klassen B totalt løsrevet fra deres A-betydning. De gamle navne kan således bruges som -navne i B, hvis vi måtte ønske dette. Det er noget meget grundlægge i Eiffel, at navne på s i en klasse entydigt skal referere til netop én. I andre sprog, f.eks. C++ kan vi godt bruge det samme navn til en variabel eller operation i en klasse og i dens superklasse, men det er naturligvis også i dette sprog vigtigt, at vi præcist er i stand til at sige, hvilken af variablene eller operationerne vi egentlig ønsker at referere til. I C++ skal man defor i anvelsessituationen kvalificere det tvetydige navn med klasse navnet: class::name. Den tredie årsag til at bruge rename er kun relevant hvis en klasse har mere én superklasse (multipel nedarvning). Hvis en klasse C arver fra to eller flere klasser, som begge har en f, hvilken f skal så gælde i C? En måde at løse dette tvetydighedsproblem på, er at kræve, at mindst én af f-erne 'renames'. 157

4 Redefine i Eiffel. Kontrolleret overskrivning A B f f class B evt. renamings evt. export tilpasninger redefine f f() is --f --B Ikke arbitrære redefinitioner: Signaturen af redefinitionen skal være sammenlignelig med den oprindelige signatur. Specifikationen af redefinitionen skal være en delspecifikation af den oprindelige specifikation. En parameterløs funktion kan redefineres til en attribut, men ikke omvt. Hvorfor bruge redefine i klassen B? Tildele en ny mening til navnet i B (Overskrive betydningen fra superklassen). Renaming er udtryk for en syntaktisk (næsten kosmetisk) ændring af programmet, eller det kan være nødvig på grund af 'uheldig' valg af navne i superklasser. Redefine er derimod udtryk for en mere substantiel, semantisk ændring, hvor meningen af et navn, f.eks. en procedure, ændres. Navnene i under redefine er de navne, som er gælde efter evt. tilpasninger efter rename. Det vigtigste at få fat i omkring redefinition er hvorfor vi benytter os af det: for at introducere en ny mening af en eller andet egenskab, som arves fra superklassen. Men det er naturligvis også væsentligt at forstå de begrænsninger, som redefinition i Eiffel er underlagt. Én af disse begrænsninger er, at en variabel kan ikke redefineres til en funktion (eller procedure), idet man ikke kan assigne til en funktion. Signaturen (parameterprofilen) af en udtrykker typer af formelle parametre og resultattypen. Man kan også tale om signaturen af en variabel, nemlig som typen af variablen. (Se også forelæsningen om "Specifikation med logiske udtryk"). Se evt. også Eiffel the Language, afsnit 5.12 samt 13.3 for en uddybning af signaturbegrebet hhv. signatursammenlignelighed. Hvad det vil sige, at en specifikation er en delspecifikation af en anden, ver vi tilbage til i næste forelæsning. Begrænsningerne i de to førte punkter på sliden ovenfor sikrer, at man ikke på må og få kan omdefinere operationer (og variable) i subklasser. Såvel signatur som specifikation, som angivet i en superklasse, skal overholdes af redefinitioner i subklasser. At signaturen af en redefinition er sammenlignelig med den oprindelige signatur betyder for parametrenes vedkomme, at parametrene parvis er sammenlignelige. Specielt har vi, at en operation f i klassen A og den redefinerede f i B skal have samme antal parametre. En parameter i den redefinerede klasse skal altså være (identisk med, eller) en subklasse af parameteren i den oprindelige klasse. Dette kaldes med et fint ord for covarians. Det kan diskuteres, om dette er det rigtige valg. Nogle argumenterer for, at det modsatte (kontravarians ) skal være gælde. Senere i kurset ver vi tilbage til forskellene mellem covarians og kontravarians. 158

5 Klientinterfacet i forbindelse med nedarvning. En klasse har fuld kontrol over sin klientinterface relativ til superklassens klientinterface. Som grundregel beholder s deres eksportstatus under nedvarning. Under nedarvning er det g muligt at tilpasse nedarvede egenskabers eksportstatus: Tilføje en til klientinterfacet. Fjerne en nedarvet fra klientinterface. Håndtere alle nedarvede s under ét. Man kan selektivt eksportere til udvalgte klasser (og deres subklasser). Eksempel 1: class B -- har s x, y og z export {ANY} x; {C} y; {NONE} z Eksempel 2: class B export {NONE} all {ANY} x I Eiffel er der ingen form for synlighedkontrol mellem en klasse og dens subklasser. Generelt overtager en subklasse (B) superklassens (A s) klientinterface, men superklassen (A) dikterer ikke på nogen måden subklassens (B s) klientinterface. I export-delen af inheritance af B kan man helt igennem styre B s interface til sine klienter. Eksempel 1 ovenfor illustrerer dette. Uanset A s eksportpolitik vil B, som jo arver x, y og z fra A, stille x tilrådighed for alle klienter, kun eksportere y til C, samt holde z privat. Eksempel 2 ovenfor illustrerer brugen af nøgleordet all i export-delen under inheritance. Meningen er her at alle s arvet fra A bliver private (kan ikke ses af nogen klient til A), undtagen g x, som kan ses af alle (ANY) klienter. Det kan være af interesse at vide, at I Eiffel2 var angivelsen af klientinterfacet væsentlig enklere, men måske lidt mere træls at håndtere i praksis. I Eiffel2 havde hver klassen en eksplicit export liste, som hver klasse i et nedarvningshierarki kunne danne helt uafhængig af superklassens export liste. Dog var der mulighed for i en eksportlist at sige repeat super-klasse, for på denne måde enkelt at kunne udtrykke udvidelse af klient-forhold i forhold til superklassens klient-forhold. 159

6 Creation procedurer i forbindelse med nedarvning. Hver klasse lister sine creation procedurer. Creation status af procedurer nedarves ikke. Gennem evt. anvelse af renaming er det muligt at benytte superklassens creation procedure (x fra A) i subklassens creation procedure (x i B). Creation status af en creation procedure i A (muligheden for at anve creation proceduren til instantiering) er uafhængig af procedurens eksport status (muligheden for at anve proceduren på et objekt af typen A). class A creation x x() is class B rename x as x_from_a export creation x, z x() is x_from_a() z() is Denne slide beskæftiger sig med et ligne emne som forrige slide. Spørgsmålet der besvares er hvorledes creation procedurer forholder sig til nedarvning. Det er væsentligt at slå fast, at udnævnelse af creation procedurer finder sted i hver klasse i et klassehierarki. Man kan ikke blot læne sig op ad superklassens creation procedure liste. Det er også væsentligt at få fat i hvordan to creation procedurer i to niveauer i et klassehierarki kan bruge hinanden. Altså hvordan B s creation procedure kan kalde A s creation procedure relativ til billedet ovenfor. Dette er et ofte forekommede ønske, idet A s creation procedure initialiserer A-attributter, og B s creation procedure initialiserer B s attriutter. Det vil være bbeltarbejde hvis vi i B s creation procedure skulle dublere arbejdet i forhold til A s creation procedure; det er naturligvis det bedste blot at kunne kalde A s creation procedure fra B s. Det er ofte også tilfældet, at creation procedurer hedder det samme på tværs af klasser i et hierarki (typisk make eller create). Bemærk at vi ikke ovenfor redefinerer x med redefine. Hvis vi redefinerede x ville B s x (bl.a.) være tvunget til at have samme parameterantal som A s x. Dette kan vi typisk ikke leve med for creation procedurer (der kommer ofte flere og flere parametre på creation procedurer, jo flere superklasser den omkringligge klasse af proceduren har). 160

7 Typesammenlignelighed og polymorfi i Eiffel. Lad B være en direkte subklasse af A. B er da direkte typesammenlignelig med A. A B Eksempel: A B og C er direkte typesammenlignelige med A. D og E er typesammenlignelige med A. B C D E x: A; x A- egenkaber C egenkaber D egenkaber E egenkaber y: E y A- egenkaber Instans af A Instans af E Direkte typesammenlignelighed er, som man husker, den primitive relation, som tillader os at definere den mere interessante relation 'typesammenlignelighed'. Sidstnævnte er defineret som den transitive refleksive lukning af 'direkte typesammenlignelighed'. Bidraget til typesammenlignelighed, som defineret på denne slide, definerer en begrænset og kontrolleret form for polymorfi. En instans af en mere specialiseret klasse kan assignes til en variabel af en mere generel klasse. Dette er en "typesikker" assignment, idet vi ved, at en specialiseret type har alle de egenskaber, som den generelle type besidder. Som det illustreres på denne slide, gælder det omvte ikke. Hvis det var lovligt at tilskrive et generelt objekt til en mere specifik kvalificeret variabel, kan vi ikke på programmets oversættelsestidspunkt forhindre, at der bliver spurgt om udefinerede egenskaber af objekter. I eksemplet y.d-egenskab går det galt hvis y peger på en instans af klassen A. 161

8 Dynamisk binding i Eiffel. X: A; Y: B;!!Y.create(); X := Y; X.op() op fra klassen A eller fra klassen B? class A op () is --A class B redefine op op () is I Eiffel: op fra klassen B. --B Eiffel bruger konsekvent dynamisk binding.x Betegnelsen virtuelle operationer bruges ikke i Eiffel. Det kan virke lidt overflødigt skulle skrive 'redefine op', når det jo klart fremgår af klasse definitionen, at operationen op rent faktisk (re)defineres. Eiffel filosofien omkring dette er, at programmøren skal udtrykke sig lidt redundant (hvilket jo vil sige, at man bruger lidt flere ord nødvigt), for derved at markere, at operationen ikke blot forekommer ved et uheld både i klassen A og B. Det skal være programmørens intension, at redefinere den udgave af op, som han er bevidst om også findes i A. Det er værd at bemærke, at hvis formålet med!!y.create(); X := Y; udelukke er at tildele X en reference til et B-objekt kan man nøjes med! B!X.create(). Dette udnytter den fulde styrke i sprogets objektskabelses mekanisme. 162

9 Typesammenlignelighed og reverse assignment attempt. Bus Køretøj Truck k: Køretøj; b: Bus; t: Truck;!!b.create;!!t.create; k := b; b := k; b := t; -- ok i Eiffel og andre OO sprog. -- ulovligt i Eiffel, men lovligt -- i nogle andre OO sprog. -- ulovligt i alle OO sprog.!!b.create;!!t.create; k := b; b?= k; if b.void then ; -- ok Eiffels reverse assignment attempt: Det testes under programudførelsen om den dynamiske type af k er typesammenlignelig med den statiske type af b. Hvis ja: udfør normalt assignment. Hvis nej: assign void til b. Hovedpointen på denne slide er, at assignmentet b := k kun er lovligt, hvis k refererer til en bus (eller til et objekt, som er en specialiseret bus). Det kan vi kun vide ved at teste det på programmets udførelsestidspunkt. I Eiffel er dette "run time check" en del af det specielle assignment b?= k, som kaldes et reverse assignment attempt. Bemærk, at et "run time check" aldrig er nødvig ved assignmentet k := b, idet b altid vil referere til et objekt, som er en bus, eller til et objekt, som er instans af en subklasse af bus. Et assignment var := expr er typemæssigt lovligt hvis typen af expr er typesammenlignelig med typen af var. Et reverse assignment attempt var?= expr er typemæssigt lovligt hvis typen af var er typesammenlignelig med typen af expr; altså præcist den omvte betingelse. Ovennævnte b?= k opfylder klart denne regel. Reglen udlukker k?= b, b?= t og t?= b (alle med reference til billedet ovenfor) som lovlige reverse assignment attempts. Reglen er fornuftig derved, at den kun er gyldig, hvis der er tvivl om den typemæssige lovlighed af assignment (forsøget), og hvis der er håb om, at forsøget kan give success. Man kan læse om reverse assignment attemps i afsnit af "Eiffel the Language". Det er værd at bemærke, at der i klassen ANY findes en funktion som hedder conforms_to, og som på programmets udførelsestidspunkt tillader os at undersøge om et objekts type er sammenlignelig med et andet objekts type. Funktionen bruges således: x.conforms_to(y). Svaret er true hvis den dynamiske type af x er typesammenlignelig med den dynamiske type af y. 163

10 Abstrakte klasser i Eiffel. Abstrakt klasse med forudannonceret routine f. deferred class A inherit creation create f () is deferred ; --f g: T is deferred x: A;!!x.Create class B creation create f() is ; --f g: T x: A; y: B!!y.Create; x := y I Eiffel er en klasse abstrakt hvis den indeholder én eller flere s, der er mærkede deferred. En abstrakt klasse i Eiffel skal mærkes med nøgleordet deferred i forbindelse med klassedefinition. I eksemplet ovenfor arver klassen B fra klassen A. B siges at effektuere (eng.: effect ) f og g. Som det ses, er B således ikke abstrakt (vi antager at der ikke er andre abstrakte egenskaber f og g i A). Vi skal (og må) ikke eksplict skrive redefine f når en egenskab effektueres. I eksemplet ovenfor ser vi at g er en deferred funktion uden parametre i klassen A. I klassen B kan vi naturligvis effektuere g som en funktion. Men som illustreret, er det også muligt at effektuere g som en attribut. Man kan således se, at formen g: T is deferred i A lader det stå åbent, om vi i en subklasse vil realisere g som en beregning af en værdi (en parameterløs funktion) eller som en lagret værdi (en attribut). Undertiden omtaler man en klasse som en effective class (i betydningen at den er af egentlig nytte, tjenestdygtig) hvis den ikke er deferred. 164

11 Abstrakt klasse med specifikation: Stack (I). class STACK[T] nb_elements: INTEGER is deferred ; push(x: T) is require not full deferred ensure not empty; top = x; nb_elements = old nb_elements + 1; pop is require not empty derferred ensure not full; nb_elements = old nb_elements -1 ; --pop top: T is require not empty deferred ensure Nochange ; -- top --fortsættes Vi benytter påny stakke som et eksempel. Der er ingen repræsentationsaspekter i Stack. Repræsentationsbeslutninger udsættes til en subklasse. nb_elements er nu ikke en integer, men en forudannonceret af typen integer, hvis implementation afhænger af repræsentationsvalget. Vi kan således i en subklasse vælge at lagre eller beregne antallet af elementer. Vi ønsker ikke apriori at begrænse stakke til at have en øvre grænse. Dette afspejles af invarianten derved, at der ikke er angivet en øvre grænse af nb_elements. Vi kunne vælge at realisere stakke med en dynamisk datastruktur (linærere lister), som ikke har en øvre grænse på antallet af elementer. I dette tilfælde skal vi i en subklasse til stack implementere full som en funktion, der altid returnerer false. 165

12 Abstrakt klasse med specifikation: Stack (II). (fortsat) empty: BOOLEAN is require true Result := (nb_elements = 0) ensure Result = (nb_elements = 0) ; full: BOOLEAN is deferred ;--full change_top(x: T) is require not empty pop; push(x) ensure not empty; top = x; nb_elements = old nb_elements ; --change_top invariant 0 <= nb_elements; --class stack Change_top er en ny operation. Operationen udskifter toppen af stakken med parameteren. Denne operation er ikke forudannonceret, idet vi, uanset specialiseringen af stack, kan implementere change_top på dette niveau. 166

13 Eksempel på en abstrakte klasse fra Eiffel bibliotekerne. deferred class PART_COMPAR infix "<" (other: like Current): BOOLEAN is deferred ; -- "<" infix "<=" (other: like Current): BOOLEAN is Result := (Current < other) or (is_equal (other)) ; -- "<=" infix ">" (other: like Current): BOOLEAN is Result := other < Current ; -- ">" infix ">=" (other: like Current): BOOLEAN is Result := (other < Current) or (is_equal (other)) -- ">=" -- class PART_COMPAR Klassen PART_COMPAR definerer fire forskellige sammenligningsoperationer på objekter, hvorpå vi introducerer en partiel ordning (<). Vi minder om, at en partiel ordning pr. definition er transitiv (x < y og y < z => x < z) og irrefleksiv (x < x er falsk for alle x). Via transitivitet og irrefleksivitet har vi også anti-symmetri (x < y => not (y < x) ). Klassen PART_COMPAR er fra kerne-biblioteket i vores Eiffel system. Det ses hvordan operatorerne <=, > og >= kan defineres ud fra < og equal. Bemærk at < er den eneste forudannoncerede (deferred) operation i klassen. Is_equal er arvet fra klassen ANY, hvorfra enhver klasse i Eiffel arver. Det er nu intentionen, at subklasser af PART_COMPAR skal definere operationen <; derved får man de andre "gratis". Eksemplet viser også brug af såkaldte forankrede typer i Eiffel (type erklæringer som 'other: like Current') og infix operator funktioner ('infix "<"(): boolean'). Hverken forankrede typer eller infix operator funktioner bliver behandlede eksplicit på dette kursus. Interesserede henvises til hhv. afsnit "Eiffel the Language" angåe forankrede typer. 167

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

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser. 10 Nedarvning I. Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Dynamisk binding og virtuelle operationer. Decentraliseret/centraliseret

Læs mere

4 Basal Objekt-orienteret Programmering I.

4 Basal Objekt-orienteret Programmering I. 4 Basal Objekt-orienteret Programmering I. Klasser i forhold til abstrakte datatyper og record-typer. Variable og operationer. Klasse-interfaces. Klasser og typer. Klasse-instantiering og initialisering.

Læs mere

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

12 Nedarvning III. Noter. Multipel nedarvning. Nedarvning og assertions. PS1 -- Nedarvning III. Kurt Nørmark, Aalborg Universitet, 1994. 12 Nedarvning III. Multipel nedarvning. Nedarvning og assertions. 169 Multipel nedarvning. A C Klassen C arver egenskaberne fra både A og. A og egenskaber er umiddelbart tilgængelige i C. x A C x x er

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Videregående Programmering for Diplom-E Noter

Videregående Programmering for Diplom-E Noter Videregående Programmering for Diplom-E Noter 1. Uddelegering Ét af de væsentlige principper i objektorienteret programmering er, at enhver klasse selv skal kunne "klare ærterne". Enhver klasse skal altså

Læs mere

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

3 Algebraisk Specifikation af Abstrakte Datatyper.

3 Algebraisk Specifikation af Abstrakte Datatyper. 3 Algebraisk Specifikation af Abstrakte Datatyper. Specifikation kontra program. Bestanddele af en algebraisk specifikation. Klassificering af funktioner i en ADT. Systematisk definition af ligninger.

Læs mere

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22.

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22. Klasser og Objekter i Python Uge 46 Learning Python: kap 15-16, 19-22. Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. En kage form Klassens

Læs mere

2 Abstrakte datatyper.

2 Abstrakte datatyper. 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,

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Objekt-orienteret programmering uden klasser: Self.

Objekt-orienteret programmering uden klasser: Self. Objekt-orienteret programmering uden klasser: Self. Sammenligning klasse-baseret og klasseløs programstrukturering. Basale forhold Singulære objekter Dynamisk nedarvning Variable i forhold til metoder.

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Klasser og Objekter i Python. Uge 11

Klasser og Objekter i Python. Uge 11 Klasser og Objekter i Python Uge 11 Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. Klassens objekter er instanser af klassen. En programudførelse

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

18 Multivejstræer og B-træer.

18 Multivejstræer og B-træer. 18 Multivejstræer og B-træer. Multivejs søgetræer. Søgning i multivejssøgetræer. Pragmatisk lagring af data i multivejstræer. B-træer. Indsættelse i B-træer. Eksempel på indsættelse i B-træ. Facts om B-træer.

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign 28 Algoritmedesign. Algoritmeskabelon for Del og Hersk. Eksempler på Del og Hersk algoritmer. Binær søgning i et ordnet array. Sortering ved fletning og Quicksort. Maksimal delsums problem. Tætteste par

Læs mere

Objektorienteret design med arv og polymorfi:

Objektorienteret design med arv og polymorfi: Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1 Objektorienteret

Læs mere

15 Arrays og Lister samt Stakke og Køer.

15 Arrays og Lister samt Stakke og Køer. 15 Arrays og Lister samt Stakke og Køer. Introduktion til arrays. Algebraisk specifikation af arrays. Arrays i Eiffel. Introduktion til lister og kædede lister. Fælles egenskaber ved stakke og køer. Algebraisk

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer. 14 Algoritmeanalyse. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. O og Ω. Køretid for forskellige kontrolstrukturer. Eksempler på algoritmeanalyse. Eksponentiel og polynomiel

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

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

ER-modellen. Databaser, efterår 2002. Troels Andreasen. Efterår 2002 Databaser, efterår 2002 ER-modellen Troels Andreasen Datalogiafdelingen, hus 42.1 Roskilde Universitetscenter Universitetsvej 1 Postboks 260 4000 Roskilde Telefon: 4674 2000 Fax: 4674 3072 www.dat.ruc.dk

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til [email protected]. Besvarelsen skal

Læs mere

UML til kravspecificering

UML til kravspecificering UML til kravspecificering UML mini-kompendium - til brug i forbindelse med modellering af kravspecifikationer. Copyright 2006 Teknologisk Institut, IT-Udvikling Aktivitetsdiagram 2/9 Aktion Aktionsnavn

Læs mere

Kommentar fra KMS til Specifikation af Serviceinterface for Person

Kommentar fra KMS til Specifikation af Serviceinterface for Person Kommentar fra KMS til Specifikation af Serviceinterface for Person Organisation Side Kapitel Afsnit/figur/tabel /note Type af kommentar (generel (G), redaktionel (R), teknisk (T)) Kommentar KMS-1 G Godt

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

Lær Python - Dag 4, modul 2 Objektorienteret programmering

Lær Python - Dag 4, modul 2 Objektorienteret programmering Lær Python - Dag 4, modul 2 Objektorienteret programmering Simon J. Larsen 28. oktober 2017 Institut for Matematik og Datalogi Metoder Metoder Indtil videre har vi kun brugt objekter til at gemme værdier.

Læs mere

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

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater Design by Contract Design and Programming by Contract Anne Haxthausen [email protected] Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Objektorientering. Programkvalitet

Objektorientering. Programkvalitet 1 PROSA-Bladet nr. 4 1993 Objektorientering = Programkvalitet? Af Finn Nordbjerg, adjunkt ved Datamatikeruddannelsen, Aalborg Handelskole 1. Indledning Objektorientering er blevet et edb-fagets mest udbredte

Læs mere

17 Søgning og Søgetræer.

17 Søgning og Søgetræer. 17 Søgning og Søgetræer. Lineær og inær søgning i lister. inære søgetræer. Søgning efter knude i træ. Indsættelse af knude i træ. Søgning i og sortering af inært søgetræ. Sletning af knude i inært søgetræ.

Læs mere

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt

Læs mere

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

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. 22 Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. Indsættelse i hobe. Sletning af minimalt element i hobe. Repræsentation. 327

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

Læs mere

Om begrebet relation

Om begrebet relation Om begrebet relation Henrik Stetkær 11. oktober 2005 Vi vil i denne note diskutere det matematiske begreb en relation, herunder specielt ækvivalensrelationer. 1 Det abstrakte begreb en relation Som ordet

Læs mere

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

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002 Databaser, efterår 2002 Databasesystemer Troels Andreasen Datalogiafdelingen, hus 42.1 Roskilde Universitetscenter Universitetsvej 1 Postboks 260 4000 Roskilde Telefon: 4674 2000 Fax: 4674 3072 www.dat.ruc.dk

Læs mere

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt

Læs mere

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

1 Grundbegreber. Noter. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner.

1 Grundbegreber. Noter. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner. 1 Grundbegreber. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner. Parametermekanismer. Blokke og navnebindinger. Scope og scoperegler. 3 Parallelle

Læs mere

Kontraktbaseret Design. Anker Mørk Thomsen

Kontraktbaseret Design. Anker Mørk Thomsen Kontraktbaseret Design Anker Mørk Thomsen 5. marts 2014 -2 Kontraktbaseret Design Anker Mørk Thomsen 1. udgave ISBN: 9788740491500 Forord Bogen er blevet til gennem undervisning i faget Kontraktbaseret

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Noter til C# Programmering Iteration

Noter til C# Programmering Iteration Noter til C# Programmering Iteration Programflow Programmer udfører det meste af deres arbejde vha. forgrening og løkker. Løkker Mange programmeringsproblemer kan løses ved at gentage en handling på de

Læs mere

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Programmeringscamp. Implementer funktionerne én for én og test hele tiden. Programmeringscamp De to opgaver træner begge i at lave moduler som tilbyder services der kan bruges af andre, samt i at implementere services efter en abstrakt forskrift. Opgave 1 beder jer om at implementere

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Kapitel 3 Betinget logik i C#

Kapitel 3 Betinget logik i C# Kapitel 3 i C# er udelukkende et spørgsmål om ordet IF. Det er faktisk umuligt at programmere effektivt uden at gøre brug af IF. Du kan skrive små simple programmer. Men når det bliver mere kompliceret

Læs mere