TDDD78 Objektorientering: Lagring och livstid

Relevanta dokument
Objektorientering: Lagring och livstid

Objektorientering: Lagring, räckvidd och livstid

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

TDDD78 Viktiga begrepp, del 2

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

DAT043 - Föreläsning 7

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

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!

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

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning 5-6 Innehåll

TDDD78 Introduktion till OOP i Java

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Övningar Dag 2 En första klass

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

Objektorienterad programmering

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

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Klasser och objekt. Henrik Johansson. August 20, 2008

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

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

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

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Föreläsning 3-4 Innehåll

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Objekt och klasser - Introduktion

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

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

Lektion 7. Datateknik A, Java I, 5 poäng

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

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

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

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

TDDD78 Objektorientering i Java, del 2

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

int iarray[]= new int[3]; // deklarera ett heltalsfält med tre heltal int jarray[]={ 1, 3, 5, 7, 9, 11, 13, 15}; // initierat fält 8 element

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

Laboration 1: Figurer i hierarki

Classes och Interfaces, Objects och References, Initialization

Föreläsning 2, vecka 8: Repetition

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

Lösningsförslag övning 2.

Tommy Färnqvist, IDA, Linköpings universitet

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Sammansatta datatyper Generics: Parametrisk polymorfism

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

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

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

Facit Tentamen TDDC (7)

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

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

TUTORIAL: SAMLING & KONSOLL

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

Variabler, värden och typer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Modeller, Objekt och Klasser

Lab5 för prgmedcl04 Grafik

TDDC77 Objektorienterad Programmering

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

TDDD78 Viktiga begrepp i programmering / objektorientering

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

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

Inledande programmering med C# (1DV402) Tärningarna ska kastas

1.1 Runnable och Thread

Objektorienterad programmering i Java

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

JAVA Mer om klasser och objektorientering

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Laboration 3, uppgift En klass för en räknare

Objektorienterad Programmering (TDDC77)

TDIU01 - Programmering i C++, grundkurs

Grundläggande programmering med C# 7,5 högskolepoäng

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

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Kopiering av objekt i Java

1 Egna klasser. 1.1 En punkt-klass

Övningsuppgifter kapitel 8

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

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Transkript:

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() egna variabler, med samma namn 'x' Kort livstid: Anropet avslutas variabeln försvinner Tillfälliga värden, hör till metodanropet När vi är klara, släng bort variablerna

Tre sorters variabel (2): Fält 4 Deklareras i en klass Fält / medlemsvariabel Varje instans/objekt får sin "kopia": Två olika objekt egna fält, med samma namn 'x' Två anrop till metoder i samma objekt samma variabel x! Längre livstid: Objektet slängs bort variabeln försvinner Värdena hör till objektet, och måste finnas kvar längre Används från metoder, kanske flera Kan (eventuellt) ändras av andra metoder

Varning för fält (1) 5 Varning: Använd inte fält när lokala variabler räcker! Exempel: Här finns listan kvar ända till nästa anrop, trots att ingen annan behöver den minnesläcka?

Varning för fält (2) 6 Varning: Använd inte fält när lokala variabler räcker! Exempel: Med multitrådade program kan man få flera samtidiga anrop

Varning för fält (3) 7 Halvvägs genom getallmembers() anropar någon annan samma metod Fältet list byts ut, även för det första anropet! Ena anropet ger 2 element, andra 4

Tre sorters variabel (3): Statisk 8 Statiskt fält Deklareras i en klass, static Varje programkörning har sin egen "kopia", minne allokeras statiskt (inte dynamiskt per objekt / anrop) Ett enda värde lagras, i klassen Ligger inte i ett objekt; behöver inte ens något objekt för att komma åt värdet Håll reda på antal cirklar som skapades Värdena hör till klassen, och måste finnas kvar efter objekten försvinner

Statiska fält 1: Lagring 9 Illustration: Statiska fält lagras i klassen Åtkomst via klassen, inte ett objekt getcircum getarea setradius code code code

Statiska fält 2: Som namngivna konstanter 10 Konstanter bör (nästan) alltid namnges för läsbarhet Namngivna konstanter: static i klassen final ändras inte namn stora bokstäver (WITH_UNDERSCORE) Lagras en gång slösar inte minne Vanlig anledning till komplettering!

Statiska fält 3: "Globala" variabler 11 Kan också användas till "globala" variabler, åtkomliga överallt Varning! Globala variabler ger ofta problem! Använd dem bara i undantagsfall!

Exempel: Poänglista i Tetris (1) 12 Tetris: Alla som spelar parallellt ska ha samma highscore-lista Detta faktum ska aldrig ändras: Vi kommer aldrig att vilja dela upp spelare i grupper med olika listor Globalt tillstånd kan möjligen vara OK

Exempel: Poänglista i Tetris (2) 13 Alternativ 1: Lagra all information direkt som statiska variabler Användning: HighscoreList.addScore(theScore); Det finns inget objekt av HighscoreList-typ kan inte skicka som parameter, kan inte override:a metoder, kan inte implementera gränssnitt, KOMPLETTERING!

Exempel: Poänglista i Tetris (3) 14 Alternativ 2, Singleton: Låt listan vara ett objekt Men se till att bara en instans skapas, och ge enkel tillgång till den Problem: Vem som helst kan komma åt listan utan att ha "fått" den Kan bli svårare att förstå programmets struktur Oftast bra att undvika (skicka istället objektet Användning: till de som behöver det) HighscoreList hs = HighscoreList.getInstance(); hs.addscore(thescore); // Vanligt objekt!

Exempel 2: Spelbräde i Tetris 15 Labb 4, Tetris: Just nu spelas bara ett spel i taget Frestande att låta Board vara en singleton Alla kan direkt komma åt den, behöver inte skickas som metodparameter Senare: Vill kunna spela flera spel parallellt, över nätet Varje spel ska ha sitt eget Board Måste göra om koden Globalt tillstånd gör förändringar svårare! Använd bara globala tillstånd om ni är helt säkra på att man inte har någon anledning att ändra det

Två sorters metoder 17 Instansmetoder Anropas för ett specifikt objekt: Statiska metoder (klassmetoder) Anropas för en klass: Kan använda "samma objekt": Anropa andra metoder Använda fält Det närmaste man kan komma till en "global funktion"

Statiska metoder: Exempel 1 18 När du startar ett Java-program... Du bestämmer vilken klass som ska "startas" ( ) Java skapar inte ett objekt av den typen Laddar in själva klassen Letar efter en speciell statisk metod: Om den existerar: Anropar den

Statiska metoder: Exempel 2 19 Att anropa metoder i samma klass: är inte static Samma som Men this = "objektet som den här metoden, main(), anropades i" Finns inte kompileringsfel! Samma som Fungerar bra!

Statiska metoder: Exempel 3 20 Men statiska metoder kan så klart anropa icke-statiska! Bara vi anger i vilket objekt println() och length() är inte statiska Fungerar bra: Vi försöker inte använda this

Statiska hjälpmetoder 21 En metod som roten ur : Hör inte naturligt till ett specifikt objekt Behöver inte lagra information som finns kvar när den returnerat Kan vara en statisk hjälpmetod Exempel: java.lang.math

Hjälpklasser 22 Bara statiska metoder en hjälpklass (utility class) Används i undantagsfall Flera associerade funktioner som inte hör ihop med ett specifikt objekt Komplex kod eller används av flera klasser (annars kan det placeras i användande klassen!) Att tänka på: Vill inte kunna skapa objekt av denna klass Skapa en privat konstruktor!