Objektorientering: Lagring och livstid

Relevanta dokument
Objektorientering: Lagring, räckvidd och livstid

TDDD78 Objektorientering: Lagring 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

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

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

TDDD78 Introduktion till OOP i Java

DAT043 - Föreläsning 7

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 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

Föreläsning 5-6 Innehåll

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

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

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

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

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

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

Lösningsförslag övning 2.

Föreläsning 3-4 Innehåll

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

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

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

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

TDDD78 Objektorientering i Java, del 2

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

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

Objektorienterad programmering

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

Övningar Dag 2 En första klass

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

Objekt och klasser - Introduktion

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

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

Laboration 1: Figurer i hierarki

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

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

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

Klasser och objekt. Henrik Johansson. August 20, 2008

Enkla variabler kontra referensvariabel

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

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

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

Variabler, värden och typer

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 Introduktion till Java -- för Pythonprogrammerare

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

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

Sammansatta datatyper Generics: Parametrisk polymorfism

1.1 Runnable och Thread

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

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

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

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

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Mer om 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

TUTORIAL: SAMLING & KONSOLL

Kopiering av objekt i Java

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

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

Modeller, Objekt och Klasser

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

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

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

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

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

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

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

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

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

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

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

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

TDDD78 Introduktion till OOP i Java

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

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

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

TDDD78 Introduktion till OOP i Java

Classes och Interfaces, Objects och References, Initialization

Arrayer. results

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

JAVA Mer om klasser och objektorientering

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

TENTAMEN OOP

1. Definiera klassvariabel. 2. Instansvariabel för klass. Selektera klass i Browsern och tryck på statics. Definiera protokollnamn, Protocol->Add...

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

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

Transkript:

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 skapas en egen version av variabeln får ett eget x Anropet avslutas variabeln försvinner får ett eget x Anropet avslutas variabeln försvinner Skapas Försvinner

Tre sorters variabel (2): Fält Fält = medlemsvariabel = instansvariabel Deklareras inuti en klass Varje instans/objekt får sin "kopia 3 Datorns minne Nya variabler, samma namn Varje anrop till metoder i ett visst objekt använder samma variabel x Variabeln försvinner bara när objektet slängs bort Skapas vid new Player() Används utan att deklareras igen, ändrar på värdet i objektet Används, det värde som nu lagras i objektet

Varning för fält (1) 4 Varning: Använd inte fält när lokala variabler räcker! Exempel: Listan finns kvar ända till nästa anrop, trots att ingen annan behöver den Problematisk modellering Kan använda minne i onödan

Varning för fält (2, överkurs) 5 Exempel: Med multitrådade program kan man få flera samtidiga anrop Halvvägs klart, men någon annan anropar samma metod i samma objekt, byter ut list även för första anropet! Andra (höger) returnerar 3 element, första (vänster) returnerar 4 element

Tre sorters variabel (3): Statisk 6 Statiskt fält = klassvariabel Deklareras i en klass, static Vid programkörning skapas en variabel i klassen, som finns kvar under hela körningen Statiskt = allokeras inte dynamiskt, en gång per objekt som skapas med new getcircum getarea setradius code code code Håll reda på antal cirklar som skapades: Måste ligga i klassen, inte varje cirkelobjekt Behöver inget objekt för att komma åt värdet: klassnamn.fältnamn

Statiska fält 1: När objekt skapas 7 När objekt skapas: getcircum getarea setradius code code code Att komma åt fältet:

Statiska fält 2: Som namngivna konstanter 8 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 9 Kan också användas till "globala" variabler, publikt åtkomliga överallt Varning! Globala variabler ger ofta problem! Använd dem bara i undantagsfall!

Exempel: Poänglista i Tetris (1) 10 Tetris: Alla som spelar ska ha samma highscore-lista Ska aldrig ändras: Vi kommer aldrig att vilja dela upp spelare i grupper med olika listor Global variabel kan möjligen vara OK

Exempel: Poänglista i Tetris (2) 11 Alternativ 1: Lagra all information direkt som statiska variabler Listan är statisk och publik vem som helst Användning: An HighscoreList.addScore(theScore); Det finns inget objekt av HighscoreList-typ kan inte skicka som parameter, kan inte skapa flera listor, kan inte använda ärvning [senare], KOMPLETTERING!

Exempel: Poänglista i Tetris (3) 12 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 13 Tetris: Just nu spelas bara ett spel i taget Frestande att låta spelbrädet 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 -objekt Måste göra om koden Globalt tillstånd gör förändringar svårare! Kan ge komplettering! Använd bara globala tillstånd om ni är helt säkra på att man inte har någon anledning att ändra det

Rätt indelning? 15 Mönster: Skapa gränssnitt som håller reda på alla konstanter (Gränssnitt används för typhierarkier och kan innehålla konstanta fält) Ses ofta som antimönster Ofta dålig indelning: Här är allt som är konstant i hela projektet Konstanterna hör ofta till någon annan placera dem där! GameGUI hanterar gränssnittet [och vet/äger allt om det, inklusive positioner] Bättre: Här är allt som har med grafiska gränssnittet att göra

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 andra klasser Komplex kod eller används av flera klasser (annars kan det placeras i användande klassen!) Vill inte kunna skapa objekt av denna klass Skapa en privat konstruktor!