Att lära sig av kodanalys

Storlek: px
Starta visningen från sidan:

Download "Att lära sig av kodanalys"

Transkript

1 Att lära sig av kodanalys Om att använda kodanalysverktyg i utbildningssyfte tillsammans med XP Daniel Bengtsson, c02db@student.lth.se Mikael Piotrowski, c04mpi@student.lth.se Lunds Tekniska Högskola den 20 februari 2007

2 1 Abstract Det finns ett flertal verktyg för statisk kodanalys tillgängliga. Går det att använda sig av dessa i utbildningssyfte? I den här studien gör vi dels en jämförelse mellan några olika verktyg för kodanalys och en diskussion kring hinder och fördelar med kodanalys i kursen Programvaruutveckling i grupp - projekt. Rapporten avslutas med tips om hur man som bäst kan införa kodanalysverktyg i kursen. 2 (18)

3 2 Inledning Denna rapport är resultatet av en djupstudie i kursen Coaching av programvaruteam, vårterminen Syftet med denna studie är att undersöka möjligheten att använda verktyg för statisk kodanalys som ett komplement i pågående programmeringsutbildning. Verktyg som utför en statisk kodanalys innebär att kontroller utförs utan att någon exekvering av kod behövs. Det finns olika typer av kodanalysverktyg: dels verktyg för stilanalys och dels verktyg för bugganalys, så kallade style checkers respektive bug checkers. Förutom dessa typer av analys så finns det även kodanalysverktyg som undersöker beroenden och paketkomplexitet, t.ex. Lattix, JDepend och NDepend. Dessa är dock ämnade åt större projekt för mjukvaruarkitekter som behöver en översiktlig bild som stöd. Eftersom studenternas projekt inte blir särskilt stort så kommer rapporten att enbart titta på några enkla kodanalysverktyg. Djupstudien består av två delar: dels en recension av kodanalysverktyg och dels en praktisk jämförelse av verktygen. I djupstudien jämförs verktygen PMD, FindBugs och Checkstyle. Jämförelserna mellan verktygen genomförs med hjälp av programmeringsteamen i kursen Programvaruutveckling i grupp projekt vårterminen 2007 [3]. I djupstudien undersöks studenternas attityd till kodanalys och vad de kan lära sig av verktygen. Från studien vill vi få svar på följande frågor: Kommer framtida studenter att ha nytta av kodanalysverktyg i kursen Programvaruutveckling i grupp - projekt? Vilken typ av verktyg är bäst lämpad för kursen? Följande avsnitt i rapporten recenserar tre olika verktyg för statisk kodanalys. Vidare följer en jämförelse mellan projekt med samtliga verktyg. Till slut avslutas rapporten med en diskussion vad kan motivera ett team till att använda och dra lärdom av statisk kodanalys. 3 (18)

4 3 Recension Det finns ett flertal verktyg för statisk kodanalys av Java-program. Statisk kodanalys innebär att programmet inte behöver exekveras för att analyseras. Vi har valt att beskriva tre olika verktyg: Checkstyle, FindBugs och PMD. Checkstyle och PMD är stilanalysverktyg och FindBugs är ett bugganalysverktyg. 3.1 Checkstyle Checkstyle är ett lättviktigt källkodsanalysverktyg som kontrollerar att ett utvecklingsteam följer kodkonventionerna för ett programmeringsprojekt [4]. Checkstyle finns tillgängligt som plugin för Eclipse och andra integrerade miljöer. Som standardinställning följs Suns kodstandard för Java [2]. För att använda Checkstyle efter installation i sitt Eclipse projekt måste man först aktivera det i projektets inställningar. Man kommer åt dessa inställningar genom att gå till Project > Properties i menyn och letar efter inställningarna för Checkstyle där. Det finns en kryssruta för att aktivera Checkstyle för projektet. Figur 1 Inställningarna för Checkstyle i Eclipse Checkstyles kontroller sker i Eclipse automatiskt varje gång som javaklasserna byggs om. Alla anmärkningar presenteras via Eclipse problemvy och som markörer i editorn. Man kan säga att verktyget fungerar som en utökning av Eclipse egna källkodskontroll vilket gör att man kan använda Checkstyle under tiden som man utvecklar sitt program. 4 (18)

5 Figur 2 Checkstyles anmärkningar fungerar som utökning av varningar i Eclipse Man är inte bunden till att använda alla kontroller i Checkstyle då dessa kan konfigureras för varje projekt genom att utvecklaren väljer vilka kontroller som denne vill ha. Det går att utöka källkodsanalysen med att skriva en egen kontroll enligt Checkstyles API som är en implementation av designmönstret Visitor. Källkoden traverseras och byggs upp som ett träd som sedan vistas av alla valda kontroller. Checkstyle har några grupper av kontroller som standard. Dessa kontrollerar javadoc kommentarer, namnkonventioner, filheaders, importer, storleksöverträdelser, whitespace, modifierare, kodblock, klassdesign, duplicering och det finns också en grupp som har hand om vanliga mätningar i kodkomplexitet. Även om Checkstyle har en del kontroller för mätningar som cyklisk komplexitet och storlek av klasser så är dess huvudsyfte att se till att man följer kodkonventioner i javakod. Eftersom Checkstyle kan användas under tiden som en utvecklare skriver kod kan det verka en aning pedantiskt av verktyget att ge anmärkningar för allt som man skriver. Men även om det kan gå på nerverna för en utvecklare så är det en ganska praktisk lösning att hålla sig till en kodstandard. Alternativet är annars en långdragig politisk debatt inom ett utvecklingsteam om vad som fungerar eller får kastas. 3.2 FindBugs FindBugs hittar problem i program genom att jämföra programkoden med olika s.k. buggmönster [5], [6]. Buggmönster är kodmönster som är kända för att leda till fel i programmet. Det vanligaste är att dessa kodmönster gör något annat än vad de ser ut att göra. FindBugs letar också efter en del mönster som inte är buggar men som vanligtvis är onödiga, t.ex. s = new String("hej") som kopierar den ursprungliga strängen till ett nytt objekt. Vanligtvis kan man skriva s = "hej" istället. 5 (18)

6 Det finns ett Eclipse-plugin som kan hämtas via Eclipse Update Manager på länken När det är installerat högerklickar man på den fil eller den mapp som ska kontrolleras väljer menyalternativet Find Bugs > Find Bugs. Resultatet visas som varningar i fönstret Problems och som små ikoner i källkodsfönstret, se Figur 3. En mer ingående beskrivning finns i manualen på FindBugs hemsida. Figur 3 FindBugs i Eclipse Fördelen med verktyg som FindBugs är att de leder en till de områden i koden som troligtvis är buggar, medan stilanalysverktyg är mer känsliga och åtminstone i våra egna tester ger fler varningar. En nackdel med FindBugs är att det inte verkar gå att ignorera varningar för ett visst ställe i koden. Om man konstaterat att en av varningarna är felaktig vill man inte att verktyget ska klaga på samma ställe nästa gång man använder det. Det går visserligen att stänga av varningar av en viss typ, men i så fall kanske man missar en bugg på ett annat ställe. 3.3 PMD PMD, en förkortning som inte har någon officiell förklaring, inspekterar källkod i Java efter potentiella problem [7]. Det finns plugin för PMD till olika utvecklingsmiljöer bl.a. Eclipse. Alla anmärkningar som PMD hittar klassificeras efter hur allvarliga problemen är. De regler som utser anmärkningarna kan i sin tur filtreras inom ett projekt. Dessutom kan nya regler skrivas till PMD antigen som en Java-klass eller uttryckt i XPath. Verktyget har ett antal olika regelkategorier exempelvis grundläggande regler, designmässiga regler, storlekskontroll och kontroversiella regler. Samtliga regelkategorier och deras regler finns listade på hemsidan. PMD är inte kopplad till en viss kodstandard istället kontrolleras att koden följer generell programmeringspraktik. Fördelen med detta är att verktyget koncentrerar sig på mönster där fel lätt kan uppstå. Nackdelen är att verktyget är långsamt jämfört med FindBugs och Checkstyle. Tyvärr var det plugin som finns till Eclipse för tillfället instabilt. Vissa installationer fungerar utan några problem, medan andra installationer knappt fungerar. 6 (18)

7 Figur 4 Beskrivning av en PMD regel som ger en anmärkning i källkoden 7 (18)

8 3.4 Jämförelse mellan verktygen I Appendix A Exempelprogram finns ett exempelprogram som visar vissa av de fel som verktygen anmärker på. Vi har valt att filtrera bort Checkstyles anmärkningar om tabbar eftersom detta ger varningar på nästan varenda rad i koden. Tabell 1 visar en översiktlig jämförelse mellan de tre verktygen. Samtliga verktyg finns som plugin till Eclipse. I dessa plugin finns det möjlighet att konfigurera vilka regler som verktygen ska använda vid analysen. Det finns också möjlighet att anpassa reglerna och lägga till egna. Checkstyle och FindBugs visar sina anmärkningar som Eclipse-varningar. Detta kan göra det svårt att skilja på de varningar som Eclipse genererar och de varningar som verktygen genererar. PMD visar sina anmärkningar i en egen lista. Både FindBugs och PMD ger användaren möjlighet att läsa mer om anmärkningen i Eclipse medan man i Checkstyle är hänvisad till informationen på verktygets hemsida. Den information som PMD ger är vanligtvis tydligare i jämförelse med de andra verktygens och har även konkreta exempel. PMD innehåller en del funktioner för bugganalys och är därmed lite mer generellt än Checkstyle. Å andra sidan håller den sistnämnda hårdare på att koden ska följa en specificerad kodstandard. Checkstyle FindBugs PMD Typ av analys Statisk analys av källkoden Statisk analys av den kompilerade koden Stilanalys Ja Nej Ja Bugganalys Nej Ja Delvis Icke-optimal kod 1 Nej Delvis Delvis Tabell 1 Jämförelse mellan verktygen Statisk analys av källkoden 1 T.ex. onödiga objektinstantieringar 8 (18)

9 4 Analys av verktygen I detta avsnitt redovisas resultatet från en testkörning av verktygen på källkoden hos utvecklingsteamen i Programvaruutveckling i grupp projekt vårterminen Testerna har utförts mellan iteration fyra och fem, vilket betyder att två tredjedelar av projektets iterationer har genomförts. En jämförelse mellan verktygens resultat och teamens uppfattning om sin kodkvalitet görs i avsnitt Checkstyle Team Checkstyle Tabell 2 Antal anmärkningar som Checkstyle rapporterade på teamens källkod. Checkstyle är inställt på att följa Suns Javakonventioner, modifierat för att passa Eclipse. Om teamen valt att använda en annan kodkonvention eller, vilket är troligare, en modifierad variant av denna kodkonvention kommer Checkstyle att ge många falsklarm. De flesta av ovanstående anmärkningar bygger på att det saknas mellanslag, exempelvis mellan ordet if och den efterföljande startparentesen. För att använda verktyget på bästa sätt måste man antigen följa Suns Javakonventioner eller anpassa Checkstyle till sin egen kodstandard. Annars ger verktyget för många anmärkningar vilket motverkar dess syfte. 4.2 FindBugs Team FindBugs Errors Tabell 3 Antal anmärkningar som FindBugs rapporterade på teamens källkod. FindBugs är det verktyg som ger minst antal anmärkningar, vilket beror på att verktyget letar efter buggar istället för att analysera källkodens stil. Det fel som blir mest anmärkt är nullpekarfel, t.ex. när oinitierade variabler används eller där det borde finnas tester för null. Ett annat fel som upptäcktes var koden s == "", som ser ut att testa om variabeln s är en tom sträng. I verkligheten testas det om variabeln s refererar till strängliteralen "". Vill man testa om två strängar har samma innehåll ska man använda metoden equals(object) och vill man, som i det här fallet, testa längden på en sträng ska man använda metoden length(). Det här kan vara en ganska svårhittad bugg, eftersom tomma strängar ibland refererar till den tomma strängliteralen och ibland inte. Ett exempel på när en tom sträng inte refererar till den tomma strängliteralen är om strängen skapats dynamiskt 9 (18)

10 4.3 PMD Team Basic Rules Braces Rules Code Size Rules Coupling Rules Design Rules JUnit Rules Naming Rules Strict Exception Rules String and StringBuffer Rules Totalt Tabell 4 Antal anmärkningar som PMD rapporterade på teamens källkod. Vi har gjort en mer ingående analys av vilka regelkategorier som ska användas i PMD. Anledningen är att man annars får många anmärkningar ifrån kategorier som är irrelevanta. De regelverk vi har valt är de som man bör känna till eller ger något mervärde för studenterna som utför projektet. Av de grundläggande reglerna, Basic Rules, ser vi att de flesta gillar att skriva nästlade ifsatser. Exempel: if (a) { if (b) { } } som kan skrivas till if (a && b) { }. Parentesreglerna, Braces Rules, varnar för att man inte använder klammerparenteser även om villkorsblocken är en rad lång. Anledningen är att en utvecklare kan råka ta bort raden som påverkas av villkoret, vilket gör att villkoret påverkar nästa rad istället. Kodstorleksreglerna, Code Size Rules, kollar på storleken och den cyklomatiska komplexiteten hos klasser och metoder [8]. Kopplingsreglerna, Coupling Rules, vill att man ska deklarera eller returnera supertypen av en klass istället för den konkreta klassen. Designreglerna, Design Rules, anmärker t.ex. på att en abstrakt klass ska ha abstrakta metoder. De flesta anmärkningar som gavs för samtliga projekt var fält som aldrig omdefinieras kan lika gärna deklareras som final, en designprincip som de flesta studenter säkert inte har tänkt på tidigare. JUnit-reglerna anmärkte mest på att studenterna inte ger meddelanden för sina asserts eller att det finns testmetoder som saknar assertion. Namnreglerna, Naming Rules, kontrollerar att man inte skriver för långa eller för korta metodnamn eller variabelnamn. Kan verka en aning pedantisk eftersom det är många fall där korta variabelnamn är ganska klartydliga i sitt sammanhang. 10 (18)

11 Strikta undantagsregler, Strict Exception Rules, anmärkte mest på att man fångar och sedan kastar vidare utan att göra något med dem. Man ska även undvika att kasta de generella undantagsklasserna RuntimeException, Exception, Throwable eller Error. Strängreglerna, String and StringBuffer Rules, anmärkte som mest återkommande strängliteraler och strängkonkateneringar inom en StringBuffer.append(). 11 (18)

12 5 Slutsatser och framåtblickar 5.1 Motivation för statisk kodanalys Man kan ställa sig frågan varför verktyg statisk kodanalys finns och används. Programmerare som använder sig av dessa verktyg flitigt är medvetna om att människan gör misstag. I jämförelse mot människan så är datorn en kall, effektiv räknare, strikt och väl mottaglig för instruktioner. En människa kan inte lära sig alla goda praktiker på en gång och därför kan verktygen också lära en att hålla sig till nya kodpraktiker som man kanske inte hade någon aning om tidigare. En dator är ett idealt verktyg för att granska kod med. Den behöver bara sägas åt att vissa saker får en programmerare inte göra med källkod. Verktyg för statisk kodanalys kan producera en väldigt stor mängd data och anmärkningar, en del av dessa kan vara oriktiga eller irrelevanta, s.k. false positives. Dessa anmärkningar kan vara intressanta att titta på, men vad ska en programmerare göra med dem? En risk är att verktyget används som en lapplisa som bötfäller programmerare för att denne inte skriver på det sätt som verktyget vill. Speciellt märks detta om verktyget införs i ett projekt utan någon tanke för hur utvecklingsteamet ska använda det. Det är upp till utvecklaren eller teamet att vraka bland alla regler och mätningar för att se vad som är relevant för projektet.[1] Vi ser gärna programmering som ett hantverk. Precis som andra hantverk går det alltid att bli skickligare inom programmering. Om verktyg för statisk kodanalys används på rätt sätt kan de hjälpa programmeraren att snabbare dra slutsatser om hur ett projekt går och kontinuerligt förbättra sin skicklighet. Exempel på slutsatser är: Nya praktiker Regler som man inte har haft någon aning om tidigare kan belysa problem som kan uppstå senare. Det är enklare att ta till sig av nya praktiker när man ser vilka misstag man kan göra med äldre praktiker. Om man inte tar åt sig kodanalys riskerar man att fortsätta i invanda mönster istället för att förbättra sitt programmeringshantverk. Verifiering av testfall Även om man inte bedriver testdriven utveckling till fullo så kan testtäckning peka på om man råkar missa något när man utvecklar. Testtäckning som minskar i andel under en tidsperiod är en trend för att man borde vara vaksam över fulhack. Komplexa klasser Att titta på cyklomatisk komplexitet, ett mått för hur många vägar en kod kan exekveras, kan snabbt peka ut klasser vars ansvarsområden kan delas upp flyttas någon annanstans samt även visa klasser som har för lite att göra. Mått som komplexitet och stora metoder kan vara ganska intetsägande. En erfaren utvecklare ser ganska snabbt om en metod är komplex eller för stor utan verktyg, men för större system är det svårt att få en överblick över hela systemet. Det finns en annan stor fördel av att använda sig av dessa verktyg och borde anses vara en stor fördel för många utvecklare. Många av verktygen för statisk kodanalys till Java och många andra utvecklingsmiljöer är öppna källkodsprojekt. De kan alltså användas gratis med syfte att förbättra kvaliteten av källkod och programdesign i andra projekt. 12 (18)

13 5.2 Subjektiv bedömning av kodkvalitet Kodkvalitet är ett relativt begrepp. Det kan handla om enkel design, robusthet, säkerhet, full testtäckning m.m. Det är ofta upp till ett team att själva definiera vad kodkvalitet innebär för deras utvecklingsprojekt. För att få något att jämföra de data vi samlat ihop med diskuterade vi med teamen vad de själva tycke om deras kodkvalitet. En sammanställning av resultatet finns i nedanstående tabell, där ett betyder att kodkvaliteten behövs förbättras mycket och fem betyder att kodkvaliteten är tillräckligt bra. Team Coacherna ,5 2 3, Teamet 3,5 3 3, Tabell 5 Teamets och coachernas uppfattning om sin kodkvalitet på en skala från ett till fem. Coacherna i team 1 hade inte någon uppfattning om teamets kodkvalitet. Värt att nämna är att team 7 är den som är mest självkritiska av alla team samtidigt som de placerar sig bland de bästa ur verktygens perspektiv. Frågan är om detta kan betyda att självkritiska team är mer noggranna, vilket är ett uppslag för framtida studier. I övrigt är det svårt att se några samband mellan teamets syn jämfört med vad verktygen visar. Team 3 kommenterade att deras kod saknar robusthet. Eftersom teamet får betydligt mycket fler anmärkningar av FindBugs än andra team, tyder det på att det finns många småbuggar i deras källkod. 5.3 Att använda statisk kodanalys i kursen Vår erfarenhet är att statisk kodanalys är ett utmärkt hjälpmedel för att hjälpa en utvecklare att förbättra sin skicklighet. Därmed borde verktygen vara ett bra hjälpmedel för studenter som går i kursen Programvaruutveckling i grupp - projekt. Med hjälp av verktygen kan studenterna lära sig om goda praktiker som inte täcks av andra kurser. De tre verktyg vi valt att fokusera på kompletterar varandra, eftersom de kontrollerar olika saker. Checkstyle har väldigt strikta regler vilket kan hindra studenterna från att utveckla den kodstandard som passar teamet. Om man ska införa Checkstyle måste man bestämma sig för vilken kodstandard som ska användas från projektets start. Risken med Checkstyle är att studenterna efter ett tag undviker att använda verktyget, på grund av de strikta reglerna. PMD har inte lika strikta regler, men kräver arbete för att välja vilka regelkategorier som är lämpliga att använda. I annat fall ger PMD många falsklarm, vilket precis som Checkstyle riskerar att göra att studenterna inte använder verktyget. PMDs utvecklare rekommenderar att man börjar med de grundläggande regelkategorierna och sedan lägger till en regelkategori åt gången, för att inte få för många anmärkningar på en gång [9]. FindBugs ger inte så många anmärkningar som de andra verktygen vilket gör att det är större sannolikhet att studenterna tar till sig informationen. Förmodligen är detta verktyg 13 (18)

14 det som är enklast att införa eftersom buggar är mer konkreta och intressanta att upptäcka än dåligt skriven, men fungerande, kod. Å andra sidan finns det en risk att studenterna nöjer sig med att koden inte innehåller de buggar som FindBugs hittar. Det finns naturligtvis fel som FindBugs inte hittar, t.ex. att utvecklarna missuppfattat kundens krav. Vi har försökt införa kodanalysverktyg i vårt team men har stött på problem på vägen. Studenterna har inte var lika entusiastiska att anamma sig verktygen som vi coacher. Det finns olika anledningar till detta. Verktygen anses som störande, att det läggs för många hinder än vad som behövs för studenterna. Studenterna vill koncentrera sig på att skriva kod istället för att tänka sig andra aspekter med mjukvaruutveckling såsom krav, design och testning. De flesta i vårt team går andra året i datateknik och lär inte ha någon vana att arbeta med programvaruprojekt. Den tid som är avsatt för projektet går åt de aktiviteter som de redan har att göra. Det finns lite tidsutrymme för studenterna att lära sig ytterligare nya verktyg än vad de redan har. Nyttan med kodkvalitet märks mer på längre sikt än i början. När det gäller sista punkten så vore det ideella att introducera kodanalysverktyg mot slutet av projektet eftersom studenterna börjar se nyttan med att kontrollera sig själva. Vi ser detta när de börjar använda testtäckningsverktyg för att se exakt vad som testas i sin källkod. Team med äldre studenter som har mer erfarenhet i programvaruutveckling borde tipsas om att använda kodanalysverktyg tidigare. Troligtvis kommer dessa ha större nytta av att ta till sig verktygen. Vår rekommendation är att börja införa FindBugs i projektet när teamet börjar inse vikten av kodkvalitet. Om FindBugs fungerar bra, kan man fortsätta med att införa PMD. 14 (18)

15 6 Referenslista [1] Jeff Atwood A Visit from the Metrics Maid sept-13, Coding Horror, [2] Code Conventions for the Java Programming Language, Sun Microsystems, Inc, [3] G. Hedin, L. Bendix, B. Magnusson, Teaching Software Development using Extreme Programming, Dept. of Computer Science, Lund Institute of Technology [4] Checkstyle, [5] FindBugs, [6] David Hovemeyer and William Pugh, Finding Bugs is Easy, Dept. of Computer Science, University of Maryland, [7] PMD, [8] Thomas J. McCabe, 1976, A Complexity Measure, IEEE Transactions On Software Engineering, [9] PMD, Best Practices, 15 (18)

16 7 Appendix A Exempelprogram 1. public class Misc { 2. public Misc(String s) { 3. if (s == null s == "") { 4. s = new String("hej"); 5. } 6. for (int i = 0; i < 20; i++) { 7. s += " "; 8. s += i; 9. } 10. } public void use() { 13. } private void complex() { 16. int x = 2; 17. int y = 4; 18. int z = 3; 19. if (x < y) { 20. for (int i = 0; i < y; i++) { 21. x = y + i; 22. } 23. } else if (z < x + y) { 24. for (int i = 0; i < x + y; i++) { 25. z = x + y + i; 26. } 27. } 28. while (z < x) { 29. if (z < 2) { 30. z++; 31. } else if (z < 4) { 32. x++; 33. } else if (z < 10) { 34. y++; 35. } 36. } switch (y) { 39. case 4: 40. x++; 41. case 5: 42. y++; 43. break; 44. default: 45. System.out.println("Detta var inte bra"); 46. System.exit(0); 47. break; 48. } 49. } public static void main(string[] args) { 52. Misc misc; 53. if (args.length == 1) 54. misc = new Misc(args[0]); 55. Else 56. misc = new Misc(new String()); 57. } 58. } 16 (18)

17 7.1 Testresultat från PMD Prioritet Rad Beskrivning 3 1 All classes and interfaces must belong to a named package 3 1 The class 'Misc' has a Cyclomatic Complexity of 5 (Highest = 11). 3 3 Avoid variables with short names like s 2 5 Avoid instantiating String objects; this is usually unnecessary Document empty method 3 18 Avoid unused private methods such as 'complex()' The method 'complex' has a Cyclomatic Complexity of Avoid variables with short names like x 3 20 Avoid variables with short names like y 3 21 Avoid variables with short names like z 5 24 Found 'DD'-anomaly for variable 'x' (lines '24'-'24') Found 'DD'-anomaly for variable 'z' (lines '28'-'28') Found 'DD'-anomaly for variable 'y' (lines '38'-'38') Found 'DU'-anomaly for variable 'x' (lines '44'-'53') Found 'DU'-anomaly for variable 'y' (lines '46'-'53') System.out.print is used 3 58 Parameter 'args' is not assigned and could be declared final 3 59 Avoid unused local variables such as 'misc' Avoid using if...else statements without curly braces 5 61 Found 'DU'-anomaly for variable 'misc' (lines '61'-'64') Avoid using if...else statements without curly braces 5 63 Found 'DU'-anomaly for variable 'misc' (lines '63'-'64'). 7.2 Testresultat från Checkstyle Rad Beskrivning 1 Missing a Javadoc comment. 2 Missing a Javadoc comment. 2 Parameter s should be final. 6 '20' is a magic number. 12 Missing a Javadoc comment. 15 Missing a Javadoc comment. 15 The method complex() from the type Misc is never used locally 17 '4' is a magic number. 18 '3' is a magic number. 31 '4' is a magic number. 33 '10' is a magic number. 39 '4' is a magic number. 41 '5' is a magic number. 51 Missing a Javadoc comment. 51 Parameter args should be final. 52 The local variable misc is never read 53 'if' construct must use '{}'s. 55 'else' construct must use '{}'s. 17 (18)

18 7.3 Testresultat från FindBugs Rad Beskrivning 3 ES: Comparison of String parameter using == or!= in Misc.Misc(String) 4 Dm: Misc.Misc(String) invokes inefficient new String(String) constructor; just use the argument 15 The method complex() from the type Misc is never used locally 40 SF: Switch statement found in Misc.complex() where one case falls through to the next case 46 Dm: Misc.complex() invokes System.exit(...), which shuts down the entire virtual machine 52 The local variable misc is never read 56 DLS: Dead store to misc in method Misc.main(String[]) 56 Dm: Misc.main(String[]) invokes inefficient new String() constructor; just use "" 18 (18)

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

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

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

Verktyget FindBugs. Djupstudie i kursen EDA 270 Coachning av programvaruteam. Christofer Bach dt05cb6 Daniel Nilsson dt05dn4. Lunds Tekniska Högskola

Verktyget FindBugs. Djupstudie i kursen EDA 270 Coachning av programvaruteam. Christofer Bach dt05cb6 Daniel Nilsson dt05dn4. Lunds Tekniska Högskola Verktyget FindBugs Djupstudie i kursen EDA 270 Coachning av programvaruteam Christofer Bach dt05cb6 Daniel Nilsson dt05dn4 Lunds Tekniska Högskola 15 feb 08 1. Sammanfattning Denna djupstudie kommer att

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

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

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

Labb 1: Vad, hur, och varför?

Labb 1: Vad, hur, och varför? Labb 1: Vad, hur, och varför? jonas.kvarnstrom@liu.se 2017 "En sak i taget": Öva grunder innan det blir mer komplicerat Starkt önskemål från studenter: Prova på kontrollstrukturer Labb 1: Intro till grunder

Läs mer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

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

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

Läs mer

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

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

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

Läs mer

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

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas. Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod

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

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

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse Verktyg och Utvecklingsmiljö Föreläsning 2 Eclipse Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg. Editorer Kompilatorer Avlusare(debugger) Versionshantering(kommer i

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

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

Djupstudie Verktyg för att förebygga problem i källkod. Anders Forslund Anders Lund

Djupstudie Verktyg för att förebygga problem i källkod. Anders Forslund Anders Lund Djupstudie Verktyg för att förebygga problem i källkod Anders Forslund (d04afr@student.lth.se) Anders Lund (et05al1@student.lth.se) 2 mars 2010 Sammanfattning Då kodningsstandard ej hålls så blir ofta

Läs mer

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 Pelle Evensen, Daniel Wetterbro 5 november 2009 Sammanfattning Denna vecka ska vi titta på abstrakta klasser kontra interface,

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

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll 2010-04-22

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll 2010-04-22 Översikt 732G11 PROGRAMMERING 1 Institutionen för datavetenskap Om kursen Vad är programmering (bra för)? Programmeringsspråket Java Utvecklingsmiljön Eclipse Genomgång av några programexempel Programmering

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

Petter Berglund. Sammanfattning

Petter Berglund. Sammanfattning EDA270 - Coaching av programvaruteam Verktyg för kodanalys Petter Berglund D05, Lunds Tekniska Högskola dt05pb2@student.lth.se 2008-02-10 Sammanfattning Verktyg för kodanalys blir allt vanligare i programvaruutvecklingsprojekt

Läs mer

NetBeans 7. Avsikt. Projektfönster

NetBeans 7. Avsikt. Projektfönster NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

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

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: 2014-12-17 Tid: 9.00-12.00 (OBS 3 tim) Rum: V

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: 2014-12-17 Tid: 9.00-12.00 (OBS 3 tim) Rum: V Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Erland Holmström Göteborg 16 dec 2014 Examination i PROGRAMMERINGSTEKNIK F1/TM1

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =

Läs mer

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering Lunds universitet FYTA11 Institutionen för Astronomi och Teoretisk fysik HT 12 Tentamen FYTA11 Javaprogrammering Onsdag 9 januari 2013, 10:15 14:15 Instruktioner Hjälpmedel: Papper och penna. Behandla

Läs mer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Laboration 10 - Eclipse

Laboration 10 - Eclipse Laboration 10 - Eclipse Avsikten med laborationen är att du ska träna på att använda paket, att du ska packa några klassfiler i en jar-fil och slutligen använda innehållet i en jar-fil från en annan klass

Läs mer

NetBeans 5.5. Avsikt. Projektfönster

NetBeans 5.5. Avsikt. Projektfönster NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna! Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1) Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet

Läs mer

Djupstudie Code smells / Refaktorisering. Martin Larsson dt08ml5 Stefan Johansson, dt08sj7

Djupstudie Code smells / Refaktorisering. Martin Larsson dt08ml5 Stefan Johansson, dt08sj7 Djupstudie Code smells / Refaktorisering Martin Larsson dt08ml5 Stefan Johansson, dt08sj7 27 februari 2012 Innehåll 1 Inledning 1 2 Bakgrund 1 2.1 extreme programming....................... 1 2.2 Programvaruutveckling

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer

Classes och Interfaces, Objects och References, Initialization

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

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker

Läs mer

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner Programmeringsteknik och Matlab Övning 3 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

Lösningsförslag tentamen FYTA11 Java

Lösningsförslag tentamen FYTA11 Java Lunds universitet FYTA11 Institutionen för Teoretisk fysik HT 10 Lösningsförslag tentamen FYTA11 Java Måndag 10:e januari 2011, 09:00 13:00 Instruktioner Hjälpmedel: enkla ritverktyg och Javadoc-genererade

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Abstrakt stack Abstrakt kö Länkade listor Abstrakta datatyper Det är ofta praktiskt att beskriva vilka operationer man vill kunna göra på sina

Läs mer

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Verktyg och Utvecklingsmiljö. Jochim von Hacht Verktyg och Utvecklingsmiljö Jochim von Hacht Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg Editorer Kompilatorer Avlusare (debugger) Versionhantering (kommer i projektkurs)

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

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

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20. Umeå Universitet Datavetenskap Anders Broberg 130605 TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg VT-13 Datum: 13-06-05 Tid: kl 16.00-20.00 Namn: Personnummer:

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

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014 Introduktion till Datalogi DD1339 Föreläsning 3 29 sept 2014 Ett lite intelligentare program? Klassen Rectangle Rectangle height width color setheight setwidth getcolor getarea Rectangle public class Rectangle{

Läs mer

Verktyg för statisk kodanalys

Verktyg för statisk kodanalys Verktyg för statisk kodanalys Av: Peter Seimar, adi09pse 4 mars 2013 Att hitta fel, bad smells och brister i en stor kodbas kan vara både svårt och tidsödande. För att hjälpa till med det arbetet nns en

Läs mer

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-6, TDA540 Dag: 207-0-24, Tid: 4.00-.00 Uppgift a) En abstrakt klass kan inte instansieras,

Läs mer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1 Institutionen för Data- och informationsteknik JSk TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Övningstentamen 1 OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer.

Läs mer

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes Vad kännetecknar en god klass F12 Nested & En odelad, väldefinierad abstraktion Uppgiften kan beskrivas kort och tydlig Namnet är en substantiv eller adjektiv som beskriver abstraktionen på ett adekvat

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016 Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter

Läs mer

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

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

Läs mer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio Ditt första C#-program med Visual Studio Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så

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

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

System.out.println(Jaså du har + antalhusdjur+  husdjur); if ( antalhusdjur > 5 ) System.out.println(Oj det var många); 1 Villkor och styrsatser I de program vi sett tidigare har programkörning inneburit att sats efter sats utförts i den ordning de skrivits i källkoden. Vi har inte kunna ändra programmets uppförande beroende

Läs mer

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

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

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2014-10-17 Skrivtid: 0800-1300 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. .0.0 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6 poäng Denna tentamen

Läs mer

"if"-satsen. Inledande programmering med C# (1DV402)

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

Läs mer

Kompilera och exekvera Javakod

Kompilera och exekvera Javakod Kompilera och exekvera Javakod Förberedelser För att kunna göra dessa övningar måste du ha installerat Java Development Kit, JDK, som bland annat innehåller Java kompilatorn, javac. Hur du installerar

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

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

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

Läs mer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler, datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande

Läs mer

Typkonvertering. Java versus C

Typkonvertering. Java versus C Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då

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 2002-08-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

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1. Objektorienterad programmering E Telefonboken, än en gång Föreläsning 5 Wrapper classes Exempel, histogram. Inldening om undantag. Mer om klassen Påminnelse Vår senaste version bestod av två klasser, bägge

Läs mer

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

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

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte

Läs mer

Objektsamlingar i Java

Objektsamlingar i Java 1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och

Läs mer

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-7, TDA540 Dag: 208-0-3, Tid: 4.00-8.00 Uppgift a) class används för en klassdeklaration som

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (

Läs mer

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad,

Läs mer

tentaplugg.nu av studenter för studenter

tentaplugg.nu av studenter för studenter tentaplugg.nu av studenter för studenter Kurskod Kursnamn UU-76062 Inledande programmering i Java Datum Sommaren 2014 Material Provtentamen Kursexaminator Betygsgränser Tentamenspoäng Övrig kommentar Provtenta

Läs mer

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

Klasshierarkier - repetition

Klasshierarkier - repetition Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet

Läs mer

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

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

Läs mer

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3 TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3 Pelle Evensen, Daniel Wetterbro 16 oktober 2012 Sammanfattning Denna vecka ska vi titta på polymorfism, dynamisk kontra statisk

Läs mer

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[]

Läs mer