Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected]

19
Designa klasser Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar fredric . ragnar @ hgo .se Telefon 0498-299948 Andreas Hedrén andreas . hedren @ hgo .se Telefon 0498-299954 Föreläsning 7, Kapitel 7

description

Föreläsning 7, Kapitel 7. Designa klasser Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling. Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected] Telefon 0498-299954. Centrala delar. - PowerPoint PPT Presentation

Transcript of Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected]

Page 1: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Designa klasser

Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling

Fredric Ragnar [email protected] 0498-299948Andreas Hedrén [email protected] 0498-299954

Föreläsning 7, Kapitel 7

Page 2: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Centrala delar

• Ansvarsdriven design• Koppling (coupling)• Avgränsat ansvar (cohesion)• Refactoring

Page 3: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Mjukvara förändras

• Mjukvara är sällan någonting som skrivs en gång och sedan är oförändrad

• Mjukvara byggs ut, korrigeras, underhålls, görs om och förändras

• Arbetet utförs av olika personer över tid (ofta årtionden)

Page 4: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Förändras eller dö

• Det finns två alternativ för mjukvara:– Antingen genomgår den kontinuerlig förändring

– Eller så dör den

• Mjukvara som inte kan underhållas kommer att kastas

Page 5: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Kvalitativ kod

Två viktiga delar för kvalitativ kod:

• Koppling (coupling)• Avgränsat ansvar (cohesion)

Page 6: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Koppling (coupling)

• Koppling syftar på länkar mellan olika delar av ett program• Om två klasser är starkt beroende av flera detaljer hos varandra

finns det en stark koppling mellan klasserna• Vi eftersträvar svag koppling mellan klasser

Page 7: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Svag koppling

Svag koppling gör det möjligt att:• Förstå en klass utan att behöva läsa andra klasser• Förändra en klass utan att det påverkar andra klasser• Därför ökar möjligheten att enkelt underhålla och återanvända

koden

Page 8: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Avgränsat ansvar (cohesion)

• Begreppet syftar på antalet och spridningen av olika funktionalitet som en enskild enhet är ansvarig för

• Avgränsat ansvar är något som ska eftersträvas för både klasser och metoder

• Vi eftersträvar att varje klass och metod har ett specifikt, väl avgränsat ansvar

Page 9: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Väl avgränsat ansvar

Väl avgränsat ansvar gör det möjligt att

enkelt:• Förstå vad klassen eller metoden gör• Ge tydliga och informativa namn• Återanvända klasser och metoder

Page 10: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Väl avgränsat ansvar

Metoder• En metod ska ansvara för en och endast en väl avgränsad

uppgift

Klasser• Klasser ska representera en väl definierad och avgränsad

enhet

Page 11: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Duplicering av kod

Duplicering av kod, dvs att samma eller

snarlik kod finns på flera platser: • Är en indikator på att designen är felaktig• Gör det svårare att underhålla koden• Kan medföra att fel introduceras vid underhåll

Page 12: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Ansvarsdriven design

• Fråga: Vart ska vi lägga till en ny metod (vilken klass)?• Varje klass ska vara ansvarig för att ändra sin egen data• Klassen som äger data ska också ansvara för att bearbeta

den• Ansvarsdriven design medför svag koppling

Page 13: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Gör förändringar lokala

• Ett mål med att minska koppling (beroende) mellan klasser och med ansvarsdriven design är att göra förändringar lokala

• När en förändring är nödvändig bör så få klasser som möjligt påverkas

Page 14: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Tänk efter före

• När vi designar klasser bör vi fundera på vilka förändringar som är sannolika i framtiden

• Vårt mål är att designa klasser som är enkla att förändra

Page 15: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Refactoring

• Ny kod introduceras ofta när klasser underhålls• Klasser och metoder blir ofta längre• Då och då bör vi gå igenom koden för att se till att metoder

och klasser har avgränsade ansvarsområden och att vi har svag koppling mellan klasser

• Det kan var att flytta en metod till en annan klass eller att dela upp en metod i två

• Processen kallas refactoring

Page 16: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Refactoring och testning

• Separera refactoring av kod från andra förändringar• Testa både före och efter refactoring för att vara säker på att

ingen funktionalitet har påverkats

Page 17: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Designfrågor

Vanliga frågor:• Hur långa bör en klass vara?• Hur långa bör en metod vara?

• Bör inte besvaras med antal rader utan genom att titta på ansvar och koppling till andra klasser

Page 18: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Designrekommendationer

• En metod är för lång om den utför mer än en logiskt uppgift• En klass är allt för komplex om den representerar mer än en

logisk enhet• Om det är svårt att ge metoden eller klassen ett bra namn

är det ett tecken på att den har ett för stort ansvarsområde• Tänk Mañana

Page 19: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Summering

• Ansvarsdriven design• Koppling• Avgränsat ansvar• Refactoring