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

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

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

Introduktion. 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

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

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. 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 (?

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

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

Classes och Interfaces, Objects och References, Initialization

Objektorienterad programmering, allmänt

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

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

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

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

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

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

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

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

Generics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 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 (?

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

Objektorienterad programmering. Grundläggande begrepp

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

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

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

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

Instuderingsuppgifter läsvecka 2

Objektorienterad programmering

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

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

"Ä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 8 - del 2: Objektorienterad programmering - avancerat

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

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

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

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

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

OOMPA 2D1359 Föreläsning 2

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

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

Modeller, Objekt och Klasser

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

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

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

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

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

Programmering = modellering

OOP Objekt-orienterad programmering

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

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

Objektorienterad programmering

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 15: Repetition DVGA02

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

Imperativ programmering. Föreläsning 4

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

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

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

Ärvning av implementation. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

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

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

Objektorienterad Programmering (TDDC77)

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

Objektorienterad Programmering (TDDC77)

Konstruktion av klasser med klasser

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

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

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Objekt och klasser - Introduktion

Klasshierarkier - repetition

OOP Objekt-orienterad programmering

Tentamen Programmering fortsättningskurs DIT950

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

Kursplanering Objektorienterad programmering

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

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

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

DAT043 - Föreläsning 7

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

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

Transkript:

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

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)

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.

Objektorientering

Objektorientering Grundidén för objektorienterad programmering är att modellera verkliga objekt som datastrukturer i ett program som körs på en dator

Objektorienterad programmering Objektorienterad programmering erbjuder verktyg för att abstrahera, modulariseraoch återanvända komplexa program I praktiken: Abstraktion av komplexa data typer Arv (inheritance) Polymorfism Dynamisk bindning

Klasser Ett objektorienterat program är en samling av klasser. En klass är en kod-enhet som definierar data (= tillstånd) samt operationer på datan En klass definierar en typ klass är en statisk begrepp class BankAccount { Integer balance; void deposit(integer amount) { balance = balance + amount;

Vad är i en klass? En klass härföljande komponenter (members): Instansvariabler (data) Metoder (operationer) Konstruktorer (initialisering) class BankAccount { Integer balance; void setnewbalance(int balance){ this.balance = balance; BankAccount() { balance = 0;

Objekt Objekt är instanser av klasser Ett objekt sparar värden av vissa typer objekt är en dynamisk begrepp Class Model Statisk Typ Object Instans Dynamisk Värde av en typ Integer 42 BankAccount Balance: 42

Instansvariabler Varje instansvariabel representerar en del av objektets tillstånd Instansvariabler är synliga i klassens metoderna (in scope) När man skapar ett objekt, då initialiseras instansvariabler (implicit) till default värden beroende på typen Konstruktorer kan introducera annorlunda initialisering

Konstruktorer Konstruktorer är speciella metoder Måste ha samma namn som klassen Har ingen returtyp (inte ens void) Skapar objekt och initialiserar instansvariabler Det finns en default konstruktor om man inte definierar egna En klass kan ha flera konstruktorer med olika parametrar En konstruktor anropas (implicit) när en new uttryck evalueras

Konstruktorer: exempel class BankAccount { Integer balance; String owner; BankAccount() { balance = 0; BankAccount(Integer balance) { this.balance = balance; BankAccount(String owner) { this.owner = owner; // client code BankAccount a1 = new BankAccount(); BankAccount a2 = new BankAccount(1337); BankAccount a3 = new BankAccount( Pelle );

Self-referens: this Varje klass har en speciell selfreferens this, som refererar till det aktuella objektet class BankAccount { Integer balance; void setnewbalance(int balance){ this.balance = balance;

Arv (Inheritance) Arv är en mekanism för att återanvända kod class A extends B Deklarerar att klass A ärver från klass B Alla komponenter från B är också (implicit) komponenter av klass A B är en superklass av A och omvänt är A en subklass av B Konstruktorer ärvs inte Kallas också implementationsarv

Arv: exempel class Account { int balance; void deposit(int amount) { balance += amount; class FullAccount extends Account { void withdraw(int amount) { deposit(-amount); void close() { balance = 0;

Överskugga (overriding) En subklass kan överskugga en metod från en superklass, dvs vi kan definiera om metoden class Account { int balance; void withdraw(int amount) { deposit(-amount); class CheckedAccount extends Account { @Override void withdraw(int amount) { if (amount <= balance) balance -= amount;

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

Övrig kursinformation Gå med i Google-gruppen! Maillista som når er alla, samt mig och assistenterna Använd för alla frågor om kursen administrativt eller innehållsmässigt Laborationer 1, 2: arv och dynamisk bindning 3, 4, 5: MVC och design patterns

Studentrepresentanter Kom till mig efter kursen

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