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

Relevanta dokument
Objektorienterad programmering

Objektorienterad programmering

Objektorienterad programmering, allmänt

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

Objektorienterad programmering

Imperativ programmering. Föreläsning 4

Objektorienterad programmering. Grundläggande begrepp

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

Objektorienterad programmering

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

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

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

Programmering för språkteknologer II, HT2014. Rum

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Classes och Interfaces, Objects och References, Initialization

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

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

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Programmering för språkteknologer II, HT2011. Rum

Java, klasser, objekt (Skansholm: Kapitel 2)

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Arv. Objektorienterad och komponentbaserad programmering

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Modeller, Objekt och Klasser

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

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

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

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

1 Klasser och objektorientering Vad är objektorientering?

Föreläsning 15: Repetition DVGA02

Polymorfi. Objektorienterad och komponentbaserad programmering

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

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

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

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

Föreläsning 9: Arv och UML

Programmering = modellering

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

OOP Objekt-orienterad programmering

OOMPA 2D1359 Föreläsning 2

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

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

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

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

729G06 Föreläsning 1 Objektorienterad programmering

OOP Objekt-orienterad programmering

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

Föreläsning 2 Datastrukturer (DAT037)

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

TENTAMEN OOP

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

Föreläsning 2 Datastrukturer (DAT037)

OOP Objekt-orienterad programmering

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

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

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

OOP Objekt-orienterad programmering

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

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

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

SKOLFS. beslutade den XXX 2017.

729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

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

Föreläsning 16 Arv. Jan Lönnberg T Grundkurs i programmering

729G06 Programmering och logik. Info om pythondelen & introduktion till objektorienterad programmering.

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

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

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

F2: Krav på objektorienterat språk

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Repetition av OOP- och Javabegrepp

Design av en klass BankAccount som representerar ett bankkonto

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Repetition av OOP- och Javabegrepp

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

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

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

TENTAMEN OOP

Tentamen i Grundläggande programmering STS, åk 1 fredag

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Inkapsling (encapsulation)

Transkript:

Historik: OOP Simula-67 Norge, 1967 Byggde på Algol-60, avsett för simulering Garbage collection, arv, klasser (inte olikt Java) Smalltalk, Alan Kay, Xerox, 70-tal Introducerade begreppet objekt-orienterad programmering Första GUIna skrevs i Smalltalk (och i Lisp) Objektorientering Objektorienterade programspråk Objektorienterad programmering Objektorienterad programutveckling Objectorienterad programmering Sida 1 Objectorienterad programmering Sida 3 Historik: OOP (forts) C++, Bjarne Stroustrup, Bell Labs Bygger på C med idéer från Simula och Algol-68 Saknar GC Eiffel, Objective C, Object Pascal, Self En Dum Fråga Vad vill vi åstadkomma med programspråk och utvecklingsmodeller? Java Objectorienterad programmering Sida 2 Objectorienterad programmering Sida 4

Några begrepp Idéer som fanns före OOP men blivit en del av OOP: Abstraktion Modularitet Inkapsling Software engineering Metoder för analys, design Software engineering Begreppet myntades i en NATO-konferens 1968. Problem: Software crisis Önskemål: Samma pålitlighet och produktivitet som i de traditionella ingenjörskonsterna (tex brobyggen, mekaniska konstruktioner,...) Lösning: Formalisera de olika stegen i programutvecklingen: Kravanalys, Design, Implementation, Testning, Underhåll Objectorienterad programmering Sida 5 Objectorienterad programmering Sida 7 (Enligt Meyer) Problemlösning Återanvändning Förståelse Underhåll Felsökning Modularitet Principer för OOP (Alan Kay) Allt är ett objekt (dvs alla datastrukturer representeras som objekt). Ett program är en samling objekt Objekten skickar meddelanden till varandra Varje meddelande är en begäran om en handling (aktion) som ska utföras Varje objekt har sitt eget minne Ett objekt kan bestå av andra objekt Objectorienterad programmering Sida 6 Objectorienterad programmering Sida 8

Principer för OOP (forts) Varje objekt tillhör en klass En klass representerar ett visst beteende alla objekt som är instanser av samma klass kan utföra samma aktioner. Klasser organiseras i en trädliknande arvshierarki. En klass ärver beteende och datastrukturer från tidigare klasser Person (forts): public void hello() { System.out.println("Jag heter"+ namn +" och är "+ age +"år gammal."); public void setname (String n) { name = n; public String getname () { return name; Objectorienterad programmering Sida 9 Objectorienterad programmering Sida 11 Exempel (en klass Person): public class Person { private String name; private int age; public Person (String n, int a) { name = n; age = a; Viktiga koncept: En klassdefinition med instansvariabler och metoder instansvariablerna inre tillstånd metoderna sätt att interagera med objekt (ungefär som funktioner i C) Objectorienterad programmering Sida 10 Objectorienterad programmering Sida 12

Koncept (forts) Varje objekt tillhör en klass Varje objekt har instansvariabler/fält enligt def Varje objekt tillåter interaktion via publika metoder private endast tillgängligt inom klassdefinition public tillgänglig överallt konstruktor Vad är OOP? Ett OO program är en värld befolkad av kommunicerande objekt objekt kommunicerar genom att skicka meddelanden objekt vet inget om varandras inre tillstånd (annat än vad som kan härledas indirekt) Metodanrop-skicka meddelande till ett objekt Objectorienterad programmering Sida 13 Objectorienterad programmering Sida 15 Exempel på icke-oo: Skapa & kommunicera med objekt, exempel Person olle = new Person ("Olle", 7); olle.hello(); stoppa in all information i ett objekt använd objekt ungefär som struktar i C objekt med otydligt ansvar objekt med vagt definierade gränssnitt Objectorienterad programmering Sida 14 Objectorienterad programmering Sida 16

Ytterligare begrepp: Arv public class Employee inherits Person { private int salary; public Employee (String n, int a, int s) { super(n, a); salary = s; public void setsalary (int s) {... public int getsalary () {... Vi kan om-definiera metoden hello() i Employee. public void hello() { super.hello(); System.out.println("Jag tjänar "+ salary); john.hello(); Objectorienterad programmering Sida 17 Objectorienterad programmering Sida 19 Polymorfi: Arv, exempel Employee john = new Employee("John", 23, 123456); john.hello(); john.setsalary(1234567); Anta att vi har fler klasser (Student, Teacher,...) samt en array av personer: Person[] alla = new Person[10]; alla[0] = olle; alla[1] = john;... for(int i = 0; i++; i<10){ alla[i].hello(); Regel: objektet "vet" vilken klass det tillhör. Objectorienterad programmering Sida 18 Objectorienterad programmering Sida 20

Exempel: Kontrollsystem för uppvärmningssystem (Booch) kommer inte att ge en detaljerad lösning viktiga är inte den färdiga lösningen utan processen dit nej, så här fungerar det inte (åtminstone inte i Sverige) brist med detta exempel: statisk objektstruktur vi skapar aldrig nya objekt Användargränssnitt: temperaturgivare för varje rum värmeledningsventil för varje rum Timer sensor, infraröd eller rörelse- lagra information för att förutse användning värmepanna Objectorienterad programmering Sida 21 Objectorienterad programmering Sida 23 Värmesystem, skiss Användar gränssnitt Värmepannan Rum(x) temperatur Rum(x) vattenventil Värme regulator Timer Rum(x) närvaro Kontrollen av pannan är komplex (fläkt, oljepump, tändning) Om pannan stoppats måste det ta minst 5 minuter innan den startas om. Pannan startas om minst ett rum behöver värme. Värmepanna Objectorienterad programmering Sida 22 Objectorienterad programmering Sida 24

Hur löser man detta? Ansats 1: klasser enligt figur. En komplex klass (Heat-flow regulator), övriga mycket enkla. två metoder: Klassen Furnace, andra ansats void setrunning(boolean b); boolean getrunning(); Uppstartsproceduren implementeras i klassen Furnace. Dålig OOP! Lösningen lägger hela ansvaret på en klass. även regler för hur snabbt pannan kan startas om etc. Objectorienterad programmering Sida 25 Objectorienterad programmering Sida 27 Hur hitta lämpliga klasser? Skissa bottom-up. Leta efter naturliga klasser Vi måste förenkla problemet klasstrukturen bör ge ledning i hur man bryter ner i naturliga delproblem Ansats 2, fördelar Klassen Furnace får ett enklare gränssnitt flyttar komplexitet från Heat-flow regulator gör det lättare att använda kontrollsystemet med andra typer av pannor ev kan koden som kontrollerar pannan användas i andra sammanhang Objectorienterad programmering Sida 26 Objectorienterad programmering Sida 28

Furnace, en komplikation Om pannan just stängts av och setrunning(true) anropas, vad ska Furnace göra? gör som du blir tillsagd och sk-t i konsekvenserna (dvs 5-minutersregeln implementeras nån annanstans) En lösning: Kalla metoderna nåt annat, tex void setheatrequired(boolean b) boolean getheatrequired(); låtsas som inget, vänta 5 minuter och sen starta Objectorienterad programmering Sida 29 Objectorienterad programmering Sida 31 Furnace, mer krångel Ska getrunning returnera true eller false när du väntar? true, det är mera konsistent med hur get&set förväntas fungera false, annars ljuger vi Insikter... Val av namn till klasser och metoder är viktigt Viktig fråga: Var lägger man ansvaret? Sträva efter konsekvent ochförutsägbart beteende Objectorienterad programmering Sida 30 Objectorienterad programmering Sida 32

Värmesystem, forts Idé: inför en klass Rum. Varje rum håller reda på önskad temp nuvarande temp närvaro ventil talar om ifall det behöver värme Vilket ansvar återstår för värmeflödesregulatorn? Var placera kod som hanterar närvaro? Notera: Den heuristik som beskrivits kanske inte är den bästa. Vad göra om en person går fram och åter mellan rum? En komplex algoritm som ev måste ändras Objectorienterad programmering Sida 33 Objectorienterad programmering Sida 35 Närvaro Ett rum ska betraktas som i bruk om antingen någon använder det, eller det förväntas snart användas, enligt heuristik ovan Vill antagligen införa en abstraktion närvaro som täcker båda ovan Närvaro, lösningsalternativ Varje rum hanterar närvaro, ett objekt närvaro, gemensamt för alla rum, eller varje rum har sin egen närvarohanterare Objectorienterad programmering Sida 34 Objectorienterad programmering Sida 36

Värmesystem, klasser Panna: enkelt gränssnitt, allt som rör pannan Rum: försök hålla temp enligt önskad temp, ta hänsyn till "närvaro" Närvaro: Nuvarande och förväntad närvaro Värmeflödesregulatorn: Underrätta pannan om något rum behöver värme Objectorienterad programmering Sida 37 Värmesystem, Kommentar lösningen är lättare att förstå om varje klass inte är alltför komplicerad introducera abstraktioner val av namn på klasser och metoder kan vara viktigt hantering av närvaro är överspecificerad inte så lyckat att binda sig för en typ av panna specen borde ha skrivits annorlunda Objectorienterad programmering Sida 38