Föreläsning 7: Objektorienterad programmering - introduktion

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

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

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

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

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

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

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

Objekt och klasser - Introduktion

Föreläsning 9: Projektintroduktion, programmeringsmetod, samt att skapa körbara program och dokumentation

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

Imperativ programmering. Föreläsning 4

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

Objektorienterad Programmering DAT043

Programmering för språkteknologer II, HT2011. Rum

Föreläsning 5-6 Innehåll

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

TENTAMEN OOP

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

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

Laboration 1 - Grunderna för OOP i Java

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

Design av en klass BankAccount som representerar ett bankkonto

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

725G61 - Laboration 6 Objektorientering, modellering och arv. Johan Falkenjack

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

Classes och Interfaces, Objects och References, Initialization

Objektorientering: Lagring, räckvidd och livstid

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

DAT043 - Föreläsning 7

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

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

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

(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

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

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

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Enkla variabler kontra referensvariabel

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

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

TDDD78 Objektorientering: Lagring och livstid

Lösningsförslag övning 2.

Objektorienterad Programmering (TDDC77)

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

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

Objektorientering: Lagring och livstid

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Objektorienterad Programmering (TDDC77)

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

JAVA Mer om klasser och objektorientering

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

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

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

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

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

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

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

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

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

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

Objektorienterad programmering. Grundläggande begrepp

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 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Objektorienterad programmering

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Klasser och objekt. Henrik Johansson. August 20, 2008

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

TENTAMEN OOP

Klasshierarkier - repetition

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

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

1 Klasser och objektorientering Vad är objektorientering?

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Laboration 1: Figurer i hierarki

PROGRAMMERINGSTEKNIK TIN212

Tentamen i Grundläggande programmering STS, åk 1 fredag

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

TDDC77 Objektorienterad Programmering

Transkript:

Föreläsning 7: Objektorienterad programmering - introduktion Eva Blomqvist eva.blomqvist@liu.se Linköpings universitet Sweden December 1, 2013 1

Innehåll Del 2 i kursen Objektorientering - vad är det? Objektorieterad programmering i Java Exempel vi redan stött på December 1, 2013 2

Del 2 i kursen 4 labbar Från och med del 2 kommer labbhandledarna vara hårdare i rättningen på följande punkter Felhantering - använd interaktionsloopar med felhantering, undantag (om det behövs), testa noga innan inlämning Metodindelning - max 20 rader kod i en metod, annars dela upp i metoder! Dokumentation - välkommenterad kod och vettiga namn på variabler och parameterar Projektet kommer pågå parallellt (samma grupper) - start på torsdag 5/12 Observera: tre obligatoriska handledarmöten under projektets gång (viktiga för att kunna få VG) Ni bokar själva in tid med handledaren (utanför labbtid) December 1, 2013 3

Objektorientering - vad är det? December 1, 2013 4

Objektorienterade system Ett system där varje komponent representerar ett väldefinierat begrepp I första hand begrepp som har en motsvarighet i verkligheten, såsom personer, varor, bankkonton osv. I andra hand implementationsbegrepp, såsom databaser, fönster, mängder osv. Exempel: en flygplats Komponenter (objekt)? Flygplan Terminaler Start- och landningsbanor Objekten har värden på vissa attribut och beskrivna beteenden Flygplanet har värden såsom hastighet, antal säten osv. Flygplanet har beteenden, t ex om ett plan ska starta måste det få veta vilken start/landningsbana som ska användas, och när starten är genomförd kommer planet vara på en viss höjd och ha en viss hastighet December 1, 2013 5

Objektorienterad analys Analys? - kravanalys Görs tidigt när man börjar planera ett system Bör utgå från en given kravspecifikation Krav = vad systemet ska klara av (men inte hur det ska göra det) Studera objekten i verksamheten som vi vill bygga ett system för Vilka objekt (objekttyper) finns? Vilka är relevanta för kraven på vårt system? Vad har de för egenskaper? Vilka beteenden uppvisar objekten och som måste återspeglas i systemet? I vilka scenarion kommer de olika objekten användas? Mål Förståelse för vad systemet ska utföra och områdets terminologi Skapa en "analysmodell" som underlag för designfasen December 1, 2013 6

Objektorienterad design Design? Baserat på analysmodellen behöver vi nu anpassa den till något vi faktiska kan implementera som ett system Anpassning till en målmiljö - var ska systemet köras? Vilka resurser finns? Vilka existerande program måste vi ta hänsyn till? Operativsystem? Programmeringsspråk? Systemarkitektur Detaljerad beskrivning av objekten och deras relationer Studera objekten i analysmodellen och deras relationer i olika scenarion Vilka (data) värden ska representera objektens attribut? Hur ska beteenden fördelas över olika metoder? Hur ser varje objekts gränssnitt ut gentemot andra objekt? Kan vi specialisera eller generalisera vissa objekt? Hur ska objekten interagera med varandra i olika scenarion? Mål Förståelse för vilka anpassningar som måste göras för den specifika miljön Skapa en systemarkitektur och detaljerad design av systemets alla objekt December 1, 2013 7

Objektorienterad programmering Implementation Baserat på den detaljerade designen behöver vi nu skriva koden för alla objekt vi behöver Mål Huvudprogrammet Alla klasser, deras datavärden och deras metoder Skapa ett körbart system som motsvarar vår detaljerade design och uppfyller alla de kvar vi hade i vår kravspecifikation OBS! Det är inte nödvändigtvis så att dessa "steg" görs ett och ett efter varandra för ett helt system (det kallas för en "vattenfallsmodell"), mer vanligt nuförtiden är agila metoder - men stegen i sig finns kvar! December 1, 2013 8

Begrepp - Objekt I ett objektorienterat system kommer ett antal objekt samarbeta för att uppnå ett visst mål Objekt representerar Begrepp från verkligheten Personer, hus, bilar, varor i en butik, banker, bankkonton osv....eller konceptuella begrepp i systemet Fönster, menyer, knappar, databaser, textsträngar, mängder osv. Ett objekt har alltid tre delar (egenskaper) Ett tillstånd - ex: jag är just nu 35 år, jag befinner mig i Link. Unik identitet - ex: mitt personnummer Beteenden - ex: om ni frågar mig om mitt namn så kommer jag att svara "Eva Blomqvist", ni kan be mig skriva Java-kod i Eclipse December 1, 2013 9

Begrepp - Objekt (forts) Ett objekts tillstånd består av värdena på dess attribut just nu Anta att personer har ett namn, en ålder och en födelsort... Ett specifikt person-objekts tillstånd är alltså värdena på dessa tre egenskaper/attribut såsom de ser ut just nu Exempel: person-objektet "Eva" har namn=eva Blomqvist, ålder=36år, och födelseort="österhaninge" Inkapsling Ofta är ett objekts värden gömda för omvärlden Bara objektet självt kan ändra på värdena, och använda dem eller skicka vidare värdena till andra Exempel: ni måste fråga mig om min ålder för att få veta att jag är 36 år Exempel: ingen annan kan byta namn på mig, bara jag kan göra det - det är MITT namn, men någon kan be mig att byta namn Objekt måste kunna skicka "meddelanden" - anropa - varandra för att vi ska kunna bygga ett system December 1, 2013 10

Begrepp - Klass I ett system finns ofta objekt som liknar varandra Ett system som hanterar personer: Eva, Anna, Per, osv... Olika identitet och olika tillstånd (genom olika värden) men samma beteende Eva, Anna och Per är alla personer, de är av typen "person", tillhör klassen Person Vad är en klass? Matematiskt: en mängd av objekt Datalogiskt: en abstrakt datatyp med attribut och metoder Intuitivt: en "mall" eller "stämpel" från vilken vi kan skapa (=instansiera) objekt - objekt är instanser av en klass! En klass har... Ett namn som identifierar det begrepp som klassen representerar Ex: Person En beskrivning av de attribut (=variabler) som klassens objekt ska ha Ex: namn, ålder, personnummer... En beskrivning av de tjänster som klassen erbjuder omvärlden (=metoder) Ex: "ge mig personens namn", "beräkna personens ålder", osv... December 1, 2013 11

Vad är en klass? En mängd av individer Person p 1 p 2 p 3 p 4 p 5 p 6 December 1, 2013 12

Vad är en klass? En beskrivning av individerna i klassen - ett mönster eller "stämpel" för att skapa individerna Klassen som en datatyp Klassen skapas när vi skriver koden Individerna skapas när programmet körs Klassen måste innehålla information om hur individerna ska se ut (variabler och metoder) samt en metod för att skapa nya individer (konstruktorn) December 1, 2013 13 p 5 p 1 Person p 3 p 6 p 2 p 4

Vad är en klass? En klassbeskrivning (koden) innehåller alltså både... information om klassen i sig = mängden av alla personindivider beskrivning av information och beteende som ska finnas för varje individ när programmet väl körs Exempel: Person information/beteende för klassen: lista över alla personer, fråga efter listan information/beteende som ska finnas för individerna: namn, personnr, metod för att fråga efter ålder... December 1, 2013 14 p 5 p 1 Person p 3 p 6 p 2 p 4

University Klasser = typer = "stämpeln" name city startyear Person name birthyear getname() setname(...) getcity() setcity(...) getstartyear() setstartyear(...) calculateage() getname() setname(...) getbirthyear() setbirthyear(...) calculateage() Person Objekt = instanser = "avtrycken" Ola Anna Ola Anna Per student1 student2 Person December 1, 2013 LIU 15 Person myuni University

University Klasser = typer = "stämpeln" ID = 0001011000... type = Person Person name = Ola birthyear = 1994 name birthyear getname() setname(...) getbirthyear() Person setbirthyear(...) calculateage() getname() setname(...) getbirthyear() setbirthyear(...) calculateage() name city startyear getname() setname(...) getcity() setcity(...) getstartyear() setstartyear(...) calculateage() Objekt = instanser = "avtrycken" student1.getname(); Ola "Ola" Anna Ola Anna Per student1 student2 Person December 1, 2013 LIU 16 Person myuni University

Klasser = typer = "stämpeln" Inget nytt! ArrayList String...... add(...) contains(...) get(...) remove(...) size() toarray() iterator() charat(...) indexof(...) replace(...) touppercase() tolowercase() String Objekt = instanser = "avtrycken" "Hej" "Text" "Hej" "Text" "Mer..." s1 mytext String December 1, 2013 "Mer..." 17 String s2 String

Objektorienterad programmering i Java December 1, 2013 18

Klasser i Java Som ni har sett spelar klasser en central roll i Java Man kan inte skriva ett program utan att skapa en klass! Alla värden som hanteras lagras antingen i en variabel av en primitiv datatyp (byte, short, int, long, float, double, char, boolean) eller så är det en referens till ett objekt objekt = antingen en vektor av primitiva typer eller en instans av en klass Javas standardbibliotek är en samling användbara klasser Hittills i kursen har vi sett klasser som samlingar av metoder Vi måste skapa en klass för att kunna skapa metoden "main" och köra vår kod som ett program Vi har skapat statiskta metoder (klassmetoder) Vi har inte skapat några instanser av våra klasser December 1, 2013 19

Klasser i Java (forts) Ett annat sätt att se på klasser Klasser som datatyper - typer av objekt Person är en typ av objekt där instanserna är enskilda personer Hjul är en typ av objekt där instanserna är enskilda hjul på en bil Jämför med Javas standardbibliotek String är en typ av objekt där instanserna är specifika textsträngar ArrayList är en typ där instanserna är listor som innehåller andra objekt av en given typ... De flesta av klasserna i Javas standardbibliotek är abstrakta datatyper! December 1, 2013 20

Klasser vs. filer Från början hade vi bara en fil Samma namn på filen som på klassen Från och med nu kommer vi att ha flera filer, med en klass per fil - samma namn på filen som på klassen Kan vi ha flera klasser i en fil? (överkurs) Ja - men bara en klass får vara public och den klassen måste överensstämma med filnamnet En klass som inte är deklarerad som public (vi skriver ingenting före "class") kan bara kommas åt inom samma paket Kompilering av en fil med flera klasser i kommer generera flera.class-filer, en för varje klass Begreppet kompileringsenhet (överkurs) kompileringsenhet = en källkodsfil (som kan innehålla flera klasser) När vi ska köra ett program måste vi starta från den klass som innehåller vår "main"-metod December 1, 2013 21

Varför behöver vi klasser som datatyper? Kom ihåg: en metod kan bara returnera ett enda värde (eller en vektor med värden av samma typ) Vad händer om vi behöver kunna returnera flera olika sorters värden? Exempel: en metod för att få information om en person, t ex en persons förnamn, efternamn och födelseår - vi vill kunna returnera tre värden (textsträng + textsträng + heltal) Lösning: vi måste skapa en abstrakt datatyp Person som kapslar in all den här informationen Då kan vi returnera ett enda Person-objekt, men som innehåller all information vi behöver! Annat exempel: en metod för att hämta kontohavare och saldo, givet ett kontonummer December 1, 2013 22

Varför behöver vi klasser som datatyper? (forts.) public class BankKonto {!!public int kontonr;!!public String kontohavare;!!public double saldo;! }!! public class HanteraKonto {!!public static void main (String[] args){!!!// här gör vi en massa saker!!!bankkonto konto = hamtainfo();!!}!!!!public static BankKonto hamtainfo(){!!!bankkonto k = new BankKonto();!!!// här fyller vi objektet med rätt information!!!return k;!!}! }! December 1, 2013 23

Vad ska en klass innehålla? En klass kan innehålla följande: En klassdeklaration (obligatoriskt) public class MittKlassNamn {! Klass- och instansvariabler "globala variabler" som kan kommas åt från vilken metod som helst (i klassen om de är private, även från andra klasser om de är public) Skrivs gärna högst upp i klassens kropp En eller flera konstruktorer metod som talar om vad som händer när ett nytt objekt (instans) av metoden skapas Klass- och instansmetoder metoder som representerar klassens och instansernas beteende - vad kan den här typen av objekt göra? En main-metod...om det här är "huvudklassen" varifrån programmet ska köras December 1, 2013 24

Konstruktorer En metod med samma namn som klassen som används för att skapa nya objekt av klassen Exempel på använding: Person pers = new Person();! BankKonto k = new BankKonto();! java.util.scanner in = new java.util.scanner(system.in);! En konstruktor returnerar aldrig något värde har ingen returtyp (inte ens void) Konstruktorn används för att initialisera variabler i det nya objektet (instansvariabler) till lämpliga värden kan även göra annat som är lämpligt när ett nytt objekt skapas Defaultkonstruktorn en klass som saknar konstruktor har en "defaultkonstruktor" som tillhandahålls av Javamiljön - den gör ingenting vill man göra något får man skapa en eller flera egna konstruktorer Precis som för vanliga metoder kan man ha flera olika konstruktorer (som ju har samma namn) bara de har olika signatur (olika argument) December 1, 2013 25

Konstruktorer (forts.) Exempel: konstruktorer för BankKonto-klassen! public class BankKonto {!!public int kontonr;!!public String kontohavare;!!public double saldo;!!!public BankKonto (int nr, String person, double s) {!!!kontonr = nr;!!!kontohavare = person;!!!saldo = s;!!}!!!!public BankKonto () {!!}! }! December 1, 2013 26

Instansvariabler Variabler som tillhör en klass, men inte är static, tillhör varje instans (objekt) av den klassen för varje instans vi skapar av klassen, skapas dessa variabler när vi har skapat en instans av klassen kan dessa instansvariabler till delas värden och vi kan hämta och använda deras värden Exempel: kontonr, kontohavare och saldo i klassen BankKonto för att komma åt en instansvariabel måste vi tala om vilken instans vi menar (eftersom det kan finnas flera) BankKonto konto1 = new BankKonto(); konto1.saldo = 120.00;! Instansvariabler kan vara public (går att komma åt utanför klassen själv) eller private (bara klassens egna metoder kan komma åt dem) Kallas även fält (eng. field) eller medlemsvariabler (medlem = instans) December 1, 2013 27

Instansvariabler (forts.) Exempel: konstruktor för BankKonto-klassen här är det underförstått att vi menar variablerna i den nya instanser vi håller på och skapar för att referera till den explicit kan vi skriva this för att göra klart att vi menar just den här instansen (men detta är alltså onödigt i exemplet!) public class BankKonto {!!public int kontonr;!!public String kontohavare;!!public double saldo;!!!public BankKonto (int nr, String person, double s) {!!!this.kontonr = nr;!!!this.kontohavare = person;!!!this.saldo = s;!!}! }! December 1, 2013 28

Inkapsling Ett objekts tillstånd = värdet på dess instansvariabler just nu I exemplet tidigare deklarerade vi alla instansvariabler public - det är ovanligt Oftast vill vi inte att vem som helst (vilka andra objekt som helst) ska kunna komma åt och modifiera ett objekts instansvariabler Inkapsling = bara objektet självt har full tillgång till sina instansvariabler = vi deklarerar dem private! Andra objekt kan bara komma åt dem och manipulera dem på vissa fördefinierade sätt Instansmetoder används för att komma åt värden På engelska "getters and setters", dvs "get"-metoder för att hämta värden och "set"-metoder för att ändra värden December 1, 2013 29

Inkapsling - get/set exempel public class BankKonto {!!private int kontonr;!!private String kontohavare;!!private double saldo;!!!public BankKonto (int nr, String person, double s) {!!!//konstruktor som initialiserar värden!!}!!!public double getsaldo (){!!!return saldo;!!}!!!public void setsaldo (double s){!!!//här kan vi lägga in någon kontroll!!// som körs innan värdet ändras!!!saldo = s;!!}!! }! I Eclipse kan ni få hjälp att generera "getters and setters" - men modifiera dem sedan så de passar! Source -> Generate Getters and Setters... December 1, 2013 30

Inkapsling - get/set exempel (forts.) public class HanteraKonto {!!public static void main (String[] args){!!!bankkonto k = new BankKonto(12345,!!!!!!!"Eva",120.0);!!!//Vi kan inte ändra saldot direkt!!!// k.saldo = 130.0; fungerar inte!!!!// vi måste använda set-metoden!!!k.setsaldo(130.0);!!}!!! }! OBS: var försiktiga när ni hanterar vektorer - en "get"-metod som returnerar en referens till vektorn gör ju att vektorn kan ändras - returnera en kopia av vektorn istället (anv. clone()) December 1, 2013 31

Inkapsling (forts.) Bara objektet självt har full tillgång till sina instansvariabler (sina data) = vi deklarerar dem private! Andra objekt kan bara komma åt dem och manipulera dem på vissa fördefinierade sätt Publika instansmetoder används för att komma åt värden På engelska "getters and setters", dvs "get"-metoder för att hämta värden och "set"-metoder för att ändra värden OBS! metoder kan också vara private/public - en privat metod kan bara anropas inifrån den egna klassen medan en publik kan anropas från andra klasser Klassen ska vara så "självständig" som möjligt, dvs varje klass ska ta hand om sina egna värden och definiera sina egna beteenden Fundera över var metoderna hör hemma - oftast är det på samma ställe där vi lagrar data Tänk er att man ska kunna återanvända klassen oberoende av main-metoden eller andra klasser December 1, 2013 32

Instansmetoder Instansmetoder är de som INTE är deklarerade static! Detta innebär att den kan anropas med någon specifik instans (objekt) av klassen som syftning - utföras av ett specifikt objekt (inte av klassen i sig) Det är genom instansmetoder som objekten i vårt system "skickar meddelanden till varandra" - kommunicerar "get" och "set" metoder för att hantera inkapsling av instansvariabler är alltid instansmetoder "get"-metoder ger information om tillståndet hos ett objekt "set"-metoder ändra tillståndet hos ett objekt Instansmetoder anropas genom att först tala om på vilken specifik instans metoden ska anropas (vilken instans vi syftar på Exempel: k.setsaldo(130.0);! December 1, 2013 33

Klassvariabler Variabler som tillhör en klass - dvs hela "typen" Deklareras som static! Deklareras precis efter klassdeklarationen (innanför { } som omsluter klassen) Exempel: en lista som håller reda på alla instanser vi skapat av den här klassen - Bankkonto = lista på alla konton som finns i vår bank public class BankKonto {!!public static ArrayList<Konto> kontolista;!!public int kontonr;!!public String kontohavare;!!public double saldo;!...! }! December 1, 2013 34

Klassvariabler/metoder vs. instansvariabler/metoder Klassvariabler ger information om själva klassen Deklareras som static! Åtkomst genom att ange klassnamn före syftningsoperatorn Klass.variabel Innehåller information om klassen, t ex kan man hålla reda på hur många instanser som skapats av klassen, eller rent av lagra en lista med alla instanserna Klassmetoder är operationer som själva klassen tillhandahåller Deklareras som static! Åtkomst genom att ange klassnamn före syftningoperatorn Klass.metod() Utförs oberoende av eventuella instanser av klassen, kan bara utnyttja klassvariabler inte instansvariabler i klassen December 1, 2013 35

Klassvariabler/metoder vs. instansvariabler/metoder (forts) Instansvariabler ger information om tillståndet hos ett specifikt objekt (instans) av klassen Är INTE static! Åtkomst genom att ange namnet på objektet (variabeln där vi lagrat objektet) före syftningsoperatorn - bara om de deklarerats som public (annars åtkomst genom get/set metoder) instans.variabel Instansmetoder är operationer på ett specifikt objekt (instans) av klassen Är INTE static! Åtkomst genom att ange namnet på objektet (variabeln där vi lagrat objektet) före syftningoperatorn - bara om de deklarerats som public! instans.metod() December 1, 2013 36

Vad hör till klassen och vad hör till individen/instansen? Nyckelordet "static" = allt som hör till klassen anropas med hänvisning till klassen, t ex String flyttalsstrang = String.valueOf(2.35);! kan vara variabel (t ex lista med alla instanser) men även metoder (t ex main-metoden eller valueof()) vi behöver inte skapa en enda instans av klassen för att använda det som är deklarerat som "static" Allt som INTE är "static" = hör till varje individ som skapas av klassen och kan inte användas förrän vi skapat minst en instans anropas med hänvisning till en instans ur klassen (t ex en variabel med klassen som sin typ), t ex Person minperson = new Person(Anna, 760913-0000); int alder = minperson.calculateage();! varje instans innehåller EN EGEN variabel och det är just den som används, med värden ur den egna instansen, när en icke-statisk metod körs för att kunna använda det som inte är static måste vi först skapa en individ, en instans, av klassen December 1, 2013 37

Vad hör till klassen och vad hör till individen/instansen? (forst.) Jämför med klassen String static String valueof(double d) - "Returns the string representation of the double argument" Statiskt metod = klassmetod = anropas genom att ange klassen Exempel: String flyttalsstrang = String.valueOf(2.35);! char charat(int index) - "Returns the char value at the specified index" Icke-statisk metod = instansmetod = anropas genom att ange vilken instans den ska anropas på Exempel: String mintext = new String("hej"); char bokstav = mintext.charat(1);! December 1, 2013 38

Sammanfattning av modifierare - det viktigaste! Klasser, variabler, metoder mm kan vara private, protected eller public! private - privat, kan bara användas inom klassen protected - skyddad, kan användas av subklasser public - offentlig/publik, kan användas av alla klasser Vi har sett att variabler och metoder i en klass kan vara static eller så anges inget alls static - variabel/metod som tillhör själva klassen (kan bara använda sig av variabelvärden som också är static) (inte static) - variabel som varje individ/instans har en egen "upplaga" av i minnet, resp. metod som körs med variabelvärden för den specifika instansen December 1, 2013 39

Sammanfattning av modifierare (forts.) Klasser Offentlig - public Pakettillgänglig - (om inget sägs) Nästlade klasser (klass i klass) - private Metod i en klass Offentlig - public Pakettillgänglig - (om inget sägs) Skyddad (åtkomst från subklasser + paketet) - protected Privat för den klassen - private Klassmetod (statisk metod) - static Instansmetod - (om inte static) December 1, 2013 40

Sammanfattning av modifierare (forts.) Variabel Offentlig - public Pakettillgänglig - (om inget sägs) Skyddad (åtkomst från subklasser + paketet) - protected Privat för den klassen - private Klassvariabel (statisk variabel) - static Instansvariabel - (om inte static) Konstant - final Tre beslut Åtkomst (offentlig, paket, skyddad, eller privat)? Klass- eller instans (-variabel/-metod)? Möjlig att ändra? December 1, 2013 41

Vad ska jag välja? Tumregel: Gör alla klasser, metoder, variabler osv så lite tillgängliga som möjligt - då undviker du att fel uppstår när de används/ modifieras utifrån... INKAPSLING! Det vanligaste är att... En klass är public! Dess instansvariabler är private! Det finns offentliga (public) "get" och "set" metoder för att komma åt instansvariablerna Dess övriga metoder är public om de ska anropas av ett objekt som är av en annan typ - de är protected om de ska anropas av en instans av en subklass - de är private om de bara används internt av instansen själv December 1, 2013 42

Sammanfattning Objektorienterade system System där varje komponent representerar ett väldefinierat begrepp (som ofta återfinns i verkligheten) Systemet löser problem genom att låta objekten samarbeta Begreppen klass och objekt Klassen är mallen från vilken objekten skapas Varje objekt (instans) tillhör en klass Inkapsling Ett objekt vill oftast dölja sina attribut (variabler) från yttre påverkan - de är private! "get" och "set" metoder används för att kontrollera åtkomst Klassvariabler och metoder vs. instansvariabler och metoder static = hör till klassen (inte static) = hör till instansen December 1, 2013 43

December 1, 2013 44