Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Relevanta dokument
Separation of Concern. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

Modulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Dependencies High cohesion, low coupling. Objekt-orienterad programmering och design Alex Gerdes, 2018

Dependencies High cohesion, low coupling. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Model View Controller. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Generics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Classes och Interfaces, Objects och References, Initialization

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Introduktion och OO. Objekt-orienterad Programmering och Design (TDA552) Alex Gerdes, HT-2018

Introduktion. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Generic type declarations. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Introduktion. Objekt-orienterad Programmering och Design (TDA551) Alex Gerdes, HT-2016

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

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Programmering = modellering

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Introduktion. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv?

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Design Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2016

Föreläsning 1, vecka 6: Abstraktion genom objektorientering

Testdriven utveckling. Teorin bakom testdriven utveckling. Bakgrund. Januari 2009, KTH. Alexander Tarnowski

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Objektorienterad programmering

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Observer Pattern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2016

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Principer, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Introduktion. Grundkursen

1 Klasser och objektorientering Vad är objektorientering?

Föreläsning 1. Introduktion Utveckla för förändring

Objektorientering i liten skala

Imperativ programmering. Föreläsning 4

Design och konstruktion av grafiska gränssnitt

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Lösningar till tentamen i EDAF25

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

Objekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Undantag, Sammanfattning och Tentamensinfo. Objekt-orienterad programmering och design Alex Gerdes, 2016

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Objekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Länkade strukturer. (del 2)

OOMPA 2D1359 Föreläsning 2

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Design Patterns Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

TDDI02. Programmeringsprojekt, Föreläsning 2. Filip Strömbäck. Med utgångspunkt i tidigare slides av Jonas Lindgren

SOLID är en akronym för fem stycken designprinciper som används vid mjukvaruutveckling. SOLID står för:

Objekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Mer om metoder och abstraktioner

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Viktiga programmeringsbegrepp: Kontrakt

Principer, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Lösningar till tentamen i EDAF25

Introduktion. Lagom är bäst. OO eller ej? TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Objektorienterad programmering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Föreläsning 15: Repetition DVGA02

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

Design och konstruktion av grafiska gränssnitt

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm

Lektion Händelsehanterare

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

Transkript:

Separation of Concern Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Modulär design Fördelar med välgjord modulär design: Lätt att utvidga Moduler går att återanvända Uppdelning av ansvar Komplexiteten reduceras Moduler går att byta ut Tillåter parallell utveckling

Återanvändning High cohesion och Low coupling lägger grunden för återanvändning av komponenter. Ju mer välspecificerad uppgif en modul har, och ju enklare dess gränssnitt och implementation är, desto större chans att den kan återanvändas i andra sammanhang. Gäller på alla nivåer: subsystem, paket, classes, metoder.

Exempel: Functional decomposition public void pay() { for (Employee e : employees) { if (e.ispayday()) { Money amount = e.calculatepay(); e.deliverpay(amount); public void pay() { for (Employee e : employees) payifnecessary(e); private void payifnecessary(employee e) { if (e.ispayday()) calculateanddeliverpay(e); private void calculateanddeliverpay(employee e) { Money amount = e.calculatepay(); e.deliverpay(amount);

Mer kod är bättre?? Exemplet till höger innehåller fler rader kod är inte det högre komplexitet? Svar Nej! Exemplet till höger innehåller lika många rader kod, med undantag för anrop av abstraherade metoder. Exemplet till höger innehåller fler metod-signaturer, vilka (rätt gjorda) hjälper förståelsen och reducerar komplexiteten. Varje enskild metod är mindre komplex. Sannolikheten att kod kan återanvändas är mycket högre. Högre grad av maintainability.

Functional decomposition På metod-nivå kan vi tillämpa functional decomposition ( funktionell nedbrytning ) för att reducera komplexiteten: Enklare delsteg bryts ut till egna metoder, som anropas från den ursprungliga metoden med rätt argument. Ger flera fördelar: Reducerar den kognitiva komplexiteten i varje (del-)metod. Möjliggör code reuse för återkommande delsteg. Sätter namn på delsteg, vilket ger högre abstraktion och förståelse. Följer OCP: Större chans att framtida förändringar kan återanvända och utöka, istället för ändra.

Övning Börja från koden som finns att ladda ner från hemsidan. Vår gamla kod för DrawPolygons (oförändrad från förra veckan) ligger nu i ett paket DIT952.polygons. Det finns också ett till paket DIT952.shapes som ger en alternativ implementation av polygoner med mer funktionalitet. I förlängningen (inte idag) är det tänkt att vi ska byta ut vår naiva hantering mot den mer kraffulla men båda två har problem som behöver lösas först. På metod-nivå: Titta på metoderna i de olika klasserna, i båda paketen. Vilka metoder har ett väldefinierat och väl avgränsat ansvarsområde? Vilka metoder gör mer än en sak? Vilka metoder gör överlappande saker (kod-duplicering)? Tillämpa funktionell nedbrytning och refactoring för att stegvis lösa problemen. På class-nivå: Titta på de olika klasserna, i båda paketen. Vilka klasser har ett väldefinierat och avgränsat ansvarsområde? Vilka klasser gör mer än en sak? De klasser som ni tycker gör en sak ge en definition av vad denna enda sak är. Hur abstrakt är er definition dvs hur mycket av funktionaliteten täcker definitionen (inte)? På paket-nivå (för mer utmaning): Paketet DIT952.shapes är tänkt att vara en väl avgränsad (dock inte väl implementerad ännu) implementation av (Swing-)polygoner. Fundera över vilka delar av av DIT952.polygons som skulle behöva bytas ut mot detta paket. Vilka problem ser ni som ligger i vägen för ett sådant byte? Vad hade vi förutseende kunnat göra med DIT952.polygons för att göra ett sådant framtida byte enklare? I enlighet med OCP: förutsäg förändring, och möjliggör extension istället för modification. Fun quiz (orelaterat): I paketet DIT952.quiz finns en class Mystery. Vad är dess syfe?