Föreläsning Klass Cirkel, Punkt Klassen Object Arv, överskuggning

Slides:



Advertisements
Liknande presentationer
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Advertisements

Fortsättningskurs i Programmering lektion 6
Klassarv och inkapsling
OOP Objekt-orienterad programmering
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.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
i olika programmeringsspråk
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.
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
Polymorfism.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Arv.
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 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
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.
Föreläsning 4 Klasser Och Objekt.
1. Ett problem/uppgift.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
INTRODUKTION TILL PROGRAMMERING
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.
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.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Ö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
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 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 7 Metoder Parametrar Klassmetod.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOP&M del II– Föreläsning 5 vecka 50 OBJEKT Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle Book String.
DA7351 Programmering 1 Fält och objekt Tvådimensionella fält Sortera fält Föreläsning 13.
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.
Arv, abstrakta klasser och gränssnitt
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng char Klassen String Klass och attribut Klass och metoder Föreläsning 30/
1 Mer om metoder, variabler, klasser och objekt. Kursboken: - Kapitel 6 - Kapitel 8.
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Föreläsning 9: Arv och UML
Föreläsning 10: Abstrakta klasser, gränssnitt
Presentationens avskrift:

Föreläsning Klass Cirkel, Punkt Klassen Object Arv, överskuggning Polymorfism Exempel på arv

Exempel på arv En människa är ett däggdjur. En människa har alla egenskaper som ett däggdjur har (ärver dessa egenskaper). En människa är en specialisering av ett däggdjur. Ett däggdjur är en generellare klassificering än människa

Ryggradsdjur Abstrakt klass Däggdjur Abstrakt klass Människa Katt Min katt Abbadon är ett objekt av klassen Katt Ryggradsdjur Abstrakt klass Däggdjur Abstrakt klass Människa Katt Abstrakta klasser måste specialiseras innan ett verkligt objekt kan skapas.

Klassen Object Alla klasser i java ärver av klassen Objekt som har ett antal metoder, bl.a. (se dokumentationen över Javas API) public boolean equals(Object obj) Indicates whether some other object is "equal to" this. public Object getClass() Returns the runtime class of an object. public String toString() Returns a string representation of the object. . 

Cirkel med mittpunkt har En Cirkel som har ett objekt Punkt Cirkel radie : int - mittPunkt : Punkt + getRadie() : double + setRadie(double) + getMittPunkt() : Punkt + setMittPunkt(double,double ) + area() : double + jämförArea() : double + compareTo(Object) : int + equals(Object) : boolean + toString() : String Punkt xKord : double - yKord : double + getX() : double + getY() : double + equals(Object) : boolean + toString() : String har Cirkel Punkt

Metoden equals i Punkt public boolean equals(Object o){ Punkt annanPunkt= (Punkt) o; if ( (xKord==annanPunkt.getX()) && (yKord==annanPunkt.getY()) ) { return true; } else { return false; } } Metoden jämför två objekt av typen Punkt. Metoden returnerar true, dvs. två punkter är samma, om de har samma x-koordinat: (xKord==annanPunkt.getX()) och: && samma y-koordinat: (yKord==annanPunkt.getY()) Metoden kan skrivas kortare: public boolean equals(Object o){ Punkt annanPunkt= (Punkt) o; return ( (xKord==annanPunkt.getX()) && (yKord==annanPunkt.getY()) ); }

Objekt som parameter Cirkel Cirkel TestaCirkelMedPunkt // ur TestaCirkelMedPunkt - main double areaSkillnad; Cirkel cirkel1=new Cirkel(1,0,0); Cirkel cirkel2=new Cirkel(3,1,2); areaSkillnad=cirkel1.jämförArea(cirkel2); --------------------------------------------------------------- // ur klassen Cirkel public double jämförArea(Cirkel annanCirkel){ return this.area()-annanCirkel.area(); } this-referensen refererar till aktuellt objekt, dvs det objekt som används vid anropet av metoden. I det här fallet är cirkel1 det aktuella objektet. annanCirkel refererar till argumentet vid anropet till jämförArea. I det här fallet är cirkel2 argument. Cirkel radie = 1 mittpunkt = (0,0) Cirkel radie = 3 mittpunkt = (1,2) TestaCirkelMedPunkt

Metoden compareTo i Cirkel // ur klassen Cirkel public int compareTo(Object o){ Cirkel annanCirkel= (Cirkel) o; // explicit typkonvertering till Cirkel-referens double radieSkillnad = radie - annanCirkel.getRadie(); // skillnad i radie if (radieSkillnad>0) return 1; // aktuella objektet störst radie else if (radieSkillnad<0) return -1; // argumentet störst radie else return 0; // lika radie } ------------------------------------------------------------------------------------------------------------ // ur klassen TestaCirkelMedMittpunkt : if (cirkel1.compareTo(cirkel2)>0) { System.out.println("Cirkel 1 har "+Output.format(areaSkillnad,0,2)+…); } else if (cirkel1.compareTo(cirkel2)<0) { System.out.println("Cirkel 2 har "+Output.format(-areaSkillnad,0,2)+…); } else System.out.println("Cirkel 1 har samma area som cirkel 2."); // Körning av main-metodrn ger resultatet Cirkel 2 har 25.13 a.e. större area än cirkel 1.

Metoden equals och == Körresultat // cirkel3 ges samma storlek (radie=3) och läge (mittpunkt = (1,2)) som cirkel2 Cirkel cirkel3 = new Cirkel(3,1,2); // vad blir resultatet om Cirkel-objekten jämförs med ”==”? System.out.print("Skriver ut vad \"cirkel2==cirkel3\" ger för svar: "); System.out.println(cirkel2==cirkel3); // vad blir resultatet om Cirkel-objekten jämförs med ”Cirkel.equals”? System.out.print("Skriver ut vad \"cirkel2.equals(cirkel3)\" ger för svar: "); System.out.println(cirkel2.equals(cirkel3)); Körresultat Skriver ut vad "cirkel2==cirkel3" ger för svar: false Skriver ut vad "cirkel2.equals(cirkel3)" ger för svar: true Kommentar == kontrollerar om två variabler refererar till samma objekt. Det gör inte cirkel2 och cirkel3. equals-metoden i Cirkel-klassen kontrollerar om två variabler refererar till Cirkel-objekt med samma storlek och läge equals-metoden i Object-klassen utför samma test som ==. Detta kan du kontrollera genom att bortkommentera equals-metoden i Cirkel-klassen, kompilera Cirkel-klassen och sedan köra programmet.

Leta efter objekt i ett fält med hjälp av equals // LetaCirkel - main Cirkel[] cirklar=new Cirkel[3]; Cirkel cirkel=new Cirkel(1,0,0); initieraCirklar(); : -------------------------------------------- // LetaCirkel - leta if( cirklar[i].equals(cirkel) ) cirklar Cirkel Cirkel radie = 1 mittpunkt = (0,0) radie = 1 mittpunkt = (1,1) Cirkel radie = 2 mittpunkt = (0,0) Cirkel cirkel radie = 1 mittpunkt = (0,0) LetaCirkel

Arv Student ärver av Person (extends) Person String namn +getNamn:String +setNamn(String) +toString:String Student String skola +getSkola:String +setSamn(String) Student ärver alla instansvariablerna från Person. Student ärver alla instansmetoderna från Person Student skapar ny instansvariabel och nya metoder. Student överskuggar metoden toString Person Student

Arv En student är en person. Person pers1 = new Student("Anna Olsson", "Malmö högskola"); Person pers2 = new Person("Ylva Falk"); Student pers3 = new Student(”ingvar Ek”, ”Malmö högskola”); En referens till Student-objekt kan även lagras i en personlista. Person[] personLista = new Person[2]; personLista[0] = new Student("Anna Olsson","Malmö högskola"); personLista[1] = new Person("Ylva Falk");

Åtkomst Person pers1= new Student("Anna Olsson","Malmö högskola"); String personensNamn=pers1.getNamn(); // fungerar String personensSkola=pers1.getSkola(); // fungerar ej ! pers1 är referens till Person-objekt. Det går därför endast att anropa metoder som tillhör Person-klassen. Trots att objektet är ett Student-objekt. Men eftersom pers1 egentligen referererar till ett Student-objekt går det att typkonvertera till referens till Student: Student stud1=(Student) pers1; // typ konvertering String personensSkola=stud1.getSkola(); // fungerar

Polymorfism och dynamisk bindning Polymorfism betyder mångformighet. Person pers1 = new Student("Anna Olsson","Malmö högskola"); Person pers2 = new Person("Ylva Falk"); pers1.toString(); ger strängen ”class: f16.Student Namn: Anna Olsson Skola: Malmö högskola” pers2.toString(); ger strängen ”class: f16.Person Namn: Ylva Falk” När programmet körs undersöks det om klassen har en metod toString, har den det så körs den metoden annars undersöks superklassen, har den toString metoden så körs den. I exempeln ovan har objektet som pers1 refererar till en toString-metod. Det är denna som används. Dynamisk bindning, programmet vet inte förrän det körs vilken metod som ska anropas. (vilken av alla toString metoderna). Programmet vet inte vilken typ av Person person1 är, förrän körningen då ett objekt har skapats.

Klassen Student Vad händer när en konstruktor körs? public class Student extends Person{ private String skola; public Student() { this("okänd skola"); } public Student(String skola){ this.skola=skola; public Student(String namn,String skola){ super(namn); // andra metoder Vad händer när en konstruktor körs? Instansvariablerna nollställs (här skola = null) Anrop till egen konstruktor this(..) eller till superklass konstruktor super(..). Om anrop till super/this saknas då anropas super(). Det innebär att en konstruktor i superklassen alltid anropas. Initiering görs av instansvariabler. Koden i konstruktorn exekveras.

Exempel: Konstruktor körs public class Person { private String namn; public Person() { this("Namn okänt"); } public Person(String namn) { this.namn=namn; : public class Student extends Person{ private String skola; public Student(String skola){ this.skola=skola; Student stud1=new Student(”Malmö högskola”); Konstruktorn Student(”Malmö högskola”) anropas. Instansvariablen skola=null Konstrukton Person() anropas Instansvariablen namn=null Konstruktorn Person(”Namn okänt”) anropas Instansvariablen namn=”Namn okänt” Instansvariablen skola=”Malmö högskola”

Klasshierarki Person Student Anstalld Programstudent namn skola inskrivningsÅr arbetsgivare lön

Klassen ProgramStudent public class ProgramStudent extends Student { private String program; private int antagningsÅr; public ProgramStudent() { program="okänt program"; antagningsÅr=0; } public ProgramStudent(String namn, String skola, String program, int antagningÅr) { super(namn,skola); this.program=program; this.antagningsÅr=antagningsÅr; //andra metoder

TestaArv1 TestaArv1 public static void main(String[] args) { Person p1 = new Person("Anna Olsson"); Person p2 = new Person(); Anstalld a1 = new Anstalld("Olof Andersson","Eriksson",40000); Anstalld a2 = new Anstalld(); a2.setNamn("Ola Person"); ProgramStudent ps1 = new ProgramStudent("Lisa Eriksson", "MAH", "Programvaruteknik", 2004); Student s1=new Student(); System.out.println(p1); System.out.println(p2); System.out.println(a1); System.out.println(a2); System.out.println(ps1); System.out.println(s1); } Körresultat class f16.Person: Namn: Anna Olsson class f16.Person: Namn: okänt namn class f16.Anstalld: Namn: Olof Andersson class f16.Anstalld: Namn: Ola Person class f16.ProgramStudent: Namn: Lisa Eriksson Skola: MAH class f16.Student: Namn: okänt namn Skola: okänd skola TestaArv1

TestaArv 2 TestaArv2 public static void main(String[] args) { Person[] personLista = new Person[6]; personLista[0] = new Person("Anna Olsson"); personLista[1] = new Person(); personLista[2] = new Anstalld("Olof Andersson","Eriksson",40000); personLista[3] = new Anstalld(); personLista[3].setNamn("Ola Person"); personLista[4] = new ProgramStudent("Lisa Eriksson", "MAH", "Programvaruteknik", 2004); personLista[5] = new Student(); for (int i=0;i<personLista.length;i++){ System.out.println(personLista[i]); } Körresultat: class f16.Person: Namn: Anna Olsson class f16.Person: Namn: okänt namn class f16.Anstalld: Namn: Olof Andersson class f16.Anstalld: Namn: Ola Person class f16.ProgramStudent: Namn: Lisa Eriksson Skola: MAH class f16.Student: Namn: okänt namn Skola: okänd skola TestaArv2