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

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

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

Introduktion och OO. Objekt-orienterad Programmering och Design (TDA552) Alex Gerdes, HT-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

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

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

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

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

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

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. TDA551 Alex Gerdes, HT-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

Objektorienterad programmering

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

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

Objektorienterad programmering, allmänt

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

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

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

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

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

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

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

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

Programmering = modellering

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

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

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

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

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

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

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

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

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

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

Vad är. Domändriven design?

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

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

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

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

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

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

Classes och Interfaces, Objects och References, Initialization

Objektorienterad analys och design

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

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

Objektorienterad programmering och Java

Implementationsstrategier för PLCS

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

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

Tentamen Programmering fortsättningskurs DIT950

Beijer Electronics AB 2000, MA00336A,

Creo Customization. Lars Björs

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

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

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

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

Objektorienterad programmering. Grundläggande begrepp

Föreläsning 23. Tobias Wrigstad. Refaktorering

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

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

Seminarierna Instruktioner. Övningarna Viktiga relationer

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

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

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

Programvaruteknik, hp

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

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

Alla rättigheter till materialet reserverade Easec

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

Imperativ programmering. Föreläsning 4

Att välja och planera ett projekt

2.1 Installation of driver using Internet Installation of driver from disk... 3

Universe Engine Rapport

Information. Computer

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

Komponenter Removed Serviceable

Wittgenstein for dummies Eller hur vi gör det obegripliga begripligt. Västerås 15 februari 2017

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

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

Linköpings universitet 1 TDP029. Systemutveckling. Systemutveckling. Vanliga faser. Fler faser. Systemutvecklingsmetod

TDDD78 Att välja och genomföra ett projekt

Kursplanering Objektorienterad programmering

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

TDDD78 Att välja och planera ett projekt

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

Metoder och verktyg för funktionssäkerhet

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

UML 1(5) Introduktion till Unified Modeling Language. 1 Bakgrund och historik

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

Isolda Purchase - EDI

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

Kursplan. MT1051 3D CAD Grundläggande. 7,5 högskolepoäng, Grundnivå 1. 3D-CAD Basic Course

Snake App Rapport - Snake App Rapport Utskriven/PDF Export: Copyright Version 1.2 Sidan 1 av 9.

Kvalitetssäkra ditt projekt med kontinuerlig integration

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

Transkript:

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

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. Utveckla för fö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 med 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

Studentrepresentanter Jesper Blidkvist Are Ehnberg Lovisa Landgren Lucas Ruud Mattias Torstensson

Ö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 1. Använda ett ramverk för att implementera spelet Snake (verktyg) 2. Bygga ett paket för geometriska former (design) 3. Analys och refaktorering av spelramverket från laboration 1 (mönster och principer)

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