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
|
|
- Axel Vikström
- för 8 år sedan
- Visningar:
Transkript
1 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 S. Marcus Jacobsson D03, Lunds Tekniska Högskola d03mj@efd.lth.se S. Magnus Weinberg D03, Lunds Tekniska Högskola d03mw@efd.lth.se Version
2 Denna djupstudie tar upp vikten av simple code and design i ett XP projekt. Här tas det bland annat upp hur bad code identifieras och en kort sammanfattning av några av de viktigaste mönsterna i XP. Rapporten tar även upp en granskning av kod och design från en av utvecklingsgrupperna som läste kursen Programmering i grupp VT 2006 vid Lunds Tekniska Högskola. 2
3 Innehållsförteckning: 1 INTRODUKTION INLEDNING BAKGRUND TEORI OM SIMPLE CODE AND DESIGN SIMPLE CODE AND DESIGN DESIGN MÖNSTER Observer Singleton Command Abstract server AGILE DEVELOPMENT MOT BIG UPFRONT DESIGN METAFORER BAD CODE SMELLS Vanliga tecken på dålig kod Lösning i agila projekt KONSEKVENSERNA AV DÅLIG DESIGN VIKTEN AV REFAKTORISERING OCH TEST DRIVEN DEVELOPMENT GRANSKNING AV SIMPLE CODE AND DESIGN I XP TEAM GRANSKNING AV THE BLACK TEAM Mönster i koden Onödig komplexitet Agile design eller big upfront design? Bad code Utvecklingstopp Påverkan av refaktorisering Efter refaktorisering SAMMANFATTNING ETT EXTRA TACK TILL REFERENSER
4 1 Introduktion 1.1 Inledning Detta är en djupstudie i kursen "Coaching av programvaruteam" på LTH. Djupstudien handlar om hur "Simple Code and Design" kan användas. Rapporten tar även upp vikten av att söka efter Bad Code i projekt. Djupstudien redovisar även resultatet av en analys av kod skriven av the black team och påpekar tecken på dålig kod. the black team är ett alias för en av utvecklingsgrupperna i kursen "Programmering i Grupp. Rapporten är inriktad på hur dålig kod ska upptäckas och lite om riskerna för vad som händer om man ignorerar det faktum att det finns dålig kod. Förhoppningen är att läsaren ska få en bättre inblick om vikten av bra kod i agila projekt. 1.2 Bakgrund I all programmering finns det vissa ramar man borde hålla sig innanför för att undvika onödigt arbete, fel och komplexitet. För att försöka minimera problem som onödigt komplex kod och felaktig design försöker programmeraren att använda sig av tekniker ur "Simple Code and Design" när han ska utveckla programmet och letar ständigt efter felaktigheter med hjälp av sin kunskap om "Bad Code Smells". Dessa finns i varierande utsträckning i alla projekt men med hjälp av kunskap och erfarenhet så kan de undvikas ganska effektivt. Med automatiska testsviter och tekniker som "Test First" så kan dagens utvecklare relativt enkelt refaktorisera felaktigheter och fortfarande vara säkra på att koden de skrivit fortfarande håller åtminstone lika hög kvalité som föregående versioner av koden. Huruvida ett stycke kod sedan kan anses vara enkel eller lättförståelig kan variera beroende på programmerarens kunskap och erfarenhet av tidigare sedda lösningar på problemet. I många fall kan det verka som att koden måste vara komplex för att uppnå rätt funktionalitet men detta stämmer oftast inte. 2. Teori om simple code and design 2.1 Simple code and design Med simple code and design menas en design som är enkel att förstå och samtidigt löser det problem som utvecklaren ska implementera. Detta utan att införa bad code samt någon onödig komplexitet. Den ska inte förväxlas med kod som är så enkel att den blir dum och då är omöjlig att arbeta vidare på. Designmönster är ett utmärkt sätt att genomföra simple design, man bör dock vara medveten om att det ger onödig komplexitet om man använder designmönster in absurdum. Vad som är simple design kan även variera beroende programmerarnas kompetens, en design som är enkel för en expert kan verka svårförståelig och komplex för en nybörjare. 4
5 Ett bra sätt att tänka när man ska skapa en design är att se till att man använder sig av tre grundläggande tankesätt ur XP: Consider the Simplest Thing That Could Possibly Work Se till att använda den enklaste lösning som uppfyller de kraven som är ställda. Var dock uppmärksam på att det inte alltid är den mest basala lösningen som är den bästa, tänk: simple, not stupid. Den enklaste lösningen är inte nödvändigtvis den lösning som är lättast att ändra. En lösning som är väldigt dynamisk innehåller ofta onödigt komplexitet. Enkel design betyder inte heller att det ska vara så få rader kod som måste ändras för att ny funktionalitet ska kunna implementeras. Ex. Det är bättre att använda en textfil för att lagra data än en databas om textfilen räcker för att täcka kraven på lösningen. You Aren t Going to Need It. Lägg inte ner kraft på att förutse framtida behov utan se istället till att nuvarande behov är tillgodosedda. Spenderar man tid på att förutspå framtiden så riskerar man att implementera funktionalitet som kunden inte vill ha. Once and Only Once. Istället för att lägga till duplicerad funktionalitet så är det bättre att generalisera funktionen. Första gången går det bra att göra något mindre generellt. Andra gången funktionaliteten behövs så får man refaktorisera och anpassa koden så att den kan uppfylla båda kraven. Duplicerad kod kostar mer att underhålla och uppdatera ( double maintenance ). Dubbel funktionalitet gör även projektet svårare att överskåda. 2.2 Design mönster För att underlätta för team med många utvecklare så använder man sig oftast av design mönster. Detta är mönsterlösningar som många utvecklare känner till. För många av de vanligaste problemen finns det bra mönster som underlättar implementering av funktionalitet. Detta sparar även utvecklarna mycket tid då de inte behöver uppfinna hjulet flera gånger. Eftersom XP kräver att utvecklarna är insatta i alla delar av koden så är det lättare om standard mönster används då utvecklarna inte behöver sätta sig in i en komplex lösning. Även om mönster kan lösa många problem så ska man inte använda mönster i onödan. Kan man uppnå tillräckligt bra resultat för att implementera en story utan att använda ett komplext mönster så är detta att föredra. Nedan beskrivs några mönster som kan anses passa väl in i ett agilt projekt, detta eftersom alla mönsterna följer SRP. Observer har valts då den är lämplig vid beroendekedjor som är viktiga att förstå t. ex. när man vill använda tabeller i AWT/Swing. Singleton är bra då man bygger en enkel databas och är ett bra exempel på hur en statisk referens till en klass kan användas. Command är ett exempel på hur klasser med ett gemensamt användningssätt kan fungera. Abstract server valdes pga. sin liket till Template och eftersom den beskriver arv på ett tydligt sätt, vilket är viktigt i all OO programmering. För mer information se Agile Software development av Robert C. Marting. 5
6 2.2.1 Observer Observer är ett av de mönster som kan vara svårt att förstå i början. Men när man väl lärt sig det så är det lätt att få det att passa in i ett projekt. Exempel på ställen där det kan tänkas fungera är ett excel liknande program där man använder mönstret för att hantera celler som uppdateras. Ett annat exempel kan vara att använda observer-mönstret för att utveckla ett gui med test first. Problemet med observer-mönstret är att det är svårare att förstå programmet och det blir svårare att söka. Detta strider mot Simple design. Därför bör man vara aktsam när man väljer att implementera observer-mönstret i XP. Men det är inte ovanligt att trots att det kan vara en komplex lösning så kan det vara den lättaste lösningen för att implementera ny funktionalitet. Fördelen med observer-mönstret är att det är lätt att lägga till en ny observerare utan att göra några ändringar i de objekt som blir observerade. Detta är väldigt viktigt i agila projekt då det ger en svag koppling mellan olika klasser Singleton I objektorientering finns det en riklig mängd av samband och förhållandesätt. Utav dessa förhållanden är ett av de mest grundläggande förhållandet mellan klasser och objekt där det brukar finnas ett en till flera förhållande mellan en klass och många objekt. Men sen har man ju situationer där man inte kan eller vill tillåta mer än ett objekt per klass. Ett av mönsterna som kan användas för att lösa ett sådant problem är singletonmönstret. En singleton skapar som mest ett objekt och håller sedan en statisk referens till sig själv som inte ska kunna förstöras. En singleton saknar alltid en konstruktor och ger ifrån sig en referens till sig själv genom en statisk metod ofta kallad instance. Exempel på bra tillfällen att använda singleton är Factory klasser eller då man vill ha en central hanterare. Detta mönstret kan användas för att hantera en global databas. Där det inte behövs mer än en instans som ska kunna nås i alla delar av programmet. Detta underlättar för utvecklare då de inte behöver skicka med en referens till klassen i projektet. Dock strider detta mot lösa kopplingar mellan klasserna, vilket är något man bör sträva efter i XP Command Ett av de mest lättförståeliga och användbara mönstren är just commandmönstret. Detta mönster använder sig av några av de mest grundläggande idéerna i objektorienterad programmering till grundstomme. Mönstret ger en förvånansvärt bra överskådlighet även i lite mer avancerade vidareutvecklingar. Detta mönster använder sig av ärvning eller interface för att uppnå en gemensam grund. Denna grund utnyttjas sedan för att skapa ett gemensamt sätt att använda en metod hos klasserna. Genom att bara ha en operation do (eller motsvarande) så skapas väldigt lösa kopplingar mellan klasserna. Detta är väldigt viktigt i agila metoder för att undvika att tester fallerar samt svåra merge konflikter. Command mönstret underlättar användning av klassen genom att påtvinga SRP. 6
7 2.2.4 Abstract server Möjligheten att enkelt kunna bygga ut, ersätta samt att lägga till klasser är några av de mest centrala delarna i objektorienterad programmering. Utan dessa möjligheter kommer ett projekt ha betydligt svårare att bli slagkraftigt i dagens mjukvaruindustri. Detta gör att användaren lätt kan lägga till ny funktionalitet genom att implementera ett interface. Eftersom klasserna som ska använda funktionaliteten bara känner till ett interface så behövs det inte göra någon ändring i de användande klasserna. Detta är en viktig del i XP då det läggs till ny funktionalitet utan så mycket tanke på design. Detta bidrar till lösa kopplingar mellan klasser vilket också är viktigt i XP. Ett praktiskt exempel på interface är i Sun s java awt där de flesta klickbara komponenter kan lägga till en eller flera lyssnare utan att specifikt deklarera deras klasser. 2.3 Agile development mot big upfront design I agila utvecklingsmetoder förespråkas en enkel liten design i början av ett projekt för att uppnå maximal flexibilitet. Denna grunddesign ska sedan utvecklas med tiden och till sist vara komplett. Detta fungerar mycket väl om både projektet och teamet är litet men för ett enterpiseprojekt med väldigt många utvecklare och en striktare krav-profil kommer detta ofta vara mindre slagkraftigt. Big upfront design innebär istället att hela projektets design fastslås innan någon funktionalitet implementeras. Problematiken som kommer med big upfront design är för det första att designen blir svårare att ändra för att implementera nya features samt att dålig design kan ge onödig komplexitet och duplicerad kod. Däremot kommer big upfront design ge en klarare bild över designen och ge en renare kod vid första implementeringen. Men allt eftersom projektet utvecklas och nya krav tillkommer så kan även big upfront design få bad code och behöva refaktoriseras. Men denna metodik tar inte upp refaktorisering vilket ofta leder till sämre kod och ökade kostnader för implementering. Detta till skillnad från agila metoder som tar upp refaktorisering och bad code som en naturlig del av utvecklingen. Här växer designen fram som ett fågelbo där man tar en bit, implementerare och upprepar detta tills det att designen uppenbarar sig. Detta genererar ofta mer bad code under implementeringen, men eftersom utvecklarna refaktoriserar efteråt så implementeras detta aldrig i den slutgiltiga produkten. Detta är förvisso idealet och efterföljs inte alltid. Fördelen med agila metoder är att det är lättare att svänga när kunden ändrar sina krav. Viktigt att komma ihåg i båda fallen är att en design dels måste vara tillräckligt övergripande för att täcka ett projekts användning och dels kan behöva ändras eller göras om då förändringar sker. I modern spelutveckling (speciellt online spel) så utvecklas spelen under hela spelet livslängd. Här passar de agila metoderna mycket bra. Det är nästan omöjligt att använda big upfront design eftersom kraven ändras regelbundet. I enterpriseprojekt passar exempelvis big upfront design bättre. Här har ofta kunden bättre definierade krav och det sitter fler utvecklare som ska koordineras. Big upfront design kan också lämpa sig bättre om både hårdvara och mjukvara ska utvecklas. 7
8 2.4 Metaforer Metaforer är ett kraftfullt verktyg i XP för att underlätta kommunikationen mellan utvecklare och kunder. Men det är även ett hjälpmedel för att göra koden lättare att förstå 1. Det handlar om att använda metaforer när utvecklare döper klasser och variabler. Det vanligaste är att man använder sig av naive metaphors, typexempel är att en klass som hantera en tävling i Enduro kallas för Race eller en klass som håller information om en förare kallas för driver. Utöver detta så väljer många utvecklare att använda mer tekniska metaforer för att beskriva arkitekturen, som resultat delen i enduro kallas ofta för server medan delen för att registrera tider kallas för klient. Genom att använda metaforer i namngivningen så blir det lättare att förstå kopplingen mellan koden och verkligenheten. Problemet är att metaforer inte alltid hjälpa teamet. En metafor som är självklar för någon kan vara helt obegriplig för en annan. Ett annat problem är att man ibland använder sig av metaforer som inte beskriver problemet tillräckligt bra. Detta kan leda till att utvecklarna väljer fel väg när de ska implementera ny funktionalitet vilket kan leda till en onödigt komplex eller i värsta fall en icke fungerande lösning. 2.5 Bad code smells Det bästa sättet att förstöra ett projekt är att ha för mycket dålig kod. Ett mantra som utvecklare bör använda sig av är bad code smells. Trots att dålig kod kan ställa till mycket problem så finns det i stort sett alltid i ett projekt. Det vanligaste sättet att dölja komplex kod är att använda kommentarer för att förklara vad den gör. Kommentarer är parfym till koden för att dölja stanken. Många gånger så beror dålig kod i XP på att utvecklare inte har en bra överblick över projekt eller inte vågar ändra kod de inte varit med och skrivit. Det krävs mycket mod för att ändra någon annans dåliga kod. Men det krävs även mycket kunskap för att upptäcka dålig kod. Det bästa sättet att undvika dålig kod i XP är att refaktorisera både före och efter att en story implementeras. Det är också viktigt att utvecklarna läser igenom koden efter varje iteration. Genom att läsa igenom koden så får utvecklarna en bättre överblick över programmet och kan då göra de ändringar som krävs. För att underlätta utveckling är det även bra att ha tillgång till ett UMLdiagram. För mer information om bad code så kan ni läsa A Taxonomy for Bad Code Smells" 2 och Bad smells in code Vanliga tecken på dålig kod Några av de vanligaste problemen är stora klasser, duplicerad kod och stora metoder. Large Classes: Kommer av att en design inte ändras då det behövts trots att nya features implementerats. Detta leder till att klasser växer sig enorma och svåröverskådliga. Shotgun surgery: Detta innebär att man måste göra små ändringar i många metoder som ligger i många klasser för att implementera ny funktionalitet
9 Large methods: Det är vanligt att det skapas långa metoder i XP. Ny funktionalitet ska hanteras men istället för att bryta ut den i en dynamisk metod så lägger man in kod i de metoder som redan existerar. Duplicated code: Innebär ett misslyckande med avseende på Once and Only Once. Man har antingen haft för bråttom eller inte insett att i stort sett samma sak redan görs på andra ställen i koden. Detta är ett vanligt fel hos oerfarna utvecklare. Lazy Classes: Detta är en klass som inte innehåller någon väsentlig egen funktionalitet utan istället bara delegerar ansvar till andra klasser. Divergent change: Enligt Single Responsibility Principle (SRP) ska varje klass ha ett Väldefinierat ansvarsområde. Men med tiden kan ibland klasser få bredare och bredare ansvar. När detta skett borde klassen delas upp i flera olika andra klasser då ansvarsområdet annars inte kan anses vara väldefinierat. Genom att dela upp funktionalitet i flera klasser minskas även risken för svåra merge konflikter. Message chains: Om man har en klass som begär ett object från en annan klass som i sin tur måste begära objektet från en tredje osv. Detta kallas message chains och är ett tecken på man kan ha ett fel i sin design. Comments: Kommentarer fungerar som deodorant för koden (undantaget javadoc). Om det behövs kommentarer i koden för att göra den begriplig så har man ofta onödig komplexitet eller en dålig kod standard. Istället för att skriva beskrivande kommentarer ska man ändra koden så att den blir läslig. Long parameter lists: Om en metod tar för många parametrar så blir den svårare att använda. En metod behöver inte få all information för att lösa uppgiften, bara tillräckligt för att hitta informationen. Temporary fields: Ibland lägger utvecklare variabler som enbart används lokalt i en metod som attribut. Detta kan uppstå om utvecklare inte refaktoriserar ordentligt efter att de gjort ändringar. Ex. Ett attribut kan ha används i två metoder och så har den ena metoden plockats bort. Dead code: Kod som inte används av projektet ska plockas bort. Detta är ett vanligt problem om man använder agila utvecklingsmetoder där utvecklarna inte refaktoriserar ordentligt eller inte har tillräcklig bra kunskap om arkitekturen och koden. Static coupled classes: Om klassernas relationer är väldigt statiska så leder detta ofta till svåra merge konflikter och problem som är svåra att lösa. Kopplingar mellan klasser ska därför vara väldigt lösa och dynamiska. Lösa kopplingar mellan klasser har varit ett av de starkaste tecken på väldesignad kod i över 30 år
10 2.5.2 Lösning i agila projekt För att minska mängden bad code i projektet så måste utvecklarna refaktorisera ofta. Det krävs att det refaktoriseras både före en story implementeras och efter den checkas in. Detta är svårt för utvecklare som är nya till XP. Utvecklarna måste ha mod att våga ändra både i metoder och också klasser men även arkitekturen. Men för att kunna göra refaktoriseringar så krävs det att utvecklarna har bra insikt i vad koden gör och hur programmet fungerar. Det krävs även en heltäckande test svit för att undvika dålig kod. 2.6 Konsekvenserna av dålig design I XP görs ingen inledande design av arkitekturen. Filosofin är en story i taget och teamet ska implementera den på det lättast tänkbara sättet. Detta medför att designen blir hackig och behövs refaktoriseras. Målet i XP är att utvecklarna ska refaktorisera för en story påbörjas och efter den checkas in. Detta är något som många utvecklare har svårt för, speciellt under tidspress. Brist på refaktorisering och bristande kunskap om projektet leder till att designen blir sämre och mängden dålig kod ökar. Detta leder till att det blir svårare att implementera ny funktionalitet och det leder i sin tur till att det tar längre tid att bli klar med en ny story. Detta medför i sin tur till att kostnaderna för att implementera ny funktionalitet ökar. Om utvecklarna trots detta inte gör något åt problemet så riskerar hela projektet att fallera då det inte längre går att implementera någon ny funktionalitet och det blir för svårt att göra en refaktorisering för att åtgärda problemen. 2.7 Vikten av refaktorisering och Test Driven Development I de flesta projekt finns det åtminstone några ställen med "Bad Code Smells" men där ingen förändring har skett pga. antingen tidsbrist eller brist på förståelse. Det ända sättet att få bort dessa "Bad Smells" är att refaktorisera men många gånger finns det en motvilja mot att göra detta pga. risken att man förlorar funktionalitet. Denna motvilja beror på misslyckad TDD då testerna (om det nu finns några) inte tillräckligt täcker det ställe där det behövs refaktoriseras. TDD har många andra fördelar men den största är att försäkra sig om att koden man skrivit verkligen utför det man förväntar sig av den och inget annat. I TDD använder man test first eftersom man oftast inte vet exakt vad koden kommer eller inte göra förrän man testat att använda den. TDD tvingar även en utvecklare att tänka innan han börjar koda vilket kan undvika många problem som annars kan orsaka onödig komplexitet som sedan behöver refaktoriseras bort. If you want to refactor, the essential precondition is having solid tests. -- M. Fowler 10
11 3 Granskning av simple code and design i XP team 3.1 Granskning av The black team 5 En utförlig analys av teamets kod gjordes och resultatet av denna analys finns beskriven nedan( ). Efter denna refaktorisering gjordes ytterligare en analys i vilken effekterna av refaktoriseringen beskrivs( ) Mönster i koden Utvecklarna har valt att bara implementera ett av de mönster vi har tagit upp i rapporten. Detta kan dels bero på bristande kunskaper om mönster och hur de ska implementeras. Det kan även bero på att de känner sig stressade och ovana med utvecklingsmetodiken. Det mönster de valt att implementera är ett av de viktigaste men även det enklaste mönstet, nämligen Template method. De har skapat en abstrakt klass som de kallar Race och sedan låter de alla typer av race utöka denna klass. Exempelvis MarathonRace, LapRace och StageRace. Detta har gjort att det är väldigt lätt att implementera en ny racetyp i programmet. Utvecklarna använde sig även av Singleton mönstret när de skulle implementera sin databas. De har skapat en klass Database som bygger på en statisk metod instance som returnerar databasen vilket följer Singleton mönstret Onödig komplexitet Något direkt tecken på onödig komplexitet har vi inte funnit i koden. Deras design är lätt att överblicka men p.g.a. att de saknar mönster, tester och har mycket dålig kod så är det svårt att implementera ny funktionalitet Agile design eller big upfront design? Gruppen har en väldigt agil design. De har inte haft någon direkt design av projektet vilket kanske borde ha gjorts när de refaktoriserade datastrukturen första gången. Även XP kräver en viss design för att underlätta vidareutvecklingen Bad code Detta är gruppens stora problem. Det är väldigt mycket tecken på dålig kod. Detta är troligen också den stora anledningen till alla problem med deras tester. I detta avsnitt kommer det att ges exempel på dålig kod i teamets projekt. Large Classes Database Denna klass är större än nödvändigt och bryter även mot SRP. RegisterGUI Denna klass är enorm, den är 16kbyte stor vilket är mycket större än rekommenderat. Large methods ResultCreator metoden readfromfilestodb är väldigt stor. RegisterGUI BuildTable är stor och ostrukturerad. Long parameter list ResultCreator readfromfilestodb och processinputfiles har långa parameter listor
12 Lazy Classes Racer Är en String i fårakläder Duplicated code Database Metod för sortering enligt vem som vinner I ett varvlopp. Denna funktionalitet ska ligga i LapRace klassen. Temporary fields Enduro EnduroVersion är public och används bara på ett ställe i koden. Comments ResultCreator readfromfilestodb har mycket kommentarer och har mycket onödig komplexitet. FileComparer isequal har 5 kommentarer och är onödigt komplex. Dead code Sorter Saknar fullständigt funktionalitet. Database Metod har inparameter som aldrig används. Racer Innehåller metoder som inte används. Exempelvis getheader(). Record - Attributet placement används inte. RegisterGUI Innehåller både oanvända imports och oanvända attribut. Övriga brister Record Returnerar av en typ som är deklarerad som private på två ställen. RegisterGUI Innehåller för många privata klasser. MyTableModel och Clock borde inte ligga där de gör när så många klasser implementerats i koden. FileComparer metoden isequal är onödigt komplex. ReadFile Data hämtas från klassen för att användas omodifierad i klassens metoder. WriteFile Data hämtas från klassen för att användas omodifierad i klassens metoder. WriteFile Stora delar av klassen är utkommenterade när de borde vara borttagna. För exempelkod se referenslista under Example code from The black team Utvecklingstopp I mitten av projektet så hade the black team så mycket tecken på dålig kod och fel i testerna att det inte längre gick att implementera nya stories. Detta löstes genom att införa ett utvecklingsstopp. Detta gav utvecklarna god tid att åtgärda de fel som hade uppstått dels pga. av ovana inför den nya metodiken och dels pga. av bristande kunskap om TDD och refactor mercilessly. Under en hel dag implementerades ingen ny funktionalitet. Efter denna iteration så blev ny funktionalitet billigare att implementera då en bättre design uppnåtts Påverkan av refaktorisering Det var nödvändigt att göra en stor refaktorisering efter 2 iterationer. Detta eftersom deras ursprungliga design inte längre var hållbar för utveckling. Detta beror troligen på omställningen till den nya utvecklingsmetodiken men även på brister med TDD. Refaktorisering var inriktad på att skriva om datastrukturen och de delar av programmet som var beroende av denna samt att rätta felaktig kod. Efter refaktoriseringen fick de en design som gjorde det lättare att implementera nya race typer. Men den skapade problem med flera tider till förare. Så alla stories som har med sortering att göra blev mycket svårare att genomföra. Detta berodde delvis på att de som refaktoriserade inte tittade på de stories som var utdelade men även till viss del att de misstolkade stories. 12
13 3.1.7 Efter refaktorisering Vårt projekt hade många fel och tecken på dålig kod. Efter att en refaktorisering gjorts blev koden mer lättöverskådlig vilket gjorde att teamet fick bättre inblick i projektets olika delar. Täckningen av testfall blev bättre och kodkvalitén blev mer tillförlitlig. Teamet fick lättare för att upptäcka och avlägsna dålig kod. Vi upptäckte att många stories kostade mycket mindre efter att refaktoriseringen gjorts. Detta var vad vi förväntat oss och även anledningen till att refaktoriseringen skulle ske. 4 Sammanfattning Simple code and design är lika viktig som TDD i ett XP projekt. Som utvecklare och som coach är det mycket viktigt att ha bra kännedom om hur man upptäcker Bad code och hur denna ska åtgärdas. För att bibehålla Simple code and design är det viktigt att utvecklarna har bra tester som gör det möjligt för dem att refaktorisera. Det är hjälper att göra stora refaktoriseringar med jämna mellanrum och det krävs att utvecklarna är noga med att refaktorisera både före de påbörjat en story och efter de är klara med den. Som coach är det viktigt att leda utvecklarna till att undvika och refaktorisera bort dålig kod. Det kan också vara viktigt att coacherna sätter de mest erfarna utvecklarna på att förbereda för stora designändringar i projektet. Dålig kod och dålig design leder till att kostnaden för implementering av ny funktionalitet ökar. Detta kan användas som motivering för att avbryta utvecklingen och åtgärda de fel som finns. 4.1 Ett extra tack till Vi skulle vilja tacka The black team som läste kursen EDA260 vt-2006 för ett bra underlag till vår djupstudie och för ett gott arbete under refaktoriseringen och utvecklingsstoppet vilket gjorde skillnaden på kvalité mer tydlig. 13
14 5 Referenser Agile software development Robert C. Martin ISBN: A Taxonomy for "Bad Code Smells" Mika Mäntylä BAD SMELLS IN CODE The System Metaphor William C. Wake What is Extreme Programming? Ron Jeffries Example code from The black team 14
Kritik av Extrem Programmering
Kritik av Extrem Programmering Markus Borggren d01mbo@efd.lth.se Martin Persson d01mp@efd.lth.se D01, Lunds Tekniska Högskola 15 februari, 2004 Abstract I denna djupstudie kommer vi att försöka, på ett
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,
SOLID är en akronym för fem stycken designprinciper som används vid mjukvaruutveckling. SOLID står för:
Lektion 32 Övningar Korta punkter Jag vill ha en redovisning från alla grupper där ni går igenom person för person vad personen har ansvarat för och vad och vem personen har parprogrammerat på. Ta även
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
Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal
Tentamen DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl 14.00 17.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna
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
HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)
Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN) Dagens agenda Admin Tentatid och plats Tillåtet på tentan EDAF10 Föreläsning inför XL-projektet
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
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
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:
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
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)
Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.
Tentamen i EDAF5 juni 07 Skrivtid: 4-9 Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Skriv inte med färgpenna enda tillåtna färg är svart/blyerts. Skriv
Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15
DAVA15 Objekt, klasser Vad är det? Vad är sambandet mellan dem? Vad är skillnaden mellan dem? Tillstånd Signatur Kommunikation Typ Fält, parametrar och lokala variabler Likheter och skillnader Räckvidd
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
Imperativ programmering. Föreläsning 4
Imperativ programmering 1DL126 3p Föreläsning 4 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering
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
Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015
Objektorienterad Programkonstruktion Föreläsning 6 23 nov 2015 Designmönster Färdiga "recept" för att lösa (del-)problem i struktureringen av ens program Mönster kan beskriva små komponenter eller stora
Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson
Rapport grupp 4 Software Engineering Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson 2009-10-29 Processer Sprinter Scrum har varit till stor hjälp för oss för att nå våra mål,
F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander
F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod
Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel
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()
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.
Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp
Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Datum: 2008-08-14 Tid: 08-12 Plats: PC6-PC7 i E-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna varje
Refaktorisering i ett XP-projekt
Författare: Erik Norberg, Joakim Puusaari E-post: {d00en, d00jpu@efdlthse Datum: 2004-02-22 Refaktorisering i ett XP-projekt Sammanfattning I denna djupstudie delar vi med oss av våra erfarenheter av refaktoriseringar,
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
UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
UML Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Unified Modelling Language Grafiskt modelleringsspråk för att beskriva olika aspekter av objektorienterade system. Vi kommer
Agil programutveckling
Agil programutveckling Pontus Evertsson D00, Lunds Tekniska Högskola d00pe@efd.lth.se Anna Jennerheim D00, Lunds Tekniska Högskola d00aj@efd.lth.se 2003-05-15 1 1. Inledning 3 2. Extreme Programming (XP)
Objektorienterad programmering
Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad
Laboration 2: Designmönster
Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om
Tentamen i Objektorienterad modellering och design
Lunds Tekniska Högskola Datavetenskap Tentamen EDA061 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Vid bedömningen kommer hänsyn att tas till lösningens kvalitet. UML-diagram
Programmering = modellering
Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal
Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Mutability och State Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Immutability Ett icke muterbart (immutable) objekt är ett objekt vars tillstånd inte
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
F5 Enkel Design, Refaktorisering
F5 Enkel Design, Refaktorisering EDA260 Programvaruutveckling i grupp Projekt Görel Hedin Datavetenskap, LTH PVG, 2009 F5-1 Refaktorisering omstrukturering av koden utan att ändra det yttre beteendet PVG,
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
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
12 principer of agile practice (rörlig)
X-treme programming 12 principer of agile practice (rörlig) Ge nöjd kund genom tidig och kontinuerliga leveranser Den viktigaste punkten som betyder att min vill ha kontinuerlig feedback Välkomna sena
TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng
TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,
Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015
Objektorienterad Programkonstruktion Föreläsning 7 24 nov 2015 Observer (GoF) Man definierar ett "ett-till-många"-förhållande mellan objekt så att när ett objekt byter tillstånd så uppdateras alla beroende
Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel
Lösningar till Fiktiv Tentamen på kursen 2D4135 Objektorienterad programmering, design och analys med Java vt2004 Teoridel T1) (4p) Förklara kort följande grundläggande begrepp inom objektorienterad programmering:
Laboration 2: Designmönster
Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om
Labrapport över Rumbokningssytemet Grupp:1
Fakulteten för ekonomi, kommunikation, IT & data Labrapport över Rumbokningssytemet Grupp:1 Kurskod: DVGC18 Kursnamn: Software Engineering Inlämningsdatum: 2009 10 28 Scrummaster: Martin Blom Projektmedlemmar:
Agil projektmetodik Varför och vad är det?
Agil projektmetodik Varför och vad är det? Boris Magnusson Datavetenskap LTH 2016-02-08 Lite större projekt Sträcker sig över tid Involverar många deltagare som behöver arbeta parallellt Planeras - delas
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.
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
Nyttomaximering av spikes
Nyttomaximering av spikes Johan Hedin Sånemyr D11, LTH dat11jh1@student.lu.se Victor Shu-Ming Lam D11, LTH dat11vla@student.lu.se 2016-03-07 Sammanfattning Som projektledare av ett team programmerare så
Tentamen i Objektorienterad modellering och design Helsingborg
Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng
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
F5 Enkel Design, Refaktorisering. EDAF45 Programvaruutveckling i grupp Projekt Görel Hedin, Boris Magnusson,Datavetenskap, LTH
F5 Enkel Design, Refaktorisering EDAF45 Programvaruutveckling i grupp Projekt Görel Hedin, Boris Magnusson,Datavetenskap, LTH 1 XP:s Deltekniker (Practices) 1. Planering Planeringsspelet Regelbundna releaser
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
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Kopiering av objekt i Java
1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom
Gruppdynamik och gruppsykologi i Extremet Programming
Gruppdynamik och gruppsykologi i Extremet Programming Jerry Malm, d02jm@efd.lth.se Gustav Olsson, d02og@efd.lth.se Lunds Tekniska Högskola Lund, den 22 februari 2005 Sammanfattning Denna djupstudie kan
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
729G06 Föreläsning 1 Objektorienterad programmering
Översikt Formalia Vad är objektorienterad programmering 729G06 Föreläsning 1 Objektorienterad programmering Definieria klasser Skapa och använda objekt Annika Silvervarg Ciltab, IDA, Linköpings universitet
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
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
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
Proj-Iteration1. Arkitektur alt. 1
Proj-Iteration1 PVG/Coaching Boris Magnusson Datavetenskap LTH Proj-Iter1-1 Registrering Registrering Arkitektur alt. 1 Personuppgifter Starttid Sorterare Måltid Efterbehandling Resultat Tre program som
Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal
Tentamen DD2385 Programutvecklingsteknik vt 2009 Fredagen den 5 juni 2009 kl 10.00 13.00 Inga hjälpmedel utom penna, sudd och linjal Tentans del I omfattar 22 poäng. Del II har också 22 poäng Preliminära
OOP Objekt-orienterad programmering
OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym
Objektorienterad programmering, allmänt
Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1 Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara
Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?
Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 mars 2005 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet
XP-projekt: En fördjupning
XP-projekt: En fördjupning Extreme Programming Martin Karlsson marka@itn.liu.se K7522 011 36 34 63 Fem värden Kommunikation Var öppna Var ärliga Ta konflikter Diskutera Tag beslut Tag ansvar Kräver feedback,
Programmering B med Visual C++ 2008
Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,
Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016
Objekt-orienterad Programmering och Design TDA551 Alex Gerdes, HT-2016 Kursteamet Dr. Alex Gerdes kursansvarig, föreläsare Dr. Niklas Broberg examinator, (föreläsare) Fredrik Sjöholm handledare Johan Andersson
Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018
Objekt-orienterad programmering och design DIT953 Niklas Broberg, 2018 Kursteamet Niklas Broberg kursansvarig, föreläsare, examinator Johannes Åman Pohjola föreläsare Assistenter: Karin Wibergh Sarosh
DAT043 - Föreläsning 7
DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar
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
Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.
(7) Objektinteraktion Objektorienterad programmering 2 Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt. Mål Efter övningen skall du kunna konstruera ett program med
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.
2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning
2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten
Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.
Tentamen i EDAF60 29 oktober 2018 Skrivtid: 14-19 Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Skriv inte med färgpenna enda tillåtna färg är svart/blått/blyerts.
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 =
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
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
Tentamen i Objektorienterad modellering och design
Lunds Tekniska Högskola Datavetenskap Ulf Asklund Tentamen EDA061 2016 06 03, 14:00 18:00 Tentamen i Objektorienterad modellering och design Tentamen består av en teoridel om totalt 5 poäng och en problemdel
Designmönster, introduktion. Vad är det? Varför skall man använda mönster?
Designmönster, introduktion. Vad är det? Varför skall man använda mönster? Kent Petersson EMW, Mölndal Datavetenskap, Chalmers epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL: http://www.cs.chalmers.se/~kentp
Modulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Modulär design Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Separation of Concern principle Do one thing do it well. Separation of Concern är inte specifikt
Scrum + XP samt konsekvensanalys
Scrum + XP samt konsekvensanalys Daniel Nimren dt05dn8 Douglas Frisk dt05df1 Dept. of Computer Science, Lunds Tekniska Högskola, Sweden {dt05dn8 dt05df1}@student.lth.se 1 mars 2010 Sammanfattning Denna
Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?
Algoritmer och datastrukturer Allmänt om kursen Kort javagrund repetition - Klasser, metoder, objekt och referensvariabler, - Hierarkiska klass strukturer - Arrayer och arrayer av objekt - Collection ramverket
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 detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).
1 (11) TENTAMEN: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att
Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)
Objektorienterad programmering Föreläsning 8 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda (halvdag) Objektorienterad programutveckling Algoritmer Algoritmkonstruktionerna Relationer
Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Vad är ett bra program? I kursen pratar vi om bra kod utifrån ett utvecklar-perspektiv, dvs det som gör koden lätt
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
Föreläsning 15: Repetition DVGA02
Föreläsning 15: Repetition DVGA02 Vad handlar kursen om? Kursen kan i grova drag delas upp i tre delar: 1. Objekt-orienterad programmering 2. Grafiska användargränssnitt 3. Datastrukturer Dessutom genomsyras
Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram
Analys och design med hjälp av CRC 83 Klassdiagram Objekt Ett objekt är en individuellt identifierbar entitet som kan vara konkret eller abstrakt. Ett objekt har tillstånd, beteende och identitet. Reellt,
TDDD26 Individuell projektrapport
TDDD26 Individuell projektrapport Kort beskrivning av projektet Vi hade som projekt att utveckla en digital media servicer som skulle hjälpa filmentusiasten att organisera sitt filmbibliotek. Programmet
Föreläsning 4 Innehåll
Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och
Designmönster/Design patterns
Johan Eliasson Design patterns Designmönster/Design patterns Vad är det? Beprövade lösningar till återkommande programmeringsproblem Plattformsoberoende Beskrivs ofta med hjälp av UML Baseras på en bok
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
UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda
Objektorienterad modellering och design (EDAF25) Föreläsning 3 UML Objektdiagram Agenda UML objekt och sekvensdiagram Design smells Designprinciper (ALP, SRP, OCP, DIP) (, Composite) Att göra denna och
Objektorientering i liten skala
Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2012-10-24 Objektorientering i liten skala Mål I denna lab skall du skriva ett objektorienterat program. Programmet skall delas
Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.
Tentamen 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.00, sal D31 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else
Förkunskaper från tidigare föreläsningar: Objektorienterad Programmering (TDDC77) Föreläsning IX: Klasser och Objekt, Instantiering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2015 I STONE I Variabler,
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