EDAF60: Objektorienterad modellering och design
Före-läsning 1
Några av länkarna nedan leder till artiklar som innehåller betydligt mer information än vad ni behöver för kursen, länkarna finns där för att ge er lite kontext, och så att den som vill kan fördjupa sina kunskaper.
Under föreläsning 1 kommer vi att diskutera vad som kan göra program svåra att läsa och förstå – målsättningen är att hitta begrepp som låter oss diskutera programkvalitet, och som hjälper oss att skriva mer välstrukturerade program. Vi kommer att stöta på begreppen:
- Cohesion och coupling, som kommer att följa oss genom hela kursen – de är mått på hur väl något hänger samman, respektive hur hårt kopplade olika saker är till varandra. Du behöver inte fördjupa dig i Wikipediaartiklarna som länkarna går till, men läs gärna deras första stycken, så att du får en idé om vad begreppen handlar om (och så att du ser att det inte är begrepp som jag har hittat på). Allmänt gäller att vi i ett väldesignat system har delar med en hög grad av sammanhållning, och låg grad av koppling/beroende mellan varandra.
- Top-down programming (stegvis-förfining), som är en teknik att bryta ner ett problem i mindre delar, på ett sätt som ofta gör våra program enkla att läsa och förstå – vi kommer att använda den för att lösa det första exemplet nedan.
- Encapsulation (inkapsling) och information hiding, som vi kan använda för att öka 'graden av sammanhållning' (cohesion) och minska beroenden (coupling). Ni har använt det sedan ni skrev er första Java-klass, men vi kommer att diskutera det mer i detalj i det andra exemplet nedan.
Exempel 1: Vi kommer att skriva ett Java-program som löser följande problem: Skriv ut summan av alla primtal som är angivna på kommandoraden.
Exempel på användning:
$ java SumOfPrimes 2 3 4 5 hoppsan 6 7 17
Det är en väldigt enkel uppgift, men försök ändå gärna på egen hand i förväg (så kan vi se om vi skriver programmet på samma sätt).
Exempel 2: Vi kommer även att diskutera följande klasser för att hantera punkter och linjesegment:
class Point { private double x, y; public Point (double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } } class Segment { private Point p0, p1; public Segment (Point p0, Point p1) { this.p0 = p0; this.p1 = p1; } public double length() { var dx = p0.getX() - p1.getX(); var dy = p0.getY() - p1.getY(); return Math.hypot(dx, dy); } }
Fundera på vad du tycker om denna programkod, och försök komma på förslag till förbättringar.