Refaktorisering i praktiken. Aron Kornhall D00, Lunds Tekniska Högskola

Storlek: px
Starta visningen från sidan:

Download "Refaktorisering i praktiken. Aron Kornhall D00, Lunds Tekniska Högskola"

Transkript

1 Refaktorisering i praktiken Aron Kornhall D00, Lunds Tekniska Högskola d00ak@efd.lth.se 24 Februari 2004

2 Abstract Den här artikeln behandlar refaktorisering ur ett praktiskt perspektiv och riktar sig till programmerare som inte har någon större vana av refaktorisering sedan innan. Några vanliga och tämligen enkla refaktoriseringar beskrivs och exemplifieras tillsammans med någon enstaka mer komplicerad. Vidare ges några mönster för refaktorisering, speciellt för refaktorisering till designmönster. Slutligen testas och recenseras ett antal refaktoriseringsverktyg för Java. Innehåll Innehåll Inledning Allmänt om refaktorisering Att refaktorisera till Designmönster Mönster för refaktorisering: Mönster: Högre kodkvalitet med refaktorisering Mönster: Mönsterlösning Mönster: Mönstermedborgaren Mönster: Säker refaktorisering Några vanliga refaktoriseringar Rename symbol [Fowler04] Remove double negative [Fowler04] Extract method [Fowler04] Subclassing to Decorator Refaktoriseringsverktyg Eclipse RefactorIT JRefactory Sammanfattning Tack till Referenser

3 1. Inledning En definition på refaktorisering är [TDDN01]: Förändring av kod med bibehållen funktionalitet. Definitionen lämnar alltså en hel del frågor obesvarade: Varför man refaktoriserar man? När bör man refaktorisera? Blir resultatet av en refaktorisering bättre än dess föregångare? Hur bär man sig åt? etc. Det är min tanke att den här artikeln skall belysa de praktiska aspekterna på refaktorisering snarare än de teoretiska. Jag kommer att ta upp och ge exempel på några vanliga typer av refaktorisering som jag tycker är intressanta. Dessa skall inte ses som något försök till en lista över de bästa refaktoriseringarna utan snarare som ett antal smakprov på hur några olika typer av refaktorisering kan se ut. 2. Allmänt om refaktorisering En väl utförd refaktorisering kan lösa mängder av olika typer av problem, medan en dåligt utförd sådan kan ställa till med minst lika många. Refaktorisering är alltså inte något som per automatik ger ett bra resultat. Syftet med en refaktorisering kan som tidigare antytts variera, men vanligast är nog att man vill göra designen bättre och underlätta läsbarheten av koden. Andra motiv kan vara att förbättra konfigurerbarheten eller optimera koden för att snabba upp exekveringen. Oavsett vad man vill åstadkomma finns det dock alltid en risk för att man introducerar nya buggar i koden när man refaktoriserar, hur försiktig man än är. Det bästa sättet att komma tillrätta med detta problem är att se till att ha många och välskrivna testfall som kontrollerar att koden verkligen fungerar som den ska, även efter refaktoriseringen. 3. Att refaktorisera till Designmönster Designmönster är en företeelse som alla programmerare förr eller senare kommer i kontakt med vare sig de vill eller inte. Det stora flertalet av oss är dessutom eniga om att det är ett enkelt och förhållandevis smärtfritt sätt att återanvända fiffiga designlösningar och därmed undvika att uppfinna hjulet på nytt varje gång man behöver lösa ett programmeringsproblem. Att uppfinna hjul är inte heller det vi vill lägga vår energi på när vi refaktoriserar, så visst vore det trevligt om man kunde använda sig av designmönster även när man refaktoriserar. Denna typ av refaktorisering är visserligen inte helt lätt att lyckas med och tar ofta förhållandevis lång tid att ta sig igenom, men å andra sidan får man i gengäld en väl beprövad lösning som nästan garanterat ger en vacker design som lön för allt slit. 3

4 4. Mönster för refaktorisering: 4.1 Mönster: Högre kodkvalitet med refaktorisering Problem: Koden är svårläst, duplicerad kod förekommer och designen är oklar. Kontext: Du programmerar. Krafter: Det kan ta emot att ändra i kod som fungerar. Man kanske inte vågar göra ändringar eftersom man är rädd att ha sönder någonting. Det upplevs ofta som roligare att skriva ny kod än att skriva om gammal. Lösning: Gör refaktorisering till en naturlig del i programmerandet. Efter varje färdigskriven metod försöker du få överblick över vad koden gör och tänk till: Vad skulle jag kunna göra för att förbättra läsbarheten och strukturen? 4.2 Mönster: Mönsterlösning Problem: Koden är svårläst, duplicerad kod förekommer och designen är oklar. Kontext: Du programmerar men tycker att koden blir allt mer svårförståelig och designen oklar. Du inser att du måste förändra designen radikalt för att kunna komma vidare. Krafter: Det kan ta emot att ändra i kod som fungerar. Man kanske inte vågar göra ändringar eftersom man är rädd att ha sönder någonting. Alla programmerare har inte den kunskap om designmönster som krävs. Att ändra designen radikalt tar ofta emot eftersom det kräver förhållandevis mycket arbete. Det kan vara svårt att inse vilket designmönster man bör använda. Det upplevs ofta som roligare att skriva ny kod än att skriva om gammal. Lösning: Se till att vara någorlunda väl inläst på åtminstone ett par vanligt förekommande designmönster. När du refaktoriserar försöker du hela tiden identifiera delar av koden som skulle kunna skrivas om som ett designmönster. När dessa delar är identifierade gör du en utvärdering av vilka fördelar respektive nackdelar det skulle innebära att skriva om koden. Tycker du att fördelarna uppväger nackdelarna är det bara att fatta tangentbordet och skriva om hela rasket så att designen överensstämmer med det aktuella mönstret. 4

5 Relaterade mönster: Mönstermedborgaren beskriver hur man bör bete sig när man refaktoriserar till designmönster. 4.3 Mönster: Mönstermedborgaren Problem: När man väl kommit in i designmönstersvängen tenderar man att använda sig av dem in absurdum och all kod man skriver blir tryfferad med allehanda upptänkliga och oupptänkliga mönster. Kontext: Du programmerar och har fallit för tjusningen i designmönstrens underbara värld. Krafter: Att använda många mönster imponerar på andra programmerare. Mönster innebär en viss trygghet. Man tror lätt att bara man använder sig av en massa mönster kommer resultatet att bli bra. Ofta är det bättre med en enkel lösning som är lätt att förstå än en avancerad designmönsterlösning. Lösning: Behärska dig. Det kan vara svårt ibland men är inte alls omöjligt. Det handlar helt enkelt om att väga fördelarna med en lösning mot nackdelarna. Att använda sig av mönster ger inte automagiskt ett bra resultat. En mönstermedborgare är alltså en programmerare som använder designmönster om och endast om det är motiverat. 4.4 Mönster: Säker refaktorisering Problem: Koden behöver refaktoriseras, men risken för att nya buggar uppkommer är ett problem. Kontext: Du refaktoriserar. Krafter: För att kunna bygga på systemet krävs refaktorisering. Risken för att introducera nya buggar finns alltid vid refaktorisering. Välskrivna testfall fångar upp större delen av de buggar som kan tänkas introduceras vid refaktorisering. Lösning: Innan varje refaktorisering kontrollerar man om det finns tillräckligt med tester av den kod som skall refaktoriseras. Gör det inte det skriver man nya, genomtänkta sådana enligt konstens alla regler. När alla gamla och nya tester går igenom refaktoriserar man och kör sedan alla testfall igen. Går dessa igenom har man sannolikt inte introducerat några nya buggar. 5

6 5. Några vanliga refaktoriseringar 5.1 Rename symbol [Fowler04] Rename symbol är nog den allra enklaste och vanligast förekommande refaktoriseringen. Som namnet antyder innebär denna refaktorisering att man byter namn på symboler dvs. variabler, metoder, klasser eller paket. Ett refaktoriseringsverktyg är till stor hjälp vid denna refaktorisering eftersom ett namnbyte ofta innebär att flera referenser måste uppdateras. Motivering Det hör till god sed att ge sina variabler, metoder mm bra namn som beskriver vilken funktion de har i koden, men ibland kan det vara svårt att komma på bra namn och då kan det bli lite si och så med namngivandet. Efter någon dag, när man sovit på saken, brukar det dock vara lättare att gå tillbaka till koden och byta ut de gamla och dåliga namnen mot nya och bra. Exempel Innan refaktorisering: public class Account { private double money; public Account() { money = 0.0; public double getmoney() { return money; public void setmoney(double b) { this.money = b; När denna klass som beskriver ett bankkonto skrevs döpte författaren variabeln som innehåller aktuellt saldo till money vilket dessvärre inte är helt lyckat eftersom det bara betyder pengar i största allmänhet. Detsamma gäller för metoderna set- och getmoney som dessutom är publika och visar på så sätt även utåt upp det dåliga variabelnamnet. Efter Refaktorisering: public class Account { private double balance; public Account() { balance = 0.0; public double getbalance() { return balance; public void setbalance(double balance) { this.balance = balance; Här har variabeln money bytt namn till balance (som ju betyder just saldo). Get- och setmetoderna har ändrats på motsvarande sätt så att vi även publikt talar om att det är saldot vi kan förändra istället för det något oklara pengar. 6

7 5.2 Remove double negative [Fowler04] Dubbla negationer är inte bra. Det fick vi lära oss redan på grundskolans svensklektioner, och detsamma gäller i programmeringssammanhang. Motivering Eftersom människans förmåga att parsra ett logiskt uttryck korrekt är ganska begränsad bör vi göra det så enkelt som möjligt för oss och då är det en bra idé börja med att ta bort alla dubbla negationer. Tänk t ex på meningen: Du skall inte låta bli att inte använda dubbla negationer. Visst blir det besvärligt? Exempel Innan refaktorisering:... if(!fueltank.isnotempty()) { // gör något public boolean isnotempty() { return fuel > 0; Efter Refaktorisering:... if(fueltank.isempty()) { // gör något public boolean isempty() { return!isnotempty(); public boolean isnotempty() { return fuel > 0; Här har vi lagt till en ny metod isempty() som gör negationen åt oss Enkelt och praktiskt om vi fortfarande behöver isnotempty() någon annanstans i koden. 5.3 Extract method [Fowler04] Att bryta ut ett stycke kod till en egen metod är en mycket vanlig typ av refaktorisering. Den har ett syskon vid namn Extract class som jag inte tar upp här, men det bör inte vara så svårt att föreställa sig vad den gör efter att ha läst om Extract method. Motivering Att en metod börjar bli för lång är nog en av de vanligaste dåliga lukterna inom programvaruutveckling. Lyckligtvis är denna lukt ganska lätt att bli av med med hjälp av Extract method. 7

8 Exempel Innan refaktorisering: public void LongMethod() { //många, långa, digra rader kod String name = ""; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Hej!"); System.out.print("Vad heter du: "); try { name = br.readline(); catch (IOException e) { System.err.println(e); System.out.println("Hej " + name); //ännu fler, långa, digra rader kod Efter Refaktorisering: public void NotThatLongMethod() { //många, långa, digra rader kod System.out.println("Hej " + askforname()); //ännu fler, långa, digra rader kod private String askforname() { String name = ""; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Hej!"); System.out.print("Vad heter du: "); try { name = br.readline(); catch (IOException e) { System.err.println(e); return name; Som synes blev det plötsligt betydligt lättare att se att vi frågar användaren om hans/hennes namn mitt i den långa metoden. 5.4 Subclassing to Decorator Att refakorisera till designmönster kan vara mycket effektivt, men är förhållandevis svårt eftersom det kräver en djupare förståelse för koden och måste göras i flera steg. Jag har valt att som exempel på en sådan refaktorisering visa hur man kan ersätta en hierarki av subklasser med designmönstret decorator. Decorator är ett mönster som är bra att använda om man enkelt vill kunna skapa objekt med olika egenskaper. Jag går inte igenom Decorator i detalj här men det bör inte vara så svårt att förstå principen genom att studera nedanstående kod. För den intresserade finns mer information om Decorator och designmönster i största allmänhet i en sökmotor nära dig. 8

9 Motivering Med hjälp av Decorator kan man skapa objekt med olika egenskaper genom att skriva en klass för varje egenskap och sedan på ett fiffigt sätt kombinera dessa klasser när objektet skapas. I en lösning där varje kombination av egenskaper representeras av en subklass växer antalet klasser exponentiellt när antalet egenskaper ökar. Innan refaktorisering: public class Person { protected String name; public Person(String name) { this.name = name; System.out.println("Namn: " + name); public class Female extends Person { public Female(String name) { super(name); System.out.println("Namn: " + name); System.out.println("Sex: female"); public class Male extends Person { public Male(String name) { super(name); System.out.println("Namn: " + name); System.out.println("Sex: male"); public class Man extends Male { public Man(String name) { super(name); System.out.println("Namn: " + name); System.out.println("Sex: male"); System.out.println("Age: Adult"); public class Woman extends Female { public Woman(String name) { super(name); 9

10 System.out.println("Namn: " + name); System.out.println("Sex: female"); System.out.println("Age: Adult"); public class Girl extends Female { public Girl(String name) { super(name); System.out.println("Namn: " + name); System.out.println("Sex: female"); System.out.println("Age: Not very old"); public class Boy extends Male { public Boy(String name) { super(name); System.out.println("Namn: " + name); System.out.println("Sex: male"); System.out.println("Age: Not very old"); Här vill vi kunna representera personer med alla kombinationer av egenskaperna kön och ålder. För enkelhets skull finns det bara två åldrar barn och vuxen och så har vi inte tagit hänsyn till att hermafroditer inte kan representeras i vår modell. Det behövs alltså sex subklasser till Person för att representera alla kombinationer av dessa två egenskaper. Detta kanske inte låter så farligt, men om vi antar att vi hade 10 egenskaper som alla kunde anta två värden så skulle denna artikel utskriven på papper väga ca två kg Efter Refaktorisering: public abstract class Person { public Person() { public abstract void printinformation(); public class NameHolder extends Person { protected String name; public NameHolder(String name) { this.name = name; System.out.println("Namn: " + name); 10

11 public abstract class AbstractDecorator extends Person { protected Person component; public AbstractDecorator(Person component) { super(); this.component = component; public abstract void printinformation(); public class SexDecorator extends AbstractDecorator { private boolean ismale; public SexDecorator(Person component, boolean ismale) { super(component); this.ismale = ismale; component.printinformation(); System.out.println("Sex: " + getsex()); private String getsex() { // (c: if(ismale) { return "male"; else { return "female"; public class AgeDecorator extends AbstractDecorator { private boolean ischild; public AgeDecorator(Person component, boolean ischild) { super(component); this.ischild = ischild; component.printinformation(); System.out.println("Age: " + getage()); private String getage() { if(ischild) { return "Not very old"; else { return "Adult"; Med den här lösningen behöver vi bara skriva en ny subklass till Decorator för varje egenskap vi lägger till. Om man sen vill skapa t.ex. en pojke som heter Erik skriver man såhär: Person p = new AgeDecorator(new SexDecorator( new NameHolder("Erik"),true),true); 11

12 6. Refaktoriseringsverktyg Refaktorisering blir inte riktigt njutbar utan verktygshjälp. Även om man kan göra mycket med bara sök/ersätt funktionaliteten som finns i nästan alla texteditorer så blir det aldrig lika smidigt som med ett specialskrivet verktyg. På senare år har det kommit ut en hel rad mer eller mindre bra sådana verktyg och jag kommer här att presentera tre sådana för Java. Jag har testat dessa verktyg genom att i ett större programmeringsprojekt med många välskrivna tester göra ett antal refaktoriseringar och sen kontrollera om testerna fortfarande går igenom. Denna metod är måhända inte så vetenskaplig, men ger ändå en viss uppfattning om hur bra verktyget är på att refaktorisera. Jag kommer hädanefter att kalla detta test för domedagstestet. 6.1 Eclipse Eclipse är egentligen en hel utvecklingsmiljö med stöd för bl.a. CVS och en mängd plugins för UML-ritning mm. Det är dock refaktoriseringsfunktionaliteten som jag kommer att recensera här. Så här kan det se ut när man gör Extract Method i Eclipse: figur 1 Refaktorisering i Eclipse Användargränssnittet är mycket intuitivt. Man bara markerar det man vill refaktorisera och högerklickar så får man upp en meny där man kan välja mellan en mängd olika refaktoriseringar. Eclipse klarar sig igenom domedagstestet även om vi får en del onödiga import-satser, men å andra sidan gör Eclipse oss uppmärksamma på problemet med hjälp av en liten gul markering i kanten på aktuella klasser, så det är en smal sak att rätta det felet. 6.2 RefactorIT RefactorIT är ett fristående program, men har stöd för att integreras med bl.a. JBuilder och Forte vilket är nödvändigt eftersom det inte innehåller någon egen editor. Upplägget är ganska likt det i Eclipse, men inte riktigt lika intuitivt. Extract method på samma kod som i figur 1 ser ut så här: 12

13 figur2 Refaktorisering i RefactorIT Även RefactorIT klarar domedagstestet och även här genereras en del onödig kod vid flyttning av klasser. Vi får ingen direkt information om detta som på samma sätt som i Eclipse, men det finns inbyggda analyseringsverktyg som hittar den typen av överflödig kod om vi använder dem. 6.3 JRefactory Både Eclipse och RefactorIT har en traditionell syn på hur refaktorisering görs där det är källkoden man ändrar och därmed ändras också designen. JRefactory har en ganska annorlunda approach på hela refaktoriseringskonceptet. Här är det designen som står i centrum och visas i form av UML-diagram, medan källkoden hålls i skymundan och faktiskt inte visas alls. Man skulle kunna säga att man refaktoriserar grafiskt. Så här kan det t.ex. se ut: figur 3 Refaktorisering i JRefactory 13

14 JRefactory känns lite instabilt redan från början och det är (förhållandevis) svårt att förstå hur man skall importera källkoden i programmet. Dessutom misslyckas programmet i domedagstestet så att fyra testfall inte längre går igenom. Trots detta vill jag inte såga JRefactory totalt eftersom det sina brister till trots är en intressant och nyskapande lösning som kanske i senare versioner kan bli riktigt bra, även om det i nuläget har en del irriterande buggar. 7. Sammanfattning Jag har i denna artikel efter bästa förmåga försökt belysa de praktiska aspekterna på refaktorisering. Mycket av det som finns skrivet har en mer teoretisk inriktning och vänder sig till den erfarne programmeraren som redan har så stor erfarenhet att hon direkt inser en refaktoriserings användningsområde när hon läser en beskrivning av den. Jag har istället försökt att beskriva förhållandevis enkla refaktoriseringar med förhållandevis enkla exempel och mönster samt testat ett par förhållandevis enkla refaktoriseringsverktyg och det är min förhoppning att du som läsare nu tycker att refaktorisering är förhållandevis enkelt. 8. Tack till Magnus Starseth, Miguel Ewezon, Fredrik Redgård och Staffan Åberg som alla kommit med värdefulla kommentarer på mitt arbete. 9. Referenser [Cooper98] Cooper, James W, The Design Patterns Java Companion Addison-Wesley, 1998 [TDDN01] Tichelaar, Sander; Ducasse, Stéphane; Demeyer, Serge; Niertrasz, Oscar, A Metamodel for Language-Independent Refactoring 2001 [Fowler04] Fowler, Martin, [Kerievsky02] Kerievsky, Joshua, Refactoring to Patterns

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

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

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal Tentamen DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl 14.00 17.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts. Tentamen i EDAF5 juni 07 Skrivtid: 4-9 Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Skriv inte med färgpenna enda tillåtna färg är svart/blyerts. Skriv

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

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

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och design Lunds Tekniska Högskola Datavetenskap Tentamen EDA061 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Vid bedömningen kommer hänsyn att tas till lösningens kvalitet. UML-diagram

Läs mer

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

Att skriva till och läsa från terminalfönstret

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design RE SD PD I UT IT ST AT Mjukvarudesign System Requirement Specification Inkrementell och iterativ! Konceptuell design (VAD) Systemdesign (OOA) Arkitekturell (grovkornig, UML) Teknisk design (HUR) Programdesign

Läs mer

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av

Läs mer

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14. Tentamen 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.00, sal D31 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Laboration 2: Designmönster

Laboration 2: Designmönster Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om

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

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

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

Laboration 2: Designmönster

Laboration 2: Designmönster Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck Betrakta följande uttryck a +(b + c) d + e (f + g h) Parsing med Recursive Descent, Avbildningsklasser Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 22 november 2010 Beräkning med regler: multiplikation

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer Lunds Tekniska Högskola Datavetenskap Ulf Asklund, Sven Gestegård obertz Tentamen EDAF10 2013 10 24, 8.00 13.00 Tentamen i Objektorienterad modellering och diskreta strukturer Vid bedömningen kommer hänsyn

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Chapter 4: Writing Classes/ Att skriva egna klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser. Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad

Läs mer

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

//Använd main som ett handtag för att hålla ihop programmet. //Själva programmet finns i övriga klasser. /*==================================================================== Detta program hör ihop med dokumentet EXEMPEL_AVERAGE_POINTS.PDF där det finns förklaringar. ======================================================================*/

Läs mer

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg Lunds Tekniska Högskola Datavetenskap Emelie Engström, Ulf Asklund Tentamen EDAF25 2016 06 03 Tentamen i Objektorienterad modellering och design Helsingborg Lösningar. 1. public class VendingMachine {

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr

Läs mer

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass. Datateknik A, Syfte: Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass. Att läsa: Lektion 2 Uppgifter:

Läs mer

DAT043 Objektorienterad Programmering

DAT043 Objektorienterad Programmering DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015 Objektorienterad Programkonstruktion Föreläsning 6 23 nov 2015 Designmönster Färdiga "recept" för att lösa (del-)problem i struktureringen av ens program Mönster kan beskriva små komponenter eller stora

Läs mer

Tentamen i Grundläggande programmering STS, åk 1 fredag

Tentamen i Grundläggande programmering STS, åk 1 fredag Tentamen i Grundläggande programmering STS, åk 1 fredag 2003-05-23 Skrivtid: 09.00 14.00 Hjälpmedel: Inga Lärare: Anders Berglund. Anders besöker tentan vid två tillfällen: cirka kl. 10.30 samt cirka kl.

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

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

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om? Algoritmer och datastrukturer Allmänt om kursen Kort javagrund repetition - Klasser, metoder, objekt och referensvariabler, - Hierarkiska klass strukturer - Arrayer och arrayer av objekt - Collection ramverket

Läs mer

Fördjupad Java. Undantagshantering. Fel

Fördjupad Java. Undantagshantering. Fel Fördjupad Java 1 Undantagshantering Ett undantag (Exception) är ett objekt som påtalar en ovanlig eller felaktig situation i ett program. Undantag kastas av programmet och kan fångas och hanteras. Java

Läs mer

Föreläsning 13 Innehåll

Föreläsning 13 Innehåll Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?

Läs mer

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = Vargtass; System.out.println(namn +   + moms + bodegan.ändra(moms, namn); S Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för M1, K2, Media1 och I1 (1p) 16 december 2000 Hjälpmedel: En Javabok. System.out är ett objekt kopplat till skärmen, dvs samma sak som i labbarna

Läs mer

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Unified Modelling Language Grafiskt modelleringsspråk för att beskriva olika aspekter av objektorienterade system. Vi kommer

Läs mer

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/3 2014 Innehåll Kursöversikt Javarepetition/Javaintroduktion UML - klassdiagram-introduktion i anslutning till Java-exemplen Kursmål,

Läs mer

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl Högskolan Dalarna sid 1 av 6 DI-institutionen Hans-Edy Mårtensson Sten Sundin FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 1. Grunderna i

Läs mer

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

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

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

Inkapsling (encapsulation)

Inkapsling (encapsulation) UML UML är en standard för att dokumentera och visualisera sina tankar och beslut under analys och design. Att lära sig allt om UML får inte plats i den här kursen, men vi kommer lära oss vissa delar.

Läs mer

Lösningar till tentamen i EDAF25

Lösningar till tentamen i EDAF25 Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if

Läs mer

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:

Läs mer

Tentamen för TTIT71 Programmering 2007-01-10 kl. 08-12 Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

Tentamen för TTIT71 Programmering 2007-01-10 kl. 08-12 Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p) Tentamen för TTIT71 Programmering 2007-01-10 kl. 08-12 Institutionen för datavetenskap Linköpings universitet Antal uppgifter: 6 Max: 32 poäng Betyg: 3:a 16 poäng, 4:a 24 poäng, 5:a 28 poäng Hjälpmedel:

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Laboration 2 Datastrukturer En liten uppgift Frågor 1 Laboration 2 - Datastrukturer Länkade datastrukturer Stack Kö (En. Queue) Lista

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket 1 Länkade listor Likadant som i Ada-kursen. 2 Stack MyStack MyStack

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer. Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language

Läs mer

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering och metoder Introduktion till objektorienterad programmering Markus Saers markus.saers@lingfil.uu.se orientering Deklarativ programmering Beskriver förutsättningarna för något Prolog Imperativ programmering

Läs mer

1 Comparator & Comparable

1 Comparator & Comparable 1 Comparator & Comparable 1.1 Implementation av Comparable Att implementera Comparable innebär att man gör objekt av sin klass jämförbara med andra och att det därmed antas existera en naturlig ordning

Läs mer

Programmering för språkteknologer II, HT2011. Rum

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Kursplan Mål Efter avslutad kurs skall studenten för att förtjäna betyget

Läs mer

PROGRAMMERINGSTEKNIK TIN212

PROGRAMMERINGSTEKNIK TIN212 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Robin Adams Göteborg 8 June 2018 PROGRAMMERINGSTEKNIK TIN212 Dag: Fredag Datum:

Läs mer

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN) Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN) Dagens agenda Admin Tentatid och plats Tillåtet på tentan EDAF10 Föreläsning inför XL-projektet

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal Tentamen DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl 10.00 13.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna

Läs mer

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag Undantagshantering Fördjupad Java Ett undantag (Exception) är ett objekt som påtalar en ovanlig eller felaktig situation i ett program. Undantag kastas av programmet och kan fångas och hanteras. Java har

Läs mer

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(7) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg 1. a) Figure 1 2015 06 04 GeometryApp GraphicalApp

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design Integritetsprincipen Objektorienterad modellering och diskreta strukturer / design Designmönster och fallstudier Integritetsprincipen Gör attribut, metoder och klasser så hemliga de går. Lämna inte ut

Läs mer

Tentamen Programmering fortsättningskurs DIT950

Tentamen Programmering fortsättningskurs DIT950 Tentamen Programmering fortsättningskurs Datum: 2015-03-17 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 G: 24-43 VG: 44-60 (max 60) Lärare:. Någon besöker ca 10.00

Läs mer

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander F6 Objektorienterad design ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se långa ord AKTIVITETER I PROGRAMVARUUTVECKLING Iterativ utveckling Kravspecifikation Design Implementation Testning

Läs mer

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

Lösningar för tenta 2 DAT043,

Lösningar för tenta 2 DAT043, Lösningar för tenta 2 DAT043, 2018-06-08. Uppgift 1 public class Car{ private String model; private String year; private double price; public Car(String model, String year, double price){ this.model =

Läs mer

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser // En första version av BankKonto-klassen class BankKonto { private String namn; private long nr; private double saldo; private double ränta; // Klassen TestaBankKonto // Klassens uppgift är att skapa

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

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel Eva Blomqvist eva.blomqvist@liu.se Linköpings universitet Sweden December 1, 2013 1 Innehåll OO-programmering fortsättning Skapa

Läs mer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Institutionen för Data- och informationsteknik TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer. Denna tentamen gäller

Läs mer

Tentamen. Lösningsförslag

Tentamen. Lösningsförslag Sida 1/8 Tentamen Grundläggande programmering i Java A 5p, DTAA32 2002-03-22 Lösningsförslag Uppgift 1 ( 3p ) Utskriften blir: Skriv in ett tal 24 47 48 intal=471 Uppgift 2 ( 6p ) a.) b.) c.) d.) e.) falskt

Läs mer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2 Institutionen för Data- och informationsteknik JSk TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Övningstentamen 2 TID: 4 timmar Ansvarig: Betygsgränser: Hjälpmedel: Jan Skansholm Sammanlagt maximalt

Läs mer

Design av en klass BankAccount som representerar ett bankkonto

Design av en klass BankAccount som representerar ett bankkonto Klasser Kommer ta upp följande begrepp: Design av en klass Implementera en klass Testa en klass med en mainmetod Instansvariabler, lokala variabler, formella parametrar, aktuella parametrar och variablers

Läs mer

Refaktorisering i ett XP-projekt

Refaktorisering i ett XP-projekt Författare: Erik Norberg, Joakim Puusaari E-post: {d00en, d00jpu@efdlthse Datum: 2004-02-22 Refaktorisering i ett XP-projekt Sammanfattning I denna djupstudie delar vi med oss av våra erfarenheter av refaktoriseringar,

Läs mer

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine. Outline Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Undantag Design Hösttermin 2017 En frukt har ett namn Man kan lägga en frukt i

Läs mer

Objekt och referenser

Objekt och referenser Objekt och referenser Antag att vi har följande enkla klass: public class Person { private String namn; private String adress; private String personnummer; public Person() { namn = NN ; adress = ; personnummer

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Hashing Undantag Design Outline Hashing Undantag Design En frukt

Läs mer

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag Undantagshantering Fördjupad Java Ett undantag (Exception) är ett objekt som påtalar en ovanlig eller felaktig situation i ett program. Undantag kastas av programmet och kan fångas och hanteras. Java har

Läs mer

Föreläsning 9: Arv och UML

Föreläsning 9: Arv och UML TDA 545: Objektorienterad programmering Föreläsning 9: Arv och UML Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Quiz Vad betyder static? Varför skriver man get-metoder? public int getpos() { return pos;

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer Lunds Tekniska Högskola Datavetenskap Ulf Asklund, Sven Gestegård obertz Tentamen EDAF10 2014 10 31, 14.00 19.00 Tentamen i Objektorienterad modellering och diskreta strukturer Vid bedömningen kommer hänsyn

Läs mer

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram? Programmeringsteknik och Matlab Övning 2 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

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning Översikt Uttryck i tilldelningssatser Typer och typomvandling Klasser Metoder Konstanter Eclipse-tips MERA JAVA OCH ECLIPSE Institutionen för datavetenskap Programmering 1 Rita Kovordányi 2 public class

Läs mer

Att öva på och förstå ett program med flera samverkande klasser.

Att öva på och förstå ett program med flera samverkande klasser. Inlämningsuppgift 4 klassen Kund (Customer) Att öva på och förstå ett program med flera samverkande klasser. Redovisning: Uppgiften redovisas i datasal: o Körning av programmet. o Redogöra för vad de olika

Läs mer

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID Vad gör vi här? Programmeringsteknik fördjupningskurs (EDAA01; 7,5hp) Valfri för F, N & BME (kan läsas från åk 2 eller i sommar!) Avancerad

Läs mer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

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

Praktikum i programmering

Praktikum i programmering Praktikum i programmering Föreläsning 1 Lärare: Fredrik Degerlund E post: fredrik.degerlund@abo.fi Rum A5051 (denna korridor) Kursens innehåll Att lära sig att programmera moduler som ingår i ett större

Läs mer

Editering, Kompilering och Exekvering av Javaprogram

Editering, Kompilering och Exekvering av Javaprogram UMEÅ UNIVERSITET Institutionen för informatik B.1, Programmeringens grunder, 5 poäng Editering, Kompilering och Exekvering av Javaprogram Introduktion Syftet med kursmomentet Programmeringens grunder (B.1)

Läs mer

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem). 1 (11) TENTAMEN: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att

Läs mer

Institutionen för datavetenskap HT 1 2007/2008. Testning med JUnit

Institutionen för datavetenskap HT 1 2007/2008. Testning med JUnit LUNDS TEKNISKA HÖGSKOLA EDA690 Algoritmer och datastrukturer Institutionen för datavetenskap HT 1 2007/2008 Enhetstestning Testning med JUnit När man implementerat en klass måste man, innan den kan användas,

Läs mer

Förra föreläsningen. Dagens agenda. Command Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Förra föreläsningen. Dagens agenda. Command Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) Förra föreläsningen Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2013, FÖRELÄSNING 3 UML: klassdiagram God praxis (metodik), t ex Refaktorisera Design smells, t ex Bräcklighet

Läs mer

Repetition av viktiga begrepp inom objektorienterad programmering

Repetition av viktiga begrepp inom objektorienterad programmering Repetition av viktiga begrepp inom objektorienterad programmering Tema: Arv, parameteröverföring, statiska attribut och metoder. Arv U 1. Betrakta följande klasser: public class Person { protected String

Läs mer

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel Programmeringsteknik för Bio1 och I1 Övning 2 Kort repetition Övningsgrupp 3 (Sal E33) 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/2d1310/

Läs mer

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på:

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på: Bilaga C Eclipse 1 Inledning Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på: www.eclipse.org help.eclipse.org www.eclipse.org/downloads/

Läs mer

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund Föreläsningsmaterial (Arv) Skrivet av Andreas Lund Inledning Arv är ett begrepp som är tätt förknippat med objektorientering. Principerna bakom arv är grundade i högst vardagliga relationer mellan olika

Läs mer