Objektorienterad programmering Vi började med att programmera i main, sedan gick vi vidare till flera metoder i en klass. Nu är det dags för flera klasser. Objektorienterad programmering Relationer mellan klasser Arv Polymorfism Association Aggregat Målen med OOSU Att få en direkt modell av verkligheten (utnyttja de objekt som finns i verkligheten) Inkapsling, modulariserade system=stabila system Förändringsbara system Återanvändbara system (helt eller delvis) Enhetligt tankesätt Enhetlig terminologi Objektorienterad programmering Startade i Norge på 60-talet Norsk Regnesentral Ett språk för att simulera verkliga förlopp (SIMULA) Programmets funktionalitet skapas genom en spegling av de objekt som beskriver förloppet i verkligheten Karlstads Universitet, Johan 1
Klass I ett program kan flera objekt ha gemensamma attribut och metoder. Gemensamma egenskaper beskrivs generellt i en klass En klass är en mall som beskriver hur objekt ur den klassen ser ut Objektorienterade begrepp Abstrakt klass Konkret klass Fig draw (x, y) Abstrakt metod, ingen implementering Attribut Rektangel height width draw (x, y) Circle radius draw (x, y) Konkret metod Inkapsling Principen att skydda (kapsla in) attribut och metoder i ett objekt så att de inte kan påverkas utifrån. Man skapar vissa väldefinierade in och utgångar för kommunikation En förmedlare objekt Kollar indata Ålder kan inte vara negativt Gör förändringar Räknar upp värde innan man returnerar Karlstads Universitet, Johan 2
Exempel/inkapsling public class Kvadrat { private int isida; public int area () { return isida*isida; public int omkrets () { return 4*isida; public int getsida () { return isida; public void setsida (int b) { if(b>0) isida = b; else isida=0; setsida getsida isida Kvadrat isida area omkrets getsida setsida area omkrets Konstruktormetoden Då ett Javaobjekt skapas görs det mha. nyckelordet new KlassNamn(); KlassNamn() är ett anrop till en metod med samma namn som klassen (kallas konstruktor) denna metod måste anropas vid tillverkning av objekt går att definiera en egen konstruktor, används isf. om ingen egendefinierad används en defaultkonstruktor Om en egendefinierad konstruktor finns måste den användas Konstruktoranrop Vid egendefinierad konstruktor i superklass i subklass måste ett anrop till superklassens konstruktor ske manuellt super(param..); Vid användande av defaultkonstruktor i superklass anrop kommer att ske automatiskt innan subklassens konstruktor körs Karlstads Universitet, Johan 3
Arv Objekt (instanser) skapas (instansieras) ur en klass. (datatyp-variabel) En klass kan ärva egenskaper från en annan klass (gen.-spec.) Bil Superklass Last bil Person bil Subklasser Arv i Java Finns bara enkelt arv Och det skall man vara glad för Vad får man om man ärver hus och båt? Skapas med nyckelordet extends det går bara att ärva public och protected deklarerade metoder och attribut Object-klassen Alla klasser har via superklass eller direkt ett arv från superklassen Object ger möjlighet till gemensam referens till alla objekt i ett system den mest generella referensen Karlstads Universitet, Johan 4
Exempel/ arv class SuperKlass { public void skrivut() { System.out.println("Nu körs superklassens skrivut"); public void skriv() { System.out.println("Nu körs skriv"); class SubKlass extends SuperKlass { public void skrivut() { super.skrivut(); System.out.println("Nu körs subklassens skrivut"); public static void main(string [] args) { SubKlass s=new SubKlass(); s.skrivut(); s.skriv(); Polymorfism Förmågan att låta objekt skapade ur olika klasser hantera samma meddelande men på olika sätt. Det är mottagaren och inte den som frågar som avgör hur meddelandet ska behandlas. Polymorfism symb 0 1 2 3 4 5 Symbol Symbol Symbol Symbol Symbol Symbol draw void ritaalla (Symbol [] symb) { for (int i = 0; i < symb.length; i++) { symb[i].draw(); Karlstads Universitet, Johan 5
Exempel polymorfism (1/2) class Triangel extends Figur{ public void skriv(){ System.out.println("Triangel"); class Kvadrat extends Figur{ public void skriv(){ super.skriv(); /* OBS! Raden ovan har ej med exemplet att göra. Jag ville bara visa att super alltid funkar vid arv. */ System.out.println("Kvadrat"); Exempel polymorfism (2/2) class Figur{ public void skriv(){ System.out.println("Figur"); public void skriv2(){ System.out.println("skriv 2: Figur"); public static void main(string [] args) { Figur f=new Triangel(); f.skriv(); f=new Kvadrat(); f.skriv2(); f.skriv(); Aggregat Ett objekt som består av andra objekt har en aggregatsrelation Blir attribut i övergripande objekt Bil Däck Karlstads Universitet, Johan 6
Aggregat i Java class Aggregat{ private Tal t; public class Tal{ private int tal; public Aggregat(){ t=new Tal(); public void sett(){ t.settal(47); public int gett(){ return t.gettal(); public static void main(string [] args){ Aggregat a=new Aggregat(); a.sett(); System.out.println(a.getT()); public void settal(int t){ tal=t; public int gettal(){ return tal; Association Finns en statisk koppling mellan klasser dock används den dynamiskt mellan objekt Ett objekt känner annat objekt Per:Förare körbil TYG 133:Bil Association i Java public class Association { private Tal t; public Association(Tal tin){ t=tin; public void sett(){ t.settal(42); public int gett(){ return t.gettal(); public class Tal{ private int tal; public static void main(string [] args){ Tal t=new Tal(); Association a=new Association(t); a.sett(); System.out.println(a.getT()); public void settal(int t){ tal=t; public int gettal(){ return tal; Karlstads Universitet, Johan 7
Åtkomstmodifierare till fält och metoder private inkapsling, åtkomst enbart i objektet protected inkapsling, åtkomst enbart i objektet, kan ärvas public ej inkapsling, åtkomst överallt Paket åtkomst Metodmodifierare (1/2) final Metoden går inte att omdefiniera i subklasser synchronized Metoden innehåller synkroniseringslås, används vid flertrådade applikationer native Metoden är implementerad i annat programmeringsspråk Metodmodifierare (2/2) abstract Metoden saknar implementation, måste implementeras i subklasss static Metoden är en klassmetod som kan anropas direkt via klassnamnet, har endast tillgång till static deklarerade metoder och attribut (existerar fristående av objekt) public, private och protected inkapslingskontroll Karlstads Universitet, Johan 8