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!

Relevanta dokument
TDDD78 Objektorientering i Java, del 2

TDDD78 Viktiga begrepp i programmering / objektorientering

Objektorientering: Lagring och livstid

TDDD78 Viktiga begrepp, del 2

TDDD78 Objektorientering: Lagring och livstid

Objektorientering: Lagring, räckvidd och livstid

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

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

Variabler, värden och typer

Sammansatta datatyper Generics: Parametrisk polymorfism

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

TDDD78 Introduktion till OOP i Java

TDDD78 Objektorientering i Java, del 2

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

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Variabler, värden och typer

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

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

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDD78, TDDE30, 729A Introduktion till objektorienterad programmering i Java

Föreläsning 5: Introduktion av pekare

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

Föreläsning 2, vecka 8: Repetition

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Java, klasser, objekt (Skansholm: Kapitel 2)

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Föreläsning 10. Pekare (Pointers)

Klasser och objekt. Henrik Johansson. August 20, 2008

Programmering B med Visual C

Klasser och objekt, referenser Grundkurs i programmering med Python

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

TDDC76 - Programmering och Datastrukturer

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Classes och Interfaces, Objects och References, Initialization

TDIU01 - Programmering i C++, grundkurs

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

TDDD78, TDDE30, 729A Grafik: Att "rita" egna komponenter

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TDDD78 Introduktion till OOP i Java

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

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

Föreläsning 5-6 Innehåll

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

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

Arrayer. results

TDDD78 Introduktion till OOP i Java

*Pekarvärden *Pekarvariabler & *

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

TDDC76 - Programmering och Datastrukturer

[] Arrayer = Indexerad variabel

Felhantering TDDD78, TDDE30, 729A

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Att använda pekare i. C-kod

Objektorienterad programmering

729G06 Föreläsning 1 Objektorienterad programmering

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Djup/ytlig kopiering av containrar med referensobjekt. Allmänt. Vad ska container innehålla?

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Föreläsning 1 & 2 INTRODUKTION

Grafiska användargränssnitt i Java

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

Teoretisk del. Facit Tentamen TDDC (6)

Typkonvertering. Java versus 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.

TDDD78, TDDE30, 729A Tecken och strängar med och utan Java

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

Tommy Färnqvist, IDA, Linköpings universitet

Abstrakta datatyper Laboration 2 GruDat, DD1344

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

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

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

JAVA Mer om klasser och objektorientering

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

Grafiska användargränssnitt i Java

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

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

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

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

Objekt och referenser

(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 Programmering (TDDC77)

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

Övningsuppgifter kapitel 8

DAT043 - Föreläsning 7

4.4 Swing ett interaktivt grafiskt gränssnitt

Grafik. TDDC66 Datorsystem och programmering Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

2 Pekare och dynamiska variabler.

TDIU01 - Programmering i C++, grundkurs

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

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

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

Dataabstraktion. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Facit Tentamen TDDC (7)

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Föreläsning 6: Introduktion av listor

Sätt att skriva ut binärträd

Transkript:

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 2019

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

Motivation (2): Innehåll? 4 Ser ut som att en innehåller en annan Jag Mitt namn Chefen Chefens namn

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

Motivation (4): En bättre lösning 6 En anställd ska inte innehålla chefen, utan peka ut vem chefen är Jag chef chef Kollegan Chefen chef Fem objekt, alla på sin egen unika plats i minnet Chefens chef chef Högsta chefen chef Så: Hur pekar man på ett annat objekt?

Pekare i verkligheten 7 Istället för att kopiera in artikeln vi pratar om, ger vi en referens till den så att den kan hittas där

Pekare: För att slå upp ett objekt 8 Pekare har likheter med många andra sätt att slå upp data Exempel: dict i Python Men under detta behövs något mer grundläggande

Variabler och minnesadresser 9 Programkod Minne vid körning Använd minnesadresser! Repetition: De finns alltid där "i bakgrunden " " "lagra 32-bitars heltal 10 på adress 10000 10003"

Variabler och minnesadresser (2) 10 Programkod Minne vid körning I vissa språk får man veta minnesadresserna C:

Pekare (1) 11 Programkod Minne vid körning En variabel av pekartyp kan innehålla en adress C: "pekare till " heter Värdet blir adressen Värdet 10004 är adressen till ett annat värde i minnet

Pekare (2): Tilldelning 12 Programkod Minne vid körning Ändra pekarens värde ändra vart den pekar C:

Objektvariabler är pekare 14 Java: En objektvariabel är alltid en pekare! Namn Värde i minnet 2. Skapa variabeln, låt den peka på obj. 1. Skapa objektet (minne, konstruktor, ) mycircle är egentligen pekaren (4/8 bytes), inte objektet! Java gömmer numeriska värdet (irrelevant för vår kod): Vi kan inte få fram talet 49152

Detta gäller även Python! (Men i Python är alla variabler pekare, även för t.ex. heltal)

Men vilka konsekvenser får detta?

Pekare i Java (1): Objektmedlemmar 17 Att komma åt medlemmar: T.ex. Beräknar ; går automatiskt vidare till objektet på plats 49152 Hittar fältet ; ändrar dess värde Namn Värde i minnet Även i Python:

Pekare i Java (2): Exempel 18 Namn Värde i minnet Anta två cirklar:

Pekare i Java (3): Tilldelning 19 Namn Värde i minnet är pekare Ändra pekarens värde ändra vart den pekar Sätter till 10000 Kommer inte att kopiera själva cirkeln, fält för fält! Även i Python: Kvarvarande objekt som ingen pekar på inte ett problem (skräpsamling)

Pekare i Java (4): 20 Namn Värde i minnet Nu är också och är två variabler, pekar på samma objekt och är samma variabel! Även i Python: "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

Pekarexemplet (0) 21

Pekarexemplet (1) 22 Minne Med pekare: Många kan peka på samma objekt trots att själva objektet bara lagras en gång

Pekarexemplet (2) 23 Men anställd har ingen chef! Vad ska fältet ha för värde? Minne

Null-pekare 24 Objektpekare kan ha specialvärdet Pekar "ingenstans" "inte applicerbart": Noden har ingen chef "vi vet inte än" Minne Med pekare: Kan lätt ange avsaknad av värde

Null-pekare (2) 25 Vad kan man göra om pekarens värde är null? Använda själva pekarvärdet Inte använda fälten och metoderna i objektet den pekar på! Den pekar ju inte på något objekt!

Sammansättning 1 27 Anta en klass för 2D-positioner:

Sammansättning 2 28 Skapa en cirkelklass två alternativ: Implementera allt från början Använd existerande punktklassen! Sammansättning = composition

Sammansättning 3 29 Med sammansättning: En cirkel har en punkt, eller består av en punkt (och en radie) Modellering stämmer detta med vår syn? Slipper skriva om existerande kod kunde vara komplicerad, ha metoder som avstånd från origo, Mindre upprepning bra! Exempel i labb: Listor finns redan En kö har en lista där den kan lagra sina element

Sammansättning och delegering 30 Om man vill ge tillgång till "komponentens" funktionalitet: Delegera! Vad är cirkelns avstånd till origo? Samma som punktens, så delegera frågan till den!

Sammansatt objektstruktur 1 31 I vissa språk: Sammansatta objekt är sammansatta i minnet "Point-delen" av en cirkel

Sammansatt objektstruktur 2 32 Men Javas objektvariabler är ju alltid pekare! Sammansatt" objekt = flera länkade objekt En består av en -pekare (inte en ) en

Sammansatt objektstruktur 3 33 Konsekvenser: Som vi såg för pekare tidigare Exempel: Två cirklar kan ha samma centrumobjekt Två listor kan innehålla (pekare till) samma cirkel