OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Programmeringsteknik
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Arv.
Inkapsling.
Polymorfism.
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
OOP Objekt-orienterad programmering
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstruktor Ser till att objektets data är korrekt initierade MinKlass::MinKlass(); MinKlass::MinKlass(int.
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Klasser och objekt Klasser, objekt och instansvariabler
Sid 41 Fordon int antalhjul; int vikt;
int res2=Math.max(tal1,tal2);
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Räckvidd och synlighet. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Synlighet (meddelandesändning) Det.
OOP Objekt-orienterad programmering
Programmeringsteknik för Media1 & K1
OOP F6:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList toString() – metoden.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.
Föreläsning 4 Klasser Och Objekt.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
7. Delegerare och notifierare
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 5 Klasser och instanser
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
1 Mer om metoder, variabler, klasser och objekt. Kursboken: - Kapitel 6 - Kapitel 8.
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling

OOP F5:2 Stefan Möller Vi skall nu titta på ett exempel med myror. Varje myra har ett namn samt ett antal barr. class Myra{ String namn; int barr; } 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... }

OOP F5:3 Stefan Möller Konstruktorer 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. class Myra{ String namn; int barr; Myra(String str){ namn = str; barr = 0; } Myra(String str, int x){ namn = str; barr = x; } public static void main(String[]args){ Myra m1 = new Myra("Myrre"); Myra m2 = new Myra("Ante", 21); // etc... }

OOP F5:4 Stefan Möller 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... } Skapa myror i en dialog, lägga dem i en array:

OOP F5:5 Stefan Möller Default-konstruktor 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. class Myra{ String namn; int barr; } class Myra{ String namn; int barr; Myra(String str, int x){ namn = str; barr = x; } 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

OOP F5:6 Stefan Möller Vi vill kanske kunna skapa myror på olika sätt: class Myra{ String namn; int barr; Myra(){ namn = null; barr = 0; } Myra(String str){ namn = str; barr = 0; } Myra(int x){ namn = null; barr = x; } Myra(String str, int x){ namn = str; barr = x; } 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... }

OOP F5:7 Stefan Möller Vissa myror kommer nu att sakna namn. Om vi VILL att alla myror skall ha ett namn? 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 " där ä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 Stefan Möller class Myra{ String namn; int barr; static int antal = 0; Myra(){ namn = "Anonym "+(++antal); barr = 0; } Myra(String str){ namn = str; barr = 0; } Myra(int x){ namn = "Anonym "+(++antal); barr = x; } Myra(String str, int x){ namn = str; barr = x; } Statisk variabel, endast en finns, gemensam för alla myror

OOP F5:9 Stefan Möller class Myra{ String namn; int barr; static int antal = 0; Myra(String str, int x){ if (str==null) namn="Anonym "+(++antal); else namn=str; barr = x; //+ ö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 De överlagrade varianterna anropar huvud-konstruktorn (med korrekt antal argument) this(... ) innebär alltså anrop till annan konstruktor. Argumenten... avgör vilken.

OOP F5:10 Stefan Möller Garbage Collection 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.

OOP F5:11 Stefan Möller Inkapsling (skydda attribut) 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. class Myra{ String namn; private int barr; public int getBarr(){ return barr; } public void changeBarr(int x){ barr += x; if (barr < 0) barr = 0; } i t.ex. main: Myra m1 = new Myra("Myrre"); m1.barr += 12; //Går INTE m1.changeBarr(12);

OOP F5:12 Stefan Möller Synlighets-modifierare 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). publicSynlig överallt privateEndast synlig i denna klass protectedSynlig 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.

OOP F5:13 Stefan Möller Skydda mot vem? Andra programmerare! class Myra{ int barr; } class Myra{ private int barr; public void changeBarr(int x){ barr+=x; if (barr<0) barr=0; } Programmerare 2 använder klassen i ett program Myra m1=new Myra(); int antal; //senare i programmet: m1.barr += antal; Myra m1=new Myra(); int antal; //senare i programmet: m1.changeBarr(antal); Programmerare 1 gör en klass för myror

OOP F5:14 Stefan Möller Även skydda attributet namn: class Myra{ private String namn; private int barr; public int getBarr(){ return barr; } public void changeBarr(int x){ barr += x; if (barr < 0) 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.

OOP F5:15 Stefan Möller 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 int barr String namn Myra UML-diagram av klass Myra Annat sätt att betrakta klass Myra