OOP Objekt-orienterad programmering

Relevanta dokument
OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

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

Arv. Objektorienterad och komponentbaserad programmering

Objektorienterad Programmering (TDDC77)

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

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

Malmö högskola 2008/2009 CTS

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

Klasshierarkier - repetition

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

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

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

Objekt och klasser - Introduktion

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.

TENTAMEN OOP

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

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

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

JAVA Mer om klasser och objektorientering

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

OOP Objekt-orienterad programmering

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

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

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

OOP Omtenta

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering Föreläsning 5

Objektorienterad Programmering (TDDC77)

Introduktion till arv

Dynamisk bindning och polymorfism

LÖSNINGSFÖRSLAG TENTAMEN

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

JAVAUTVECKLING LEKTION 11

DAT043 - Föreläsning 7

Modeller, Objekt och Klasser

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

TENTAMEN OOP

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

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

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

OOP Omtenta

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

Konstruktion av klasser med klasser

Objektorienterad programmering i Java

TENTAMEN OOP

OOP Omtenta

Imperativ programmering. Föreläsning 4

OOP Objekt-orienterad programmering

Laboration 1 - Grunderna för OOP i Java

Objekt och referenser

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

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

OOP Tentamen

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

OOP Tentamen

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

OOP Objekt-orienterad programmering

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

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

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

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

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

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

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

Föreläsning REPETITION & EXTENTA

Klasser och objekt. Henrik Johansson. August 20, 2008

OOP Tenta

Föreläsning 13 Innehåll

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Classes och Interfaces, Objects och References, Initialization

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

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äsningsmaterial (Arv) Skrivet av Andreas Lund

Objektorienterad Programmering DAT043

Polymorfi. Objektorienterad och komponentbaserad programmering

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

Tentamen. Lösningsförslag

OOP Omtenta

Lösningsförslag övning 2.

Tentamen OOP

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 )

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

OOP Exempel Tentamen 2007

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

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

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

OOP Tenta

Transkript:

OOP F5:1 OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling Vi skall nu titta på ett exempel med myror. Varje myra har ett namn samt ett antal barr. OOP F5:2 Kan nu skapas och användas i ett main "nånstans": class Myrtest{ public static void main(string[]args){ Myra m; m = new Myra(); m.namn = "Myrre"; m.barr = 43; // etc... 1

Konstruktorer OOP F5:3 En konstruktor är en metod som anropas när ett objekt skapas. Skall ha samma namn som klassen. Returnerar ingenting. Kan ha ett antal argument. Kan överlagras, dvs man kan ha flera konstruktorer med olika argument - rätt konstruktor anropas. Myra(String str){ public static void main(string[]args){ Myra m1 = new Myra("Myrre"); Myra m2 = new Myra("Ante", 21); // etc... Skapa myror i en dialog, lägga dem i en array: OOP F5:4 public static void main(string[]args){ Myra[]allaMyror=new Myra[10]; int antal=0; Scanner sc=new Scanner(System.in); System.out.print("Myrans namn: "); String na=sc.nextline(); System.out.print("Antal barr: "); String str=sc.nextline(); int ba=integer.parseint(str); Myra ny=new Myra(na, ba); allamyror[antal]=ny; antal++; //osv... 2

Default-konstruktor OOP F5:5 ALLA klasser måste ha en konstruktor, som anropas vid new. Om det inte finns någon så lägger systemet dit en tom default-konstruktor. Ingen konstruktor skriven, då finns : public Myra(){ och vi kan skapa myror med: Myra m = new Myra(); Nu finns en konstruktor som tar namn och barr som argument. Vi kan skapa en myra med: Myra m = new Myra("Myrre", 37); Default-konstruktorn är nu borta. Myra m = new Myra(); //Går INTE Vi vill kanske kunna skapa myror på olika sätt: OOP F5:6 Myra(){ namn = null; Myra(String str){ Myra(int x){ namn = null; public static void main(string[]args){ Myra m1 = new Myra(); Myra m2 = new Myra("Myrre"); Myra m3 = new Myra(72); Myra m4 = new Myra("Ante", 21); // etc... 3

Vissa myror kommer nu att sakna namn. Om vi VILL att alla myror skall ha ett namn? OOP F5:7 Antingen ett namn när man skapar myran: Myra m1 = new Myra("Myrre"); Myra m2 = new Myra("Ante", 45); Annars genererar vi ett automatiskt namn "Anonym <antal>" där <antal> är vilken namnlös myra i ordning som skapats. Myra m3 = new Myra(); // denna myras namn skall bli "Anonym 1" Myra m4 = new Myra(92); // denna myras namn skall bli "Anonym 2" Hur kan vi hålla reda på hur många anonyma myror som skapats? OOP F5:8 static int antal = 0; Myra(){ namn = "Anonym "+(++antal); Myra(String str){ Myra(int x){ namn = "Anonym "+(++antal); Statisk variabel, endast en finns, gemensam för alla myror 4

static int antal = 0; if (str==null) namn="anonym "+(++antal); else namn=str; //+ övriga initieringar... Myra(){ this(null, 0); Myra(String str){ this(str, 0); Myra(int x){ this(null, x); En annan vanlig variant: En huvud -konstruktor där initieringar mm görs OOP F5:9 De överlagrade varianterna anropar huvud-konstruktorn (med korrekt antal argument) this(... ) innebär alltså anrop till annan konstruktor. Argumenten... avgör vilken. Garbage Collection OOP F5:10 En referens som inte refererar till något objekt refererar till null. Myra m1 = new Myra("Myrre", 76); // Så småningom kanske... m1 = null; Vad händer med objektet? Då och då görs en automatisk garbage collection, alla objekt som ingen refererar till städas bort. Man kan själv "tvinga" systemet att utföra en garbage collection: System.gc(); Brukar dock inte behövas. 5

Inkapsling (skydda attribut) OOP F5:11 Man kan göra ett attribut private. Attributet kan då endast användas inom klassen. Åtkomst utifrån via metoder. Dessa metoder gör vi public, dvs de kan anropas utifrån. private public int getbarr(){ return barr; public void changebarr(int x){ barr += x; if (barr < 0) i t.ex. main: Myra m1 = new Myra("Myrre"); m1.barr += 12; //Går INTE m1.changebarr(12); Synlighets-modifierare OOP F5:12 Det finns olika s k synlighetsmodifierare, dvs modifierare som anger varifrån (från vilka klasser) man får åtkomst till olika saker. Dessa kan anges på attribut och metoder (public även classer). public private protected <ingen> Synlig överallt Endast synlig i denna klass Synlig för alla klasser i samma package Ärvs till alla subklasser (arv kommer senare på kursen) Synlig för alla klasser i samma package Ärvs till alla subklasser i samma package Konstruktorer är oftast public - dvs man vill kunna skapa objekt av klassen från alla andra klasser. 6

Skydda mot vem? Andra programmerare! OOP F5:13 Programmerare 1 gör en klass för myror Programmerare 2 använder klassen i ett program private public void changebarr(int x){ barr+=x; if (barr<0) barr=0; Myra m1=new Myra(); int antal; //senare i programmet: m1.barr += antal; Myra m1=new Myra(); int antal; //senare i programmet: m1.changebarr(antal); Även skydda attributet namn: OOP F5:14 private private public int getbarr(){ return barr; public void changebarr(int x){ barr += x; if (barr < 0) public String getnamn(){ return namn; Om man har en Myra-referens: Myra m=new Myra(38); Attributet barr kan hämtas: int b=m.getbarr(); Attributet barr kan ändras: m.changebarr(-8); Attributet namn kan hämtas: String s=m.getnamn(); Men namn kan ej ändras. 7

OOP F5:15 Myra - int barr - String namn + Myra() + Myra(int barr) + Myra(String namn) + Myra(String namn, int barr) + int getbarr() + void changebarr(int x) + String getnamn() getbarr changebarr getnamn Myra int barr String namn UML-diagram av klass Myra Annat sätt att betrakta klass Myra 8