TDDD78 Objektorientering i Java, del 2

Storlek: px
Starta visningen från sidan:

Download "TDDD78 Objektorientering i Java, del 2"

Transkript

1 TDDD78 Objektorientering i Java, del 2 Objektvariabler är pekare vad är det? Hur används pekare för att sätta samman objekt (composition)? Hur används hierarkier för att modellera nära relaterade typer? jonas.kvarnstrom@liu.se 2016

2 Viktiga begrepp inte bara inom objektorientering

3 Motivation Programmeringsuppgift: Lagra en databas över anställda Håll reda på varje anställds närmaste chef som också är en anställd! 3 En första ansats: public class Employee { private String name; private Employee boss; // Och andra egenskaper public Employee(String name, Employee boss) { this.name = name; this.boss = boss; Hur ska detta lagras i praktiken?

4 Motivation (2): Innehåll? Ser ut som att en Employee innehåller en annan 4 Jag Chefen public class Employee { private String name; private Employee boss; public Employee(String name, Employee boss) { this.name = name; this.boss = boss;

5 Motivation (3): Innehåll? Kan bli problematiskt! 5 Många nivåer Jag Chefen Chefens chef Högsta chefen Hur får man stopp på det? Två platser i minnet olika objekt! Andra kan inte innehålla samma objekt! Min kollega Samma chef!

6 Motivation (4): En bättre lösning En anställd ska inte innehålla chefen, utan peka ut vem chefen är 6 Jag Min kollega Chefen Chefens chef Högsta chefen Så: Hur pekar man på ett annat objekt?

7 Variabler och minnesadresser 7 Programkod int: längd Minne vid körning 10 Använd minnesadresser! Finns alltid där "i bakgrunden": "int längd = 10;" "lagra 32-bitars heltal 10 på adress " "Employee me = new ;" "Skapa Employee-objekt på adress " int: höjd String: hälsning Employee: me "Hello"

8 Variabler och minnesadresser (2) 8 Programkod Minne vid körning I vissa språk får man veta minnesadresserna C: höjd == 5 &höjd == ("adressen till höjd") int: längd int: höjd

9 Pekare (1) 9 Programkod Minne vid körning En variabel av pekartyp kan innehålla en adress C: "pekare till int" heter int* int* höjdpekare = &höjd; Värdet blir adressen int: längd int: höjd int*: höjdpekare Värdet är adressen till ett annat värde i minnet

10 Pekare (2): Tilldelning 10 Programkod Minne vid körning Ändra pekarens värde ändra vart den pekar C: int* höjdpekare = &höjd; höjdpekare = &längd; int: längd int: höjd int*: höjdpekare

11

12 Objektvariabler är pekare I Java är en objektvariabel alltid en pekare! Circle mycircle = new Circle(10, 20, 30); 12 Namn Värde i minnet Circle: mycircle Skapa variabeln, låt den peka på obj. Object (data) header: x 10 y 20 r Skapa objektet (minne, konstruktor, ) mycircle är egentligen pekaren (4/8 bytes), inte objektet! Java gömmer dess numeriska värde (irrelevant för vår kod): Vi kan inte få fram talet 49152

13 Men vilka konsekvenser får detta?

14 Pekare i Java (1): Objektmedlemmar 14 Att komma åt medlemmar: T.ex. mycircle.x = 4711; Beräknar mycircle (49152); går automatiskt vidare till objektet på plats Hittar fältet x; ändrar dess värde Namn Circle: mycircle Värde i minnet Object (data) header: x 4711 y 20 r

15 Pekare i Java (2): Exempel 15 Namn Circle: c1 Värde i minnet Anta två cirklar: Circle c1 = new Circle(1,1,1); Circle c2 = new Circle(2,2,2); 5000 Circle: c2 Object (data) header: x 1 y 1 r Object (data) header: x 2 y 2 r

16 Pekare i Java (3): Tilldelning 16 Namn Circle: c1 Circle: c2 Värde i minnet Object (data) header: x 1 y 1 r Tilldela c2 = c1; c1, c2 är pekare Ändra pekarens värde ändra vart den pekar Sätter c2 till Kommer inte att kopiera själva cirkeln, fält för fält! Object (data) header: x 2 y 2 r Kvarvarande objekt som ingen pekar på inte ett problem i Java (skräpsamling)

17 Pekare i Java (4): 17 Namn Circle: c1 Circle: c2 Värde i minnet Object (data) header: x 100 y 1 r c2.x = 100; Nu är c1.x också 100 c1 och c2 pekar på samma objekt c1.x och c2.x är samma variabel! "Peter Dalenius" är en sträng "Kursens studierektor" är en annan Men de pekar ut samma person Om Peter Dalenius får ny chef, får kursens studierektor ny chef

18 Pekarexemplet (0) 18 public class Employee { private String name; private Employee boss; public Employee(String name, Employee boss) { this.name = name; this.boss = boss;

19 Pekarexemplet (1) 19 Employee 1 Minne name: "Employee 1" Employee 2 Employee 3 name: "Employee 2" boss: Med pekare: Många kan peka på samma objekt trots att själva objektet bara lagras en gång name: "Employee 3" boss:

20 Pekarexemplet (2) 20 Men anställd 1 har ingen chef! Vad ska boss fältet ha för värde? Minne name: "Employee 1" boss:??? name: "Employee 2" boss: name: "Employee 3" boss: 10000

21 Null-pekare 21 Objektpekare kan ha specialvärdet null Pekar "ingenstans" "inte applicerbart": Noden har ingen chef "vi vet inte än" Minne name: "Employee 1" boss: null Lagras ofta som adressen 0 Spelar ingen roll för oss I Java ser vi bara värdet null name: "Employee 2" boss: Med pekare: Kan lätt ange avsaknad av värde name: "Employee 3" boss:

22 Null-pekare (2) Vad kan man göra om pekarens värde är null? 22 Använda själva pekarvariabeln if (this.boss == other.boss) // Jämför pekarnas värden (0 == 49152), // tittar inte efter något objekt // (Motsvarar operatorn "is" i Python) painter.draw(circle1) // Om circle1 == null, // får parametern till draw också värdet null Inte använda fälten och metoderna i objektet den pekar på! Den pekar ju inte på något objekt! this.boss = null; // OK this.boss.name = "Hello"; // Fel vid körning: NullPointerException boss:

23

24 Sammansättning 1 Anta en klass för 2D-positioner: public class Point { private double x, y; public Point(double x, double y) { this.x = x; this.y = y; public double getx() { return x; public double gety() { return y; public double getdistfromorigin() { return Math.sqrt(x*x + y*y); 24

25 Sammansättning 2 Skapa en cirkelklass två alternativ: public class Circle { // Alla fält är primitiva typer, som tidigare private double x, y, r; public Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; Implementera allt från början public class Circle { // Fält kan vara objekt private Point center; private double r; public Circle(Point center, double r) { this.center = center; this.r = r; Använd existerande punktklassen! Sammansättning = composition 25

26 Sammansättning 3 Med sammansättning: En cirkel har en punkt, eller består av en punkt (och en radie) Återanvändning av existerande kod (Point kunde vara komplicerad) Mindre upprepning bra! 26 Exempel i labb: Listor finns redan En kö har en lista där den kan lagra sina element public class Circle { // Fält kan vara objekt private Point center; private double r; public Circle(Point center, double r) { this.center = center; this.r = r;

27 Sammansättning och delegering Om man vill ge tillgång till "komponentens" funktionalitet: Delegera! 27 public class Circle { // Fält kan vara objekt private Point center; private double r; public Circle(Point center, double r) { this.center = center; this.r = r; public double getdistfromorigin() { return center.getdistfromorigin(); Vad är cirkelns avstånd till origo? Samma som punktens!

28 Sammansatt objektstruktur 1 I vissa språk: Sammansatta objekt är sammansatta i minnet public class Circle { Point center; double radius; Circle c1 = new Circle(); 28 c1 Object header: x y (data) radius "Point-delen" 0.0 av en cirkel

29 Sammansatt objektstruktur 2 Men Javas objektvariabler är alltid pekare! Ett "sammansatt" objekt består egentligen av flera separata objekt class Circle { En Circle består av Point center; en Point-pekare (inte en Point) double radius; en double Circle c1 = new Circle(); 29 c1 Object header: center radius (data) 0.0 Object header: x y (data)

30 Sammansatt objektstruktur 3 Konsekvenser: Som vi såg för pekare tidigare Exempel: Två cirklar kan ha samma centrumobjekt Point center = new Point(10, 20); Circle c1 = new Circle(center, 7); Circle c2 = new Circle(center, 12); 30 c1 Object header: center radius (data) 7.0 Object header: x y (data) c2 Object header: center radius (data) 12.0

31 Typhierarkier: Gränssnitt, ärvning, subtypspolymorfism,

32 Repetition: Klasser Vi har pratat om klasser av objekt i verkligheten 32 Tydliga olikheter separata klasser

33 Liknande objekt Hur gör vi när objekten är "ganska lika"? 33 En klass: Generella motorfordon? Bra: Vi kan generalisera "Detta gäller alla motorfordon" Tre klasser: Bilar, bussar och lastbilar? Bra: Vi kan vara specifika "Detta gäller bara bussar" Fem klasser: Bil, lätt lastbil, tung lastbil, minibuss, buss?

34 Hierarkier av klasser 34 Vi kan ha hierarkier med både generella och specifika klasser! Fordon "is-a"-relation (en bil är en sorts motorfordon) Motorfordon

35 Hierarkier och delmängder En delmängdsrelation mellan klassernas objekt 35 Fordon Motorfordon Alla motorfordon är fordon Cykel Bil Buss Med denna hierarki: En bil kan aldrig vara en buss, är alltid ett motorfordon

36 Liknande datatyper (1) Samma situation uppstår med datatyper hur lagras listor? 36 "Linjärt"? Länkad lista? Object header pos 0 (data) 0.0 pos pos Object header value next Object header value next (data) 0.0 (data) 20.0 Object header value next Object header value next (data) 10.0 (data) Snabbt att slå upp element 92000: Adress = liststart * elementstorlek Långsamt att stoppa in ett element: Måste flytta alla efterföljande element Långsamt att slå upp element 92000: Gå till start, följ pekare gånger Snabbt att stoppa in ett element: Ändra två pekare

37 Liknande datatyper (2) Många olika sorters listor: LinkedList, ArrayList, SkipList, Stora skillnader i implementation Olika klasser Mycket gemensamt t.ex. metoder int size(); Object get(int index); void set(int index, Object element); 37 LinkedList ArrayList SkipList size(): int get(int pos): Object add(object element): Object set(int pos, Object element): void insert(): void size(): int get(int pos): Object add(object element): Object set(int pos, Object element): void size(): int get(int pos): Object add(object element): Object set(int pos, Object element): void

38 Liknande datatyper (3) Vill inte behöva ange exakt typ, bara "någon sorts lista" void quicksort(arraylist somelist) { // Kräver ArrayList! 38 // Men skulle fungera med många // klasser som har size(), get(), set(), ArrayList getnames() { // Lovar att returnera ArrayList! // Anropare kan förlita sig på detta // måste fortsätta med samma typ

39 Duck Typing 39 Python class ArrayList: def extend(self, list): class LinkedList: def extend(self, list): Duck Typing: When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck James Whitcomb Riley def add_lists(list1, list2): list1.extend(list2) return list1 Har en ArrayList-klass Funktioner kollar aldrig typen bara att medlemmarna finns!

40 Utan Duck Typing 40 Java class ArrayList { definierar addall() class LinkedList { definierar addall() public static ArrayList add_lists(arraylist list1, ArrayList list2) { list1.addall(list2); return ret; Måste ange parametertyp Hur kan vi ange "ArrayList eller LinkedList"?

41 Typhierarkier 1 En hierarki av datatyper! 41 List size(): int get(int pos): Object add(object element): Object set(int pos, Object element): void List: Generell sekvens/lista LinkedList ArrayList SkipList En LinkedList är en sorts List

42 Typhierarkier 2: Terminologi Terminologi: List size(): int get(int pos): Object add(object element): Object set(int pos, Object element): void List är supertyp till LinkedList 42 LinkedList ArrayList SkipList LinkedList är subtyp till List supertyp = supertype subtyp = subtype

43 Typhierarkier 3: Vad vinner vi? Nu kan vi skriva om: 43 void quicksort(arraylist somelist) { // Kräver ArrayList! // Men skulle fungera med många // klasser som har size(), get(), set(), void quicksort(list somelist) { // Kan ta emot ArrayList, SkipList, //! ArrayList getnames() { // Lovar att returnera ArrayList! // Anropare kan förlita sig på detta // måste fortsätta med samma typ List getnames() { // Lovar bara List: // Vi kan fritt byta vilken typ av lista // som returneras! Lova mindre!

44 Specifikation utan implementation

45 Bakgrund: Abstrakta datatyper En abstrakt datatyp (ADT): Talar om vilken information som ska finnas En lista innehåller ett antal (n) element Varje element har ett unikt index, [0..n 1] Talar om vilka operationer som finns (ADT är inte OO-specifikt!) int size(list list) void Element void List List add(list list, Element el) get(list list, int index) set(list list, int index, Element el) createandinitializelist() createandinitializelist(int capacity) 45 Säger inget om implementationen, representationen! Enbart hur datatypen ska fungera, vad den ska uppfylla Många varianter kan implementeras Anger ett kontrakt Formellt: En matematisk definition Abstrakt datatyp = abstract data type

46 Interface 1: Metodsignaturer, specifikation 46 Ett interface (gränssnitt) är just specifikation utan implementation /** An ordered collection (also known as a sequence). Elements in the list are indexed beginning at 0 and */ public interface List { /** Returns the number of elements in this list. */ int size(); Object get(int index); void add(object element); void set(int index, Object element); Gränssnitt kan inte instansieras new List()? Det finns ingen kod för dess metoder! Dokumentation anger krav för alla som implementerar List Metodsignaturer: Returtyp, namn, parametrar Inga fält, ingen kod Metoder i ett gränssnitt är alltid (underförstått): public tillgängliga för alla abstract ej implementerade här

47 Interface 2: Implementation 47 En Java-klass kan implementera ett gränssnitt class ArrayList implements List { private Object[] elements; private int length; Ett löfte att uppfylla vad gränssnittet lovar ("kontrakt") public int size() { return length; public Object get(int index) { return elements[index]; public void add(object element) { public void set(int index, Object element) { Kompilatorn verifierar att metoderna finns Programmeraren verifierar att kontraktet i övrigt är uppfyllt public void shuffle() { Kan ha fler metoder än gränssnittet (starkare kontrakt) implementera = implement

48 Interface 3: Typhierarki En typhierarki 48 Sortable <<interface>> sort(comparator c) : void List <<interface>> size(): int get(int pos): Object add(object element): Object set(int index, Object element): void Kan implementera flera gränssnitt Sortable och List är supertyper till LinkedList LinkedList head: Object tail: LinkedList sort(comparator c) : void size() : int LinkedList är en subtyp till Sortable och List elements: Object[] length: int ArrayList size() : int get(int pos): Object add(object element): Object set(int index, Object element): void size() : int SkipList

49 UML: Klassdiagram med gränssnitt 49 UML-diagram: Klassrelationen realisering Ett gränssnitt är bara en beskrivning Klasser realiserar gränssnittet: Ger en konkret implementation Streckad pil, tom pilspets Medlemmar visas: Där de deklareras första gången Där de implementeras List <<interface>> size(): int get(int amount): Object add(object element): Object set(int index, Object element): void LinkedList ArrayList SkipList head: Object tail: LinkedList size() : int elements: Object[] length: int size() : int get(int amount): Object add(object element): Object set(int index,object element): void size() : int

50 Om man har flera "klassvarianter" med gemensam bas: Oftast bör man ha ett gränssnitt, så den gemensamma basen kan användas List LinkedList SkipList ArrayList

51 Sammanhang 51 Kontrakt Gränssnitt Abstrakt datatyp

52

53 Objekt med flera typer Ett objekt har nu flera typer Varje LinkedList är också av typen List och Sortable 53 Sortable List LinkedList SkipList ArrayList Bird Duck Owl Dodo Vilka effekter får det?

54 Peka på en subtyp 54 En objektvariabel kan peka på objekt av godtycklig subtyp List names = new ArrayList(); Bird mybird = new Duck(); En ArrayList är ju en List Så vilken typ har variabeln egentligen? En objektvariabel kan pekas om till ett objekt av annan typ List numbers = new SkipList(); numbers = new LinkedList(); Både SkipList och LinkedList är ju specialfall av List Så kan variabler byta typ?

55 Typer: Apparent / Actual Med typhierarkier: List windows = application.getwindows(); 55 Variabelns typ kallas static / apparent type List: windows Variabel av typ List List get() add() (no impl) (no impl) Känt av kompilatorn Statiskt: Variabelns typ är oföränderlig Object header Node: head Node: tail (data) LinkedList get() [LL-get] add() [LL-add] print() [] Värdet vid exekvering blir av typen LinkedList Generellt bara känt vid körning Kan ändras under körning Objektets typ kallas dynamic / actual type

56 Synliga (tillgängliga) medlemmar Givet en variabel, vilka metoder och fält är synliga? List windows = application.getwindows(); 56 List: windows Variabel av typ List List get() add() (no impl) (no impl) I Java: De som finns i variabelns (uttryckets) typ! windows.get(), windows.add() Object header Node: head Node: tail (data) LinkedList get() [LL-get] add() [LL-add] print() [] Värdet vid exekvering blir av typen LinkedList Kompilatorn vet inte att värdet kommer att vara en LinkedList Vi kan inte anropa windows.print()!

57 Statisk typkontroll Så typkontrollen är fortfarande statisk class Application { List getwindows() { SkipList getfiles() { 57 Application app List windows List files = ; = app.getwindows(); = app.getfiles(); Kompilatorn testar: getfiles() returnerar SkipList, files är av typ List Allt OK!

58 Vem vet mest? 58 Men tänk om vi vet mer än kompilatorn! Vi har listor av fåglar public class BirdList { void add(bird foo) { Bird get(int index) { Vi stoppar in något först i listan BirdList lista = new BirdList(); lista.add(new Owl()); Vi plockar ut det Bird a = lista.get(0); Owl b = lista.get(0); Duck // Kompilatorn accepterar Owl Bird Dodo // Fel! Metoden get() lovar bara att ge oss en Bird, // och inte alla fåglar är ugglor Men vi vet ju vad vi stoppade in där!

59 Att veta mer (2) 59 Vi kan tala om för kompilatorn vad vi vet! Använd en cast Owl b = (Owl) lista.get(0); En object-cast är ett löfte: Fågeln är faktiskt en uggla!" Resultatet är en ny pekare till samma objekt Inte ett nytt "konverterat" objekt! Bird: lista.get(0) Om man ljuger: ClassCastException (här finns dynamisk typkontroll, dvs. vid körningen!) Owl: (Owl) lista.get(0) Object header value (data) 10

60

61 Namnbindning 61 Namnbindning: Givet en identifierare (namn), vilken variabel / fält / metod / menar vi? För variabler tar kompilatorn reda på detta: class Binding1 { void foo() { int index = 100; int other = 200; System.out.println(index); // "index" binds till metodens första variabel class Binding2 { int index = 100; void foo() { int other = 200; System.out.println(index); // "index" binds till objektets första fält Detta är statisk bindning = tidig bindning: Sker före programmet körs

62 Bindning av metoder Att binda metodnamn till implementation: 62 Utan typhierarkier Variabelns typ = objektets typ Statisk bindning är möjlig ArrayList mylist = ; mylist.add(); Vilken variant av add()? Måste vara ArrayList:s! Känt vid kompileringen: Namnet add() kan statiskt bindas till en funktion av kompilatorn Med typhierarkier Variabelns typ!= objektets typ Dynamisk bindning krävs List mylist = ; mylist.add(); Vilken variant av add()? ArrayList:s? LinkedList:s? Okänt vid kompileringen: Namnet add() måste dynamiskt bindas till en funktion vid körning

63 Metodtabeller Varje objekt känner till sin klass Varje klass känner till sin metodkod 63 Klassinfo med metodtabell Virtual method table: vtable List: names1 List-metoder: Object get(int index), void add(object o), Object header: head tail (data) LinkedList get() [LL-get] add() [LL-add] print() []

64 Dynamisk bindning 64 Dynamisk bindning = sen bindning = dynamisk dispatch Objektets typ avgör List names1 = foo.getnames(); // Returnerar en LinkedList names1.add(n1); // LinkedList-implementationen av add List names2 = bar.getnames(); // Returnerar en ArrayList names2.add(n1); // ArrayList-implementationen av add Objektet talar (indirekt) om för oss var implementationen finns: List: names1 List: names2 Object header: head tail (data) LinkedList get() [LL-get] add() [LL-add] print() [] List-metoder: Object get(int index), void add(object o), Object header: length elements (data) ArrayList get() add() [AL-get] [AL-add]

65 Dynamisk bindning är nödvändigt! Kan vara omöjligt att analysera typen i förväg! 65 public class RandomList { public static void main(string[] args) { List list = getlist(); list.add(); // Vilken typ var det? private static List getlist() { if (Math.random() > 0.5) return new ArrayList(); else return new LinkedList();

66 Subtypspolymorfism 66 Typhierarkin + sen bindning ger oss Subtypspolymorfism πολυμορφισμός = som har flera former Här: Ett metodnamn, deklarerat i en typ Flera implementationer, skrivna i subtyperna Kallas ofta enbart "polymorfism" men polymorfism är egentligen bredare begrepp Sortable List LinkedList SkipList ArrayList

67 Overloading Kontrasteras med överlagring = ad-hoc-polymorfism Samma namn, flera implementationer (för olika argumenttyper) class Printer { void print(int val) { void print(double val) { void print(double val, int precision) { Inte ett OO-begrepp mer allmänt! 67 Alla varianter är kända vid kompileringen Ger statisk bindning

68

69 Interface-ärvning 1: Hierarkier Vi har sett typhierarkier i två nivåer 69 Gränssnitt anger funktionalitet: Vad som är gemensamt för alla listor List <<interface>> size(): int get(int pos): Object add(object element): Object set(int index, Object element): void Klasser ger oss implementationer LinkedList ArrayList SkipList

70 Interface-ärvning 2: Gemensamt Men List har också något gemensamt med Set 70 Set <<interface>> size(): int add(object element): Object List <<interface>> size(): int get(int pos): Object add(object element): Object set(int index, Object element): void Hur deklarerar vi en variabel som kan peka på en lista eller en mängd? LinkedList ArrayList SkipList

71 Interface-ärvning 3: En nivå till Genom ytterligare en nivå! Collection <<interface>> 71 size(): int add(object element): Object Set <<interface>> size(): int add(object element): Object List <<interface>> size(): int get(int pos): Object add(object element): Object set(int index, Object element): void LinkedList ArrayList SkipList

72 Interface-ärvning 4 Detta är interface-ärvning interface Collection { void add(object obj); boolean contains(object obj); interface List extends Collection { void set(int index, Object obj); 72 Collection är ett superinterface till List List utökar eller ärver från Collection List är ett underinterface till Collection List extends or inherits from Collection List is a subinterface of Collection Set Collection List Ärver Adderar kontrakt/löften: Collection lovar att ha en add()-metod, egna löften: List lovar också

73 Interface-ärvning 5: Multipel ärvning Multipel ärvning tillåts för gränssnitt interface SortableList extends Sortable, List { // Kombinerar supertypernas löften / kontrakt // Inget nytt adderat interface NetworkSocket extends DataInput, DataOutput { // Kombination av två supertyper // Plus: ytterligare en metod krävs public NetworkAddress getremotehost(); 73 Sortable List SortableList multipel ärvning = multiple inheritance

74 UML-klassdiagram: Generalisering Klassrelation: Generalisering (ärvning) List specialiserar Collection (lägger till nya krav, nya metoder) Collection generaliserar List Vanlig linje, tom pilspets Collection <<interface>> 74 +size(): int +add(object element): Object +contains(object element): boolean List <<interface>> +get(int index): Object +set(int index, Object element): void

TDDD78 Objektorientering i Java, del 2

TDDD78 Objektorientering i Java, del 2 TDDD78 Objektorientering i Java, del 2 Objektvariabler är pekare vad är det? Hur används pekare för att sätta samman objekt (composition)? Hur används hierarkier för att modellera nära relaterade typer?

Läs mer

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

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser Hur används hierarkier för att modellera nära relaterade typer? Nu:

Läs mer

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd! Pekare (till objekt) Objektvariabler är pekare vad är det? (Viktiga begrepp inte bara inom objektorientering!) Hur används pekare för att sätta samman objekt (composition)? TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se

Läs mer

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det? TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 2 Vad krävs? Hur fungerar det? Hur får en subtyp fungera egentligen? Krav på hierarkier 1 3 Får subtypen LinkedList sakna metoder från

Läs mer

TDDD78 Viktiga begrepp, del 2

TDDD78 Viktiga begrepp, del 2 jonas.kvarnstrom@liu.se 2015 TDDD78 Viktiga begrepp, del 2 Identitet och likhet Är likhet och identitet samma sak? Oj, vi har samma kläder på oss idag! Nej, men likadana! Besserwisser 3 Detta är två rutor

Läs mer

TDDD78 Viktiga begrepp i programmering / objektorientering

TDDD78 Viktiga begrepp i programmering / objektorientering jonas.kvarnstrom@liu.se 2015 TDDD78 Viktiga begrepp i programmering / objektorientering Repetition 3 En variabel består av: Ett symboliskt namn i programkoden En lagringsplats i minnet, som kan innehålla

Läs mer

Sammansatta datatyper Generics: Parametrisk polymorfism

Sammansatta datatyper Generics: Parametrisk polymorfism jonas.kvarnstrom@liu.se 2017 Sammansatta datatyper Generics: Parametrisk polymorfism Listor och arrayer 2 Enligt TDDD73: Många språk har både listor och arrayer även Java och Python! Exakta definitioner

Läs mer

Ärvning av implementation. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?

Ärvning av implementation. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva? Ärvning av implementation Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva? TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Implementationsarv 1: Klassnivåer

Läs mer

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när?

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när? TDDD78 Objektorientering i Java, del 4 Hur vet man om två objekt är lika? Hur undviker man objekt och när? jonas.kvarnstrom@liu.se 2016 Identitet och likhet Är identitet och likhet samma sak? Oj, vi har

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Överlagring (overloading) Arv

Läs mer

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och

Läs mer

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

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Klassen calculator Signatur Calculator

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization 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

Läs mer

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0.. Ett problem Kontrollstrukturer och er Hur sparas data T ex när man vill spara resultaten av en tävling Exempel med 3 deltagare: public class Competition private int result1; private int result2; private

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

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

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a. Översikt UML Sekvensdiagram (dynamic structure) Informationsflöde genom programmet Användningsfall (use cases) Aktörers interaktion med systemet Paketdiagram Beroenden mellan paket abstrakta klasser Multipel

Läs mer

TDDD78 Objektorientering i Java, del 3

TDDD78 Objektorientering i Java, del 3 TDDD78 Objektorientering i Java, del 3 Ärvning av implementation, inklusive abstrakta klasser Egenskaper hos Javas arvshierarki Att skriva kontrakt, och dess konsekvenser Att gömma information i ett objekt

Läs mer

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

TDDD78 Introduktion till OOP i Java

TDDD78 Introduktion till OOP i Java jonas.kvarnstrom@liu.se 2014 TDDD78 Introduktion till OOP i Java Klasser Bilar är komplicerade vi tar cirklar som exempel 3 En klass i Java 4 För att modellera cirklar som objekt i Java: Skapa en cirkelklass

Läs mer

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer Exempel for (int antal=; antal < 75; antal++) System.out.println (antal); Arrayer for (int num=5; num

Läs mer

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

TDDD78, TDDE30, 729A Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices

TDDD78, TDDE30, 729A Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices Abstrakt klass eller gränssnitt? (1) 3 Gränssnitt Kan implementera flera Ingen

Läs mer

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? jonas.kvarnstrom@liu.se 2016 2014 jonas.kvarnstrom@liu.se

Läs mer

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall

Läs mer

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 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:

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

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

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).

Läs mer

Arrayer. results

Arrayer. results Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1

Läs mer

TDDD78 Introduktion till OOP i Java

TDDD78 Introduktion till OOP i Java jonas.kvarnstrom@liu.se 2016 TDDD78 Introduktion till OOP i Java Klasser 3 Bilar är komplicerade vi tar cirklar som exempel (ritprogram?) En klass i Java För att lagra info om cirklar som objekt i Java:

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? jonas.kvarnstrom@liu.se 2015 2014 jonas.kvarnstrom@liu.se

Läs mer

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Abstrakt stack Abstrakt kö Länkade listor Abstrakta datatyper Det är ofta praktiskt att beskriva vilka operationer man vill kunna göra på sina

Läs mer

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =

Läs mer

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning 2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten

Läs mer

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass. public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private

Läs mer

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9 Listor Koffman & Wolfgang kapitel 2, avsnitt 2.1 2.3, 2.5 2.6 och 2.9 Figur 2.1, sid 63 java.util.list, med dess implementeringar 2 List och primitiva typer En array kan innehålla primitiva typer: int[],

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om

Läs mer

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 Pelle Evensen, Daniel Wetterbro 5 november 2009 Sammanfattning Denna vecka ska vi titta på abstrakta klasser kontra interface,

Läs mer

Föreläsning 13 Innehåll

Föreläsning 13 Innehåll Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

TDDD78 Introduktion till OOP i Java

TDDD78 Introduktion till OOP i Java jonas.kvarnstrom@liu.se 2017 TDDD78 Introduktion till OOP i Java Klasser 3 Bilar är komplicerade vi tar cirklar som exempel (ritprogram?) En klass i Java 4 För att lagra info om cirklar som objekt i Java:

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? jonas.kvarnstrom@liu.se 2014 2017 jonas.kvarnstrom@liu.se

Läs mer

Länkade strukturer. (del 2)

Länkade strukturer. (del 2) Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion

Läs mer

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder

Läs mer

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? TDDD78, TDDE30, jonas.kvarnstrom@liu.se 729A85 jonas.kvarnstrom@liu.se

Läs mer

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

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018 Subtyping och variance Objekt-orienterad programmering och design Alex Gerdes, 2018 Typer Java har två sorters typer primitiva typer och referens-typer. Primitiva typer är typer för värden: int, float

Läs mer

Variabler, värden och typer

Variabler, värden och typer Variabler, värden och typer Viktigt att förstå på djupet: För programmering i många språk, t.ex. Java För kommande objektorientering! jonas.kvarnstrom@liu.se 2017 Fråga kommentera avbryt! Intro till variabler

Läs mer

TDDD78 Objektorientering i Java, del 3. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?

TDDD78 Objektorientering i Java, del 3. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva? TDDD78 Objektorientering i Java, del 3 Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva? jonas.kvarnstrom@liu.se 2017 Implementationsarv 1: Klassnivåer 3 Nu kan

Läs mer

Objektorientering: Lagring och livstid

Objektorientering: Lagring och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Objektorientering: Lagring och livstid Tre sorters variabler Tre sorters variabel (1): Lokal 2 Lokal variabel Deklareras inuti en metod Vid varje anrop

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Instansiering Åtkomst Abstrakt datatyp UML Överlagring

Läs mer

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid: Omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-17, TDA540 Dag: 2018-08-30, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar:

Läs mer

Samlingar Collection classes

Samlingar Collection classes Samlingar Collection classes Sven-Olof Nyström Uppsala Universitet 17 mars 2005 Skansholm: Kapitel 9, 19 Se även Suns tutorial om Collections Olika slag av samlingar i Java Arrayer (Till exempel: int[])

Läs mer

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

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

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

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

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser Föreläsning 8 Arv och abstrakta klasser Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen (extends) Den nya klassen behåller alla egenskaper som den gamla

Läs mer

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

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om? Algoritmer och datastrukturer Allmänt om kursen Kort javagrund repetition - Klasser, metoder, objekt och referensvariabler, - Hierarkiska klass strukturer - Arrayer och arrayer av objekt - Collection ramverket

Läs mer

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 interface, motivation och bakgrund Antag att vi gör en generell listklass: public class List { protected static class ListNode { public

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap. Institutionen för Datavetenskap Göteborgs universitet HT2008 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 4 Exempel på listor (klassen ArrayList). Ett exempel med fält.

Läs mer

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

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp. Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Att instansiera en klass Objekt I Man instansierar (skapar

Läs mer

Objektorientering: Lagring, räckvidd och livstid

Objektorientering: Lagring, räckvidd och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Objektorientering: Lagring, räckvidd och livstid Tre sorters variabler, två sorters metoder Räckvidd och livstid 2 Variabler (lokala och medlemsvariabler)

Läs mer

Sammansatta datatyper Generics: Parametrisk polymorfism

Sammansatta datatyper Generics: Parametrisk polymorfism TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Sammansatta datatyper Generics: Parametrisk polymorfism Extraavsnitt på svengelska Listor och arrayer 2 Enligt TDDD73 (tidigare Pythonkurs): Många språk

Läs mer

Föreläsning 12. Länkade listor

Föreläsning 12. Länkade listor Föreläsning 12 Länkade listor Jämför en array med en länkad lista m in n e t Array (med 5 element): + effektiv vid hämtning - ineffektiv vid insättning och borttagning Länkad lista (med 5 element): + effektiv

Läs mer

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

Föreläsning 8: Exempel och problemlösning TDA 545: Objektorienterad programmering Föreläsning 8: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 De tre senaste föreläsningarna Läsanvisning: kap 2 & 13 meddelanden och

Läs mer

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer. Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language

Läs mer

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

Variabler, värden och typer

Variabler, värden och typer Variabler, värden och typer Viktigt att förstå på djupet: För programmering i många språk, t.ex. Java För kommande objektorientering! TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Fråga kommentera

Läs mer

Föreläsning 2. Länkad lista och iterator

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt Föreläsning 4 Klasser Och Objekt Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras

Läs mer

Föreläsning 2, vecka 8: Repetition

Föreläsning 2, vecka 8: Repetition TDA 548: Grundläggande Programvaruutveckling Föreläsning 2, vecka 8: Repetition Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Idag Metoder och terminologi Referensvärden och arrays Interface och ritning

Läs mer

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

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad,

Läs mer

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine. Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Signatur public static int parseint (

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring

Läs mer

TDDD78 Objektorientering: Lagring och livstid

TDDD78 Objektorientering: Lagring och livstid jonas.kvarnstrom@liu.se 2017 TDDD78 Objektorientering: Lagring och livstid Tre sorters variabel (1): Lokal 3 Deklareras i en metod Lokal variabel Varje anrop får sin egen "kopia": Två anrop till foo()

Läs mer

Klasshierarkier - repetition

Klasshierarkier - repetition Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:

Läs mer

Konstruktion av klasser med klasser

Konstruktion av klasser med klasser Konstruktion av klasser med klasser Klasser kan byggas på redan denierade klasser genom att klassobjekt används som dataattribut när en ny klass beskrivs. Exempel: Klassen PairOfDice har två attribut attribut

Läs mer

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

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-6, TDA540 Dag: 207-0-24, Tid: 4.00-.00 Uppgift a) En abstrakt klass kan inte instansieras,

Läs mer

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2012-03-14 Skrivtid: 0800-1100 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

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

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016 Subtyping, co- och contra-variance Objekt-orienterad programmering och design Alex Gerdes, 2016 Typer Java har två sorters typer primitiva typer och referens-typer. Primitiva typer är typer för värden:

Läs mer

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[]

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp

Läs mer

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

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Arv Polymorf UML (klassdiagram) 1 Arv Möt tre studenter

Läs mer

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

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och Innehåll u OOP snabbintroduktion u Datatyper u Uttryck u Satser u Arv (intro) u Programvaruutveckling och programmering u Klassdesign och metodik (UML, CRC) u Arv, polymorfi och dynamisk bindning u Fält

Läs mer

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

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll Mera om generik Begreppet subtyp/supertyp i Java Innehåll Wildcards Vektorer och generik Supertyper för en viss klass C är alla klasser från vilka C ärver och alla interface som klassen implementerar.

Läs mer

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass EDAA20 Föreläsning 11-12 Klassen ArrayList Klassen ArrayList Skriva program som läser data från en textfil och skriver data till en textfil Repetition inför delmålskontroll 2 är en standardklass (i paketet

Läs mer

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y; public interface Skrivbar { void skriv(); public class Punkt implements Skrivbar { public double x; public double y; public Punkt(double xx, double yy) { x = xx; y = yy; public Punkt() { @Override public

Läs mer

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

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa 2203$( Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Email: bjorne@nada.kth.se Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: 7906277 previous next Exempel: lampa Light1 #

Läs mer

Föreläsning 15: Repetition DVGA02

Föreläsning 15: Repetition DVGA02 Föreläsning 15: Repetition DVGA02 Vad handlar kursen om? Kursen kan i grova drag delas upp i tre delar: 1. Objekt-orienterad programmering 2. Grafiska användargränssnitt 3. Datastrukturer Dessutom genomsyras

Läs mer