Classes och Interfaces, Objects och References, Initialization

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

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

Parameteröverföring. Exempel. Exempel. Metodkropp

Modeller, Objekt och Klasser

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

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

TDDC77 Objektorienterad Programmering

OOP Objekt-orienterad programmering

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

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

TDA550 - Objektorienterad programvaruutveckling, fk

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

Programmering A. Johan Eliasson

Klassdeklaration. Metoddeklaration. Parameteröverföring

DAT043 - Föreläsning 7

(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

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

OOP Objekt-orienterad programmering

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

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

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

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

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

TDDD78 Viktiga begrepp, del 2

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

Objektorienterad Programmering (TDDC77)

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

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

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

Föreläsning 13 Innehåll

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

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

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

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

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

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

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

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

OOP Objekt-orienterad programmering

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

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

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

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

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

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

Typkonvertering. Java versus C

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Objektorienterad Programmering (TDDC77)

Föreläsning 5-6 Innehåll

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

Personal Objektorienterad programmeringsmetodik 5DV081 5DV109

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

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 2, vecka 8: Repetition

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

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Dynamisk bindning och polymorfism

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

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

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

Repetition av OOP- och Javabegrepp

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

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

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

F4. programmeringsteknik och Matlab

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

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

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

Repetition av OOP- och Javabegrepp

Design by Contract, Exceptions, Initialisering. Objekt-orienterad programmering och design (DIT952) Johannes Åman Pohjola, 2017

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

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

TENTAMEN OOP

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

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

OOP Objekt-orienterad programmering

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Objektorienterad Programmering (TDDC77)

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Objektorienterad Programmering (TDDC77)

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

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

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

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Transkript:

Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018

Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte: undvika kod-duplicering i subclasses. Kan 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.

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. Tumregel: 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.

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 om att skapa nya objekt. Attribut märkta static tillhör maskinen. Anrop av metoder märkta static är meddelanden till maskinen. Allt som inte är märkt static (eller 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? 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 } boolean b = true Namnen stack och heap kommer ursprungligen av de datastrukturer som används för att implementera dem (mer i kursen Datastrukturer). int age = 37 Point p = Point int x = 100 int y = 150

Opaque pointers Referenser (pointers) i Java är opaque du som programmerare kan aldrig se deras värde, enbart arbeta med dem (e.g. anropa metoder via dem). Vissa andra språk t ex 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 referens-vä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. Garanterar att referensen pekar på ett objekt med förväntat beteende, dvs. har de metoder och attribut som förväntas för typen. Mer om referenstyper, subtypning och polymorfism senare i kursen.

Initialisering av objekt När vi anropar en konstruktor sätter vi igång en kedja av händelser, som mynnar ut i att vi får tillbaka ett objekt av typen i fråga. (Detta förutsatt att inga throwables kastas)

(Live code)

Initialisering av objekt 1. Statisk initialisering av klassen ( maskinen startar upp ). static initializer blocks, samt initialisering för static attribut. Görs bara om maskinen inte redan startats av ett tidigare anrop, till konstruktor eller någon static metod (eller användning av static attribut). 2. Anrop till konstruktorn för objektets superklass ( maskinen utgår från tidigare modell ) Explicit anrop till någon super( )-konstruktor måste göras allra först i en konstruktor. Om ingen super-konstruktor anropas explicit, anropas implicit super(). 3. Initialisering av objektet ( maskinen skapar grunden ) Non-static initializer blocks, samt initialisering för non-static attribut. 4. Exekvering av konstruktorn självt ( maskinen färdigställer ) Koden som explicit skrivits i konstruktorn, förutom eventuellt anrop till en super-konstruktor.

Exempel på initialisering public class Init { static String hello = Hello! ; int x = 5; String foo; } Init() { constructorcode(); } Init init = new Init(); ======================== hello = Hello! ; x = 0; Foo = null; super(); x = 5; constructorcode(); Ett anrop av konstruktorn resulterar i 1. static init 2. super 3. object init 4. constructor

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. Djupare förståelse för initialisering.

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