5 Basal Objekt-orienteret Programmering II.

Størrelse: px
Starte visningen fra side:

Download "5 Basal Objekt-orienteret Programmering II."

Transkript

1 5 Basal Objekt-orienteret Programmering II. Historik og sprogoversigt. Programbeskrivelse kontra programudførelse. Referencer og værdier. Skabelse af objekter i Eiffel. Features og deres klassificering i Eiffel. Routiner i Eiffel. Current object. Konstanter af simple typer og klassetyper. I dette kapitel (og videre i noterne) vil vi antage følge: Når vi introducerer en klasse vil vi med mindre andet fremgår eksplicit indskrænke os til at studere situationen, hvor objekter af klassen er dynamisk allokerede. Med andre ord arbejder vi som hovedregel altid med referencer til objekter, og vi ignorerer typisk at man rent faktisk i Eiffel godt kan have klasser, hvis objekter er statisk allokerede. I Eiffel-teknisk forstand ser vi altså ofte bort fra klasser, der er expanderede, og variabelerklæringer på formen var: expanded C hvor C er en klasse. Det vil komplicere disse noter for meget at fortælle hele sandheden om Eiffel, og I mange praktiske sammenhænge er det ikke nødvigt at ke hele sandheden om sproget. Hvis du ikke forstår ovenståe bemærkning fuldt ud gør det ikke så meget. Du skal blot forstå, at dette kapitel (og generelt disse noter) ikke er en fuldstændig beskrivelse af mulighederne i Eiffel. Ofte vil vi henvise til Eiffel the language for detaljer. 59

2 Den historiske udvikling af objekt-orienterede programmeringssprog. Fortran Lisp Algol-60 Simula-67 C Pascal Smalltalk-72 Smalltalk-80 Beta C++ Modula Ada CLOS Eiffel På denne slide er det illustreret, hvordan nogle interessante objekt-orienterede sprog er i familie med hinanden, og hvordan de er i familie med ikke-objekt-orienterede sprog. Kun sprog skrevet med fede, kursiverede typer kan betegnes som objekt-orienterede. Den vertikale dimension afspejler en tidsakse med de nyeste sprog forneden og de ældste øverst. Det kan være vanskeligt nøjagtigt at tidsfæste nogle sprog, så tag dette med et gran af salt. Bemærk, at alle objekt-orienterede sprog har rod i Simula-67, der som navnet antyder er udviklet midt i 60'erne. Simula er udviklet i Norge af bl.a. Kristen Nygaard. Kristen Nygaard blev i sommeren 91 æresdoktor på AUC. De familiemæssige sammenhænge mellem sprog danner et generaliserings/specialiseringshierarki, som i et vist omfang er analogt til de hierarkier, vi har set på i forelæsningen om abstrakte datatyper. Ovenståe hierarki er naturligvis groft simplificeret, og ukomplet i forhold til virkelighedens. 60

3 Beskrivelse kontra udførelse af et objekt-orienteret program. Statisk programbeskrivelse som det fremgår af programteksten: Klasser, med variable (attributter) og operationer (routiner) Dynamisk programudførelse som det forekommer i maskinen, når man kører programmet: Objekter med felter der svarer til variable. Felter: Værdier af simple typer. Refencer til objekter. Objekter og referencer udgør et "netværk", som udvikler sig i takt med at programudførelsen skrider frem. Det er meget vigtig at holde programbeskrivelsen (klasserne) adskilt fra programudførelsen (objekter, med indbyrdes referencer). I nogle sprog er klasser også objekter, som kan manipuleres af et sæt af operationer. Smalltalk og CLOS er eksempler på sådanne sprog. Når klasser også er objekter, kan man spørge sig selv, hvilke klasser klasse-objekterne er instanser af? Normalt kalder man klasser, hvis instanser repræsenterer klasser, for metaklasser. Operationerne i disse metaklasser tillader, at man undersøger og påvirker aspekter af programmet selv. Denne "selv-optagethed" kaldes med et fint ord for refleksion. På dette kursus vil vi imidlertid ikke komme ind på disse ting, men metaklasser, og hvad deraf følger, udgør en ganske spænde verden; specielt hvis man er interesseret i at lave værktøj og programmeringsomgivelser. 61

4 Features i Eiffel. Features er en fællesbetegnelse for variable/konstanter og procedure/funktioner i Eiffel. Features Attributes Routines Konstanter Variable Procedures Functions Denne slide viser den logiske klassificering af features i Eiffel. Lidt senere i kapitlet ver vi tilbage til denne klasseficering, set fra et andet perspektiv. 62

5 Referencer og værdier. Lad Var være en variabel, som er initialiseret til et objekt Obj: Var Obj Var indeholder en reference til objektet Obj Var Obj Var indeholder en værdi, som er objektet Obj I det øverste tilfælde vil objektet være dynamisk instantieret, og i det nederste tilfælde statisk instantieret. Som omtalt i forrige forelæsning, er de simple prædefinerede typer i Eiffel altid statisk instantierede. Vi vil som regel være interesseret i dynamisk instantiering af klassetyper. Hvis man imidlertid erklærer en attribut 'a' som a: expanded C bliver objektet statisk instantieret. I Eiffel er der også mulighed for at definere selve klassen som en expanded class; denne mulighed er attraktiv, hvis ethvert objekt af den pågælde klasse skal instantieres statisk. En variabel, som er tiltænkt at indeholde en reference, har værdien void, inden den dynamiske instantiering finder sted. I Eiffel kan man afgøre om en reference i en variabel var er void ved følge udtryk: var = Void 63

6 Skabelse af et objekt i Eiffel: Instantiering. Et objekt kan skabes ud fra en klasse gennem instantiering. Instantiering er i Eiffel tæt koblet med efterfølge initialisering af det nye objekts felter. Instantiering af klassen C: var: C; -- var er void do!!var.creation-procedure; Instantierings- og initialiseringstrin i Eiffel: 1. Der allokeres lager til objektet. 2. Alle felter initialiseres til defaultværdier. 3. Den angivne creation procedure bliver kaldt, for at videre-initialisere objektet. var Default feltværdier: BOOLEAN CHARACTER INTEGER REAL DOUBLE Class Type false null tegn void Et objekt kan skabes på to forskellige måder: (1) Ved at skabe objektet med klassen som forskrift, eller (2) ved at skabe objektet med et andet og eksistere objekt som forskrift. På denne og næste slide ser vi på mulighed 1. Derefter studerer vi mulighed 2. En variabel der er erklæret af en klassetype, indeholder værdien void lige efter dets erklæring. Den faste syntaks for instantiering er anvelse af to udråbstegn:!!target.creation_procedure(parametre). Faktisk indeholder mekanismen nu en mulighed, nemlig en eksplicit angiven creation type:! creation-type!target.creation_procedure(parametre). Semantikken er at der skabes et objekt af creation-type, denne initialiseres gennem trin 2 og 3 ovenfor, og sluttelig etableres en reference fra target til det ny-skabte objekt. Vi får dog først brug for denne udvidede form når vi begynder at interessere os for nedarvning. Referencen mellem en variabel V og et objekt kan brydes ved assignmentet: var := void Dette medfører ikke nødvigvis, at objektet bliver nedlagt, men kun at referencen mellem variablen og objektet bliver brudt. Som omtalt i det første kapitel i disse noter har et køre Eiffel system en såkaldt garbage collector, der har til ansvar at deallokere objekter, som ikke har nogen chance for at påvirke det køre program. (Dette vil i praksis sige objekter, der ikke kan nåes fra et sæt af globale variable og andre såkaldte rødder ). 64

7 Creation procedurer i Eiffel. Formålet med en creation procedure er primært at initialisere nye objekter lige efter overstået instantiering. Sekundært kan creation procedurer anves lige som alle andre procedurer i en klasse. a, b: C -- her erklæres variable t1, t2: T!!a.create; -- her instantieres og!!b.make(t1, t2); -- initialiseres class C creation make, create, feature create is do a.make(t1,t2); b.create -- her illustreres den -- den sekundære anvelse -- af creation procedurer make(x, y: T) is do ; -- class C På denne slide illustreres anvelse af creation procedurer i forhold til omridset af en klassedefinition. Det ses, at man kan have mere én creation procedure. Dette tillader, at man kan programmere mere én form for initialisering af en klasse, hvilket en gang imellem er nyttigt. Typisk (men ikke nødvigvis) vil de forskellige creation procedurer adskille sig ved at have forskellige parametre, herunder forskellig antal parametre. Hvis man ikke angiver creation procedurer (rettere, hvis man slet ikke har afsnittet der starter med creation i klassen), kan man oprette en instans af en klasse på følge måde:!!x Hermed udføres kun de to første trin i instantiering og initialisering, som vist på forrige slide. Nederst på sliden (til venstre) vises hvordan creation procedurerne kan anves som ganske almindelige procedurer (operationer) i objekt-orienteret programmering. I praktiske sammenhænge kan dette anves hvis man vil re-initialisere et objekt (resetting). For at illustrere at operationer på objekter er uafhængige af måden, hvorpå objekterne er skabt, har jeg her valgt at re-initialisere objektet der referes af variablen a (skabt af create) med make, og tilsvare med objektet refereret af b. Det er muligt for en klasse af have mere én creation del, og det er muligt at angive en begrænsning på en creation del: class C creation make, create, creation{d, E} create_after_troubles feature I Ovenståe kan create_after_troubels kun anves i klienter D eller E. 65

8 Skabelse af et objekt i Eiffel: Cloning. Funktionen Clone returnerer et nyt objekt som er en kopi af parameteren. Clone skaber kun ét ny objekt, dvs. det kopierer kun et niveau. Cloning: var1, var2: C; --var er void do var2 := clone(var1); Før clone: var1 Efter clone: 123 Variationer af cloning: Deep-clone: Dublerer et helt objektnetværk ved rekursivt at skabe en isomorf kopi. var2 123 Copy: x.copy(y) kopierer indholdet af et objekt over i et eksistere objekt x. var1 123 Ved kopiering med operationen clone overtager det nyoprettede objekt originalens værdier, men der kopieres kun dette ene objekt. Evt. referencer til andre objekter i originalen kopieres. De refererede objekter kopieres ikke (rekursivt). Dette illustreres ved eksemplet til højre ovenfor. Når vi siger, at der kun oprettes ét objekt ved cloning tæller vi ikke statisk instantierede objekter med. Tal, tegn og andre statisk instantierede objekter kopieres altid af clone. Referencer kopieres, hvilket vil sige at der i ovenståe figurer oprettes en ny pil, men ikke et nyt objekt i en af pilen. Clone foretager både instantiering og initialisering. Der findes en operation, copy, som blot initialiserer indholdet af et eksistere objekt ud fra et andet objekt. I vores implementation af Eiffel er clone rent faktisk implementeret ved en instantiering af en klasse efterfulgt af en copy operation. Alle operationer som er omtalt på denne slide (og en hel del mere) er definerede i klassen ANY, hvorfra det viser sig at alle klasse arver. For helt præcises detaljer henvises til kapitel 19 i Eiffel the Language, som hedder Duplicating and comparing objects. 66

9 Reference- og værdi-semantik af assignment. variabel := udtryk Et assignment har reference semantik når både variabel og udtryk er af (uekspanderede) klassetyper. I de øvrige tilfælde har et assignment værdi semantik (enten clone eller copy). x y x v x v værdier kopieret over x, y: C; v, w: expanded C; do!!x.create; y := x; -- reference semantik x := v; -- v clones og ref. assignes til x v := x; -- ækvivalent med v.copy(x) v := w -- ækvivalent med v.copy(w) Vi taler om reference semantik når det udelukke er referencer der undersøges eller manipuleres. Og vi taler om værdi semantik når vi på en eller anden måde undersøger eller manipulerer selve objekterne. Figurerne til venstre viser situationen efter hvert af de første tre assignments i programfragmentet til højre. I tilfælde af assignment har vi kun reference semantik hvis både variablen (venstresiden af assignmentet) og udtrykket (højresiden) er af uekspanderede klassetyper. Denne situation er helt typisk for normale klasser i Eiffel. Vi har værdi semantik når både venstre- og højresiden af assignmentet er af ekspanderede typer. Flg. er et meget typisk eksempel (husk på, at integer er defineret som en expanded class, jf. kapitel 32 i Eiffel the Language ) n, m: integer; n := m Sidstnævnte assignment er altså ækvivalent med n.copy(m) hvilket afspejler vores forventning: Efter assignmentet er værdien af n en kopi af m. Ovenfor behandler vi for fuldstændigheds skyld videre de to blandede tilfælde, som begge er meget mindre typiske. 67

10 Reference- og værdi-semantik af ligheds-operationer. Når det giver mening (når to referencer sammenlignes) har = referencesemantik. I øvrige tilfælde har = værdisemantik, realiseret af equal. x = y equal(x, y) deep_equal(x, y) Reference equality. Når både x og y udtrykkene har referencer som værdier, returner x = y hvorvidt begge referencer peger på det samme objekt. Shallow equality. Operationen equal sammenligner om de to objekter, som x og y refererer til, strukturelt er ens. Kun ét objekt-niveau sammenlignes. Deep equality. Operationen deep_equal sammenligner om de to objekt-netværk, som x og y refererer til, strukturelt og rekursivt er ens. Tilbundsgåe strukturel lighed. x = y ==> equal(x,y) => deep_equal(x,y) Hvis værdien af x er en reference og værdien af y er et objekt (eller hvis både x og y som værdi har objekter), giver det ikke mening at lade = sammenligne referencer. Derfor benyttes semantikken af equal i dette tilfælde. Hvorfor anves formen equal(x,y) i stedet for dot-notationen x.equal(y) eller y.equal(x)? Førstnævnte notation er symmetrisk i behandlingen af de to parametre, hvorimod sidstnævnte kan siges at være mere på linie med objekt-orienteret operations-anvelse (hvor jo en operation anves på netop ét objekt (mål-objektet, eller på engelsk target). Den mere kontante begrundelse for at anve formen equal(x,y) fremfor dot-notation er, at x.equal(y) ikke kan bruges hvis x er void. Generelt kræves at target i target.op(parametre) er ikke-void. Med andre ord, kan man ikke sammenligne to void referencer med x.equal(y), men det kan man med equal(x,y). I vores implementation af Eiffel systemet findes en operation is_equal, som netop kaldes på formen: x.is_equal(y). Internt implementeres equal ved brug af is_equal. I forbindelse med nedarvning og redefinition viser det sig at være en stor fordel at håndtere lighedsoperationen ligesom alle andre operationer. 68

11 Det nuvære objekt. Et objekt kan både manipuleres "udefra" og "indefra" relativt til en klasse. Manipulation udefra: objekt.operation(parametre) Manipulation indefra: operation(parametre) Underforstået: operation udføres på current object. current.operation(parametre) Alternativ: det er gjort eksplicit, at der arbejdes på current object. Der kan være behov for at referere til det nuvære objekt som helhed, imodsætning til at referere til dets bestanddele. Returnere det nuvære objekt fra en funktion. Overføre det nuvære objekt som parameter til en operation. De fleste objekt-orienterede sprog har en notation, som tillader at man inde fra et objekt kan referere til objektet som helhed. I Eiffel benytter man current, i C++ this, i Smalltalk self. I Eiffel er current et udtryk. Det medfører, at man ikke kan ændre på værdien af denne "variabel". Nogle sprog insisterer på, at man indefra et objekt skriver current.feature for at referere til feature. Andre sprog, bl.a. Eiffel og C++, tillader en kortere (og mindre objekt-orienteret) notation, som på overfladen ser ud som procedurekald. Det forekommer ofte, at man har behov for at returnere hele det nuvære objekt fra en operation. Det er måske mindre typisk, at man overfører det nuvære objekt som parameter til en operation. Dette skyldes, at et operationskald altid foregår på et objekt, og hvis ikke andet er nævnt, sker operationskaldet på det nuvære objekt. Derfor bliver det nuvære objekt en implicit parameter til alle operationer, hvorpå operationen kaldes. Tidligere i dette kapitel så vi på cloning og kopieringsoperationer, som rent faktisk blot er operationer i en generel klasse ANY, som alle klasser arver fra. Når vi i et program skriver x := clone(y) mener vi altså x := current.clone(y). Ville det ikke have været mere objekt-orienteret i stedet for at skrive x := y.clone; altså at anve det eksistere objekt (der ønskes kopieret) som det objekt (target) hvorpå vi udfører operationen? Svaret er jo, men det samme forhold som ved equal gør sig gælde her. 69

12 Information hiding i Eiffel. I Eiffel defineres interfacet til klienter ved en kategorisering af features i en klasse. Muligheder: Klassens egenskaber er synlige fra alle klasser. Klassens egenskaber er kun synlige i nærmere definerede klasser. Klassens egenskaber er kun synlige i sig selv. Klassens egenskaber er private. class C creation feature -- features her er tilgængelige -- for alle klienter af C feature{a, B} -- features her er kun tilgængelige -- for A og B feature{c} -- features her er kun tilgængelige -- i C (dot-notation) feature {NONE} -- features her er private til C -- class C Denne slide konkretiserer Information hiding for Eiffel. Der mindes om, at vi i forrige forelæsning studerede information hinding mere generelt. Hvad er forskellen på (1) feature{c} og (2) feature{none} i det ovenståe? Lad os for at besvare dette spørgsmål studere en routine kaldet op i C (vi vil også antage, at C-op er en egenskab (feature) i klassen C) --operation i klassen C op() is local another: C do C-op; -- lovligt i både tilfælde (1) og (2) -- C-op kaldes på det nuvære objekt. another.c-op -- kun lovligt i tilfælde (1) Vi ser, at eksport til sig selv (tilfælde 1) er nødvig når en operation i en klasse via dotnotation påkalder sig en af sine egne operationer. En bemærkning om de features, der er listet i creation delen, og eksportstatus af features, som angivet af deres kategorisering under features. Der er ingen kobling mellem creationstatus og eksportstatus. En feature kan udnævnes til creatorprocedure under creation, og helt uafhængig af dette kan denne være en del af klientinterfacet, eller holdes skjult for klienter. 70

13 Det uniforme tilgangs-princip. Det er transparent for klienter, om en feature er lagret eller beregnet. class C feature a: integer class C feature a: integer is do -- beregning ; --a class D feature x: C; f (): integer is do x.create; result := x.a ; -- f Det kan ikke fra klienten D ses om feature a i klassen C refererer til en variabel eller til en parameterløs funktion På denne slide er der vist to udgaver af klassen C. I den øverste er feature a en variabel. a er altså lagret. I den nederste er feature a en funktion. a er altså beregnet, og der optages ikke lager i instanser af C til lagring af feature a. Det illustreres, at i klassen D, som er en klient af klassen C, kan man ikke se forskel på de to situationer. Som en væsentlig konsekvens af ovenståe kan man i klassen C ændre strategi fra lagring til beregning (eller omvt) uden at klienterne af C skal ændres af denne årsag. Dette er et aspekt af repræsentationsuafhængighed. 71

14 Features set fra klient klasser (2). Features Procedurer Abstraktioner med værdi Funktioner med parametre Parameterløse abstraktioner med værdi Funktioner uden parametre Attributter I forhold til den tidligere viste klassificering af features i Eiffel viser denne slide features set fra klientklassens synsvinkel. Pointen er, at funktioner uden parametre og attributter ikke kan skelnes fra et klient-synspunkt. Funktioner udtrykker en feature, hvis værdi beregnes, når funktionen kaldes. Attributter udtrykker features, hvis værdi lagres i instanser af klassen. 72

15 Routiner i Eiffel. proc(x: T) is local do func(x: T): S is local. do result := Parameter-mekanisme: Objekter, som er instanser af (uekspanderede) klasser overføres ved deres reference. Værdier af simple typer overføres som værdi parametre (call-by-value). Ændring af formelle parameter bindinger: Værdien bundet til en formel-parameter er "read only". Lokale routiner: Routiner i Eiffel kan ikke have indlejrede (lokale) routiner. I ovenståe eksempler er der vist hhv. en procedure med navn proc og en funktion med navn func. Ved kaldet proc(y) udvirker parameteroverførslen den samme effekt som assignmentet x:= y, set fra proc's indre synsvinkel. Man kan læse om parameter-mekanismen i Eiffel i 8.4 i OOSC. I "Eiffel the language" sammenlignes Eiffel parameteroverførsel med mere konventionel parameteroverførsel i afsnit At det formelle parameternavn x er read-only betyder, at hverken et assignment til x eller!!x.create er lovlig. Vær dog opmærksom på, at man uden problemer kan ændre på felterne i det objekt x peger på (naturligvis gennem de operationer, der er tilgængelige på dette objekt). Navne på lokale variable i en Eiffel routine skal være forskellige fra feature navnene i den omkringligge klasse. Dette er et ukonventionelt designvalg i Eiffel. Normalt tillader man i programmeringssprog navnesammenfald mellem det lokale niveau og det (mere) globale niveau med den mening, at lokale navne overskygger (mere) globale navn. Det er interessant at konstatere, at routiner ikke kan indlejres statisk i hinanden i Eiffel program-tekst. Dette kan opfattes som et tilbageskridt i forhold til sprog som Pascal og Modula, hvor dette er et vigtigt sprog-element. Hvis man overvejer, hvorfor Pascal og Modula understøtter indlejrede procedurer, hænger dette givetvis sammen med topdown udviklingsteknikken (som beskrevet tidligere) og trinvis forfining. Når en procedure forfines, er det nærligge af forfiningerne defineres som lokale procedurer eller funktioner. Vi har argumenteret for, at objekt-orienteret programmering er mere bottom-up agtig i natur, og centreret omkring data frem for funktion. Så ét incitament for lokale procedurer er faldet bort. (Dette er ikke det samme som at sige, at der ikke i Eiffel kan opstå situationer, hvor en routine er så omfatte, at man burde definere en mængde af lokale hjælpe-procedure. Men det kan man altså ikke). Iøvrigt kan man heller ikke indlejre klasser i hinanden. I det hele taget er såkaldt blokstruktur (indlejrede navne-rum) dårligt understøttet i Eiffel. 73

16 Scoperegler i Eiffel. Scope af Lokal variabel: routinen hvori variablen er defineret. Formel parameter: Attribut og routine: routinen hvori parameteren forekommer. klasse, hvori disse er defineret. Klasse: klasser, som indbefatter klassen i en klynge i universet. Scopereglerne i Eiffel hvad angår lokale variable og parametre er simple, idet routiner ikke kan indlejres i hinanden. Der vil dog kunne forekomme navnesammenfald mellem lokale variable og attributter i den omkringligge klasse. Eiffel forbyder dette! Eiffel er således meget konservativ med hensyn til traditionel blokstruktur og "huller i scope". Navnesammenfald mellem formelle parametre og lokale variable er, som i de fleste andre sprog, forbudt. Attributter og routiner har effekt i den klasse, hvori disse er defineret. Gennem eksport kan man også sige at attributter og routiner også har effekt i klient klasser; og gennem nedarvning har attributter og routiner effekt i subklasser. Vi vil dog ikke lade eksport til klienter og nedarvning til subklasser indfluere på vores opfattelse af scopereglerne. Scopet af en klasse er ikke bestemt af sproglige faktorer men af det univers, der defineres af sekvensen af klynger i en Eiffel system beskrivelse (ACE). I Eiffel skal navne ikke nødvigvis defineres før brug. Dette er nu en forskellighed i forhold til konventionerne i Pascal. 74

17 Konstanter af simple typer i Eiffel. En konstant er et symbolsk navn på en værdi. Værdien af en konstant kan ikke ændres under programudførelsen. Simple typer T: INTEGER, BOOLEAN, REAL, CHARACTER Const: T is konstantudtryk Eksempler: Big_int: integer is Ok: boolean is true Manifeste konstanter Konstanter optager ikke lagerplads på programmets udførelsestidspunkt på samme måde som variable. Brugen af konstanter som symbolske navne for faste værdier i programmer kan kraftigt anbefales. Hvis f.eks. værdien 1001 bruges mange gange i et program er det fornuftigt at have et symbolsk navn på dette tal, f.eks. antal_nætter. Dels øger det læsbarheden af programmet, dels bliver det muligt statisk at ændre værdien, ved at editere konstant definitionen. En konstant siges at være manifest i programmet, hvis vi har en synlig, direkte notation for konstantens værdi, som vi kan skrive i vores program. Konstantudtryk behandles nærmere i kapitlet "Kommandoer, Udtryk og IO i Eiffel". Vi taler ovenfor (og på dansk) om simple typer. I den engelske Eiffel literatur tales om basic types. De to betegnelser er synonyme. 75

18 Konstanter af klassetyper i Eiffel. Problem: Der findes ikke nogen notation i sproget, som gør det muligt at "nævne" et objekt. Løsning: Der findes ikke manifeste konstanter af klassetyper i Eiffel. (Undtagelse: STRING og ARRAY). Lad C være en klassetype. C_konstant: C is once result.create() Ved første udførelse af en "once funktion" F udføres kroppen af F, og den returnerede værdi V huskes. Ved efterfølge udførelser af F returneres værdien af V umiddelbart, uden at kroppen af F udføres. Evt. parametre til F har kun effekt ved det første kald af F. Det er vigtigt at få fat i, at kroppen af en once-funktion F højst kan udføres én gang i hele programmets levetid. Dette er uanset, om der findes mange objekter, hvori F er en operation. Eiffel-systemet husker på en eller anden måde returværdien fra funktionens første kald. 76

19 Delning af objekter af klassetyper i Eiffel. Konstant Konstant: C is once result.create() Uforanderlig Foranderlige Et objekt af typen C Alle referencer til 'konstant' (alle kald af "once funktionen") vil referere til det selvsamme objekt, som derfor bliver delt. Objektet er derimod mutérbart (ikke-konstant). Når man er i stand til at definere konstanter af såvel simple typer som klasse-typer vil man også være interesseret i at stille disse tilrådighed for udvalgte dele af et program, evt. hele programmet. Nedarvning kan anves til dette. I kapitlet "Nedarvning III" ser vi nærmere på dette. Se også evt. afsnit 13.2 i OOSC. 77

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

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

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

29 Opsamling af Objekt-orienteret Programmering.

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

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

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

30 Objekt-orienteret Programmering i Andre Sprog.

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

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

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

Metaklasser i Smalltalk.

Metaklasser i Smalltalk. 8 Metaklasser i Smalltalk. Motivation Metodeopslag Simple metaklasser Mere udviklede metaklasser Klasse- og metaklassehierarkiet Instantiering og initialisering Skabelse af klasser og metoder Oversigt

Læs mere

13 Objekt-orienteret Design.

13 Objekt-orienteret Design. 13 Objekt-orienteret Design. Analyse i forhold til design. Programbeskrivelse og designbeskrivelse. Sømløs udvikling. Design i forhold til OO Eiffel programmering. Kategorisering af klasser i et design.

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

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

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

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

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

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

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

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

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

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

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

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

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 fjj@noea.dk. Besvarelsen skal

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

8 Specifikation med Logiske Udtryk.

8 Specifikation med Logiske Udtryk. 8 Specifikation med Logiske Udtryk. Specifikation kontra program. Specifikation af funktioner. Specifikation af funktions-orienterede ADT-er. Integreret specifikation og program i Eiffel. Korrekthed af

Læs mere

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

It og informationssøgning Forelæsning oktober 2006 Jakob Grue Simonsen. Klasser It og informationssøgning Forelæsning 7 25. oktober 2006 Jakob Grue Simonsen Klasser Downey, Elkner & Meyers: Chapt. 12-14 Andersen & Simonsen: kap. 7 Vi har tidligere set, at Python tilbyder en række

Læs mere

Sproget Rascal (v. 2)

Sproget Rascal (v. 2) Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik

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

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

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

DM507 Algoritmer og datastrukturer

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

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

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

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

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

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

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber Klasser Grundlæggende Programmering med Projekt Peter Sestoft Tirsdag 2. september 2008 (Tak til Jakob Bardram for nogle slides) Dagens begreber Felt (field) Metode (method) Parameter (parameter) Sætning,

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

9 Introduktion til CLOS.

9 Introduktion til CLOS. 9 Introduktion til CLOS. Klasser Metoder Generiske funktioner Slots Nedarvning Class precedence lists Klasse-redefinition og objektopdatering Ændring af objekters klassetilhørsforhold Eksempler Kurt Nørmark,

Læs mere

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner Forelæsning 4.1 Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner finden findalle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Afleveringsopgave

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

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

Læs mere

Rettelser til Pilen ved træets rod

Rettelser til Pilen ved træets rod Rettelser til Pilen ved træets rod Hans Hüttel Pr. 12. juni 2003 Nedenstående rettelser er indsamlet af mig selv, Peter Poulsen, Martin Maach og ikke mindst Lars Schunk i løbet af foråret 2003. Simple

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

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

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

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

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

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

Spil Master Mind. Indledning.

Spil Master Mind. Indledning. side 1 af 16 Indledning. Spillet som denne rapport beskriver, indgår i et større program, der er lavet som projekt i valgfaget programmering C på HTX i perioden 9/11-98 til 12/1-99. Spillet skal give de

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

Læs mere

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

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype. 16 Træer. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype. Gennemløb af binære træer. Træer i Eiffel. 229 Definition af et træ.

Læs mere

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

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

Introduktion til Funktionsorienteret Programmering.

Introduktion til Funktionsorienteret Programmering. Introduktion til Funktionsorienteret Programmering. Sammenligning med det imperative paradigme Assignment kontra navnebinding. Iterative kontra rekursion. Introduktion til højereordensfunktioner. Evalueringsrækkefølge.

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

Pointen med Funktioner

Pointen med Funktioner Pointen med Funktioner Frank Nasser 0. april 0 c 0080. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk: Dette er en

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

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

Basale forudsætninger. Sortering ved fletning med tre bånd, i to faser. 25 Sortering III. Basale forudsætninger. Sortering ved fletning med tre bånd, i to faser. Sortering ved fletning, med fire bånd, i én fase (balanceret fletning). Polyfase fletning med tre bånd. Generaliseret

Læs mere

SWC Elementer i klassedefinition

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

Noter til Perspektiver i Matematikken

Noter til Perspektiver i Matematikken Noter til Perspektiver i Matematikken Henrik Stetkær 25. august 2003 1 Indledning I dette kursus (Perspektiver i Matematikken) skal vi studere de hele tal og deres egenskaber. Vi lader Z betegne mængden

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Optimeringsproblem: man ønsker at finde bedste den kombinatoriske struktur (struktur opbygget af et endeligt antal enkeltdele) blandt mange mulige. Eksempler:

Læs mere

Real-time programming safety in Java and Ada

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

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

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX IT -Eksamen Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX [Vælg en dato] Indhold Indledning... 2 Teori... 3 Hvorfor dette design... 4 Produktet... 4 Test og afprøvning... 9 Konklusion... 10 Indledning

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

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

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

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

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

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

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13%

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13% Samuel Alberg Thrysøe, PhD, PostDoc, Kontakt info: Email: sat@iha.dk, Tlf: +45 25533552 2 4. 5 Waveform Chart Waveform Graph XY Graph Indicator Graph 4. 33% Waveform Chart Waveform Graph XY Graph Indicator

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

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

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Kursusgang 8 OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Matematik Arkæologi Eksempel Semantik Bims (Basic Imperative Statements / Begrænset Imperativt Sprog) Abstrakt syntaks Transitionssystemer

Læs mere

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4 LØKKER METODER C S HISTORIE Grundlæggende programmering Lektion 4 1 LEKTIER UML struktur diagrammer om biler 2 OPERATORER Syntaks til at udføre forskellige beregninger og handlinger Booleans og hvorfor

Læs mere

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden. Programmering 1999 Forelæsning 5, tirsdag 14. september 1999 Oversigt Mere om klasser og objekter Klassefelter: static Konstante felter: final Indkapsling og synlighed: private og public Overlæsning af

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

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

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

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

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

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

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

12 Metaobjekt protokoller i CLOS.

12 Metaobjekt protokoller i CLOS. 12 Metaobjekt protokoller i CLOS. Begreber og problemer. Sprog designrum. Niveauer i CLOS. Programobserverende protokoller. Programskabende protokoller. Sprogudvidende protokoller. Eksempler. Kurt Nørmark,

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 20. april, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Assignment #5 Toolbox Contract

Assignment #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 mere

It og informationssøgning Forelæsning december 2006 Jakob Grue Simonsen. Diverse emner af almen interesse

It og informationssøgning Forelæsning december 2006 Jakob Grue Simonsen. Diverse emner af almen interesse It og informationssøgning Forelæsning 12 6. december 2006 Jakob Grue Simonsen Diverse emner af almen interesse 1 Gemme objekter til filer I python skal en fil på disken åbnes, før man kan læse eller skrive

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Klassevariabler og klassemetoder Levetid for variabler og parametre Virkefeltsregler Projektopgave Kaninjagt Lommeregner (for MAT studerende) Klassevariabler og klassemetoder

Læs mere

Efterslægtstavlen kan også udskrives som ren tekst med indrykning: Tonnes ~Ursula ina ~Morten Ferdinand Ida Diderich Oluf ~Pia Grethe Jonna Hedvig Rud

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

20 Filer og indekser.

20 Filer og indekser. 20 Filer og indekser. Filbegrebet. Sekventielle og direkte filer. Filer i Eiffel. Eksternt dataområde for objekter. Lageradminstration og postlængder. Indeksbegrebet. Konsekutiv, kædet og vilkårlig organisering.

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

Læs mere

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard Mandags Chancen En optimal spilstrategi Erik Vestergaard Spilleregler denne note skal vi studere en optimal spilstrategi i det spil, som i fjernsynet går under navnet Mandags Chancen. Spillets regler er

Læs mere

Mark Jeays simple solution to the Rubik s cube oversat og redigeret af Jess Bonde. -

Mark Jeays simple solution to the Rubik s cube oversat og redigeret af Jess Bonde. - Mark Jeays simple solution to the Rubik s cube oversat og redigeret af Jess Bonde. jess@rubiks.dk - http://www.rubiks.dk Trin 0 Introduktion & notation Trin 1 De tre øverste sidestykker Trin 2 Hjørner

Læs mere