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

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

Hur ser ett Java-program ut?

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)

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Enkla variabler kontra referensvariabel

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

(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

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

TDDD78 Viktiga begrepp, del 2

Objekt och klasser - Introduktion

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

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

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

JAVA Mer om klasser och objektorientering

Malmö högskola 2008/2009 CTS

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

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

Konstruktion av klasser med klasser

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

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

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

Klasshierarkier - repetition

Objekt och referenser

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

1 Egna klasser. 1.1 En punkt-klass

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

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

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

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

OOP Objekt-orienterad programmering

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

Objekt, Klasser, Paket m. m.

Dynamisk bindning och polymorfism

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

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

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

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

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

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Top-Down Design Parameteröverföring

Modeller, Objekt och Klasser

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

Del A (obligatorisk för alla)

OOP Objekt-orienterad programmering

Laboration 1 - Grunderna för OOP i Java

Classes och Interfaces, Objects och References, Initialization

Mer om klasser och objekt

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

DAT043 - Föreläsning 7

Enkla variabler kontra referensvariabel

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Föreläsning 3-4 Innehåll

Föreläsning 6. Top-Down Design Parameteröverföring

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

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

Föreläsning 6. Mer om klasser och objekt. Enkla variabler kontra referensvariabel. Omslagsklassen Integer. Referensvariabler

Tentamen ID1004 Objektorienterad programmering December 15, 2012

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

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

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

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

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

Tillämpad programmering

JAVAUTVECKLING LEKTION 11

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

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

Tentamen. Lösningsförslag

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

Föreläsning REPETITION & EXTENTA

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.

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 2: Objektorienterad programmering - avancerat

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 bänken.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Lösningsförslag tentamen FYTA11 Java

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

Exempel på användning av arv: Geometriska figurer

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

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

Objektorienterad Programmering DAT043

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

Lösningsförslag övning 2.

Tentamen ID1004 Objektorienterad programmering October 29, 2013

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

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

Klasser och Objekt i Java. C++ använder beteckningarna datamedlem resp. medlemsfunktion. Klassdefinition. Exempel: Variabler

Typkonvertering. Java versus C

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

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Transkript:

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 inte behöva veta detaljer i implementationen av en klass för att kunna använda den. 2. En klass bör kunna garantera att dess status (dvs dess värden på attributen) är konsistenta. För att detta skall vara möjligt så måste alla ändringar av status kontrolleras. För att uppnå detta måste man förhindra okontrollerad access till attributen utifrån klassen själv. Det anses vara en god stil att göra alla attribut privata och använda selektorer ( get-metoder ) för att avläsa dem och mutatorer ( set-metoder ) för att sätta dem men ingen regel utan undantag och man måste se till att mutatorerna sätter rimliga värden. 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 får bara anropas av metoder i den egna klassen. Ett attribut som är private får bara avläsas och ändras från metoder i den egna klassen. Obs: private inte skyddar mot access från andra objekt i samma klass. Anm: Det finns två skyddnivåer till: protected och package (som inte har något nyckelord) mer om dessa senare. Skapande av objekt Objekt skapas från klassen med operatorn new. När objektet skapas sker följande: 1. Alla attribut får defaultvärden (0, 0.0, \0, false, null) 2. Eventuella tilldelningar i deklarationen av attributen utförs i deklarationsordning 3. En konstruktor körs Om det inte finns någon konstruktor i en klass tillhandahåller java en parameterlös default-konstruktor. Om det finns en eller flera konstruktorer väljes den som matchar argumenten i antal och typ. I detta fall tillhandahåller inte systemet någon parameterlös konstruktor.

Exempel: klassen Point // Punkt i planet public class Point { private double x; private double y; public Point(double x) { // Konstruktor this.x = x; public Point(double x, double y) { // Konstruktor this.x = x; this.y = y; Frågor om klassen Point Vad händer om vi skriver Point p = new Point(1.0)? Vad händer om vi skriver Point p = new Point()? Skriv en mutator void moveto(double x, double y) som flyttar punkten till en ny position. Vad är konsekvensen av att göra detta tillägg? Vad skulle vi förlora på att göra attributen publika? public double getx() { return x; // Selektor public double gety() { return y; // Selektor Hur skulle vi göra om vi vill ha polära koordinater? Exempel: klassen Circle public class Circle { this.center = center; public Circle(double radius) { center = new Point(0.0, 0.0); Synpunkter på klassen Circle Kontrollerar inte att det är vettiga värden på attributen radius Vad händer vid följande kod? Point p = new Point(0.5, -3.5); Circle c1 = new Circle(p, 1.0); Circle c2 = new Circle(p, 2.0); c1.moveto(-1.0, -2.0); public void scale(double sf) { radius *= sf; public void moveto(double x, double y) { center.moveto(x,y); // Samt diverse andra metoder...

Gör så att Point äger sitt eget data Skriv om konstruktorn för Circle-klassen: this.center = new Point(center.getx(), center.gety()); eller this.center = center.copy(); med metoden copy iklassenpoint; Sammanfattning om referenser När ett objekt skapas med new returneras en referens (dvs ett handtag logiskt sett motsvarande objektets adress) till det skapade objektet. En variabeldeklaration, t.ex. Die t; skapar inte en ny Die, utanbaraenvariabelt som kan hålla en referens till en Die Referenser kan tilldelas till referensvariabler (av rätt typ) och jämföras med == och!= Instansvariabler av referenstyp initieras till null this är en referens till det egna objektet public Point copy() { return new Point(x,y); Sammanfattning om referenser forts Flera referenser kan peka till samma objekt (aliasering). T.ex. blir resultatet av tilldelningen t1 = t2; alltid att t1 och t2 är alias för samma objekt (el. null). Observera att relationsoperatorerna == och!= jämför om två referenser avser samma objekt, inte om objekten ser likadana ut Ett objekt som ingen refererar till är skräp som städas undan automatiskt av skräpsamlaren (GC) Die d = new Die(12); d = null; Sammanfattning om referenser forts Variabler kan hålla referenser eller primitiva datatyper aldrig hela objekt Objekt skickas som argument till metoder med referenssemantik (pass by reference) Om ett argumentobjekt förändras av en metod är det synligt för alla so har en referens till metoden (sidoeffekter) Man kan säga att objekten existerar globalt och är åtkomliga överallt där man har en referens till dem En metod kan returnera referenser som returvärde IJavaär minneshantering = att komma ihåg att sätta variabler till null

Jämförelser av objekt igen Igen: Relationsoperatorerna == och!= jämför bara med avseende på identitet Alla objekt har en metod equals() som jämför objekt för strukturell likhet Varje klass bör definiera en egen equals()-metod Referenser kan inte jämföras storleksmässigt men man kan naturligtvis definiera egna metoder för att jämföra objekt Exempel på tänkbara jämförelsemetoder i Circle public class Circle { //... en massa metoder public boolean equals(circle c) { return Math.abs(radius-c.radius) < 1.e-10; public boolean equals2(circle c) { return (radius==c.radius) && center.equals(c.center); Exempel på jämförelsemetoder forts public int compareto(circle c) { if (radius == c.radius) return 0; else if (radius < c.radius) return -1; else return 1; public boolean lessthan(circle c) { return radius < c.radius; Klassvariabler och klassmetoder Hittills har alla dataattribut varit instans-variabler dvs varje objekt har sin egen upplaga av dessa Man kan också ha klass-variabler som ligger i klass-objektet och därigenom är gemensamma för alla objekt i klassen (Anges i Java med static) En klassvariabel kan referas på samma sätt som vanliga attribut men vanligen genom klassnamn.variabelnamn Det går också att ha klass-metoder som alltså kan användas frikopplat från objekten (ex Math.sin() och main()) Ett objekts metoder har automatisk åtkomst till dess klass metoder och attribut, men inte det omvända

public class Circle { private int id; // "cirkelnummer" private static int ncircles = 0; public Circle( Point center, double radius ) { this.center = center; id = ++ncircles; public static void report() { System.out.println( "Antalskapadecirklar:" + ncircles ); public static void main(string [] args) { Circle c; for ( int i = 1; i<=10; i++ ) c = new Circle( new Point( 10*i, 15*i ), 5*i ); report();