Objektorienterad programmering i Racket
|
|
- Ludvig Per-Erik Bergman
- för 7 år sedan
- Visningar:
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 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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merIntroduktion. 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 merTDDC74 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 mer2I1049 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 merKort 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 merTDDC74 - 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 merTDDC74 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 merTDDC74 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 merLaboration 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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merObjektorienterad 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 merArv. 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 merTDDC74 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 merObjektorientering: 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 merTDDC74 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 merDagens 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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merTDDC74 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 merImperativ 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 merObjektorientering: 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 merObjektorienterad 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 merInkapsling 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 merFö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 merFö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 merLö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 merInnehå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 merTUTORIAL: 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 merInledande 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 merTDDC74 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 merTDDD78 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 merpublic 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 merI 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 merDAT043 - 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 mer725G61 - 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 merGrundlä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 merBö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
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 merIdag. 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 merF8 - 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 merTDDC74 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 merTentamen 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 merDagens 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 merProjekt 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 merAbstrakta 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 merObjektorienterad 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 merMetoder (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 merTDDC74 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 merDIAGNOSTISKT 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 merObjektorienterad 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 merObjektorienterad 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 merAdministrativt. 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 merFö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 merOutline. 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 merObjektorienterade 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 merTDDC74 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 mer2203$( 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 merLö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 merKlasser 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 merStatistik ö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 merFö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 merTDDC30. 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 merFö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 merStatic 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 merClasses 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 merObjektorienterad 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 merTDDC74 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 mern 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 merTDDC74 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 merIntroduktion 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 merFö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 merIntroduktion 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 merIntroduktion 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 mer1 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 merGrundlä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 merArv: 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 merMå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 merKopiering 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 merObjekt, 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 merLaboration 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 merTyphierarkier 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 merTDDC74 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 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering
Läs merKlasser 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 merTDDE10 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 merTDDC74 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 merExempel: 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 merOOP 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 merTDDE10 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 merJava, 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 merAdministrivia. 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