Föreläsning 5. Föreläsning 5

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

Föreläsning 5. Föreläsning 5. Klasser och objekt. Klasser och objekt. Klasser och objekt

Föreläsning 4. Klasser och objekt

Enkla variabler kontra referensvariabel

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

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

Lösningsförslag övning 2.

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objekt och klasser - Introduktion

Mer om klasser och objekt

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

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

JAVAUTVECKLING LEKTION 11

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

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

DAT043 - Föreläsning 7

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

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

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

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

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

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

Föreläsning 5-6 Innehåll

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

Enkla variabler kontra referensvariabel

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

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

Laboration 1 - Grunderna för OOP i Java

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

Java, klasser, objekt (Skansholm: Kapitel 2)

public class BoundedCounter {

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 )

Malmö högskola 2008/2009 CTS

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

Objektorienterad programmering Föreläsning 5

Modeller, Objekt och Klasser

Klasser och objekt. Henrik Johansson. August 20, 2008

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

Objektorienterad Programmering DAT043

JAVA Mer om klasser och objektorientering

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

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

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

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

Objekt, Klasser, Paket m. m.

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

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.

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

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Laboration 1: Figurer i hierarki

PROGRAMMERING-Java TENTAMINA

TDDC76 - Programmering och Datastrukturer

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

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

TENTAMEN OOP

Programmering = modellering

TENTAMEN OOP

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

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Agenda. Objektorienterad programmering Föreläsning 13

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

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

Klasshierarkier - repetition

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

Malmö högskola 2007/2008 Teknik och samhälle

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

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

1 Egna klasser. 1.1 En punkt-klass

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

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

TENTAMEN OOP

Objektorienterad Programmering (TDDC77)

Föreläsning 13 Innehåll

Objektorienterad programmering Föreläsning 4

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

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

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv?

Objektorientering: Lagring och livstid

Malmö högskola 2007/2008 Teknik och samhälle

Objektorienterad programmering i Java

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Laboration 2. returnerar true om det är omöjligt för roboten att göra move() utan att. exekveringsfel erhålls, annars returnera false.

Parameteröverföring. Exempel. Exempel. Metodkropp

Konstruktion av klasser med klasser

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

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Metoder och top-down design

(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

Programmeringsteknik I. Föreläsning 3: Klasser och arrayer

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

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

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Transkript:

Klasser och objekt Ett program i Java är en modell som används för att simulera uppträdandet hos en verklig eller påhittad värld. Föreläsning 5 I ett objektorienterat programspråk modelleras den värld som man vill avbilda som ett antal objekt med olika egenskaper och beteenden, vilka kommunicerar och samarbetar med varandra för att utföra simuleringen. Klasser och objekt Detta modelleringssätt överensstämmer väl med hur vår verkliga värld ser ut och fungerar. Föreläsning 5 2 Klasser och objekt Ett objekt är... Objekt någonting man kan tänka på som en egen entitet någonting som gör något eller som man kan göra något med någonting som har egenskaper (attribut) Ett objekt har ett tillstånd, ett beteende och en Exempel: identitet, samt tillhör en viss klass. Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål: någonting som representerar ett fysiskt föremål eller en verklig företeelse. studenter lärare bord stolar pennor datorer böcker OH-apparater väskor Ett objekt har ett tillstånd, ett beteende och en identitet, samt tillhör en viss klass. 3 4

Klassen Robot Klasser move Idéen med en klass är att kunna modellera alla objekt som har samma uppsättning attribut och samma beteenden på en och samma gång, istället för att modellera varje enskilt objekt var för sig. turnleft makedark makelight robot ondark En klass är en mall (modell, mönster, ritning, beskrivning) från vilken ett objekt av denna klass kan skapas. frontisclear atendofworld getlocation setdelay Ett objekt har tillstånd ( värde ): Ett objekt har beteenden: de operationer som objektet kan utföra implementeras mha metoder en robot har en riktning en robot har en fysiska plats en robot har en hastighet En klass är en mall (modell, mönster, ritning, beskrivning) från vilken ett objekt av denna klass kan skapas. 5 Objekt 6 Exempel: Bollar En boll är ett föremål, som kan representeras som ett objekt i ett program. Hur kan man beskriva en boll? beskrivs av sina omständigheter egenskaper, såsom En modell är alltid en förenkling där man bortseren boll från vissa diameter hos det som modelleras. färg Vilka attribut och beteenden hos en företeelse eller ett fysiskt föremålet som skall avbildas beror på vad man är intresserad av i den tänkta tillämpningen. elasticitet position Vi kan också beskriva en boll med hjälp dess beteende, dvs av vad man kan göra med bollen En modell är alltid en förenkling där man bortser från vissa omständigheter hos det som modelleras. 7 den kan kastas den kan studsas den kan rullas 8

Klasser Exempel: Bollar Klasser är ett sätt för att skapa datatyper, datatyper för att kategorisera olika slag av data. En datatyp bestämmer vilka värden som tillhör datatypen och vilka operationer man kan utföra på dessa värden. De egenskaper som beskriver ett objekt kallas för attribut och definierar objektets tillstånd. En specifik boll kan t.ex vara 24.2 cm i diameter, vara röd och ha en elasticitet på 74%. En annan boll kan vara 5.2 cm i diameter, vara vit och ha en elasticitet på 23%. Att sammanföra data och de operationer som kan utföras på denna data till en enhet kallas för inkapsling (encapsulation). Ett objekt är en instans av en klass. En instans av klassen SomeClass är ett värde i datatypen SomeClass. De aktiviteter man kan göra med ett objekt definierar objektets beteende. beteende Alla objekt har en uppsättning attribut och en uppsättning beteenden. I klassen beskrivs de attribut och de beteenden som alla objekt/instanser som tillhör denna klass skall ha. Alla bollar har samma uppsättning attribut och samma beteenden. Det är dessa attribut och beteenden som skiljer bollar från andra objekt och som gör att "bollar är bollar"! Attribut beskrivs med hjälp av variabler. Beteenden beskrivs med hjälp av metoder. 10 9 Lite terminologi Lite terminologi De handlingar eller operationer som ett objekt av en viss klass kan utföra definieras således av de metoder som finns i klassen. Alla bollar har samma uppsättning attribut och samma beteenden. Det är dessa attribut och beteenden som skiljer bollar från andra De tjänster ett objekt erbjuder bestäms av de metoder som finns definierade i objekt och som gör att "bollar är bollar"! gränsnittet för klassen som objektet tillhör. För att kunna använda ett objekt måste vi känna till dess gränssnitt, dvs vilka tjänster (vilken service) som objektet erbjuder och hur man får tillgång till dessa. Metoder är den primära mekanismen via vilken objekt kan kommunicera med och påverka varandra. När en metod anropas, skickar klientobjektet ett meddelande med information till serverobjektet. Klientobjektet är alltså avsändare av meddelandet och serverobjektet är mottagare av meddelandet. När metoden exekveras, utför serverobjektet de nödvändiga beräkningarna genom att använda sina egna attribut och/eller den information som skickas från klienten. När en metod terminerar (exekverat klart) skickas information från servern till klienten. Klienten får alltså ett svar på sitt meddelande. När en metod anropas är det alltid två objekt involverade: - klient, klient objektet som anropar metoden för att få service - server, server objektet som exekverar metoden för att leverera efterfrågad service. 11 12

Att skapa objekt Lite terminologi I en klass kan finnas följande olika slag av attribut: Objekt kan skapas från existerande klasser. - instansvariabler, instansvariabler varje instans har sin egen unika uppsättning som beskriver instansens tillstånd - klassvariabler, klassvariabler finns i endast en uppsättning som delas mellan samtliga instanser av klassen - konstanter (både instanskonstanter och klasskonstanter kan finnas, men endast klasskonstanter bör användas). Detta görs genom att man först deklarerar en variabel av den klass man vill skapa ett objekt av: ClassName objectname; Deklarationen innebär att variabeln objectname är av klassen ClassName och får värdet null (då inget objekt ännu har skapats). Detta kan illustreras på följande sätt: I en klass kan finnas följande olika slag av metoder: - instansmetoder, instansmetoder varje instans har sin egen unika uppsättning - klassmetoder, klassmetoder finns i endast en uppsättning som delas mellan samtliga instanser av klassen. - konstruktorer, konstruktorer en speciell typ av metod som används för att skapa ett nytt objekt av klassen (och initiera objektets tillstånd) objectname objectname eller 13 14 Att använda ett objekt: standardklassen Random Att skapa objekt För att faktiskt skapa ett objekt används (vanligtvis) operatorn new samt ett anrop av klassens konstruktor: objectname objectname = new ClassName(); objektet av typen vilket illustreras av bredvidstående figur: I Java finns paketet java.util som bl.a innehåller standardklassen Random för att skapa slumptalsgeneratorer. Gränssnittet för klassen Random innehåller bl.a en instansmetod ClassName Variabler som refererar till ett objekt, i likhet med variabeln objectname kallas för referensvariabler (medan variabler som används för att lagra enkla data typer kallas för enkla variabler). variabler En konstruktor är en speciell metod för att skapa ett nytt objekt och initiera tillståndet hos tillståndet hos objektet. int nextint(int n) returnerar ett slumptal med likformig fördelning i intervallet [0, n[. double nextdouble() returnerar ett slumptal med likformig fördelning i intervallet [0, 1[. samt två konstruktorer: En konstruktor har samma namn som klassen själv. Random(long seed) sätter slumptalsfröet till seed En klass kan ha flera konstruktorer, med olika parameterprofiler. parameterprofiler Detta kallas för överlagring (overloding). Random() sätter slumptalsfröet till ett värde som med hög sannolikhet skiljer sig från fröet för andra instanser av klassen Det kan också finnas överlagrade metoder, dvs metoder med samma namn men med olika parameterprofiler. 15 16

Exempel: standardklassen Random Att definiera egna klasser En klass kan innehålla deklarationer av Nedanstående program skapar en slumptalsgenerator och använder den för att skriva ut 100 slumptal i intervallet [1, 20]. instansvariabler (tillståndsvariabler tillståndsvariabler), dvs de variabler som varje objekt av klassen har sin egen kopia av konstruktorer, konstruktorer dvs de mekanismer som används för att skapa ett nytt objekt ur klassen (och initiera dess tillstånd) import java.util.random; class Hazard { static void main (String[] args) { Random numbergenerator = new Random(); int counter = 0; while (counter < 100) { counter = counter + 1; System.out.println( (numbergenerator.nextint(20)+1)); // main //Hazard publika instansmetoder, instansmetoder dvs de metoder som varje objekt ur klassen tillhandahåller för omvärlden privata instansmetoder, instansmetoder dvs lokala hjälpmetoder som bara används av andra metoder i klassen klassvariabler (statiska statiska variabler), variabler dvs de variabler som det endast finns en gemensam kopia av för alla objekt i klassen (kan vara publika eller privata) klassmetoder (statiska statiska metoder), metoder dvs metoder som inte är knutna till ett visst objekt utan till själva klassen (kan vara publika eller privata) import java.util.random; konstanter, skall alltid göras statiska (kan vara publika eller privata). class Hazard { static void main (String[] args) { Random numbergenerator = new Random(); int counter = 0; while (counter < 100) { Specifikation Exempel: En klass för rektanglar counter =Decounter + 1; I ett program vill vi hantera rektanglar av olika utseende. attribut vi är intresserade av hos en rektangel i vår tillämpning är: System.out.println( (numbergenerator.nextint(20)+1)); höjd bredd Detta betyder att vi t.ex. bortser från vilken färg en rektangel har. // main Det vi vill kunna göra med en rektangel, dvs de beteenden vi är intresserade av, är: //Hazard ta reda på höjden 17 18 //Create a new Rectangle whose width and height are both zero. Rectangle() //Create a new Rectangle whose width and height are specified by w and h. Rectangle(double w, double h) //Returns the width of this rectangle. double getwidth() //Returns the height of this rectangle. double getheight() //Sets the width of this rectangle to w. void setwidth(double w) //Sets the height of this rectangle to h. void setheight(double h) //Returns the area of this rectangle. double getarea() ta reda på bredden ta reda på ytan ta reda på omkretsen ändra höjden ändra bredden skriva ut rektangelns tillstånd, dvs rektangelns höjd och bredd När vi skapar en rektangel vill vi kunna välja att antingen få en standardrektangel eller få en rektangel för vilken vi anger tillståndet (dvs dess höjd och bredd). Det behövs alltså två olika konstruktorer. 19 //Returns the perimeter of this rectangle. double getperimeter() //Returns a String representing this Rectangle and its values. String tostring() 20

Två objekt av klassen Rectangle Implementation private double height; //instansvariabel //instansvariabel Rectangle() { width = 0; height = 0; //constructor Rectangle(double w, double h) { width = w; height = h; //constructor double getwidth() { return width; //getwidth double getheight() { return height; //getheight void setwidth(double w) { width = w; //setwidth Låt oss skapa två objekt av klassen Rectangle Rectangle rec1 = new Rectangle(5.0, 5.5); Rectangle rec2 = new Rectangle(10.0, 20.0); Överlagrade konstruktorer Scenariot vi får kan illustreras med nedanstående figur: void setheight(double h) { height = h; //setheight Rectangle double width double getarea() { return height * width; //getarea double getperimeter() { return 2 * (height + width); //getperimeter String tostring() { return "Width = " + width + "\nheight = " + height; //tostring double height instans av rec1: Rectangle width Klassdiagram UML är ett objektorienterat modelleringsspråk. För att på ett schematiskt sätt beskriva det viktigaste som en klass innehåller kan man använda sig av ett klassdiagram. klassdiagram Klassdiagrammet för klassen Rectangle visas i figuren bredvid. Rectangle - double width - double height +Rectangle() +Rectangle(double w, double h) +getwidth() : double +getheight() : double +setwidth(double w) : void +setheight(double w) : void +getarea() : double +getperimeter() : double +tostring() : String rec2: Rectangle 5.0 width 10.0 5.5 height 20.0 heighth) { void setheight(double height = h; 21 //setheight double getarea() { return height * width; //getarea instans av 22 Olika slag av metoder double getperimeter() { Metoderna i en klass kan klassificeras enligt: return 2 * (height + width); konstruktor för att initiera tillstånden hos objektet som skapas Klassnamn //getperimeter Rectangle() Rectangle(double w, double h) String tostring() { avläsare (accessor accessor, get-metoder) get-metoder för att avläsa värdet hos instansvariabler eller Attribut klassvariabler, dvs+ avläsa tillstånd hos ett=objekt return "Width = " + width "\nheight " + height; double getwidth() //tostring double getheight() omformare (mutator mutator, set-metoder) set-metoder som manipulerar instansvariabler eller Metoder klassvariabler, dvs ändra tillstånd hos ett objekt eller hos klassen void setwidth(double w) void setheight(double h) operation som använder instansvariablerna för att göra beräkningar double getarea() double getperimeter() String tostring() 23 24

Det reserverade ordet this Metoder En instansmetod anropas genom att ange namnet på objektet som skall anropas, följt av en punkt '.', följt av metodens namn och metodens argumentlista. objectname.methodname(argumentlista) En klassmetod anropas genom att ange klassens namn, följt av en punkt '.', följt av metodens namn och argumentlista. ClassName.methodName(argumentlista) Men kan även skriva: void setwidth(double w) { this.width = w; //setwidth Exempel: Scanner data = new Scanner("12.0 5.5"); double width = data.nextdouble(); double height = data.nextdouble(); Random hazard = new Random(); int randomheight = hazard.nextint(100); Rectangle firstrec = new Rectangle(); Rectangle secondrec = new Rectangle(width, height); firstrec.setheight(randomheight); double thewidth = secondrec.getwidth(); double value = Math.pow(3.3, 5.5); Det reserverade ordet this Att referera till this är nödvändigt om instansvariabeln och den formella parametern har samma namn som i exemplet nedan: void setwidth(double width) { this.width = width; //setwidth Anledningen till detta är att vi har en namnkonflikt och då gäller närhetsprincipen, närhetsprincipen vilket i detta fall betyder att width avser den aktuella parametern. Att ha samma namn på instansvariabler och på formella parametrar till metoder är vanligt förekommande (width säger ju mer än w om vad parametern avser). Varje objekt har en referens till sig själv. Denna är dock inte "synlig" utan nås via det reserverade ordet this. I klassen Rectangle har metoden setwidth följande utseende: void setwidth(double w) { width = w; //setwidth Rectangle() { width = 0; height = 0; void setwidth(double w) { this.width = w; //getwidht 25 void setheight(double height){{ class Rectangle private double width; this.height = height;.. //setheight.... Rectangle() { Rectangle() { double getarea() width = 0;{ return height * width width; = 0; Bättre height = 0;implementation av klass Rectangle //getarea height = 0; double width; //instansvariabel private double getperimeter() { void w) { private double height; setwidth(double //instansvariabel return 2 * (height + width); void setwidth(double width) { Rectangle() { this.width = w; width = 0; //getperimeter = width; heightthis.width = 0; //getwidht //constructor //getwidht String. tostring() { width, double height) {.this.width. Rectangle(double = width; void setheight(double height) {.=.." += height; this.height return "Width width + "\nheight = "= height; + height; this.height //constructor //setheight //tostring double getwidth() { double getarea() { return width; return height * width; //getwidth //getarea Rectangle() { width = 0; height = 0; void setwidth(double width) { this.width = width; //getwidht double getheight() { return height; //getheight void setwidth(double width) { this.width = width; //setwidth 27 26 double getperimeter() { return 2 * (height + width); //getperimeter String tostring() { return "Width = " + width + "\nheight = " + height; //tostring 28

Information hiding dölja information Synlighetsmodifierare En metod har följande utseende: I klassen Rectangle är instansvariablerna width och height deklarerade som privata: modifierare resultattyp namn(parameterlista) { lokala deklarationer satser private double height; vilket innebär att de är okända för andra klasser. En typ av modifierare är synlighetsmodifierare som anger metodens synlighet. Det finns fyra olika modifierare för synlighet synlig för alla klasser private synlig endast i klassen själv protected synlig för klassen själv, klasser i samma paket och för subklasser utelämnad synlig för klassen själv och för alla andra klasser i samma paket För att kunna ta reda på i vilket tillstånd ett objekt befinner sig i måste det därför finnas publika åtkomstmetoder som returnerar instansvariablernas värden (avläsare avläsare): double getwidth() double getheight() Och för att kunna förändra tillståndet hos ett objekt måste det finnas publika metoder som ändra instansvariablernas värden (modifierare modifierare): void setwidth(double width) void setheight(double height) 29 Information hiding dölja information 30 Information hiding dölja information Detta tillvägagångssätt att ha privata instansvariabler samt ha publika metoder för att avläsa och modifiera värdet av instansvariablerna kallas för information hiding och är en mycket viktig programmeringsprincip. Information hiding ger fördelen att man skiljer mellan objektets specifikation och objektets implementation, dvs man behöver inte känna till objektets inre uppbyggnad för att kunna använda objektet. Allt informationsutbyte mellan klient och server skall ske via ett väldefinierat gränssnitt, som utgörs av de publika metoderna som finns definierade för klassen som servern tillhör. Keep it secret! Keep it safe! En annan fördel är att objektet kan isoleras mot fel i andra objekt. Deklarera alla instansvariabler och klassvariabler som private! Endast tillgång till gränssnitt Keep it secret! Keep it safe! Även tillgång till implementationen 31 32

Metoden tostring Metoden tostring Uttrycket "Rektangeln har värdet \n" + rek översätts automatiskt till "Rektangeln har värdet \n" + rek.tostring() innan uttrycket evalueras. Om en klass implementerar instansmetoden String tostring() blir det möjligt att representera ett objekt av klassen som en sträng och därmed kunna skriva ut objekt på ett snyggt och begripligt sätt. Om vi i klassen Rectangle inför instansmetoden Om vi inte definierar metoden tostring finns ändock metoden tillgänglig, eftersom den ärvs av klassen Object som är superklass till alla klasser. String tostring() { return "Width = " + width + "\nheight = " + height + "\n"; //tostring Men resultatet av satsen System.out.println("Rektangeln har värdet \n" + rek); blir då istället en obegripligt utskrift i stil med: Rektangeln har värdet Rectangle@11a698a och i ett program deklarerat ett objekt enligt Rectangle rek = new Rectangle(10, 20); kan vi t.ex skriva System.out.println("Rektangeln har värdet \n" + rek); Det som skrivs ut är namnet på klassen och den så kallade hashkoden för objektet. Vi får då utskriften: Rektangeln har värdet Width = 10.0 Height = 20.0 När man skriver metoden String tostring() i en klass, överskuggar (override override) metoden tostring-metoden som ärvs från Object. 33 34