Objektorienteret design med arv og polymorfi:

Størrelse: px
Starte visningen fra side:

Download "Objektorienteret design med arv og polymorfi:"

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

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

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

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

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

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

Objects First with Java A Practical Introduction Using BlueJ

Objects 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 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

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

Singleton pattern i Java

Singleton 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 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

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

Løsningsforslag til Camp Let. Case Beskrivelse: Camp Let

Lø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 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

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

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

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob 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 mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University 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 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

Arkitektur 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) 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 mere

Rekursion C#-version

Rekursion 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 mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

Videregående programmering i Java

Videregå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 mere

UML-Light (Note: UML-Light T133, ver. 2004) Finn Overgaard Hansen, IHA

UML-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 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

Metodehå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 Metodehåndbog Begrebsmodeller, Informationsmodeller og Begrebsdefinitioner Udarbejdet i fællesskab mellem Udbetaling Danmark/KL/KOMBIT Indhold Introduktion... 2 Begrebsmodeller, informationsmodeller og

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

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

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api

Specifikation 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 mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS 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 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

DMX styring med USB-interface

DMX 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 mere

Vejledning til ændringsudpegning

Vejledning 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 mere

Programmering i C. Lektion 4. 5. december 2008

Programmering 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 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

PROGRAM. 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; 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 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 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

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

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 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 mere

A Profile for Safety Critical Java

A 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 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

Analytisk plangeometri 1

Analytisk 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 mere

Eksempel: et ordresystem note 5 Lagdeling s. 1

Eksempel: 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 mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI 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 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

Introduktion til GeoGebra

Introduktion 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 mere

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Rename 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 mere

Metoder Klasser Arv. Operatorer Løkker. Praksis eksempel. Grundlæggende programmering Lektion 3

Metoder 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 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

DM507 Algoritmer og datastrukturer

DM507 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 mere

Visualiseringsprogram

Visualiseringsprogram 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 mere

Udvikling af DOTNET applikationer til MicroStation i C#

Udvikling 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 mere

Forslag til oprettelse af et konferencemodul

Forslag 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 mere

Kursusarbejde 2 Grundlæggende Programmering

Kursusarbejde 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 mere

Analyse, problemområde, anvendelsesområde

Analyse, 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 mere

ActiveBuilder Brugermanual

ActiveBuilder 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 mere

Introduktion til design patterns.

Introduktion 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 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

Induktive og rekursive definitioner

Induktive 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 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

Læ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 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 mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen [email protected] i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, [email protected] 1 Dagens program Opsamling

Læs mere

Crash Course i Programmering. HumTek, RUC

Crash 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 mere

Gratisprogrammet 27. september 2011

Gratisprogrammet 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 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

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

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University 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