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

Relevanta dokument
Classes och Interfaces, Objects och References, Initialization

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

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

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

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

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Parameteröverföring. Exempel. Exempel. Metodkropp

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

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

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

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

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

OOP Objekt-orienterad programmering

TDDC77 Objektorienterad Programmering

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

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

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

Modeller, Objekt och Klasser

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

Programmering A. Johan Eliasson

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

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

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

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

(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

DAT043 - Föreläsning 7

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

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

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

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

Objektorienterad Programmering (TDDC77)

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

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

OOP Objekt-orienterad programmering

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

OOP Objekt-orienterad programmering

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

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

TDA550 - Objektorienterad programvaruutveckling, fk

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 13 Innehåll

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

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

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

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

TDDD78 Viktiga begrepp, del 2

Objektorienterad Programmering (TDDC77)

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Imperativ programmering. Föreläsning 4

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Repetition av OOP- och Javabegrepp

Föreläsning 2, vecka 8: Repetition

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

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

Repetition av OOP- och Javabegrepp

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

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

Personal Objektorienterad programmeringsmetodik 5DV081 5DV109

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

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

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

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

Typecasting - primitiva typer. Innehåll. DoME klasser

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Typkonvertering. Java versus C

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

TENTAMEN OOP

Malmö högskola 2007/2008 Teknik och samhälle

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

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

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

Arrayer. results

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Kopiering av objekt i Java

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

F4. programmeringsteknik och Matlab

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Transkript:

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

Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte: Att samla gemensam kod för subclasses (undvika kod-duplicering). Kan (men måste inte) ha metoder märkta abstract dessa har ingen body, och subclasses måste göra override (om de inte själva är abstract). Kan ha konstruktorer; dessa kan enbart anropas via this() i den egna klassen eller super() i subclasses.

Live demo DrawPolygons

Interface Ett interface ( gränssnitt men undvik den svenska termen) är en specifikation av ett antal metod-signaturer som tillsammans bildar en typ. Enbart signaturerna ges alla metoder är helt abstrakta. Interfaces i Java får specificera konstanter attribut som implicit är public static final, och som initialiseras till ett konstant värde. Obs: används sällan. Grundprincipen för ett interface är en samling metodsignaturer.

Quiz: Abstract class vs interface Vad är skillnaden på en abstract class med enbart abstrakta metoder, och ett interface? 1. En abstract class kan definiera attribut. Ett interface kan enbart definiera konstanter (static final). 2. En subclass kan bara ärva (inherit) från en superklass (ingen multiple inheritance ), men implementera många interfaces. I det avseendet är ett interface mer flexibelt.

Abstract class vs interface Använd det som passar avsikten bäst. Rule of thumb: En abstract class representerar en generalisering av flera olika subclasses. Mammal generaliserar Cow, Sheep, Cat Shape generaliserar Rectangle, Triangle, Circle Ett interface representerar en egenskap som kan delas av många (helt) olika classes. Clonable representerar alla objekt som kan skapas exakta kopior av (implementerar clone()). Runnable representerar alla objekt som kan köras som en separat thread (implementerar run()). Mer om när vi bör använda vad, och hur, senare i kursen.

Quiz (hard): Multiple inheritance Varför tillåter inte Java så kallad multiple inheritance (dvs att en class kan ärva från flera superclasses)? Tänk er att vi har två classes : Cowboy och Artist. Båda classes har en metod draw() (med olika beteende). Tänk er att vi gör en class CowboyArtist som ärver från både Cowboy och Artist, och skapar ett objekt cowboyartist. Vad händer när vi anropar cowboyartist.draw()? Duellerande, eller akvareller?

Class vs Object (static vs non-static) Analogi: En Class är en produktionsmaskin. Maskinen är programmerad med ritningar för en sorts objekt, som den kan skapa efter önskemål (dvs anrop av konstruktor). Maskinen kan ha ytterligare funktionalitet: Anrop av konstruktorer är meddelanden till maskinen att skapa nya objekt. Attribut märkta static tillhör maskinen, inte objekten den skapar. Anrop av metoder märkta static är meddelanden till maskinen, inte objekt. Allt som inte är märkt static (utom konstruktorer) är en del av ritningen för objekten som skapas. Objekten vet alltid vilken maskin de kommer från (kan använda saker märkta static). Maskinen håller inte automatiskt reda på de objekt den skapat (kan inte använda saker som inte är märkta static).

Live demo

Quiz Hur kan vi både spara objektet i listan och returnera det? (Äta kakan och ha den kvar??) Har vi plötsligt två kopior? Objektet är vad det är. Det som sparas, och det som returneras, är en referens till objektet.

Referenser När vi tilldelar (assign) ett objekt till en variabel eller ett attribut så sparas en referens till objektet inte objektet självt. Andra ord för referens är address eller pointer (pekare).

Värde (value) vs objekt Ett värde i Java har en primitiv typ. E.g. int eller float En literal i Java är en syntaktisk representation av ett specifikt värde. E.g. 42 eller 3.14159f Ett objekt i Java är en komplicerad struktur med attribut (och metoder) inuti sig.

Quiz: primitive types? Räkna upp de 8 primitiva typer som finns i Java. byte 8-bit integer (-128/127) short 16-bit integer (-32768/32767) int 32-bit integer (-2 31 /2 31-1) long 64-bit integer (-2 63 /2 63-1) float 32-bit floating point double 64-bit floating point boolean true eller false char 16-bit unicode character

Quiz: Den nionde primitiva typen Det finns en hemlig primitiv typ, vars värden du ofta arbetar med, men aldrig får se Referenser! Referenser (pekare till objekt) är små och enkla värden, adresser till en minnesarea där objekten bor.

Värden är små, objekt är stora Värden är små och enkla. Inga värden överstiger 64 bitar (long, double). Objekt är stora och kan vara hur komplexa som helst. Innehåller attribut, som i sin tur håller värden. Innehåller även en referens till ritningen, där alla metoder är specificerade. ( Ritningen, dvs dess class, innehåller metoder, där varje instruktion (efter kompilering) är 1-2 byte stor (Java byte code). Ett statement eller expression kompileras till en eller flera instruktioner. (Läs kursen Kompilatorkonstruktion för mer info.))

Stack vs heap Heap Värden för variabler sparas effektivt i en minnesarea kallad stack. Objekt skapas och lever i en separat minnesarea kallad heap. Stack int i = 0 char c = x String name = Triangle t = String char[] value = Triangle Point centerpoint = char[] { N, i, k, l, a, s } Namnen stack och heap kommer ursprungligen av de datastrukturer som används för att implementera dem (mer i kursen Datastrukturer). boolean b = true int age = 37 Point p = Point int x = 100 int y = 150

Opaque pointers Referenser (pointers) i Java är vad som kallas opaque dvs du som programmerare kan aldrig se deras värde, enbart arbeta med dem (e.g. anropa metoder via dem). Vissa andra språk most famously C och C++ har non-opaque pointers. Man kan då t ex addera en pointer med en int, och resultatet är en ny pointer som pekar någon annan stans i heapen. Användbart för effektivitet vid explicit minnesanvändning men totalt typosäkert! Mer om detta i kursen Maskinorienterad programmering.

Alias Två variabler eller attribut som håller samma referensvärde dvs pekare till samma objekt i heapen sägs vara alias för varandra. Kan skapa förvirring ibland. Om vi t ex ändrar värdet av p.x, så kommer triangeln t att ha fått en uppdaterad mittpunkt, eftersom t.centerpoint och p är alias (referenser till samma Point-objekt). Stack int i = 0 char c = x String name = Triangle t = boolean b = true int age = 37 Point p = String char[] value = Triangle Heap Point centerpoint = Point int x = 100 int y = 150 char[] { N, i, k, l, a, s }

Referenstyper Alla typer som inte är primitiva typer kallas referenstyper (reference types). String, Object, Runnable, char[], ArrayList<Polygon>, Alla referenstyper har värden av samma sort: referenser. Typen för en referens används för att garantera att referensen i fråga pekar på ett objekt som kan uppföra sig som förväntat, i.e. har de metoder och attribut som förväntas för typen. Mer om referenstyper, subtypning och polymorfism senare i kursen.

Summering Interface vs abstract class (vs non-abstract class) Static (hör till maskinen) vs non-static (hör till objekten den skapar) Värden (på stacken) vs objekt (på heapen) Djupare förståelse för referenser och hur de fungerar.

Reflektion Vad har jag lärt mig under den gångna veckan? Vad har varit mest förvirrande under den gångna veckan?