Objektorienterad programmering i Racket

Storlek: px
Starta visningen från sidan:

Download "Objektorienterad programmering i Racket"

Transkript

1 Objektorienterad programmering i Racket Rasmus Andersson lätt utökat av Anders M. L. Februari 2016 Innehåll 1

2 1 Inledning Detta kompendium är skrivet som en resurs för kursen TDDC74 Programmering - abstraktion och modellering vid Linköpings universitet. Tanken är att det ska introducera de grundläggande begreppen inom objektorienterad programmering och ge exempel på implementation i Racket. 1.1 Vad detta är, och inte är Kompendiet ska ge tillräckliga kunskaper för att lösa laboration 4 i 2015 års upplaga av kursen (och att börja på ett objektorienterat projekt). Därför utelämnar jag medvetet delar som annars kan anses relevanta. För den som är intresserad av fler detaljer rekommenderar jag Flatt m.fl.[? ] som finns att läsa på Det bör dock noteras att den är skriven för en (väldigt närliggande) föregångare till Racket. Den ska dock fungera utmärkt även i dagens Racket. Jag kan även rekommendera kapitel 13 i The Racket Guide[? ] som till stor del är baserad på den tidigare nämnda artikeln. 1.2 Att läsa detta dokument Vi börjar med att definiera de olika begreppen och de viktiga delarna inom objektorienterad programmering. Därefter följer ett exempel på hur vi skapar klasser och objekt. Om du bara vill ha en mall, kan du gå direkt till detta exempelavsnitt. 2

3 2 Var är ett objekt? Vi kan, lite slarvigt, se ett objekt som en ihopgruppering av variabler och procedurer som på något sätt hör ihop, och som har en väldefinierad roll i världen. Men det säger kanske inte så mycket. Istället börjar vi närma oss konceptet genom ett exempel på en hantering som verkligen är motsatsen till objektorienterad, och ser hur den kan förbättras. 2.1 Avskräckande exempel Det kan vara bra att ta sig genom hela detta exempel. Vill du bara se slutresultatet, och hur man använder mallar, gå till sista delen. Men det kan vara bra att se lite varnande exempel på vägen, för att förstå varför detta kan vara användbart En mängd fristående variabler Låt säga att vi vill konstruera att enkelt bilspel med 10 bilar. Varje bil har ett antal egenskaper som x-position, y-position, x-hastighet, y-hastighet, märke, färg, etc. Vi gör en första, naiv, approximation av detta: (define car-1-x-pos 12) (define car-1-y-pos 3) (define car-1-x-velocity 2) (define car-1-y-velocity 0) (define car-1-brand "VOLVO") (define car-1-color white) (define car-2-x-pos 37) (define car-2-y-pos 3) (define car-2-x-velocity 3) (define car-2-y-velocity 7) (define car-2-brand "SAAB") (define car-2-color red) (define car-3-x-pos 99) (define car-3-y-pos 24) (define car-3-x-velocity 0) (define car-3-y-velocity 0) (define car-3-brand "Toyota") (define car-3-color black) ;; Flytta car-1 ett steg till höger (set! car-1-x-pos (+ car-1-x-pos 1)) 3

4 ;; Flytta car-3 ett steg till vänster (set! car-3-x-pos (- car-3-x-pos 1))... Detta är ett ganska litet exempel, men redan vid 10 bilar har vi nu 60 variabler att hålla reda på. Att ha alla dessa variabler globala innebär stora risker för misstag och bidrar till en väldigt ostrukturerad kod. Det är här rätt lätt att falla för frestelsen att bara slänga upp ett antal variabler globalt och sedan ändra dem med hjälp av set! när vi exempelvis vill flytta bilen ett steg till höger. Detta resulterar dock snabbt i stora mängder kod som både är oflexibel och jobbig att felsöka. Vi har också väldigt svårt att skapa en procedur som kan ändra på positionen av en viss bil. Vill vi uppdatera alla tio bilarna, måste vi göra tio kodrader där vi inkluderar bilarnas namn Ett steg på vägen, muterbara objekt En lätt förbättrad variant vore att vi skriver ett sätt att skapa och hantera bilar en i taget, istället för att varje bil är en uppsättning lösa variabler. (define (make-car x y vx vy brand color) (mlist x y vx vy brand color)) (define (x-pos car-obj) (mcar car-obj)) (define (change-x-pos! car-obj new-x) (set-mcar! car-obj new-x)) ;;... fler funktioner... (define car1 (make-car "VOLVO" white)) (define car2 (make-car "SAAB" red)) (define car3 (make-car "Toyota" black)) (change-x-pos! car1 (+ (x-pos car1) 1)) ;; Flytta bil 1 ett steg till höger (change-x-pos! car3 (- (x-pos car3) 1)) ;; Flytta bil 3 ett steg till vänster Vi har nu fångat en viktig del: all data som kan ändras hos en bil finns samlad på ett enda ställe. All information som rör bil 1 finns i car1, all information som rör bil 2 finns i car2 och så vidare. Vi kan alltså till exempel skapa en procedur som tar in en bil, och ändrar på just den bilen (utan att veta vad den heter). (define (move-car! car-obj steps) 1 Om man inte använder makron, vilket ligger utanför denna kurs. Att lösa just detta problem med makron är dock att börja i helt fel ände. 4

5 (change-x-pos! car-obj (+ (x-pos car-obj) steps))) (move-car! car1 1) Det vi har gjort hittills liknar ADT-beskrivningen i laboration 2 väldigt mycket. Vi buntar ihop information, och har ett sätt att ta ut den som inte är beroende av att man vet exakt hur den lagras (man skriver x-pos, och struntar i om positionen lagras i en lista, sträng, vektor,... ). Skillnaden hittills är att man tänker sig att varje bil har ett tillstånd som kan ändras. Vi kan gå in och ändra i en viss bils position, snarare än att skapa en helt ny bil som har den nya hastigheten. Samtidigt har vi inte samlat precis all information som rör en viss bil. För att hämta ut information om en bils x-position behöver vi proceduren x-pos. För att ändra på en bils x-position behöver vi change-x-pos!. Och så vidare. Nu hittar vi ett sätt att bunta ihop all information om ett objekt 2.3 Att skriva mallar Vi bygger nu upp en mall som gör att allt som berör en viss bil, hamnar i bilen själv. Vi gömmer alltså både undan hur informationen lagras (som vi gjorde här ovan), och gör alla procedurer som behövs för att hämta och modifiera information till något som finns i ett bilobjekt. Målet är att kunna skriva saker som (send car1 move 1), och låta all hantering som gör att bilen flyttas finnas i själva car1. Därför skriver vi en mall, som innehåller all den information som varje bil ska innehålla. Denna mall kallas för klass och är gemensam för alla likadana objekt. För bilexemplet ovan kan vi skapa en klass car% som fungerar som mall för samtliga bilar. I klassen definierar vi vilka egenskaper som objekten ska ha (en bil ska ha en x-position), medan själva värdena hos bestäms när de enskilda objekten (bilarna) skapas (car1 ska ha x-position 12 till att börja med, car2 ska ha x-position 37 och så vidare) Med objektorientering Genom att lägga ned lite mer arbete initialt med att skapa en klass får vi kod som blir kortare, är mycket lättare att utöka och dessutom enklare att felsöka. I längden blir det med andra ord betydligt mindre arbete. 5

6 Så här ser vår första utkast till mall ut (vi kommer att bygga ut exemplet senare): (define car% (init-field x-pos ;; lokala variabler y-pos x-velocity y-velocity brand color) (define/public (move distance) (set! x-pos (+ x-pos distance))) (define/public (get-position) (cons x-pos y-pos)) (super-new))) (define car1 (new car% [x-pos 12] [y-pos 3] [x-velocity 2] [y-velocity 0] [brand "VOLVO"] [color black])) ;; det finns alternativa sätt att använda mallen för att skapa bil-objekt (define car2 (make-object car% "SAAB" red)) (define car3 (make-object car% "Toyota" black)) ;; Flytta car-2 ett steg till höger (send car2 move 1) ;; Skriv ut positionen för car-3 före move (send car3 get-position) ; -> (99. 24) ;; Flytta car-3 tre steg till vänster (send car3 move -3) ;; Skriv ut positionen för car-3 efter move (send car3 get-position) ; -> (96. 24) 2.4 Lite filosofi - var sak på sin plats Här innan har vi använt objektorientering som något slags synonym till att bunta ihop information. Det finns såklart mycket mer att säga än så (och ni kommer att gå in djupare på detta i senare kurser). Än så länge räcker det att säga att objektorientering handlar om att programmera med objekt som 6

7 är i ett visst tillstånd 2. Varje bil har kunskap om sin position, hastighet och så vidare. Flyttar vi på en bil, är det den bilen som uppdaterar sin lokala information om var i världen den befinner sig. är isolerade från varandra. När vi bygger objektorienterade program, ger vi de olika objekten ansvar att hålla reda på sin egen information. En bil vet om sin, och ingen annans, position. Och när vi designar programmet skapar inte (till exempel) något slags stor tabell som innehåller alla bilars positioner. Detta är inte nödvändigtvis bättre eller sämre, utan det sätt som man använder när man objektorienterar. vi kan kommunicera med på ett bestämt vis, med bestämda följder. Det andra delar av programmet behöver veta om en bil, är att man kan fråga den move 1 om man vill att den ska flytta 1 steg, och att om man frågar den get-position så kommer den att svara med data på formatet (x-position. y-position). Hur bilen fungerar internt - hur positioner lagras till exempel - är dess ensak. kan bete sig på egna vis. Vi vet att en bil kommer att flytta sig när man ber den flytta sig. Men vi skulle kunna skapa två olika slags bilar, som hanterar kommandot flytta dig på olika vis. I ADT-fallet med muterbara strukturer som vi hade ovan, betér sig alla bilar likadant. Det kravet släpper vi på här. I senare avsnitt kommer vi att diskutera flera andra viktiga koncept (som arv, vilket ni inte behöver kunna i laboration 4), så se detta som det absolut minsta ni behöver veta för kursen. 3 Klasser Nu när vi har etablerat vad ett objekt är kan vi börja titta på de mallar efter vilka objekten konstrueras, nämligen klasser. En klass kan ses som ett kokboksrecept från vilken objekt av samma typ skapas. I Racket är konventionen att skriva klassnamnen med ett procenttecken (%) som sista tecken för att förtydliga att det rör sig om en klass. Dessutom finns generellt för alla språk konvetionen att namnge klasser med substantiv i singularform. Exempel på klassnamn kan vara rymdskepp%, spelare%, sorterare%, kokbok%, etc. 2 Man säger att de har tillstånd /state 7

8 3.1 Exemplet car% För att exemplifiera de olika delarna av en klass använder vi en något utökad version av bilexemplet. Nedan kommer vi att gå igenom de olika delarna av exemplet, och förklara dem närmare. (define car% (init-field x-pos y-pos x-velocity y-velocity brand [color black]) (field [age 0]) ;; Tests if the car is old. (define/public (old?) (> age 50)) ;; Calculates the x-position after moving. (define/private (after-move steps) (+ x-pos (* x-velocity steps))) ;; Checks if it is legal to move n steps. (define/private (legal-move? n) (>= (after-move n) 0)) ;; Executes a move, if legal. (define/public (move steps) (set! age (+ age 1)) (cond [(old?) (error "Car is old and busted!")] [(legal-move? steps) (set! x-pos (after-move steps))] [else (error "Outside!")])) ;; get the x position of the car (define/public (get-x) x-pos) ;; --- Förenklad hantering. Enbart flytt i x-led --- (super-new))) 8

9 3.2 Fält Fält lagrar de värden som ett objekt håller reda på. Här är de intressanta delarna av koden: (init-field x-pos y-pos x-velocity y-velocity brand [color black]) (field [age 0])...) De variabler eller egenskaper som är kopplade till ett objekt kallas fält. Vilka värden fälten har kommer att variera mellan olika objekt. I vårt exempel har varje bil sin egen x-position, y-position,... och en ålder (age). I Racket finns två olika typer av fält som vi kan använda: field och init-field. Skillnaden mellan dessa är att init-field är initierbara. Detta är alltså värden som vi kan skicka med när vi skapar ett nytt objekt (information som att car1 har x-position 12 från början). 3 Vanliga field har däremot ett fördefinierat värde som (från början) är detsamma för alla instanser av en klass. Varje bil börjar i vårt exempel med åldern 0. Värdena kan däremot nås/ändras under tidens gång. När vi ändrar värdet på ett fält för ett visst objekt, betyder det inte att alla objekt av den aktuella klassen ändras. Vi kan till exempel uppdatera hastighet och ålder för car1 utan att car2 påverkas, även om båda är skapade utifrån samma mall. I exemplet har vi också en parameter som fått klamrar runt sig, och ett värde. Detta innebär att den har ett defaultvärde. Om man inte anger vilken färg en bil ska ha (när man skapar den), blir den automatiskt svart. Alla de andra parametrarna måste man ange värden för, när man skapar bilen. 3 Formellt säger vi att dessa fält får sina värden från inparametrarna vid initiering av en klassinstans. 9

10 3.3 Metoder Ett objekts metoder är dess lokala procedurer. ;;... (define/public (old?) (> age 50)) (define/private (after-move steps)... ) (define/private (legal-move? n)... ) (define/public (move steps)... ) (define/public (get-x) x-pos)...)) En procedur som tillhör ett specifikt objekt brukar kallas för en metod. Dessa definieras på ungefär samma sätt som vanliga procedurer, och placeras inuti själva klassdefinitionen. Detta gör att varje objekt sedan kommer att ha tillgång till dem. Varje bil kommer exempelvis att ha tillgång till legal-move? eller old?. Vi kan applicera/köra vissa procedurer genom send: > (send car1 get-x) 12 > (send car1 move 10) ;; argumentet kommer direkt efter > (send car1 get-x) public och private Vissa metoder vill man göra tillgängliga utåt, och låta andra delar av programmet nå. I vårt bilexempel har vi en metod move för att flytta vår bil i x-led på ett kontrollerat sätt, som definitivt bör vara tillgänglig. Detta syns på att vi skriver define/public. Vi har också hjälpfunktioner som egentligen bara är användbara internt när en bil beräknar var den ska flytta sig (om den ska flytta sig) - predikatet legal-move? och funktionen after-move. Dessa behöver inte synas utåt, och anges som privata. Detta innebär (ungefär) att andra delar av programmet inte kan använda dem. Alla publika metoder kan anropas utifrån med hjälp av send som beskrivs i avsnitt??. Om man inte anger någon åtkomsttyp (och skriver define) så blir metoden ändå privat men det tillhör god sed och förbättrar läsbarheten att förtydliga detta genom define/private. 10

11 Det finns ett flertal andra åtkomsttyper som kan användas (se reference/createclass.html) men privata och publika metoder är de absolut vanligaste formerna att använda. I laboration 4 kommer du inte behöva fundera över några andra. 3.4 Selektorer och Mutatorer ;;... (define/public (move steps) (set! age (+ age 1)) (cond [(old?) (error "Car is old and busted!")] [(legal-move? steps) (set! x-pos (after-move steps))] [else (error "Outside!")])) (define/public (get-x) x-pos)...)) En selektor är en metod som returnerar värdet av ett fält, medan en mutator är en metod som ändrar värdet av ett fält. Dessa metoder är oftast väldigt simpelt uppbyggda och returnerar/ändrar bara värdet på ett fält utan ytterligare beräkningar. I vissa fall kan man vilja utföra en del beräkningar i dessa också, men det är ofta inte nödvändigt. För att tydliggöra att en metod är en selektor eller mutator brukar dessa metoder namnges med get- respektive set- följt av fältets nman. För att till exempel returnera och änrdra en variabel som innehåller ett objekts hastighet kan vi därmed skapa selektorn get-velocity och mutatorn set-velocity. I vårt bilexempel är get-x en typisk selektor. Rena mutatorer kan dock vara farliga då de lätt kan resultera i underliga beteenden (exempelvis att en bil teleporteras från en plats till en annan). Därför har vi istället för en ren set-x! skrivit en metod move som hanterar det på ett mer kontrollerat sätt. Den ser till så att vår bil inte är för gammal att använda, att bilen inte hamnar utanför vårt koordinatsystem, och garanterar att att all förflyttning sker relativt den nuvarande positionen this Varje objekt kommer att ha tillgång till något som representerar sig självt. Detta kan tyckas lite onaturligt till att börja med, men är rätt praktiskt. Om två objekt ska känna till varandra på något vis (i laboration 4 behöver ni få rum att känna till vilka figurer som finns där, och få figurerna att känna till vilket rum de står i, exempelvis), är det extremt användbart. I en klassdefinition 4 Det finns särskilda Racketprocedurer för att ändra värden på fält utifrån. Dessa bör överlag undvikas. 11

12 kallas denna hänvisning till det egna objektet för this. Vi har ingen naturlig användning av det i exemplet ovan, utan skapar ett trivialt exempel: (define trivial% (init-field name) (define/public (get-name) name) (define/public (get-object) this) ;; returnerar själva objektet (super-new))) Användningsexempel: > (define apa (new trivial% [name "Apan"])) > (send apa get-name) "Apan" > (send apa get-object) (object:trivial%...) > (send (send apa get-object) get-name) "Apan" > (eq? apa (send apa get-object)) ;; är det exakt samma objekt? #t 4 Att skapa instanser av en klass Instansiering handlar om att skapa objekt av en viss klass. I vårt exempel handlar detta om steget där vi använder bil-mallen för att skapa de enskilda bilarna (car1, car2,... ). Objekt kan instansieras på lite olika sätt. Ett sätt är att använda new på formen nedan: (new klassnamn% [parameternamn1 värde1] [parameternamn2 värde2] [parameternamn3 värde3]) Den största fördelen är att det blir väldigt tydligt vad som är vad och vilka parametrar som används. Dessutom spelar ordningen man anger parametrarna i ingen roll. De fält som har defaultvärden/standardvärden kan helt enkelt utelämnas. Nackdelen är att det kan bli ganska mycket kod, framför allt om man ska skapa många instanser av samma klass. Vissa klasser har även vissa parametrar som måste anges, men det ges det bra felmeddelanden om. 12

13 Ett annat sätt att instansiera en klass är med hjälp av make-object. Där anger man bara värdet på parametrarna. Detta gör att ordningen börjar spela roll. Vilken ordning parametrarna ska komma i för inbyggda klasser (och för den delen vilka möjliga parametrar som finns) anges i dokumentationen ( För de klasser vi själva skapat anges parametrarna i samma ordning som i klassdefinitionen (init-field-delen). Detta blir kompaktare i koden, men samtidigt mycket otydligare. (make-object klassnamn% värde1 värde2 värde3) Man kan även använda instantiate som är en kombination av new och make-object. Vissa klasser har även egna konstruktorer som har andra egenskaper än de övriga. Exempelvis finns det en make-bitmap som skapar en instans av klassen bitmap%. 5 Kommunicera med objekt Kommunikationen med objekt sker i Racket genom kommandot send på formen (send objekt kommando <parameter1> <parameter2>...) Detta kan användas för att anropa de olika metoder som är kopplade till objekten. Några exempel på hur sådana kommandon kan se ut är: (send rymdskepp get-velocity) (send user set-name "James Bond") (send calculator multiply 2 3 8) 6 Arv (ingår 2016!) 6.1 Motivering I vårt bilexempel använder vi genomgående en typ av bil. I ett bilspel skulle vi kanske vilja ha flera olika typer av bilar, alla med sina egenheter (Bondbilar skjuter raketer, Trabis går sönder lätt). Däremot ska de alla kunna göra det bilar gör, och programmet ska kunna kommunicera med dem på det sätt som väntas av bilar. Istället för att ägna oss åt att kopiera en större mängd kod (vilket, utöver att vara fult, dessutom tar bort all form av logisk struktur), vill vi alltså uttrycka något slags koppling mellan car% och bond-car%. Detta gör vi genom att låta egenskaper gå i arv. 13

14 Vi definierar först en car%-klass, och beskriver sedan vad som skiljer en bond-car% från en car%. Vi säger att car% är föräldraklass till bond-car%, och att bond-car% ärver egenskaper från den. Andra uttryck är superklass / subklass eller basklass / subklass. Vid konstruktion av större program används ofta ganska stora arvshirarkier med ett flertal nivåer. Det kan också förekomma mer komplicerade arvs-strukturer. Om en bond-bil% ska kunna åka under vatten, kanske den ärver egenskaper från såväl car% som boat%. Detta för med sig en del intressanta detaljproblem. I vår beskrivning begränsar vi oss till enkla arv (där varje klass som mest har en förälder). 6.2 Exempel: utökad klass Vi vill definiera ett slags bil som har alla egenskaper som en vanlig bil har, och dessutom två extra: (define bond-car% (class car% (inherit move) (define/public (shoot) pew-pew) (define/public (boosted-move) (move 1000)) (super-new [brand aston-martin]))) Användning visar hur det fungerar: > (define cdr007 (new bond-car% [x-pos 1] [y-pos 1] [x-velocity 100] [y-velocity 200])) > (send cdr007 boosted-move) ;; extrametoden vi definierade > (send cdr007 get-x) > (send cdr007 move 15) ;; visar att vanliga car%-metoder fungerar > (send cdr007 get-x) > (send cdr007 shoot) pew-pew Notera att vi var tvungna att skriva (inherit move) för att kunna använda det direkt Överlagring En subklass ärver normalt alla de metoder som föräldraklassen innehåller. Ofta vill vi dock omdefiniera metoden för att uppfylla en mer specifik funktion i subklassen. Detta görs genom att skriva 5 Vi skulle tekniskt sett kunna ersätta det med (send this move 1000), vilket passas vidare till car%-metoden. Det är dock fult. 14

15 (define/override... följt av den nya definitionen. Exempel: (define trabi% (class car% (inherit-field age) ;; vi vill kunna ändra på en bils ålder (define/override (move steps) (when (> steps 2) (set! age 99999)) ;; om man tar många steg, dör bilen (super move steps)) ;; vi kan här kalla på föräldraklassens move (super-new [brand trabant]))) En testkörning: > (define wf1989 (new trabi% [x-pos 0] [y-pos 0] [x-velocity 0] [y-velocity 0])) > (send wf1989 move 1) > (send wf1989 move 10).. Car is old and busted! En överlagrad metod får samma åtkomsttyp som den ursprungliga metoden om inte annat anges genom att man lägger till /public eller /private. Detta kan man naturligtvis lägga till även om åtkomsten ska vara densamma för att öka läsbarheten. Det finns mycket mer att säga om överlagring och arv. Läs mer i Racket Guide [? ]. 6.4 Arv i flera nivåer Det finns inga hinder mot att skapa flera nivåer av arv: (define powertrabi% (class trabi% ;; vi ärver alla egenskaper en trabi% har (define/public (shoot) pow-pow) (super-new [x-velocity 100] [y-velocity 100] [color black]))) > (define pt1989 (new powertrabi% [x-pos 0] [y-pos 0])) > (send pt1989 shoot) ;; definierad i powertrabi% pow-pow > (send pt1989 move 1) ;; använder trabi%-move > (send pt1989 get-x) ;; get-x definierad i car% 100 > (send pt1989 move 3) ;; vi använder faktiskt trabi%:s move, och inte car%:s.. Car is old and busted! 15

16 7 Exempel på en enkel klass Nedan följer ytterligare ett exempel på hur vi kan bygga upp en klass i Racket. Ordningen är inte helt viktig. Klassen i fråga har inga praktiska användningsområden, men den illustrerar de olika delar som tagits upp i de tidigare avsnitten. Det första vi måste göra är att ange vilken klass som vår klass ska ärva ifrån. Samtliga klasser ärver egenskaper från object%, eller från någon (direkt eller indirekt) subklass till object%. Kodsegmentet nedan talar om att vi vill skapa klassen my-class% som ärver från object%. (define my-class%... )) Därefter deklarerar vi klassens fält. De fält som anges som field har som sagt fördefinierade värden, medan de som anges som init-field anges vid instansiering av klassen. Fundera på vad som ska vara unikt (från början) för ett objekt, och skriv sådana fält som init-field. Standardvärden anges inom klammerparenteser. Om vi inte anger något värde på fältet vid instansiering, kommer det att få detta värde istället. (define my-class% (init-field obligatory1 obligatory2 [optional1 3.14] [optional2 "Pi"]) (field [stat1 "TDDC"] [stat2 74])... Nästa steg är att definiera de metoder klassen ska ha. Om du vill hämta ut information från ett 16

17 objekt, skriv selektorer för detta (som get-stat nedan). (define my-class% (init-field obligatory1 obligatory2 [optional1 3.14] [optional2 "Pi"]) (field [stat1 "TDDC"] [stat2 74]) (define/private (add-two n) (+ n 2)) (define/public (get-stat) (cons stat1 stat2)) (define/public (next-course) (set! stat2 (add-two stat2)))... Nu återstår bara en sista sak innan vi har en fungerande klass. Vi måste lägga till ett anrop till super-new. Denna rad kan läggas vart som helst i klassdefinitionen, men läggs lämpligen först eller sist. Detta gör det möjligt att instansiera klassen med hjälp av new och make-object. (define my-class% (init-field obligatory1 obligatory2 [optional1 3.14] [optional2 "Pi"]) (field [stat1 "TDDC"] [stat2 74]) (define/private (add-two n) (+ n 2)) (define/public (get-stat) (cons stat1 stat2)) (define/public (next-course) (set! stat2 (add-two stat2))) (super-new))) Nu har vi en helt fungerande klass, även om just detta exempel inte kan användas till något vettigt. Såhär skulle man exempelvis kunna skapa två instanser av klassen: (define instans1 (make-object my-class% )) (define instans2 (new my-class% [obligatory1 1] [obligatory2 2] [optional2 "Pie"])) Komandon skickas till objekten på precis samma sätt som för de inbyggda klasserna. Med de instanser som skapades ovan kan vi exempelvis göra följande: 17

18 (send instans2 next-course) (send instans1 get-stat) -> (TDDC. 74) (send instans2 get-stat) -> (TDDC. 76) (send instans1 add-two 7) -> error Observera att om vi försöker ge ett kommando om att använda den privata metoden add-two kommer detta resultera i ett felmeddelade då den inte är känd i den globala omgivningen. Om den önskade metoden tar ett eller flera inargument anges de efter metodnamnet, så som beskrivs i multiply exemplet i avsnitt??. 18

Objektorienterad programmering i Racket

Objektorienterad programmering i Racket Objektorienterad programmering i Racket Rasmus Andersson och Anders M. L. Mars 2017 Ursprungligt utkast av R.A. inför kursen 2015. Innehåll 1 Inledning 2 1.1 Vad detta är, och inte är......................................

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015 TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS 180226 Idag (ADT), OOP i Racket, labb 5 2 Allmän info Duggan. Laboration 4 deadline. Planering framöver Muddy cards (nästa timme) 3 Lite repetition ADT

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2012-01-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 10 januari

Läs mer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-08-17 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Onsdag 17 augusti

Läs mer

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning 2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten

Läs mer

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

TDDC74 - Lektionsmaterial C

TDDC74 - Lektionsmaterial C TDDC74 - Lektionsmaterial C Lektioner innehåller uppgifter av varierande slag. En del är mer diskussionsartade, andra mer experimentella. Ni behöver inte lämna in eller visa upp lösningarna på dessa för

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016 TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte ordnade i någon

Läs mer

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Lab 04 Muterbara strukturer, omgivningar TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden

Läs mer

Laboration 1: Figurer i hierarki

Laboration 1: Figurer i hierarki Laboration 1: Figurer i hierarki Bakgrund Två grundläggande tekniker i objektorienterad konstruktion är arv och komposition. Mål Laborationen har flera avsikter: 1. Ge kunskaper i hur program kan organiseras

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015 TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

Objektorienterad programmering. Grundläggande begrepp

Objektorienterad programmering. Grundläggande begrepp Objektorienterad programmering Grundläggande begrepp Hur beskriver vi objekt? Vill ha en representationsoberoende beskrivning Abstrakta datatyper! Data Operationer Objekt Representerar en verklig eller

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering, abstraktion och modellering DUGGA 3 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 3 Torsdag 4 mars 2010 kl 8-10 Namn: Personnummer:

Läs mer

Objektorientering: Lagring och livstid

Objektorientering: Lagring och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Objektorientering: Lagring och livstid Tre sorters variabler Tre sorters variabel (1): Lokal 2 Lokal variabel Deklareras inuti en metod Vid varje anrop

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta

TDDC74 Programmering: Abstraktion och modellering Datortenta TDDC74 Programmering: Abstraktion och modellering Datortenta - 2017-08-26 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten? Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2018-06-07, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-01-11 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 11 januari

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2019-05-27, kl 08-12 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-06-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Fredag 10 juni

Läs mer

Imperativ programmering. Föreläsning 4

Imperativ programmering. Föreläsning 4 Imperativ programmering 1DL126 3p Föreläsning 4 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering

Läs mer

Objektorientering: Lagring, räckvidd och livstid

Objektorientering: Lagring, räckvidd och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Objektorientering: Lagring, räckvidd och livstid Tre sorters variabler, två sorters metoder Räckvidd och livstid 2 Variabler (lokala och medlemsvariabler)

Läs mer

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Objektorienterad Programmering (OOP) Murach s: kap 12-16 Objektorienterad Programmering (OOP) Murach s: kap 12-16 2013-01-28 1 Winstrand Development Objektorienterad Programmering Förkortas OOP Objektorientering innebär att man delar in koden i olika block,

Läs mer

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall

Läs mer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt Föreläsning 4 Klasser Och Objekt Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras

Läs mer

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum:

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: 2013-03-12 Lösningsförslag Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: 2013-03- 12 Läs alla frågorna först och bestäm dig för den ordning som passar dig

Läs mer

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och Innehåll u OOP snabbintroduktion u Datatyper u Uttryck u Satser u Arv (intro) u Programvaruutveckling och programmering u Klassdesign och metodik (UML, CRC) u Arv, polymorfi och dynamisk bindning u Fält

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer

Inledande programmering med C# (1DV402) Tärningarna ska kastas

Inledande programmering med C# (1DV402) Tärningarna ska kastas Tärningarna ska kastas Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

TDDD78 Objektorientering: Lagring och livstid

TDDD78 Objektorientering: Lagring och livstid jonas.kvarnstrom@liu.se 2017 TDDD78 Objektorientering: Lagring och livstid Tre sorters variabel (1): Lokal 3 Deklareras i en metod Lokal variabel Varje anrop får sin egen "kopia": Två anrop till foo()

Läs mer

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

public och private Obs: private inte skyddar mot access från andra objekt i samma klass. public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private

Läs mer

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else Förkunskaper från tidigare föreläsningar: Objektorienterad Programmering (TDDC77) Föreläsning IX: Klasser och Objekt, Instantiering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2015 I STONE I Variabler,

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack 725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1).

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1). Laboration 3 Grafiska figurer I den här laborationen skall du konstruera ett schemeprogram som kan rita rektanglar, punkter, cirklar, linjer och bilder som består utav en eller flera av nyss nämnda figurer.

Läs mer

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Är en-relation. Har en-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande

Läs mer

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 207-04-06, kl 4-6 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning 1 Dagens föreläsning Programmering i Lisp - Block, räckvidd - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... 4 Bussen (projektförslag)... 5 Bakgrund... 5 Klassen Buss

Läs mer

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser Abstrakta Klasser 1 God klassdesign placerar gemensamma attribut och metoder så högt som möjligt i hierarkin men ibland kan dessa egenskaper inte definieras fullständigt Abstrakta klasser innehåller ofta

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Instansiering Åtkomst Abstrakt datatyp UML Överlagring

Läs mer

Metoder (funktioner) Murach s: kap Winstrand Development

Metoder (funktioner) Murach s: kap Winstrand Development (funktioner) Murach s: kap 6 2013-01-23 1 Winstrand Development Metoder I C# kan vi dela in koden i block en kodsekvens ska köras likadant på flera ställen i applikationen. Detta block kallas för en metod

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 2017-04-06, kl 17-19 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i

Läs mer

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga 203-03-9 203-03-9 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016 Objektorienterad Programkonstruktion Föreläsning 4 8 nov 2016 Nästade klasser I Java går det att deklarera en klass inuti en annan klass. Vi kallar detta för att en yttre klass innehåller en inre klass.

Läs mer

Objektorienterad programmering

Objektorienterad programmering Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad

Läs mer

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering Programmeringsteknik för I1 Övning 2 Administrativt Övningsgrupp 2 (Sal E32/D32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kontrollera att ni har fått Lab2 inrapporterad

Läs mer

Föreläsning 16 Arv. Jan Lönnberg 3.11.2011. T-106.1212 Grundkurs i programmering

Föreläsning 16 Arv. Jan Lönnberg 3.11.2011. T-106.1212 Grundkurs i programmering Föreläsning 16 Arv Grundkurs i programmering Jan Lönnberg Institutionen för datateknik -universitetets högskola för teknikvetenskaper 3.11.2011 Varför? I ett studieregister har vi både studenter och lärare.

Läs mer

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp. Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Att instansiera en klass Objekt I Man instansierar (skapar

Läs mer

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18 TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa 2203$( Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Email: bjorne@nada.kth.se Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: 7906277 previous next Exempel: lampa Light1 #

Läs mer

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel Lösningar till Fiktiv Tentamen på kursen 2D4135 Objektorienterad programmering, design och analys med Java vt2004 Teoridel T1) (4p) Förklara kort följande grundläggande begrepp inom objektorienterad programmering:

Läs mer

Klasser och objekt. Henrik Johansson. August 20, 2008

Klasser och objekt. Henrik Johansson. August 20, 2008 Föreläsning 5 Klasser och objekt Henrik Johansson August 20, 2008 Ett objekt är en modell av ett fysisikt eller ett tänkt ting. Objektet och det som vi kan göra med det beskrivs av en mall, en klass. Ett

Läs mer

Statistik över heltal

Statistik över heltal Övningsuppgift Statistik över heltal Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande

Läs mer

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Konstruktorer Statiska metoder & attribut

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

Objektorienterad programmering i Java I

Objektorienterad programmering i Java I Laboration 3 Objektorienterad programmering i Java I Uppgifter: 1 Beräknad tid: ca 3-6 timmar Att läsa: sidan 150,151, 170-174, 200, 201 (arv) sidan 178-179, 360 (abstrakta klasser, metoder) + utdelat

Läs mer

TDDC74 Lab 02 Listor, sammansatta strukturer

TDDC74 Lab 02 Listor, sammansatta strukturer TDDC74 Lab 02 Listor, sammansatta strukturer 1 Översikt I denna laboration kommer ni att lära er mer om: Mer komplexa rekursiva mönster, procedurer och processer. Hur man kan hantera listor och andra enklare

Läs mer

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean? Tidigare TDDC74 Programming: Abstraktion och modellering Föreläsning 4 Symboler, Par, Listor Representation av par, Grafisk notation för par Representation av listor mha par Typiska listhanteringsprocedurer

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16 TDDC74 Programmering: Abstraktion och modellering Dugga 1, 2017-02-22 kl 14-16 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? jonas.kvarnstrom@liu.se 2014 2017 jonas.kvarnstrom@liu.se

Läs mer

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser Föreläsning 8 Arv och abstrakta klasser Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen (extends) Den nya klassen behåller alla egenskaper som den gamla

Läs mer

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014 Introduktion till Datalogi DD1339 Föreläsning 2 22 sept 2014 Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 public class { public class { Åtkomst, public betyder fullt tillgänglig utifrån public

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

1 Klasser och objektorientering Vad är objektorientering?

1 Klasser och objektorientering Vad är objektorientering? 1 Klasser och objektorientering Vad är objektorientering? Det finns olika synsätt på programmering, dessa olika synsätt kallas för paradigm. De vanligaste paradigmen är det imperativa/proceduriella, det

Läs mer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1 Objektorienterad programmering Vi började med att programmera i main, sedan gick vi vidare till flera metoder i en klass. Nu är det dags för flera klasser. Objektorienterad programmering Relationer mellan

Läs mer

Kopiering av objekt i Java

Kopiering av objekt i Java 1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom

Läs mer

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15 DAVA15 Objekt, klasser Vad är det? Vad är sambandet mellan dem? Vad är skillnaden mellan dem? Tillstånd Signatur Kommunikation Typ Fält, parametrar och lokala variabler Likheter och skillnader Räckvidd

Läs mer

Laboration 1 - Grunderna för OOP i Java

Laboration 1 - Grunderna för OOP i Java Uppdaterad: 2006-08-31 Laboration 1 - Grunderna för OOP i Java Inledning Laborationen går ut på att lära sig grunderna för objektorienterad programmering, samt motsvarande språkkonstruktioner i Java. Labben

Läs mer

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser Hur används hierarkier för att modellera nära relaterade typer? Nu:

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Övningsuppgift Bankkonton Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering

Läs mer

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen. TT Kapitel 3. Husdjur & Fisk Javaklasser Translation by Leif Lourié Java program består av klasser som beskriver saker (objekt) som finns på riktigt. Även om det finns många olika sätt att skriva program

Läs mer

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Arv Polymorf UML (klassdiagram) 1 Arv Möt tre studenter

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum: TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Skriv tydligt så att inte dina lösningar missförstås. Använd väl valda namn på parametrar och indentera din kod. Även om det i

Läs mer

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Exempel: Exempel: Exempel: Exempel: $djur=array(ko,katt,älg); foreach ($djur as $d) { echo $d.  ; } Resultat. ko katt älg Loopar och upprepning Vill man upprepa kod flera gånger så istället för att skriva en massa rader så kan man lägga koden i ett kodblock som man sedan loopar. Det finns ett par olika typer av loopar, FORloop,

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym

Läs mer

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder

Läs mer

Java, klasser, objekt (Skansholm: Kapitel 2)

Java, klasser, objekt (Skansholm: Kapitel 2) Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma

Läs mer

Administrivia. hh.se/db2004. 1 Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

Administrivia. hh.se/db2004. 1 Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg) Programmering hh.se/db2004 Föreläsning 1 Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Välkomna till en kurs i programmering! Att programmera är att få datorn att bete sig på

Läs mer