Objektorientering: Lagring, räckvidd och livstid

Relevanta dokument
Objektorientering: Lagring 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

TDDD78 Introduktion till OOP i Java

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

Föreläsning 5-6 Innehåll

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

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!

DAT043 - Föreläsning 7

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

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

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

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?

Lösningsförslag övning 2.

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

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

Objektorienterad programmering

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

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 Typhierarkier del 2 Vad krävs? Hur fungerar det?

Övningar Dag 2 En första klass

Programmering B med Visual C

Objekt och klasser - Introduktion

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

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

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

Laboration 1: Figurer i hierarki

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

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

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

Föreläsning 3-4 Innehåll

Föreläsning REPETITION & EXTENTA

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

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Enkla variabler kontra referensvariabel

Viktiga programmeringsbegrepp: Kontrakt

TDDD78 Objektorientering i Java, del 2

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

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

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

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

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

1.1 Runnable och Thread

TUTORIAL: SAMLING & KONSOLL

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

Sammansatta datatyper Generics: Parametrisk polymorfism

Kopiering av objekt i Java

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

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

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

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

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

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

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:

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

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

TDDC77 Objektorienterad Programmering

Modeller, Objekt och Klasser

TDDD78 Introduktion till OOP i Java

TDDD78 Introduktion till OOP i Java

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Klasser och objekt. Henrik Johansson. August 20, 2008

JAVA Mer om klasser och objektorientering

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

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

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

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.

Mer om klasser och objekt

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

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

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Laboration 1 - Grunderna för OOP i Java

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

Objektorienterad programmering i Java

Classes och Interfaces, Objects och References, Initialization

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

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

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

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

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

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

1 Egna klasser. 1.1 En punkt-klass

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Transkript:

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) har: Scope (räckvidd) Från vilken del av koden kan man nå variabeln? Livstid Hur länge finns variabeln(s värde)? När slängs den bort? När återskapas den?

Lokala variabler (1) 4 Lokala variabler x och y, deklarerade i en metod Livstid: I detta fall, till metoden returnerar / avslutas Räckvidd: Bara inom samma metod Flera anrop: Anropa Anropa anropet får ett eget x metoden returnerar x försvinner anropet får ett eget x metoden returnerar x försvinner

Lokala variabler (2) 5 Lokala variabler, deklarerade i en metod Deklarerar square inuti ett { block } Räckvidd: Inom { blocket } Livstid: Till vi går ur { blocket } Här har square försvunnit Generell tumregel: I varje situation vill vi bara ha tillgång till det vi faktiskt behöver Mindre räckvidd mindre att hålla reda på i andra delar av koden

Fält (1) 7 Fält = medlemsvariabel = instansvariabel Livstid: Variabler (x,y) skapas vid new Player(), försvinner inte förrän spelarobjektet slängs bort Varje instans/objekt får sin "kopia Nya variabler, samma namn Datorns minne

Fält (2) 8 Fält = medlemsvariabel = instansvariabel Livstid: Skapas vid new Player(), försvinner inte förrän spelarobjektet slängs bort Används utan att deklareras igen, ändrar värdet i objektet vars metod anropas Används, det värde som nu finns i objektet Datorns minne

Fält eller lokal variabel? Som i åtkomsträttigheter: Minska om du kan!

Fält: Inte i onödan modellering, minne 10 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

Fält: Inte i onödan samtidiga anrop 11 Exempel: Flera samtidiga anrop kan använda sig av samma variabel Byter ut list samma variabel som getallmembersfrom() använder!

Överkurs: Inte i onödan multitrådning 12 Exempel: Med multitrådade program kan man få flera samtidiga anrop Halvvägs klart, men någon annan tråd 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

Statiska fält: Globala variabler 14 Statiskt fält = klassvariabel Deklareras i en klass, static Inte som vanliga fält, som allokeras dynamiskt varje gång ett objekt skapas med new Vid programkörning skapas en variabel, i klassen (inte ett av dess objekt), som finns kvar under hela körningen 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 2: Innan objekt skapas 15 Innan objekt skapas: getcircum getarea setradius code code code Att komma åt fältet:

Statiska fält 3: När objekt skapas 16 När objekt skapas: getcircum getarea setradius code code code

Statiska fält: Några acceptabla användningsfall

Statiska fält: Global information 18 Acceptabel användning: Information som verkligen måste vara global, handlar om hela klassen (sällsynt!)

Statiska fält: Namngivna konstanter 19 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: Rätt indelning? 20 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

Statiska fält: Finns alternativ 21 Konstanter kan också namnges lokalt i en metod Används i flera metoder lägg i klassen bara en deklaration Används i en enda metod kan lägga i metoden sprid inte ut koden i onödan, skapa inte globala namn i onödan

Statiska fält / globala variabler: Fall inte för frestelsen!

Exempel: Poänglista i Tetris (1) 23 Exempel: Poänglista i Tetris Några delar av koden (GUI, spara-på-fil, ) behöver tillgång till detta Just nu ska alla ha samma lista: Den är i någon mening global Hmmm. När en variabel är static behöver man inte ha rätt objekt Och är den public kan vem som helst komma åt den Trevligt! Mindre data att skicka runt! eller?

Exempel: Poänglista i Tetris (2) 24 Variant 1: Lagra all information direkt som statiska variabler Alla fält är statiska och publika vem som helst kommer åt dem Användning: Anropa global funktion HighscoreList.addScore(theScore); Inte objektorienterat: 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) 25 Variant 2, Singleton: Låt listan vara ett objekt men se till att bara en instans skapas, och ge global 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 Undvik! Detta ses ofta som antimönster! Användning: HighscoreList hs = HighscoreList.getInstance(); hs.addscore(thescore); // Vanligt objekt!

Static: Röriga beroenden 26 Global tillgång ger röriga beroenden, en form av spaghettikod

Exempel: Poänglista i Tetris (4) 27 Bäst: Låt HighscoreList vara en helt vanlig klass och skapa helt enkelt bara en lista du har ju kontrollen över din kod!

Exempel 2: Spelbräde i Tetris 28 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 variabler i sällsynta undantagsfall!

Två sorters metoder 30 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 31 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 32 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 33 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 34 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 35 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!