Kodkvalitet Objekt Klass Programutveckling sker i faser

Objekt
Ett objekt är en individuellt identifierbar entitet som kan vara konkret
eller abstrakt. Ett objekt har tillstånd, beteende och identitet.
Kodkvalitet
– Reellt, gripbart, synligt ting (t ex en specifik person)
– Abstrakt ting (t ex en tid eller en anställd)
Varje objekt har ett tillstånd, ett beteende och en identitet.
150
Klass
– Tillståndet beskriver objektets egenskaper (t ex adress
och ålder hos en person)
– Beteendet beskriver vad objektet kan göra (t ex flytta).
OBS! Detta kan innebära att tillståndet ändras
– Identiteten skiljer ett objekt från alla andra objekt
151
Klassdiagram
En klass är en “byggplan” för objekt av samma sort.
– Alla objekt av en klass (instanser) har samma
sorts egenskaper och beteenden
– En klass beskriver en mängd liknande objekt
– Datatyp
Person
Namn på klassen
namn
ålder
adress
egenskaper
(attribut)
flytta
...
beteende
(metoder)
152
Johan Eliasson
Programutveckling sker i faser
• Här: starkt förenklat version
• Passar bara mindre projekt
• Fem delmoment:
– Fastställa och analysera förutsättningarna/kraven
– Skapa en design
– Implementera koden
– Testning
– Dokumentation
OBS! Testning och dokumentation ska ske
154
parallellt med de övriga momenten.
Problemlösning
• Alla större projekt ”misslyckas”, eftersom det är
omöjligt för utvecklarna att till fullo förstå uppgiften
som ska lösas och vilka alla problem som är inneboende
i uppgiften.
– Antaganden måste klargöras
– Möjliga feltolkningar måste undanröjas
• När problem/uppgifterna blir större, måste lösningen
delas in i hanterliga delar
• Denna teknik är fundamental för programvaruutveckling
• I objektorienterad utveckling delas lösningen in i objekt
och klasser
155
Legacy code - ärv kod
Legacy code - ärv kod
Skriva kod som lever i flera generationer och
varianter, som andra än du själv jobbar med.
Vad är viktigt då för att minimera kostnader och
risker?
Ändra/jobba med kod som andra (eller du själv)
har utvecklat, tex.
»
Bygga vidare
»
Ny version
»
Kundanpassa
156
»
Rätta fel
Sträva efter kod som är…
• kod som är bra, dvs, hög kodkvalitet
• kod som är man kan stå för, för man kan
garantera att den gör det den ska göra och
inget annat, bra testad
• kod som är beskriven på ett bra och tydligt
sätt, dvs bra dokumenterad
Samt
Färdigheten att läsa och förstå andras system och kod,
158
dokumentation, etc.
Livscykel, vidareutveckling och
återanvändning
Scenario 1: Nyproduktion av ett hus, som ska
fungera som skola
Scenario 2: Ombyggnation av ett modernt hus,
byggt 2010 används som en förskola och ska
fortsätta att användas som F-9 skola
Scenario 3: Ombyggnation av ett gammal Kmärkt skola byggt 1870, till kontor
Scenario 4: Åtgärda en skola som är klassat
som ett sjukt hus. Skolan är bygg 1990. 160
Systemen/koden är lätt att förstå
Lätt att testa det nya utan att ha sönder det gamla
157
Kodkvalitet
Vad är god kodkvalitet?
Vad är dålig kodkvalitet?
Hur ”mäter vi kodkvalitet”?
Vem bär ansvaret för kvalitet på koden?
159
Livscykel, vidareutveckling och
återanvändning
Scenario 1: Nytt system som ska byggas från
grunden
Scenario 2: Utökning av funktionalitet i RSV
system för folkbokföring som påbörjades 1985
Scenario 3: Anpassning ett system mot en helt
ny kund, systemet utvecklat sedan 2010
Scenario 4: Jobba bort felrapporter som
kommer in på mobiltelefonsystem, för att
komma ut med en helt ny release.
161
Kodkvalitet
Hur kan man jobba med kodkvalité?
Hur kan man jobba för att nå hög kvalité?
Vems ansvar är det om en klass eller metod beter
sig konstigt och orsakar fel?
1. Jobba strukturerat genom hela
processen
162
Hur kan man jobba med kodkvalité?
•Fokusera på kvalité och inte kvantitet
– Bygg det ”viktigaste” först”
•Jobba tillsammans
– Gemensamt ansvar en för alla alla för en
– Kontinuerlig uppföljning av processen
•Kod-granskning
•Lätt att läsa, lätt att testa, förklara
•Koden följer grundläggande kodprinciper
•Koden, systemet är inte onödig svårt att förstå
•Involvera testning i ett tidigt skede av processen
163
Hur kan man jobba med kodkvalité?
• Tydlighet i förväntningar
• Tydliga krav vad som ska systemet ska kunna göra
• Tydliga definitioner när en funktion/del fungerar som den ska
både i det lilla och i det stora
• Tydliga definitioner på när det inte fungerar (undantag, fel, etc)
• Bra design
• System/klassdesign/metoddesign
•Systemarkitektur, klasser, metoder, etc
• Dokumenterad testning på många nivåer
• Enhets, integrering, system,…acceptans-test
• Hur ska man följa upp/garantera att koden fungerar även efter
flera generationer
• Mer om det senare
164
165
OOA&D
Systemdesign/arkitektur
• Modeller underlättar kommunikation
• Vilka klasser består systemet av
• Arvshierarkier, beroenden, synlighet, mm
• Minimera beroenden men samtidigt jobba med arv
för att minska kodningen och få bättre, tydligare
struktur
• Jobba strukturerat med att förstå uppgiften
• Jobba strukturetat med att fånga en
systemarkitektur
• Jobba med kända designlösningar -s.k Designmönster och Anti-mönster
CRC
166
– Oberoende av programspråk
– Abstraherar från oväsentliga detaljer
– Underlättar ”testning” i tidigt skede
• Några bra verktyg
– CRC-kort
– UML (ett modelleringsspråk)
– Designmönster (Fabrik, ...)
– Interaktionen/flödet
• Scenarios
• Swim-lanes
• Skisser
• Mock-up:er
167
Fastställa och analysera förutsättningarna/
kraven
•
•
•
•
Vad ska göras?
Vilka begränsningar finns?
Är alla oklarheter utredda?
Skapa en OO-design
• Bestäm klasser, objekt och metoder som behövs
– Vad finns redan?
• Bestäm algoritmer för problemlösningen
• I princip oberoende av programmeringsspråk
Gör modeller/utkast
– Diagram
– Pseudokod
• Undvik att tänka på implementationen
168
Implementation
• När man kommer till detta steg så har man ”ritning
klar”, det mesta av ”materialvalen är gjorda”
• Översättning av design till källkod
• Implementationen fokuserar på kod-detaljer
• Alla viktiga beslut tas vid analys och design
170
• Designa för återanvändning?
– Det är svårare att göra generella lösningar
– Kan löna sig i framtiden
– Återanvändning har varit en stor anledning till OOboomen
169