Objektorienterad programmering

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

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

(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

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

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

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

Objektorienterad programmering

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

Classes och Interfaces, Objects och References, Initialization

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

OOP Objekt-orienterad programmering

Inledande programmering med C# (1DV402) Introduktion till C#

Arv. Objektorienterad och komponentbaserad programmering

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

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

Kursplanering Objektorienterad programmering

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

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

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

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

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

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

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

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

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

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

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?

Polymorfi. Objektorienterad och komponentbaserad programmering

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, 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

Föreläsning 15: Repetition DVGA02

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

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

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Programmering = modellering

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

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

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

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

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

Kopiering av objekt i Java

Modeller, Objekt och Klasser

1 Klasser och objektorientering Vad är objektorientering?

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

Föreläsning 13 Innehåll

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

SKOLFS. beslutade den XXX 2017.

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Föreläsning 9: Arv och UML

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Föreläsning 2 Datastrukturer (DAT037)

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

Programmeringsteknik II

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

EDAA01 Programmeringsteknik - fördjupningskurs

729G06 Föreläsning 1 Objektorienterad programmering

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Design av en klass BankAccount som representerar ett bankkonto

OOP Objekt-orienterad programmering

Objektorienterade programmeringsspråk. Vad vill vi ha? Några olika språk

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

TENTAMEN OOP

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

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

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal

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

Repetition av OOP- och Javabegrepp

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

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

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

Föreläsning 2 Datastrukturer (DAT037)

Repetition av OOP- och Javabegrepp

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

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

F2: Krav på objektorienterat språk

Inkapsling (encapsulation)

TENTAMEN OOP

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

Design och konstruktion av grafiska gränssnitt

Transkript:

Objektorienterad programmering Föreläsare: (svenolof@csd.uu.se), Assistenter: Ruslan Fomkin,??? Obligatoriska uppgifter En uppgift om grunderna i Java och OOP (deadline 7 nov) En huvuduppgift: Design 14 nov Deluppgift a 28 nov Deluppgift b 12 dec Objectorienterad programmering Sida 1 Objectorienterad programmering Sida 3 Kursens upplägg Kurssida: Kursens innehåll http://www.it.uu.se/edu/course/homepage/oop/ht04 14 Föreläsningar (plus en repetition) 2 Obligatoriska uppgifter 3 Laborationstillfällen (arbete med inlämningsuppgifterna) Java & dess standardbibliotek Programmeringsmetodik, analys och design: allmänna principer för OOP, UML, Design patterns, refactoring lite om andra OOP språk Tentamen 22/12 Objectorienterad programmering Sida 2 Objectorienterad programmering Sida 4

Litteratur Xiaoping Jia: Object-Oriented Software Development using Java Dessutom: OH-blad från föreläsningar, material från webben. 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 Java Objectorienterad programmering Sida 5 Objectorienterad programmering Sida 7 Simula-67 Norge, 1967 Historik: OOP 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) Andra begrepp Idéer som fanns före OOP men som blivit en del av OOP: Abstraktion Modularitet Inkapsling Software engineering Metoder för analys, design Objectorienterad programmering Sida 6 Objectorienterad programmering Sida 8

(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 9 Objectorienterad programmering Sida 11 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 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 Objectorienterad programmering Sida 10 Objectorienterad programmering Sida 12

Historik: Java Hette från början OAK (James Gosling, 1991). Utvecklades vid SUN Microsystems. Från början avsett för inbyggda system (tex tvättmaskiner, mobiltelefoner, TV/video, spel, mm). (Storlek och pålitlighet var viktiga) Med WWW fick projektet en annan inriktning Java blev ett programspråk för web-applikationer Kompilering av Java Traditionella kompilatorer översätter programtexten till maskinkod. De flesta Java-kompilatorer översätter till en slags maskinkod; Javabytekod (JVM). Det finns inga maskiner som kör Javabytekod (nja, nästan inga). Därför måste JVM-koden vid körning antingen översättas till maskinkod, eller interpreteras. Objectorienterad programmering Sida 13 Objectorienterad programmering Sida 15 (Man brukar säga att) Java är... enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart robust, säkert oberoende av hårdvaruarkitektur (portabelt) web-anpassat: applets, div bibliotek Utvecklingsverktyg för Java Senaste versioner är J2SE 1.4.2 samt J2SE 5.0 J2SE 5.0 (även känt som Java 1.5) innehåller viktiga utökningar, inte helt bakåtkompatibelt. Vi fokuserar på Java 5. Objectorienterad programmering Sida 14 Objectorienterad programmering Sida 16

On-line dokumentation När man arbetar med Java behöver man dokumentation av alla standardklasser. http://java.sun.com/j2se/1.5.0/docs/api Suns tutorial http://java.sun.com/docs/books/tutorial 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 17 Objectorienterad programmering Sida 19 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 18 Objectorienterad programmering Sida 20

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 21 Objectorienterad programmering Sida 23 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 vagt definierade gränssnitt Objectorienterad programmering Sida 22 Objectorienterad programmering Sida 24

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 25 Objectorienterad programmering Sida 27 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 26 Objectorienterad programmering Sida 28

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 29 Objectorienterad programmering Sida 31 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 30 Objectorienterad programmering Sida 32

Hur löser man detta? Enkel lösning: 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 33 Objectorienterad programmering Sida 35 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 Enkelt gränssnitt Alternativ 2, fördelar 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 34 Objectorienterad programmering Sida 36

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) låtsas som inget, vänta 5 minuter och sen starta 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? Objectorienterad programmering Sida 37 Objectorienterad programmering Sida 39 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 En lösning: Kalla metoderna nåt annat, tex void setheatrequired(boolean b) boolean getheatrequired(); 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 tacker båda ovan Objectorienterad programmering Sida 38 Objectorienterad programmering Sida 40

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 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 41 Objectorienterad programmering Sida 43 Värmesystem, Kommentar Lösningalternativ varje rum hanterar närvaro ett objekt närvaro, gemensamt för alla rum varje rum har sin egen närvarohanterare 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 42 Objectorienterad programmering Sida 44