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

Storlek: px
Starta visningen från sidan:

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

Transkript

1 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

2 Sammanfattning Då kodningsstandard ej hålls så blir ofta kod svår att förstå och arbeta med. Detta resulterar i vad som kallas illaluktande kod och den här studien tar upp olika av de största mjukvaruverktyg för att nna illaluktande kod i Java-program. Olika typer av vanligaste sorters dålig kod tas upp och verktygen testas på projekt som innehåller åtskilliga sorters illaluktande kod. Resultaten visar på att verktygen är goda hjälpmedel för att nna dålig kod, men de nner bara vissa typer av illaluktande kod och missar ofta väldigt viktiga saker. Dessa brister tas upp i studien och jämförs mot varandra. Verktygen kan i dagsläget endast användas som ett komplement till manuellt arbete. Olika sätt att göra koden mer lättläst och lättarbetad presenteras kort här. 2

3 INNEHÅLL INNEHÅLL Innehåll 1 Inledning 4 2 Code Smells Kommentarer Långa metoder Långa parameter-listor Duplicerad kod Stora klasser Inkonsistenta/dåligt namngivna metoder Död kod Oanvända variabler/objekt Refaktoriseringar 6 4 Testade verktyg Metodik Resultat Eclipse PMD Checkstyle FindBugs Analys Otestade verktyg Japroch Elbereth Slutsats 12 3

4 2 CODE SMELLS 1 Inledning Då era personer arbetar med kod så nns alltid risken att kodning inte sker enhetligt. Om någon kodar enligt ett visst mönster och någon annan vill refaktorisera detta, som i sin tur kodar på ett annat sätt, uppstår ofta problem [1]. Det nns många er typer av fel, så kallade kodlukter, och det går inte att formulera ett generellt sätt att lösa dessa om det inte formuleras extremt abstrakt. Ofta är det svårt att hitta dessa fel. De upptäcks ofta av duktiga programmerare som nner det intuitivt fel. För att underlätta för utvecklare så har det släppts verktyg som är till för att nna dessa felaktigheter i programkod. För Java nns det åtskilliga. Genom att studera vetenskapliga dokument och testa olika verktyg kan man nna i vilken grad dessa kan appliceras på PVGprojektet. Några välkända verktyg för att hitta code smells i Java kommer att testas och analyseras lite senare i denna rapport. 2 Code Smells Illaluktande kod är något som alla programmerare någon gång kommer stöta på under sin karriär. Skickliga utvecklare med stor kunskap brukar dock ha en känsla för design av kod så att lukter kan minskas markant. Även olika verktyg kan användas för att identiera dessa och också åtgärda dem. Vad är då illaluktande kod? Det är ett begrepp som myntades av Kent Beck i WikiWikiWeb, världens första wiki. Han denierade det som en liten ledtråd till att något i koden hade gått fel, att det fanns ett djupare problem. Det kan vara allt från att programmet i fråga är långsammare än vad det behöver vara till att programmet är svårt att vidareutveckla för andra programmerare. Metaforen code smell blev dock vanligare i folkmun efter att ha använts i boken Refactoring: Improving the Design of Existing Code skriven av M. Fowler [2]. Nedan kommer några av de vanligaste kodlukterna listas och förklaras [3]. Notera att kodlukter kan skilja sig åt i olika programpråk (här kommer det mest fokuseras på Java) och att vissa är mer eller mindre allvarliga samt att de i allas ögon inte alls anses vara fel. Kommentarer. Långa metoder. Långa parameter-listor. Duplicerad kod. Stora klasser. Inkonsistenta/dåligt namngivna metoder. Död kod. Oanvända variabler/objekt. 4

5 2.1 Kommentarer 2 CODE SMELLS 2.1 Kommentarer En metods namn bör vara skriven så att man förstår vad dess uppgift är. Ett bra exempel är getinvoicablecreditlimit() istället för getinvcrlmt(). Därför ska en metodkommentar inte beskriva vad metoden gör, utan snarare varför metoden nns. I vissa fall, till exempel kod skriven i Assembler som är väldigt svår att förstå, måste däremot kommentarer beskriva vad koden gör. 2.2 Långa metoder En lång metod gör att det blir svårare att se vad metoden i fråga egentligen gör, den blir oöversiktlig. Men vad är egentligen en lång metod? Hur många rader kod är långt? Ett ganska vanlig generellt svar på denna fråga är att det nns ingen tydlig denition, utan man bör helt enkelt se till att en metod har en enda huvuduppgift. Gör den för mycket bör den refaktoriseras, förslagsvis genom att delas upp i era mindre metoder. 2.3 Långa parameter-listor Alan Perlis, en pionjär inom programvaruutveckling sade en gång If you have a procedure with 10 parameters, you probably missed some. Den underliggande meningen är att en metod ska ha så få parametrar som möjligt. Istället för att skicka in parametrar från ett visst objekt är det ofta bättre att skicka in hela objektet. En metod med många parametrar är svårläst och svår att tolka. Istället för: int low = daystemprange().getlow(); int high = daystemprange().gethigh(); withinplan = plan.withinrange(low, high); gör man exempelvis: withinplan = plan.withinrange(daystemprange()); 2.4 Duplicerad kod Redundans i kod är något man helst vill undvika. Ofta uppkommer det på grund av en dålig eller lat programmerare (i form av copy-paste). En anledning till att undvika duplicerad kod är exempelvis att den blir svårare att förstå för en annan utvecklare. En lång metod med duplicerad kod är svårare att snabbt komma in i än en kort refaktoriserad. Det blir också svårare att uppdatera koden eftersom man måste ändra på era ställen. Lösningen på problemet är att extrahera den redundanta koden och skapa EN metod av det istället som sedan kan anropas från era ställen. 2.5 Stora klasser Likt långa metoder är även långa/stora klasser en riktig stinkbomb. En stor klass kan ofta identieras genom att studera antalet attribut. Är det många sådana är det i många fall även en för stor klass som gör för mycket och som borde delas upp. 5

6 2.6 Inkonsistenta/dåligt namngivna metoder 3 REFAKTORISERINGAR I guren nedan visas ett exempel. Figur 1: Stor klass refaktoriseras 2.6 Inkonsistenta/dåligt namngivna metoder När det gäller metoder (även variabler, klasser etc.) bör de vara namngivna så att man förstår vad dess uppgift är. Det ska vara tydligt utan att behöva läsa kommentarer. En konsistent namngivning är också den viktig för att inte skapa förvirring. Att följa Code Conventions for Java av Sun gör att detta inte bör blir några problem. När man döper metoder bör man också undvika redundans. Det är att föredra schedule.add(course) framför schedule.addcourse(course). 2.7 Död kod En variabel, metod, parameter eller annan typ av kodfragment som aldrig exekveras. Som utvecklare eftersträvar man alltid ren kod som är lätt att förstå och död kod ingår inte i denna kategori. 2.8 Oanvända variabler/objekt Till skillnad från död kod så kan oanvända datatyper exekveras och ta upp plats i minnet. Men likt död kod vill man undvika detta. 3 Refaktoriseringar När verktyg har funnit illaluktande kod så är det en lämplig ide att modiera koden. Det nns ett väldigt begränsat stöd för att göra det helt automatiskt. Det nns refaktoriseringsverktyg, men inget som direkt ansluter processen att automatiskt nna illaluktande kod med refaktorisering. Detta får göras manuellt. För den sortens illaluktande kod som vi behandlat i testning nns följande refaktoriseringlösningar: Långa metoder : Löses i första hand genom att extrahera koden till en egen metod. Duplicerad kod: Löses genom att extrahera koden till en egen metod. Ibland är det så att den duplicerade koden har små variationer på de ställen där den förekommer. Då får lite mer komplext arbete ske när koden extraheras, men det är helt genomförbart. 6

7 4 TESTADE VERKTYG Död kod: Om koden avsiktligt placerats som död så bör den tas bort från projektet. Nästlade if-satser : Försök sätta de booleska uttrycken som en if-sats istället för era. 4 Testade verktyg Manuell jakt på illaluktande kod är något som är extremt tidskrävande och kan vara väldigt svårt. Nedan nns verktyg som ska underlätta detta genom att automatiserat leta upp illaluktande kod. Alla testade verktyg är open source och använder sig av statisk analys, vilket innebär att källkoden analyseras. Detta gör att programmet inte behöver exekveras. FindBugs skiljer sig något genom att analysera bytekod statiskt, det vill säga kompilerade klassler. PMD är ett öppet verktyg som söker efter code smells i Java-kod. Verktyget kan användas som plugin till ett tiotal utvecklingsmiljöer. PMD analyserar kod utan att exekvera den vilket gör att den kan kommentera detaljer som variabelnamn [4]. FindBugs letar huvudsakligen efter buggar, men ger även varningar då väldigt avancerade funktioner i ett språk används. På grund av dess sätt att analysera ett program så kan inte FindBugs kommentera saker som variabelnamn [5]. Eclipse är en utvecklingsmiljö som ger varningar för åtskilliga saker som relaterar till illaluktande kod. Eclipse analyserar koden utan att den behöver exekveras och kommenterar saker som den anser vara direkta felaktigheter [6]. Checkstyle är ett verktyg som främst är till för att se till att kodningsstandarder följs. Indirekt innebär det att illaluktande kod hittas då de ofta uppstår när kodningsstandarder bryts [7]. 4.1 Metodik Verktygen har testats på två sätt. För en realistiskt testning har tre projekt som behandlar samma uppgift använts. Detta är projekt som utvecklas under sju heldagar av tio utvecklare som går kursen EDA260 på Lunds Tekniska Högskola (kursen förkortad PVG). Projekten innehåller illaluktande kod som uppstått på naturligt sätt. Då utvecklarna kan tänkas vara för duktiga för skriva kod som luktar väldigt illa så har det skapats ett, av författarna, egenskrivet projekt. Det består av medvetet illaluktande kod. Kodlukterna har denierats och implementerats enligt följande: Korta metodnamn. Testas genom att ha med en metod vars namn är två tecken. Långa metodnamn. Testas genom att ha med en metod vars namn är tjugo tecken. Långa metoder. Testas genom att ha med en metod på över 100 rader kod. 7

8 4.2 Resultat 4 TESTADE VERKTYG Duplicerad kod. Testas genom att dels ha återkommande kodstycken, men också genom att ha snarlik kod på era ställen. Död kod. Testas genom att ha kod i en if-sats där det boolska uttrycket alltid är falskt. Koden kommer aldrig att exekveras. Många parametrar. Testas genom att ha en metod som har tio parametrar. Nästlade If-satser. Testas genom att ha fyra if-satser i varandra. Åtskilliga verktyg körs på projekten och de kodlukter som identieras, som relaterar till de faktiska vi skrivit, registreras. Då det nns olika standarder att identiera illaluktande kod så hittar vissa verktyg väldigt många saker som enligt andra verktyg ej är illaluktande kod. Dessa nämns men studeras ej i detalj. 4.2 Resultat Eclipse Kommentarer. Till föga förvåning varnar Eclipse ej för brist på kommentarer. Nästlade If-satser. Eclipse hittar ej nästlade if-statser. Långa metoder. Eclipse varnar ej för långa metoder. Långa parameter-listor. Eclipse varnar ej för långa parameter-listor. Duplicerad kod. Eclipse varnar ej för duplicerad kod. Stora klasser. Eclipse varnar ej för stora klasser. Inkonsistenta/dåligt namngivna metoder. Eclipse varnar för dålig namngivning på paket och klasser. Varning uppstår endast när versaler och gemener används fel. Död kod. Eclipse hittar endast vår döda kod om det booleska uttrycket som gör if-satsen död, ligger i samma klass som if-satsen. Om if-satsen anropar en konstant från ett annat objekt så kommer det inte någon varning. Oanvända variabler. Oanvända variabler varnar programmet om direkt. Skapas ett objekt utan att användas på något sätt ges en varning. Gör man ett nonsens-anrop på objektet försvinner varningen, även om metodanropet inte fyller någon funktion. Se kodexempel nedan: String text="12345"; //varning för oanvänt objekt syns text.charat(2); //ingen varning syns om denna metod anropats Eclipse varnar inte för allt som man vill att ett code smell detection tool ska varna för, men hittar ändå ganska mycket. För att vara en integrerad utvecklingsmiljö (IDE) gör Eclipse väldigt mycket. 8

9 4.2 Resultat 4 TESTADE VERKTYG Figur 2: Eclipse detekterar död kod PMD Kommentarer. PMD ger inga varningar för dåliga kommentarer. Nästlade If-satser. Verktyget nner nästlade if-satser och rekommenderar lösningsförslag. Långa metoder. PMD hittar långa metoder. Vår långa metod får varning med meddelandet Avoid really long methods. Långa parameter-listor. PMD hittar metoden med tio parametrar och varnar för att det är för många. Duplicerad kod. Verktyget låter användaren specicera hur stort ett kodstycke ska vara för att den ska hitta duplicerad kod. PMD är väldigt bra på att hitta duplicerad kod och hittar den även om det används olika variabelnamn på de olika platserna. Både i riktiga projekt och i dummy-projektet nner PMD duplicerad kod. Stora klasser. PMD ger varning då klasser är för stora. Inkonsistenta/dåligt namngivna metoder. PMD varnar för namn som är för korta och för långa. Används versaler på fel sätt genereras även en varning. Död kod. PMD nner död kod, men på samma sätt som Eclipse hittas inte död kod om inte det booleska uttrycket i if-satsen ligger i samma klass. Oanvända variabler. PMD varnar för objekt som inte används. PMD hittar väldigt mycket, men mycket relaterar till annat än vad i denna studien denierats som illaluktande kod. Exempelvis vill PMD att objekt som skickas in i en metod utan att förändras ska sättas som final när metodparametrarna skrivs. Detta är standard enligt C++ kodningskonventioner men är inte något som är ett måste i Java. PMD upplevs som ett väldigt kompetent verktyg men många av dess varningar måste ltreras bort. Då det används som en plug-in i Eclipse är det något svårt att sortera resultaten, då användaren får en lista med alla varningar, vilket i våra fall är era tusen. Det blir väldigt tidskonsumerande att studera denna resultatsrepresentation. 9

10 4.2 Resultat 4 TESTADE VERKTYG Figur 3: Exempel på PMD:s gränssnitt Checkstyle Kommentarer. Checkstyle klagar på brist samt felaktigt skriven Javadoc, vilket är en väldigt bra egenskap. Nästlade If-satser. Verktyget noterar ej nästlade if-satser. Långa metoder. Checkstyle nner ej långa metoder. Långa parameter-listor. Checkstyle klagar då det nns mer än 7 parametrar i en metod. Duplicerad kod. Checkstyle nner ej duplicerad kod. Stora klasser. Verktyget genererar varning då en metod är på väldigt många rader. Inkonsistenta/dåligt namngivna metoder. Checkstyle ger extremt bra varningar för namngivning. Konventioner följs väldigt strikt och alla kommentarer, objekt, parametrar, metodnamn, klassnamn, konstanter etc. får varningar om de inte följer standarden helt. Död kod. Checkstyle nner ej död kod. Oanvända variabler. Checkstyle klagar ej på oanvända variabler. Checkstyle påminner om PMD. Den hittar några extra fel, men saknar några som att hitta långa metoder och nästlade if-satser. Verktyget upplevs som väldigt mycket mer relaterat till kommentarer och namngivning än PMD. Verktyget är knepigare att arbeta med i Eclipse än PMD, då det är ännu svårare än det är i PMD att sortera och ltrera olika typer av fel FindBugs Kommentarer. FindBugs klagar ej på brist på kommentarer. Nästlade If-satser. FindBugs noterar ej nästlade if-satser. Långa metoder. Verktyget nner ej långa metoder. Långa parameter-listor. FindBugs klagar ej på långa parameter-listor. Duplicerad kod. FindBugs nner ej duplicerad kod. Stora klasser. FindBugs klagar ej på stora klasser. 10

11 4.3 Analys 5 OTESTADE VERKTYG Död kod. Verktyget nner ej död kod. Oanvända variabler. FindBugs klagar på oanvända variabler. FindBugs hittar endast oanvända objekt. Verktyget söker mer efter väldigt specika saker som till exempel varning när MyObject.equals anropas om det råkar vara ett Comparable-objekt. De generella saker som testas här hittar inte FindBugs. Det upplevs tveksamt att kalla FindBugs ett verktyg för att identiera illaluktande kod. Verktyget har potential för att höja kodkvalitet men verkar inte kunna nna det denna studien relaterar till. 4.3 Analys Verktygen fungerar inte fullt så bra att de kan ersätta manuellt arbete. Eclipse ger information som underlättar programmerandet väldigt mycket, men som ändå är ganska lätta att hitta manuellt. FindBugs ger ännu färre meddelanden. PMD ger relativt mycket och ser något mer komplexa felaktigheter, men mycket saknas fortfarande. Testkoden testar förstås inte dessa program på alla aspekter och låter därför inte dem visa full potential. Med det sagt är det ändå udda att endast PMD ger varningar för duplicerad kod, och död kod får man endast varning för om man skrivit död kod på ett specikt sätt som passar verktygen. PMD är även väldigt inkonsekvent. På något ställe i koden nns objekt med korta namn. Dessa genererar varningar. Längre ner i koden nns andra objekt med lika korta namn, dessa genererar inga varningar. Egen testning har visat att dessa verktyg är bra komplement till manuell detektion, men räcker inte för att ersätta arbetet. Känner användare till begränsningarna i mjukvaran så kan verktygen eektivisera arbetet väldigt mycket. Användning av dessa tre verktyg på projekt är något som rekommenderas starkt. Det har exempelvis skolan Adams State College visat när de använt bland annat PMD och FindBugs i programmeringsundervisning [8]. Varje elev ck köra PMD, FindBugs och Checkstyle på sin kod och åtgärda felen som detekterades. Ibland upptäcker verktygen sådant som eleven kanske inte anser vara fel. Då kommenterades den raden med en förklaring till varför eleven i fråga inte ville ha en förändring. Enligt skolan gör detta att man lär sig tänka kritiskt och kan även ge upphov till diskussioner i klassrummet angående olika kodningsstandarder. Studenterna lär sig också att refaktorisera kod som blivit alldeles för komplex. När artikeln skrevs hade verktygen använts i undervisningen i 2 år. Under dessa år sågs en klar skillnad i kodkvalitet och läsbarhet. Skolan menar att dessa statiska kodanalys-verktyg, som nämnts ovan, skapar en medvetenhet bland studenterna om programkods kvalitet och att de lär sig på ett snabbt och enkelt sätt att upptäcka fel och brister. 5 Otestade verktyg I följande kapitel beskrivs kort olika verktyg som kan hjälpa utvecklare att spåra och åtgärda kodlukter. Av olika skäl har vi själva inte testat dem, men går ändå igenom dem lite kort. 11

12 5.1 Japroch 6 SLUTSATS 5.1 Japroch Att följa en bra kodstil när man programmerar är väldigt viktigt. För att hjälpa nya utvecklare har Sami Mäkelä och Ville Leppänen från University of Turku and TUCS skapat ett verktyg som visuellt kan visa var i ett program en viss stil inte följs [9]. Japroch, som verktyget heter, är fullt kongurerbart så att era olika stilar ska kunna följas. Enligt författarna nns det fyra olika aspekter av problem med kodningsstil: Typograska. Alla problem som är relaterade till det visuella utseendet i koden. Exempel på detta är indentering, placering av paranteser och maxlängd av kodrad. Syntaktiska. Problem som är relaterade till en dålig programmeringsstil även om programkonstruktionen i sig kan vara syntaktiskt korrekt. Exempelvis att man inte har en default-branch till en switch-case-sats. Semantiska. Exempelvis att klassnamn ska börja med stor bokstav och att alla deklarerade variabler borde användas i programmet. Logiska. Problem som är relaterade till den logiska strukturen i programmet. Exempel på detta är för många nästlade loopar och för många parametrar i metoder. Japroch har bra stöd för typograska och syntaktiska problem. De två andra kategorierna kan också kollas men bara i viss grad. I framtiden nns det förhoppningar att även semantiska problem ska stödjas fullt ut. 5.2 Elbereth Elbereth är ett verktyg för att spåra problem i kod och utföra refaktoriseringar [10]. Verktyget är utvecklat av studenten Walter Fred Korman från University of California. Elbereth använder sig av ett stjärndiagram-koncept för att hitta problem. Visuellt, med denna stjärndiagram-vy, kan man snabbt se klasshierarkier och komplexa klassrelationer och på sätt hitta kodlukter och dylikt. Tyvärr hittades inte programmet och kunde ej heller därför testas. 6 Slutsats De olika verktygen som testats underlättar detektering av lukter och andra brister i kod på ett bra sätt. De kan dock inte hitta alla fel och ibland fås även fel som man får analysera manuellt och besluta om åtgärd eller inte. Detta gör att programmerare lättare kan lära sig att analysera sin kod. Som Adams State College har gjort genom att införa verktyg i undervisningen, borde även det införas i de olika teamen i PVG-kursen. Ett verktyg som hela tiden påminner en om olika problem i koden gör att man snabbt blir medveten om dem och därmed också snabbt kan refaktorisera. Eftersom XP-metodiken är väldigt viktig att följa i kursen, där refaktorisering är en viktig del, är chansen stor att vissa iterationer där det krävs att man 12

13 6 SLUTSATS gör big bang refactorings blir mindre påtaglig om man följer en bra standard och har en hög kvalitet på koden. I slutändan kan detta ge ett bättre slutresultat med er stories gjorda, mer läsbar kod men framförallt studenter som lärt sig mycket. 13

14 REFERENSER REFERENSER Referenser [1] E. V. Emden and L. Moonen, Java quality assurance by detecting code smells, Los Alamitos, CA, USA, p. 97, [2] M. Fowler and K. Beck, Refactoring: Improving the design of existing code, p. 403, [3] [4] [5] [6] [7] [8] S. Loveland, Using open source tools to prevent write-only code, April 2009, pp [9] S. Maekelae and V. Leppaenen, Japroch: A tool for checking programming style, University of Turku and TUCS, Department of Information Technology, [10] W. F. Korman, Masters thesis, elbereth: Tool support for refactoring java programs, University of California,

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

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 lära sig av kodanalys

Att lära sig av kodanalys 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

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

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

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

TDDD78 Objektorientering: Lagring och livstid

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

Läs mer

Java's kodkonventioner och arbete i grupp

Java's kodkonventioner och arbete i grupp Java's kodkonventioner och arbete i grupp Anders Hagsten Lunds tekniska högskola d01ah@efd.lth.se 2005-02-13 Sammanfattning Denna djupstudie handlar om faktorerna som ger tydlig och lättläst kod och hur

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

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar hur mjukvaror skapas, anpassas och utvecklas samt programmeringens roll i informationstekniska sammanhang som datorsimulering och praktisk datoriserad problemlösning.

Läs mer

Analysverktyg för Code smells och Test coverage. Djupstudie för Coaching av programvaruteam 2015

Analysverktyg för Code smells och Test coverage. Djupstudie för Coaching av programvaruteam 2015 Analysverktyg för Code smells och Test coverage Djupstudie för Coaching av programvaruteam 2015 Lund, 6/3 2015 Christian Kuijer Andersen Rickard Johansson dat11can@student.lu.se dat11rjo@student.lu.se

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

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

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

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7) Översikt Programmering tillämpningar och datastrukturer 729G58 (HKGBB7) Kursinformation Objektorienterad programmering: Klasser och objekt Arv Polymorfism Metoder Programexempel Programmering tillämpningar

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

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

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

Läs mer

Föreläsning 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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Gränssnitt igen För att kunna ändra på olika delar av programmet utan att andra delar

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

SKOLFS. beslutade den XXX 2017.

SKOLFS. beslutade den XXX 2017. 1 (11) Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan, inom kommunal vuxenutbildning på gymnasial nivå och inom vidareutbildning

Läs mer

Objektorientering: Lagring och livstid

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

Läs mer

Ö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

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Parameteröverföring. Exempel. Exempel. Metodkropp

Parameteröverföring. Exempel. Exempel. Metodkropp Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

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

Planering Programmering grundkurs HI1024 HT 2014

Planering Programmering grundkurs HI1024 HT 2014 Planering Programmering grundkurs HI1024 HT 2014 Föreläsning V36 Föreläsning 1 Vad är programmering? Boken! Kurs-PM Vad är ett program? Kompilerande- Interpreterande Programmeringsmiljö Hello World! Att

Läs mer

Programmeringsteknik II

Programmeringsteknik II Programmeringteknik II Kursintroduktion http://www.it.uu.se/edu/course/homepage/prog2/vt18/ 2018-03-19 Programmeringsteknik II 2018-03-19 1 / 9 Lärare Carl Nettelblad (kursansvarig) Anna Eckerdal Biträdande

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

Läs mer

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera Föreläsning 2 Variabler, tilldelning och kodblock if-satsen Logiska operatorer Andra operatorer Att programmera Variabler Det är i variabler som all data (information) lagras. Genom att ändra värde på

Läs mer

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH F2 XP Extrem Programmering översikt EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH Vad är XP? En metod för hur man utvecklar programvara i grupp i nära samspel

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

Programdesign. Dokumentera. Dokumentera

Programdesign. Dokumentera. Dokumentera Programdesign Dokumentera Välj datastruktur så programmet blir så enkelt som möjligt. Välj algoritm så programmet blir lättläst, robust och effektivt. Analysera programmet för att få en bra metod. Överväganden

Läs mer

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH F2 XP Extrem Programmering översikt EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH Syfte & Mål Ge en helhet av vad XP är Mål & syfte med XP - varför ser metoden

Läs mer

Continuous Integration med Jenkins. Linus Tolke Enea Experts

Continuous Integration med Jenkins. Linus Tolke Enea Experts Continuous Integration med Jenkins Linus Tolke Enea Experts Föredraget Grunderna i mjukvaru-cm Trender inom mjukvaruutveckling Continuous Integration Vad är Jenkins Demo Jenkins i ArgoUML-projektet Problem

Läs mer

Kodanalys med hjälp utav SemmleCode

Kodanalys med hjälp utav SemmleCode Kodanalys med hjälp utav SemmleCode Henrik Andersson, D05 (dt05ha1@student.lth.se) Erik Mossberg, D01 (d01em@student.lth.se) 18 Februari 2008 Sammanfattning Avsikten med denna rapport är att läsaren ska

Läs mer

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00 Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del

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

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

Cult of Code Quality

Cult of Code Quality Jakob Schyberg (d00jsc) 2005-02-13 Coaching av Programvaruteam Josef Granqvist (d00jgr) LTH Institutionen för Datavetenskap Cult of Code Quality Vad kan en coach göra? Denna djupstudie handlar om kodkvalitet.

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

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

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4: (22 januari 2016 F2.1 ) Föreläsning 2 Täcker material från lektion 1, 2, 3 och 4: Datatyper Aritmetik Tecken och strängar Klasser, Objekt Metoder Villkor, villkorssatser och iterationer main-metoden Kodstandard

Läs mer

Objektorientering: Lagring, räckvidd och livstid

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

Läs mer

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20 Programdesign Välj datastruktur så programmet blir så enkelt som möjligt. Välj algoritm så programmet blir lättläst, robust och effektivt. Analysera programmet för att få en bra metod. Överväganden vid

Läs mer

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

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

Läs mer

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

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011, Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman

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

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

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

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

Läs mer

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

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

Läs mer

TDP005: Introduktion till Make

TDP005: Introduktion till Make TDP005: Introduktion till Make Jonas Lindgren jonas.lindgren@liu.se Torbjörn Lönnemark torbjorn.lonnemark@liu.se Niklas Hayer 2013-11-14 1 1 PROGRAMMET MAKE 2 1 Programmet make Om du kör make letar programmet

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

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

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

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

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

Läs mer

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: Föreläsning 1 OH: Övergripande information Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: * maskinspråk = ettor och nollor, kan bara en maskin förstå. * programmeringsspråk

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

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

Ö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

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

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

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

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

Inlämningsuppgifter, EDAF30, 2015

Inlämningsuppgifter, EDAF30, 2015 LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programmering i C++ Inlämningsuppgifter, EDAF30, 2015 Det finns två deluppgifter som båda ska lösas: 1. skriv ett program för att hantera bankkonton

Läs mer

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA Jag: Christer Labbassar: Caroline: Johan: Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande

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

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1 Grundläggande programmering DVG A08 & ISG A04 Allmän information Grupp C och D slås ihop Schemat är ändrat Kurs i programmering utan förkunskaper Hjälp oss med detta Lita inte på era klasskamrater De ställer

Läs mer

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? TDDD78, TDDE30, jonas.kvarnstrom@liu.se 729A85 jonas.kvarnstrom@liu.se

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Java Språket Utmatning av Sträng litteraler Variabler

Läs mer

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

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

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C Datatyp Aritmetiska operatorer Omvandling av typer Reserverade ord Mikael Djurfeldt Logiska operatorer

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

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Introduktion till Java -- för Pythonprogrammerare Historia: C, C++ 3 Historia: Oak 1 4 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad

Läs mer

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet. Uppgift 1 Ett programmeringsparadigm är i grund och botten ett sätt att arbeta, ett sätt att möta problem. Det finns flera olika paradigm där varje paradigm har sina egna styrkor och svagheter. Det som

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

Läs mer

2D1339 Programkonstruktion för F1, ht 2004

2D1339 Programkonstruktion för F1, ht 2004 2D1339 Programkonstruktion för F1, ht 2004 Kontrollskrivning 1 Onsdag 24/11 2004 kl 11.15 12.00 Endast ett svar är rätt på varje fråga! Om mer än ett svar givits blir det noll poäng på frågan. Alla skriftliga

Läs mer

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin) Lektion Java Grunder Javas historia Ursprungligen utvecklades Java (1991) för att användas i olika typer av konsumentelektronik (mikrovågsugnar, videoapparater) av programmerare på Sun. Språket kallades

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val 732G11 Linköpings universitet 2011-01-26 1 2 3 4 Program recept 1 spaghetti = 100; 2 salt = 1; 3 olja = 5; 4 köttbullar = 8; 5 ketchup = 0,5; 6 koka(salt, spaghetti); 7 micra(köttbullar); 8 Om(micron ==

Läs mer

Programmering. Den första datorn hette ENIAC.

Programmering. Den första datorn hette ENIAC. Programmering Datorn är bara en burk. Den kan inget själv. Hur får man den att göra saker? Man programmerar den. Människor som funderar ut program som fungerar. Datorn förstår bara ettor och nollor och

Läs mer

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar Skapa testfall Testing Köra testen Hitta fel Inspections and reviews Verifiera resultatet Formal methods Static analysis Completeness Verifiering Kvalitet Maintainability Validering Traceability Fault

Läs mer

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar Föreläsning 3: Typomvandling, villkor och val, samt textsträngar Camilla Kirkegaard camilla.kirkegaard@liu.se Linköpings universitet Sweden October 14, 2013 1 Innehåll n n n n n Repetition Typomvandlingar

Läs mer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

A ToolGuide for Eclipse: En fördjupning i några av verktygen i Eclipse och hur de underlättar XP s practices

A ToolGuide for Eclipse: En fördjupning i några av verktygen i Eclipse och hur de underlättar XP s practices A ToolGuide for Eclipse: En fördjupning i några av verktygen i Eclipse och hur de underlättar XP s practices Mattias Jarheden och Thomas Forsström Sammanfattning Denna djupstudie försöker ge en inblick

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

Tentamen Grundläggande programmering

Tentamen Grundläggande programmering Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4:

Läs mer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java jonas.kvarnstrom@liu.se 2018 TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java Kursinformation Examinator, kursledare: Jonas Kvarnström Fråga kommentera avbryt! Utan OO har vi datastrukturer

Läs mer

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Läs mer

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik 2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det riktiga provet tar 45 minuter (en lektionstimme) och det

Läs mer

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige Är varje påstående som kan formuleras matematiskt*) alltid antingen sant eller falskt? *) Inom Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige Exempel: 12 = 13 nej, falskt n! >

Läs mer

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

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

Läs mer

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander F5 Selektion och iteration ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Boolska uttryck Boolska uttryck använder sig av jämförelseoperatorer < > = ==!= Resultatets datatyp är boolean

Läs mer

D J U P S T U D I E I E D A S I M P L E C O D E A N D D E S I G N

D J U P S T U D I E I E D A S I M P L E C O D E A N D D E S I G N D J U P S T U D I E I E D A 2 7 0 S I M P L E C O D E A N D D E S I G N S. Marcus Jacobsson D03, Lunds Tekniska Högskola d03mj@efd.lth.se S. Magnus Weinberg D03, Lunds Tekniska Högskola d03mw@efd.lth.se

Läs mer