Objektorienteret design med arv og polymorfi:
|
|
- Klaus Lindegaard
- 8 år siden
- Visninger:
Transkript
1 Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1
2 Objektorienteret design og arv Nærværende note beskriver nærmere et princip for godt design i forbindelse med brug af arv og polymorfi i programmering. Princippet kaldes substitutionsprincippet og er oprindeligt introduceret af Babara Liskov [Liskov]. Endvidere gives et eksempel på design pattern'et Composite. Indledning I objektorienteret analyse anvendes specialisering/generalisering ved strukturering mellem klasser bl.a. for at genbruge beskrivelser af egenskaber og adfærdsmønstre. Disse strukturer kan, som bekendt, overføres til programmet ved at udnytte et objektorienteret programmerings-sprogs (OOPL) understøttelse af arv og polymorfi. Arv og polymorfi er imidlertid generelle mekanismer i OOPL, som kan anvendes til at opnå kodegenbrug - også når der ikke tale om specialisering/generalisering. En ukritisk brug af arv og polymorfi, hvor der kun fokuseres på kodegenbrug, og det glemmes, at arv skal ses som typespecialisering, fører erfaringsmæssigt til dårligt designede programmer, som er vanskelige at overskue og vedligeholde, stik modsat målet med objektorienteret programmering. Substitutionsprincippet Substitutionsprincippet siger, at arv skal anvendes på en sådan måde, at man altid kan substituere et objekt af en nedarvet klasse, hvor et objekt af forfaderklassen bruges. Dette princip følger af, at arv skal ses som typespecialisering, dvs. at en nedarvet klasse skal have samme egenskaber og adfærd på det logiske niveau som forfaderklassen, og derfor kan udfylde dennes plads. Da nedarvning i objektorienterede programmeringssprog normalt betyder, at alt hvad der er defineret i forfaderklassen også - automatisk - er defineret i den nedarvede klasse, så er det i forbindelse ved omdefinering af arvede operationer, at det er vigtigt at overholde substitutionsprincippet. Hvis en programstump, som anvender en operation defineret på forfaderklassen, skal kunne fungere lige så godt, hvis der i stedet udføres en omdefineret version af operationen defineret i den nedarvede klasse, så skal arvingens omdefinerede version mindst opfylde den gamles specifikation. Substitutionsprincippet kan defineres mere præcist ved at tage udgangspunkt i en klasses specifikation. Antag, at vi har to klasser ClassA og ClassB, hvor ClassB er en arving til ClassA. Vi har følgende definitioner i C#: Side 2
3 public class ClassA // diverse definitioner public virtual void Pip() // PRE: p // POST: q -- p og q er betingelser //end Pip //end ClassA public class ClassB: ClassA // diverse definitioner public override void Pip() //ClassB omdefinerer Pip // PRE: p' // POST: q' -- p' og q' er nye betingelser //end Pip //end ClassB Hvis substitutionsprincippet skal overholdes, dvs. at objekter af type ClassB skal kunne anvendes i stedet for objekter af type ClassA, må ClassB.pip() s specifikation opfylde: p p, dvs. hvis ClassA.Pip() s PRE er opfyldt, så er ClassB.Pip() s det også q q, dvs. resultatet af ClassB.Pip() opfylder mindst samme betingelser som resultatet af ClassA.Pip() Substitutionsprincippet er overholdt, hvis man ved omdefinering af operationer kun afsvækker PRE-betingelser og strammer POST-betingelser. Et eksempel Antag, at vi i forbindelse med udarbejdelse af en grafisk editor har fundet en klasse Shape, som beskriver en vilkårlig lukket figur i et vindue på skærmen. I C# er Shape defineret som følger: public class Shape private int x,y; // figurens position private Colour color; //figurens farve //øvrige attributter Side 3
4 public void MoveTo(int newx, int newy) //PRE: 0 <= newx <= maxx AND 0 <= newy <= maxy, // hvor maxx og maxy angiver vinduets maksimum // POST: x'=newx AND y'=newy public virtual float Area() //PRE: none //POST: Area'= figurens areal med 4 decimalers nøjagtighed // beregnet efter en eller anden tilnærmet metode //end Shape Antag videre, at vi har fundet behov for en klasse Circle, som definerer det grafiske objekt cirkel. Det er naturligt at definere Circle som en specialisering af Shape. I C# som en arving: public class Circle: Shape private int r; //radius - x, y og color arves public override float Area() //øvrige operationer - MoveTo() arves //end circle For en cirkel er vi i stand til at give en bedre implementation af Area() vha den velkendte formel: a= π r 2. Area() s POST-betingelse og substitutionsprincippet forhindrer os imidlertid i at anvende fx som tilnærmelse for π, idet Circle.Area() skal opfylde kravet om 4 decimalers nøjagtighed. Derimod må vi gerne anvende som π, for i så fald kan vi beregne arealet med en nøjagtighed på 6 decimaler, hvilket er en strammere betingelse end 4 decimaler. Dette er vigtigt af hensyn til programmers modificérbarhed. Lad os antage, at vi har en stump program, som beregner et sammensat billedes areal ved at sweepe gennem en sekvens af objekter af typen Shape og kalde deres Area(). Denne programstump skal kunne fungere ligeså godt som tidligere, (dvs. med mindst samme nøjagtighed), hvis der i sekvensen substitueres objekter af type Circle ind i stedet for objekter af type Shape. Antag nu, at vi ønsker at omdefinere MoveTo(), så det er muligt at flytte cirkler udenfor vinduet, dvs. vi vil ændre Shape.MoveTo() s PRE-betingelse, så Circle.MoveTo() får PRE-betingelse none. Dette er i overenstemmelse med substitutionsprincippet, idet none er en svagere betingelse end den oprindelige. Det vil da heller ikke genere programmer, som er baseret på, at objekter kun kan flyttes indenfor vinduet, at de nu også - i andre sammenhænge - kan flyttes uden for vinduet. Side 4
5 Omvendt ville det være et problem, hvis vi bestemte os til, at cirkler kun kan holde til i vinduets nederste halvdel, og derfor gav Circle.MoveTo() PRE-betingelsen: 0<=newX<=maxX AND 0<=newY<=(maxY / 2), idet newy<=(maxy / 2) er en stærkere betingelse end newy<=maxy. Dette ville også give problemer for programmer, som regner med, at objekter kan fare rundt i hele vinduet, hvis der substitueres cirkelobjekter ind. Bemærk, at i C# er det kun muligt at omdefinere operationer, som i baseklassen er defineret virtual. Dvs., at man skal være meget forudseende (nærmest synsk) eller også altid definere metoder virtual, med mindre effektivitetshensyn tvinger en til at bruge statisk binding. Ved omdefinering skal nøgleordet override anvendes. Et designeksempel Til slut et eksempel, som illustrerer god brug af arv i forbindelse med objektorienteret design. Vi fortsætter med at betragte vores grafiske editor: Vi har fundet klasser som Circle, Box, Triangle, Position, Picture og Shape. Klassen Position beskriver på passende måde en figurs position, fx. ved et koordinatsæt, et omskrevet rektangel eller noget andet. Klassen Picture beskriver en sammensat figur, og kan således indeholde en række forskellige figurerer, hvoraf nogle kan være cirkler, trekanter mv., men også selv være sammensatte. Dvs. at Picture aggregerer Shape. Klassen Shape er en generalisering af de konkrete figurer og samler fælles egenskaber og adfærd. Klassen er abstrakt, dvs der kan ikke forekomme objekter af denne klasse, bla. fordi vi ikke er i stand til at implementere operationer til at skjule og vise generelle figurer, kun de konkrete så som cirkler og trekanter. Klassen aggregerer en Position, som nedarves til de konkrete figurer. Følgende struktur er fundet: Side 5
6 I C# kunne (dele af) klassedefinitionerne se ud som følger: namespace Composite public class Position private int x, y; public Position(int x, int y) this.x = x; this.y = y; public int X get return x; set x = value; public int Y get return y; set y = value; abstract public class Shape protected Position pos; //figurens position protected char color; //figurens farve public Position Position get throw new System.NotImplementedException(); Side 6
7 set //øvrige attributer public virtual void MoveTo(Position newpos) // PRE none // POST pos'=newpos public abstract void Show(); // Abstrakt operation // - kan ikke implementeres for en vilkårlig figur. // PRE none // POST figuren er tegnet public abstract void Hide(); // Abstrakt operation // - kan ikke implementeres for en vilkårlig figur. // PRE none // POST figuren er skjult // øvrige operationer //end Shape public class Circle: Shape private int r; //radius //øvrige attributter - pos og color arves public override void Show() //PRE none //POST cirklen er tegnet //Denne operation kan nu implementeres for en cirkel //ved hjælp af en passende grafikrutine. Side 7
8 public override void Hide() //PRE none //POST cirklen er skjult //Denne operation kan nu implementeres for en cirkel //ved hjælp af en passende grafikrutine. // øvrige operationer - MoveTo() arves //end Circle; //andre figurer kan defineres på tilsvarende måde public class Picture: Shape //passende repræsentation af en samling af figurer: private ArrayList shapes; public Shape Shape get throw new System.NotImplementedException(); set // constructor // operationer til at tilføje og slette figurer mv. public override void Show() //PRE none //POST den sammensatte figur er tegnet foreach(shape s in shapes) s.show(); Side 8
9 public override void Hide() //PRE none //POST den sammensatte figur er skjult foreach(shape s in shapes) s.hide(); public override void MoveTo(Position newpos) //PRE none //POST pos'=newpos foreach(shape s in shapes) s.moveto(newpos); //end Picture Som det (forhåbentlig) ses er dette design meget modificérbart: nye operationer som Rotate() og Scale() kan defineres efter samme opskrift som MoveTo(). Nye figurtyper, fx. Ellipsis defineres som arving til Shape og implementerer Show() og Hide() på passende vis. Alt andet er uændret. Krav om ny funktionalitet og håndtering af nye objekttyper fører kun til tilføjelser til ikke ændringer i den eksisterende kode! Dette er stærkt! Læg mærke til, at designets styrke hviler på den abstrakte klasse Shape. Den er et eksempler på, hvad der nogle gange kaldes "geniale abstrakte" klasser, dvs. klasser som ikke kommer direkte fra objekter i problemområdet. I dette tilfælde er klassen ret oplagt, og der kræves næppe den store genialitet for at finde den. Men bemærk, at det ofte er denne type klasser, som gør et design virkeligt modificérbart, og at det kræver om ikke genialitet, så i hvert fald kreativitet, erfaring og talent af designeren at finde disse klasser. I sandhedens interesse skal det nævnes, at det ikke er denne forfatter, som er ophavsmand til eksemplet og den tilhørende geniale klasse. Det findes i [Bar-David] i en lignende udgave i C++. Endelig skal det nævnes, at designet er en konkretisering af et generelt mønster - et såkaldt design pattern, som kan anvendes i alle problemstillinger, der omhandler rekursive listestrukturer. Problemet er kendt under navnet "den generelle stykliste problematik". Mønstret er beskrevet i [Gamma], der indeholder en række andre almindeligt forekommende designmønstre. Referencer [Liskov]: Babara Liskov: "Data Abstraction and Hierarchy". OOPSLA 87 Addendum to the Procedings. Side 9
10 [Bar-David]: Tsvi Bar-David: "Object-Oriented Design for C++". Prentice-Hall [Gamma]: E. Gamma, R. Helm, R. Johnson, J. Vlissides: "Design Patterns - Elements of Resuable Object- Oriented Software". Addison-Wesley Side 10
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 mereDatalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning
Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:
Læs mereAlgoritmeskabeloner: 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 mereObjektorientering. 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 mereSWC 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 mereVideregå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 merePolymorfi. 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 mereSingleton pattern i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er
Læs mereObjects First with Java A Practical Introduction Using BlueJ
Objects First with Java A Practical Introduction Using BlueJ En introduktion til objektorienteret programmering for begyndere ud fra et software engineering aspekt Om at programmere i Java, ikke om værktøjet
Læs mereKlasser 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 mereMETODER 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 mereSingleton pattern i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.
Læs mereUgeseddel 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 mereCitation for pulished version (APA): Nordbjerg, F. E. (1993). Objektorientering = Programkvalitet? Prosabladet. De it-professionelles fagblad, (4).
Danish University Colleges Objektorientering = Programkvalitet? Nordbjerg, Finn Ebertsen Published in: Prosabladet. De it-professionelles fagblad Publication date: 1993 Document Version Pre-print: Det
Læs mereAAU, 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 fjj@noea.dk. Besvarelsen skal
Læs mereLøsningsforslag til Camp Let. Case Beskrivelse: Camp Let
Løsningsforslag til Camp Let Case Beskrivelse: Camp Let Firmaet Camp Let har til formål at udleje forskellige typer transportable ferieboliger. Det drejer sig i øjeblikket om campingbusser, campingvogne,
Læs mere29 Opsamling af Objekt-orienteret Programmering.
29 Opsamling af Objekt-orienteret Programmering. Bottom-up kontra top-down design. "The shopping list approach". Hvordan finder man på objekterne. Klasser og dataabstraktion. Klasse interface og interface-teknikker.
Læs mereObjektorienteret 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 mere4 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 mereUdvidelse 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 mereReal-time programming safety in Java and Ada
Real-time programming safety in Java and Ada Bo Sandén Presenter: Thomas Bøgholm 25. oktober 2007 Forfatteren Artiklen Synkroniserings Begreber Bo Sandén Professor på Colorado Technical University Beskæftiger
Læs mere30 Objekt-orienteret Programmering i Andre Sprog.
30 Objekt-orienteret Programmering i Andre Sprog. Abstrakte datatyper i Pascal. Abstrakte datatyper i Modula og Ada. C++ Overordnet organisering Instantiering og initialisering. Interfaces. Nedarvning.
Læs mereHvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter
OOP e2002 - uge 42 6. kursusgang Hvordan organiseres et programs grafik-elementer? 1. Teori: class Component og subklasser: Composite pattern layout-managere hændelsesstyret programmering 2. XP-program:
Læs mereJacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004
Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11
DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void
Læs mereSWC Elementer i klassedefinition
SWC Elementer i klassedefinition Indhold Eksempel... 2 Karakteristika for en klasse... 3 Karakteristika for et instance field... 4 Karakteristika for en constructor... 5 Karakteristika for en property...
Læs mereKlasser 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 mereArkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net)
Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net) Kim Harding Christensen EOS A/S Margrethepladsen 3 8000 Århus TLF: 8732 8787
Læs mereRekursion C#-version
Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereSoftware Construction 1. semester (SWC) januar 2014 Spørgsmål 1
Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter
Læs mereUML-Light (Note: UML-Light T133, ver. 2004) Finn Overgaard Hansen, IHA
UML-Light (Note: UML-Light T33, ver. 2004) Finn Overgaard Hansen, IHA Programmering PRG + Semesterprojekter PRJ+PRJ2 Version: 20--2004 Indhold Første del: Introduktion til UML-Light og UML Klasser og objekter
Læs mere22 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 mereMetodehåndbog. Begrebsmodeller, Informationsmodeller og Begrebsdefinitioner. Udarbejdet i fællesskab mellem Udbetaling Danmark/KL/KOMBIT
Metodehåndbog Begrebsmodeller, Informationsmodeller og Begrebsdefinitioner Udarbejdet i fællesskab mellem Udbetaling Danmark/KL/KOMBIT Indhold Introduktion... 2 Begrebsmodeller, informationsmodeller og
Læs mereSkriftlig 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 mereSkriftlig 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 mereDesign af genbrugeligt objektorienteret software
Velkommen Design af genbrugeligt objektorienteret software Evaluering af software ved hjælp af statiske mål. 24 februar 2004 Specialeforsvar af: Søren Gaardbo Jensen Design af genbrugeligt objektorienteret
Læs mereSpecifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api
Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...
Læs mereDANMARKS TEKNISKE UNIVERSITET
DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler
Læs mereclass subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.
Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer
Læs mereForelæsning Uge 2 Mandag
Forelæsning Uge 2 Mandag Objekters tilstand og opførsel BlueJ og Greenfoot Java Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Forskellige slags variabler Afleveringsopgave:
Læs mere2 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 mereDMX styring med USB-interface
DMX styring med USB-interface Introduktion...2 DMX bibliotek...3 Programmering af kanaler...7 Sådan skabes et show/en lyssekvens...11 Introduktion DMX LightPlayer er en avanceret men meget brugervenlig
Læs mere26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.
26 Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. Hvad er programverifikation? Bevisregel for 'tom kommando'. Bevisregel for assignment. Bevisregler for selektive
Læs mereVejledning til ændringsudpegning
Vejledning til ændringsudpegning I forbindelse med ændringsudpegninger er der for at gøre udpegningerne ens fra kommunerne lavet en kort vejledning, som skal give en afklaring af, hvornår man bruger de
Læs mereProgrammering i C. Lektion 4. 5. december 2008
Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )
Læs mereDatalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 - forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)
Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 Datastrukturer og algoritmer Henning Christiansen henning@ruc.dk http://www.ruc.dk/~henning Formål: at kunne - forstå datastrukturer og algoritmer
Læs mereSoftware 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 mereLektion 6. Grundlæggende programmering i VR
Lektion 6 Grundlæggende programmering i VR Plan for i dag Simpelt FPS Triggerzones og animationer C# og objekt orienteret programmering Interfaces Generics Google Cardboard Video om VRs fremtid App til
Læs merePROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;
PROGRAM using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace EventManager class Program static void Main(string[] args) string hovedmenu = ""; string svar;
Læs mereLektion 3. Grundlæggende programmering i VR
Lektion 3 Grundlæggende programmering i VR Plan for i dag UML Usecase diagrammer Aktivitets diagrammer Klasse diagrammer Udforskning af forskelligt VR og andre måder at udvide virkeligheden på Cardboard
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereKontraktbaseret 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 mereKursusarbejde 3 Grundlæggende Programmering
Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................
Læs mereAssignment #5 Toolbox Contract
Assignment #5 Toolbox Contract Created by: René Kragh Trine Randløv E mail address cph rk70@cphbusiness.dk 23 11 2014 1 Introduktion Dette dokument indeholder en vertikal kontrakt for et system som skal
Læs mereA Profile for Safety Critical Java
A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren
Læs mereDM507 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 mereb) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.
Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning
Læs mereAnalytisk plangeometri 1
1 Analytisk plangeometri 1 Kære 1. x, Vi begynder dag vores forløb om analytisk plangeometri. Dette bliver en udvidelse af ting i allerede kender til, så noget ved I i forvejen, mens andet bliver helt
Læs mereEksempel: et ordresystem note 5 Lagdeling s. 1
Eksempel: et ordresystem note 5 Lagdeling s. 1 Eksempel: et ordre-system NiceHair er et firma, som sælger udstyr, inventar og frisørartikler til frisørsaloner over hele landet. Det er ejet af et ægtepar
Læs mereForelæsning Uge 6 Mandag
Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring
Læs mereÅrsagen til fejl. Erkendelse af fejl. Håndtering af fejl.
9 Fejlhåndtering Årsagen til fejl Erkelse af fejl Håndtering af fejl Fejlerkelse og -håndtering i objekt-orienterede sprog Fejlerkelse og -håndtering i Eiffel Udbredelse af fejl i Eiffel Nuanceret fejlhåndtering
Læs mereRMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).
Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer
Læs mereObjekt-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 mereIntroduktion til GeoGebra
Introduktion til GeoGebra Om navne Ib Michelsen Herover ses GeoGebra's brugerflade. 1 I øverste linje finder du navnet GeoGebra og ikoner til at minimere vinduet, ændre til fuldskærm og lukke I næste linje
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således
Læs mereRename og redefine. Abstrakte klasser. Dynamisk binding.
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.
Læs mereMetoder Klasser Arv. Operatorer Løkker. Praksis eksempel. Grundlæggende programmering Lektion 3
Praksis eksempel Operatorer Løkker Metoder Klasser Arv Grundlæggende programmering Lektion 3 Praksis eksempel Et program der benytter Unity til at lave et 3D spil Praksis eksempel Spil der benytter Unity
Læs mereLæ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 mereIntroduction til.net remoting i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereVisualiseringsprogram
Visualiseringsprogram Programmering C - eksamensopgave Rami Kaddoura og Martin Schmidt Klasse: 3.4 Vejleder: Karl Bjarnason Roskilde Tekniske Gymnasium Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-12
Læs mereUdvikling af DOTNET applikationer til MicroStation i C#
Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt
Læs mereForslag til oprettelse af et konferencemodul
Forslag til oprettelse af et konferencemodul Motivation Konferencerelaterede aktiviteter kan i dag ikke registreres tilfredsstillende. En forsker, der har været på konference, vil typisk skulle registrere
Læs mereKursusarbejde 2 Grundlæggende Programmering
Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................
Læs mereAnalyse, problemområde, anvendelsesområde
OOA&D, kap. 1-5 Fiktiv case Det supermarked I dagligt handler i, skal have et integreret kasse-, lagerstyrings- og EDI-system. Systemet skal gøre det muligt at sænke varebeholdningen uden at der kommer
Læs mereForelæsning Uge 3 Torsdag
Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:
Læs mereActiveBuilder Brugermanual
ActiveBuilder Brugermanual Forfatter: TalkActive I/S Dato: Juni 2004 Version: R. 1.01 Sprog: Dansk Copyright 2004 - Talk Active - all rights reserved. Indhold: 1. INDLEDNING...2 2. QUICK-START...3 3. OPBYGNINGEN
Læs mereEfterslægtstavlen kan også udskrives som ren tekst med indrykning: Tonnes ~Ursula ina ~Morten Ferdinand Ida Diderich Oluf ~Pia Grethe Jonna Hedvig Rud
Opgave (25%) F lgende viser en simpel efterslægtstavle Tonnes ο Ursula ina ο Morten Oluf ο Pia Hedvig Rudolf ο Sarah Ferdinand Ida Diderich Grethe Jonna De forskellige typer personer der optræder i tavlen
Læs meredintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4
dintprog Manual Revision: 1241 August 24, 2010 Indhold I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering 4 III Sprogkonstruktioner 5 4 Klasser
Læs mereForelæsning Uge 3 Torsdag
Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)
Læs mereKursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing
Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt
Læs mereIntroduktion til design patterns.
Introduktion til design patterns. Genbrug. Pattern languges i arkitektur. Standardbeskrivelse af design patterns. Oversigt over design patterns. Observer. Composite. Decorator. Abstract Factory. Patterns
Læs mereDesign by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater
Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design
Læs mereKlasser 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 mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6
DM502 Forelæsning 6 Klasser og objekter Introduktion Math-klassen Indhold Klasser vs. objekter Først et tænkt eksempel: Vi vil lave en bil i Java 1. spørgsmål: Hvad karakteriserer en bil? Model År Farve...
Læs mereInduktive og rekursive definitioner
Induktive og rekursive definitioner Denne note omhandler matematiske objekter, som formelt er opbygget fra et antal basale byggesten, kaldet basistilfælde eller blot basis, ved gentagen brug af et antal
Læs mereTree 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 mereI denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.
Denne guide er oprindeligt udgivet på Eksperten.dk Collections i.net Når du kigger i namespacet System.Collections finder du over 10 forskellige klasser. At vælge den rigtige til netop din applikations
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status
Læs mereLæringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4
Læringsprogram Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4 R o s k i l d e T e k n i s k e G y m n a s i u m Indholdsfortegnelse FORMÅL...
Læs mereIntroduktion til ActionScript, fortsat
Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling
Læs mereATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11
ATTRIBUTES DYNAMIC PROGRAMMING MULTITHREADING Grundlæggende programmering Lektion 11 1 ATTRIBUTES Information om adfærd 2 ATTRIBUTES En attribut er en deklarativ tag, der bruges til at formidle information
Læs mereCrash Course i Programmering. HumTek, RUC
Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget
Læs mereGratisprogrammet 27. september 2011
Gratisprogrammet 27. september 2011 1 Brugerfladen: Små indledende øvelser: OBS: Hvis et eller andet ikke fungerer, som du forventer, skal du nok vælge en anden tilstand. Dette ses til højre for ikonerne
Læs mere3 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 mereHvad 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 mereObjektorienterede metoder
Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3
DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget
Læs mere