Refaktorisering i praktiken. Aron Kornhall D00, Lunds Tekniska Högskola
|
|
- Viktoria Jakobsson
- för 8 år sedan
- Visningar:
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 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
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
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ö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:
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:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
//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. ======================================================================*/
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 {
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
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:
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
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
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.
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
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
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
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
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?
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
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
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,
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Ö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
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
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ö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
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:
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:
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
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
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å
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
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
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
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
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:
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
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 (
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
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
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ö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
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,
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
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
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
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ö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 =
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
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
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
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
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
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
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
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,
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
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
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
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
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;
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.
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
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
Ö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
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
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
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
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
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
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 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
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,
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
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
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/
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/
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