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

Relevanta dokument
Separation of Concern. 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

Modulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 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

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

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

Classes och Interfaces, Objects och References, Initialization

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

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

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

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

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

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

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

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

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

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

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

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

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

Programmering = modellering

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

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

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

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

Introduktion. Grundkursen

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

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

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

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

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

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

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

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

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

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

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

Imperativ programmering. Föreläsning 4

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

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

Objektorienterad programmering

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

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

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

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

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

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

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

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

Objektorienterad programmering, allmänt

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

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

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

OOMPA 2D1359 Föreläsning 2

Algoritmer. Två gränssnitt

Arv. Objektorienterad och komponentbaserad programmering

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

1 Klasser och objektorientering Vad är objektorientering?

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

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

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Lösningar till tentamen i EDAF25

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

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

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Lösningar till tentamen i EDAF25

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Länkade strukturer. (del 2)

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

public class BoundedCounter {

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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

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

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

JAVA Mer om klasser och objektorientering

Objektorienterad Programmering (TDDC77)

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Objektorientering i liten skala

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

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Design och konstruktion av grafiska gränssnitt

Föreläsning 9: Arv och UML

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

OOP Objekt-orienterad programmering

Transkript:

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

Modulär design Ett programsystem är för stort för att kunna förstås i sin helhet. Vi måste bryta ner det i delar för att förstå. Denna process kallas dekomposition. Ett modulärt system är uppdelat i identifierbara abstraktioner på olika nivåer t ex metoder, classes, delkomponenter, paket, subsystem. Customer + name : String # phonenr : PhoneNumber + sendorder() : void + receiveorder() : void Order - receiptnumber: int - items: List<Sandwich> + getreceiptnumber(): Panini Sandwich {abstract # name : String + getname() : String + getprice() : int Baguette public class Customer { public void sendorder(){ public void receiveorder(){ + getprice() : int + getprice() : int System Subsystem Packages Delkomponenter Classes Metoder

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?