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

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

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

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

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

Introduktion. Grundkursen

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

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

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

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

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

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

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

Föreläsning 1. Introduktion Utveckla för förändring. Grundkursen. Programming in the small. Koncept som är kända från grundkursen (?

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

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

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

Föreläsning 1. Introduktion Utveckla för förändring. Grundkursen. Programming in the small. Koncept som är kända från grundkursen (?

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

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

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

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

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

Objektorienterad programmering, allmänt

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

Classes och Interfaces, Objects och References, Initialization

Objektorienterad programmering

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

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

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

Undantag, Sammanfa,ning och Tentamensinfo. Objektorienterad programmering och design Alex Gerdes, 2018

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

Kursombud. Objektorienterad modellering och diskreta strukturer / design. Agile? Designprinciper EDAF10 EDA061. Lennart Andersson. Grupper för projekt

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

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

TDA550 Objektorienterad programmering, fortsättningskurs. Föreläsning 1. Introduktion Variabler och typer

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

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

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

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

Föreläsning 2. Objektorienterad analys och design. Analys: att modellera världen. Design: att strukturera program.

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

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

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

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

Kursplanering Objektorienterad programmering

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

Programmering = modellering

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

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

Imperativ programmering. Föreläsning 4

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Programmeringsteknik II

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Labb 1: Vad, hur, och varför?

Vad är. Domändriven design?

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg niklas.broberg@chalmers.

Objektorienterad analys och design

Objektorienterad programmering. Grundläggande begrepp

Introduktion till Programmering. Dåtid, nutid och framtid

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

Programvaruteknik, hp

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

Föreläsning 15: Repetition DVGA02

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

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

UML: Exempel. Ett modelleringsspråk. UML: Ansvar. UML: tre huvudanvändningar. Exempel: En klass position storlek. UML Unified Modelling Language

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Tentamen Programmering fortsättningskurs DIT950

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

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

SKOLFS. beslutade den XXX 2017.

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Objektorienterad programmering

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

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

Introduktionsmöte Innehåll

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

Alla rättigheter till materialet reserverade Easec

Personal. Objektorienterad programmeringsmetodik 5DV133. Kursmål. Kursens uppläggning. Lärare. Handledare och gruppövningar.

Objektorienterad programmering

Föreläsning 23. Tobias Wrigstad. Refaktorering

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Objekt, Klasser, Paket m. m.

Objektorienterad Systemutveckling Period 3

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

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

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

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Djupstudie: Big Ball of Mud - Technical debt and large refactorings

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Testning som beslutsstöd

Universe Engine Rapport

Transkript:

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

Vad är ett bra program? Korrekt? Effektivt? Användbart? Flexibelt? Robust? Skalbart? Enkelt? Läsbart? Testbart? Maintainable? Reusable? Extensible? Fokus för denna kurs! Externa faktorer (berör användare) Interna faktorer (berör utvecklare)

Småskalig programmering Triviala program Få klasser Några 100-tal rader kod En eller ett fåtal programmerare Ingen eller kort livstid Just do it

Storskalig programmering Mycket komplexa programsystem Flera miljoner rader kod 100-tals programmerare, geografiskt utspridda Lång livstid Software engineering Behov av verktyg Behov av processer

Buggar, buggar, buggar Anything that can go wrong, will go wrong. (Edward A. Murphy) Kvarstående buggar i programvara som körs i drift: 1-10 buggar/kloc (ordinär industriprogramvara) 0.1-1 buggar/kloc (hög kvalitativ (t.ex. Javas bibliotek)) 0.01-0.1 buggar/kloc (extremt säkerkritiskt (t.ex. NASA)) Murphy s lag skall vara vägledande vid allt ingenjörsmässigt konstruktionsarbete se till att inget kan gå fel. Murphy was an optimist. (Tara O Toole) No operation extends with any certainty beyond the first encounter with the main body of the enemy. (Helmuth Von Moltke)

Livscykel för mjukvara Analyze Specify Design Implement Evolve Maintain Deploy Test Kommersiella programsystem har lång livstid och kraven på systemen förändras under deras livstid. Ny funktionalitet läggs till. Ingen person kan vara insatt i och förstå alla enskilda delar i systemet. Andra programmerare än de som utvecklade systemet utför uppdateringar och systemunderhåll. En stabil design och en bra dokumentation är mycket viktigt.

Objekt-orientering Objekt-orientering är en metodik för att rätt använd! reducera komplexitet i mjukvarusystem. Rätt använd ger objekt-orientering stora möjligheter till: Code reuse Extensibility Easier maintenance Fel använd riskerar objekt-orientering att skapa extra komplexitet Big ball of mud Det finns mycket dålig kod därute Det finns väldigt många missförstånd kring objekt-orientering.

Objekt-orienterad modellering Ett program är en modell av en (verklig eller artificiell) värld. I en objekt-orienterad modell består denna värld av en samling objekt som tillsammans löser den givna uppgiften. De enskilda objekten har specifika ansvarsområden. Varje objekt definierar sitt eget beteende. För att fullgöra sin uppgift kan ett objekt behöva support från andra objekt. Objekten samarbetar genom att kommunicera med varandra via meddelanden. Ett meddelande till ett objekt är en begäran att få en uppgift utförd.

Design Designen (modellen) utgör underlaget för implementationen. Bra design minskar kraftigt tidsåtgången för implementationen. Brister i designen överförs till implementationen och blir mycket kostsamma att åtgärda. Vanligaste misstaget i utvecklingsprojekt är att inte lägga tillräckligt med tid på att ta fram en bra design. Bra design är svårt!! I allmänhet bör mer tid avsättas för design än för implementation!

Maintenance (underhåll) All systems change during their life cycles. This must be borne in mind when developing systems expected to last longer than the first version. (Ivar Jacobson) Fel måste fixas. Mjukvara måste uppdateras till nya användarkrav. Den som ändrar koden är sällan den som ursprungligen skrev den. Största delen (~80%) av pengarna och tiden under ett systems livstid går till underhåll. Utvecklaförförändring!

OPC: The Open-Closed Principle Software modules should be open for extension, but closed for modification. (Bertrand Meyer) Förändring är det enda som är konstant. Utveckla framåt-kompatibelt förutsäg var förändring kommer behövas.

Design smells: Symptom på dålig design Stelhet (rigidity) Svårt att genomföra en ändring pga beroenden med många andra delar av systemet. Bräcklighet (fragility) En ändring skapar fel i delar av systemet som inte konceptuellt är kopplade till den ändrade modulen. Orörlighet (immobility) Koden är svår att återanvända i andra applikationer. Seghet (viscosity) En bra ändring kräver stora insatser, lättare att göra ett hack. Oklarhet (opacity) En modul är svår att läsa och förstå.

Evolving systems A system that is used will be changed. An evolving system increases its complexity unless work is done to reduce it. (Manny Lehman) Alla system ruttnar med tiden, behöver kontinuerligt motverkas. Ursprunglig design fungerar inte för nya krav (för rigid). Inkompetenta utvecklare förstår inte designen. Ändrade krav tas inte på allvar. Snabba hack under tidspress. Nya beroenden mellan komponenter ökar komplexiteten.

Motverka design smells Inse från början att kraven kommer att förändras. Utveckla för förändring Använd beprövade tekniker och design patterns för att minska beroenden. On the shoulders of giants Tala samma språk lättare för framtida utvecklare att förstå koden Refaktorera (refactor) kontinuerligt Refactoring = omstrukturering av koden som bevarar funktionalitet men förbättrar struktur

Code smells: Symptom på dålig implementation Synliga tecken i koden på att designen är på väg att ruttna: Duplicerad kod, klipp-och-klistra -programmering Långa metoder Långa parameterlistor Stora klasser Klasser med enbart data Publika instansvariabler Långa if- eller switch-satser Avsaknad av kommentarer Onödiga kommentarer Oläslig kod

Grundläggande designprinciper Enhetlig kodstil Genomtänkt namngivning Dokumentation Modularitet Abstraktion Decoupling Delegering Väldefinierade designmönster Återanvändning av kod

Modulär design Fördelar med en 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.

Reflektion Övning DrawPolygons Korrekt? Enkelt? Maintainable? Extensible? Reusable? Modulärt? Väl avgränsade ansvarsområden? Decoupled? Välanvända designmönster?

Live demo DrawPolygons.java

Blooms lärandepyramid DIT012: Verktyg: Applying DIT952: Verktyg: EvaluaLng Principer: Applying

Lärandemål konkret Kunskap och förståelse: REDOGÖRA för objekt-orienterade design-principer. KÄNNA IGEN och REDOGÖRA för olika objekt-orienterade design-mönster; inklusive deras syfte och effekt. Färdigheter och förmåga: APPLICERA design-principer och design-mönster för att åstadkomma sund objekt-orienterad design. ANVÄNDA och REDOGÖRA för grundläggande objekt-orienterade koncept, som klasser och objekt, primitiver och referenser, metoder och konstruktorer, variabler och attribut, etc. ANVÄNDA och REDOGÖRA för mer avancerade språkmekanismer och tekniker, som exceptions, generics, lambdauttryck, defensive copying, etc. ANVÄNDA och REDOGÖRA för arv och parameteriserade typer, och därtill hörande mekanismer, för att åstadkomma polymorfism och återanvändning av kod. DESIGNA och IMPLEMENTERA objekt-orienterade program för en given domän på ett sunt sätt med avseende på korrekthet, modifierbarhet och återanvändbarhet. UTFÖRA och BESKRIVA testning av objekt-orienterade program. Värderingsförmåga och förhållningssätt: ANALYSERA och UTVÄRDERA kod enligt principer för god objekt-orienterad design och implementation.

Lärandemål designvs implementation Kunskap och förståelse: REDOGÖRA för objekt-orienterade design-principer. KÄNNA IGEN och REDOGÖRA för olika objekt-orienterade design-mönster; inklusive deras syfte och effekt. Färdigheter och förmåga: APPLICERA design-principer och design-mönster för att åstadkomma sund objekt-orienterad design. ANVÄNDA och REDOGÖRA för grundläggande objekt-orienterade koncept, som klasser och objekt, primitiver och referenser, metoder och konstruktorer, variabler och attribut, etc. ANVÄNDA och REDOGÖRA för mer avancerade språkmekanismer och tekniker, som exceptions, generics, lambdauttryck, defensive copying, etc. ANVÄNDA och REDOGÖRA för arv och parameteriserade typer, och därtill hörande mekanismer, för att åstadkomma polymorfism och återanvändning av kod. DESIGNA och IMPLEMENTERA objekt-orienterade program för en given domän på ett sunt sätt med avseende på korrekthet, modifierbarhet och återanvändbarhet. UTFÖRA och BESKRIVA testning av objekt-orienterade program. Värderingsförmåga och förhållningssätt: ANALYSERA och UTVÄRDERA kod enligt principer för god objekt-orienterad design och implementation.

Övrig kursinformation Gå med i Google-gruppen! Maillista som når alla er, samt mig och assistenterna. Använd för alla frågor om kursen administrativt eller innehållsmässigt. Laborationer (mer info senare) 1. Inheritance (verktyg) 2. Decoupling (design) 3. Analys av program (mönster och principer)

Studentrepresentanter Adi Hrustic Hugo Lundin My Sundqvist Oskar Lyrstrand

Nästa modul (1B) UML (Unified Modelling Language) Recap: reference semantics; klass vs objekt