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

Relevanta dokument
Föreläsning 1: Introduktion

Programmeringsteknik F1/TM1

Mer om metoder och abstraktioner

Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface)

Detta är kopior på OH bilder inte föreläsningsanteckningar. Objektorienterad programvaruutveckling IT 1. When mailing to me/us

Objektorienterad programmering

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

Föreläsning 2, vecka 8: Repetition

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

Föreläsning 12: Exempel och problemlösning

Föreläsning 5: Att använda klasser & objekt

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

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

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 15: Repetition DVGA02

Föreläsning 3: Booleans, if, switch

Föreläsning 8: Exempel och problemlösning

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

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

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Tentamen Programmering fortsättningskurs DIT950

Kommunicerande system

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Programmering = modellering

1 Comparator & Comparable

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

Classes och Interfaces, Objects och References, Initialization

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

Objektorienterad programmering

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Imperativ programmering. Föreläsning 4

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

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

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

Välkomna till DIT012 IPGO

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

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

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

Repetition av OOP- och Javabegrepp

Objektorienterad programmering

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

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

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

Repetition av OOP- och Javabegrepp

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg)

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

Generiska konstruktioner. Kursbokens kapitel 13

1 Klasser och objektorientering Vad är objektorientering?

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Objektorientering. Grunderna i OO

Föreläsning 1, vecka 8: Att förbereda sig för tentan

Algoritmer. Två gränssnitt

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

Arv och polymorfism i Java

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

Den som bara har en hammare tror att alla problem är spikar

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

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

Föreläsning 16: Tentan, att förbereda sig

Föreläsning 2 Datastrukturer (DAT037)

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

Laboration 13, Arrayer och objekt

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

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Programmering A. Johan Eliasson

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

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

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

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Objektorienterad programmering, allmänt

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Föreläsning 6: Metoder och fält (arrays)

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

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

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

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Föreläsning 1, vecka 7: Rekursion

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Föreläsning 14 Innehåll

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

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

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

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

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Sökning och sortering

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

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

Transkript:

TDA 548: Grundläggande Programvaruutveckling Föreläsning 1, vecka 6: Abstraktion genom objektorientering Magnus Myréen Chalmers, läsperiod 1, 2016-2017

Hur skulle ni implementera detta? (3D demo) Vi återkommer till detta exempel senare.

En nya föreläsare. En ny stil. Samma mål: att hjälpa er lära er Java. Varför inte att lära er Java?

Kort om mig Från Finland. Finlandssvensk. Studerade Computer Science (CS) i Oxford (2002-2005). Doktorerade från Cambridge i CS år 2008. Var forskare där till augusti 2014. Nu är jag forskare här. (Jag forskar i formella metoder och FP.) Har varit ansvarig för denna kurs de senaste två åren.

Denna kurs men inte nästa år tyvärr. Har varit ansvarig för denna kurs de senaste två åren. I år provar vi nya saker!

Flipped classroom!

Flipped classroom! I denna delen av kursen: övningar & labbar före Material som ni inte sätt tidigare i föreläsningar! föreläsningar Idén: ni kommer med djupare förståelse av problemen till föreläsningarna.

Mål: interaktiva föreläsningar Våga fråga! Diskussioner, quizar, live kodning, mm. Mig når ni lätt via epost: myreen@chalmers.se Skicka feedback, speciellt om något inte funkar!

Mitt mål Jag vill att ni blir erfarna programmerar. Hur blir man det? experience = sum of all previous mistakes

Resten av föreläsningen Nytt material: Att bygga abstraktioner med objekt och interface Längre exempel: Roterande 3D kub och en quiz

Vad är (objekto.) programmering? Det är som att bygga med Lego men bitarna kan tillsammans bli större bättre bitar. högre abstraktions nivå högre abstraktions nivå

Något om Abstraktion (= subtraktion?) Det är svårt att tänka på flera nivåer på samma gång. Abstraktion är ett verktyg. Abstrahera = Att införa ett begrepp Ett begrepp fångar vad som är gemensamt "Bortse från eller framhäva gemensamma och viktiga egenskaper hos en samling objekt och bortse från detaljer och konkret realisation." Abstraktioner hjälper oss att fokusera på de för tillfället viktiga egenskaperna. Ex skottår det är en viktig egenskap hos ett årtal men vi behöver inte veta exakt hur man avgör om ett årtal är ett skottår för att kunna använda oss av egenskapen.

Abstraktioner Vi abstraherar varje dag på olika nivåer: atomer primitiv syn på världen organ biologisk samling atomer Sam (katten) namn på en specifik samling organ katt en större klass där Sam ingår djur en ännu större klass levande organism de flesta detaljer utelämnade varje steg representerar olika synsätt på samma objekt olika abstraktionsnivåer vilken nivå vi väljer att använda beror på våra behov för tillfället varje nivå "implementeras" på en lägre nivå

"Black box" tänkande En insida och en utsida: Gränssnittet (interfacet) är det som binder samman delarna. Interfacet har såväl syntax som semantik (specifikationen) "The interface of a black box should be fairly straightforward, well defined, and easy to understand." "To use a black box, you shouldn t need to know anything about its implementation; all you need to know is its interface." "The implementor of a black box should not need to know anything about the larger systems in which the box will be used." En black box är ett sätt att uttrycka vissa steg i ett program på en högre abstraktionsnivå. Vi kan abstrahera gömma detaljer. vad inte hur

Metoder som Svarta boxar metod underprogram funktion procedur x a b sqrt medelvärde sqrt(x) medelvärde av a och b årtal skottår true eller false Ett sätt att uttrycka vissa steg i ett program på en högre abstraktionsnivå. Ger direkt stöd för stegvis förbättring. Vi kan abstrahera gömma detaljer. vad inte hur Varje box skall endast göra en sak bra.

Metoder är begränsade => vi behöver "större" svarta boxar Antag tex att vi behöver representera ett datum. Här räcker inte en metod (som ju skall göra en sak bra) för vi vill kunna göra flera saker med ett datum: skottår? addera två datum undersöka vilken veckodag ett viss datum inträffar fråga efter nästa datum (nästa dag) osv Vi behöver något kraftfullare. Något som i en enhet kan representera ett datum och dessutom alla dessa egenskaper hos ett datum. Klasser/Objekt modellerar hur vi tänker om den verkliga världen genom att stödja nedbrytningen av världen till hanterbara saker.

Objekt som Svarta boxar Identitet: hall-lampan Tillstånd (state): tänd, släkt, sönder effekt: (40 / 60 W?) Beteende (methods): släck tänd? släckt? tänd effekt? lampan Vi kan abstrahera gömma detaljer. vad inte hur Varje box skall endast göra en sak bra.

Objektorienterad programmering Objektorienterade system är strukturerade runt sina objekt dvs funktionaliteten är distribuerad till systemets objekt. släck tänd? släckt? tänd effekt? lampan

Abstraktion med objekt Att byta primitiva typer till kraftfullare typer.

Abstraktion med objekt I övningen såg vi hur den primitiva typen int byttes till BigInteger. private int n; private int m; blev private BigInteger n; private BigInteger m; för att skapa en bra klass för rationella tal. skapade en abstraktion! den nya typen Rational är lik BigInteger men för rationella tal och sen kan Rational klassen användas som en black box bit när man implementerar beräkningen av pi. Vi bygger högre abstraktioner

Abstraktion med interface Att abstrahera över flera klasser.

Labben kräver mera abstraktion! Ni definierar klasser: Line Rectangle Oval Vi behöver en array av som kan innehålla en blandning av dessa klasser. Hur deklarerar man en sådan array? Vad är typen? Fungerar inte: Line[] array; Rätt sätt att tänka: Rectangle[] array; Oval[] array; Vad är gemensamt för dessa klasser? alla dessa är för specifika. Svar: Line, Rectangle, Oval har alla varsin draw metod och det är det enda vi är intresserade av i DrawableStack.

Javas interface Så här definieras ett interface, gränssnitt på svenska. Ett interface är en lista av metodsignaturer utan implementationer. public interface Comparable { public int compareto(object o); } En klass kan implementera en eller flera interface. Om en klass säger att den implementerar en interface, då måste den implementera varje metod i interfacet. I detta fall compareto för Comparable. public class Test implements Comparable, OtherInterface {... } Interface är typer. Man kan typkonvertera till interface typer och kan anta att metoder i interfacet finns i interface instanser: Test t = new Test(); Comparable c = t;... c.compareto(...)...

att lösa problemet för labben Fungerar inte: Fungerar: Line[] array; Rectangle[] array; Drawable[] array; Oval[] array; alla dessa är för specifika. ifall Drawable är ett interface som har draw metoden. Man kan typkonverata till Drawable från Line, Rectangle, Oval ifall dessa implementerar Drawable. Oval o =...; Drawable d = o; d.draw(...);

Resten av föreläsningen Nytt material: Att bygga abstraktioner med objekt och interface Längre exempel: Roterande 3D kub och en quiz

Hur skulle ni implementera detta? (3D demo) Hur bryter man ner programmeringsuppgiften? Vilka abstraktioner ska vi ha?

Hur skulle ni implementera detta? (3D demo) Hur bryter man ner programmeringsuppgiften? Svar: Vilka abstraktioner ska vi ha? Koordinater i 3D, linjer i 3D, samlingar av linjer. Dessa ska man kunna rita och rotera. Koden som skrevs interaktivt är med i övning 2. Koden använder sig av interface för att abstrahera.