Presentation laddar. Vänta.

Presentation laddar. Vänta.

1 ITK:P1 Föreläsning 3 Klassarv och inkapsling DSV Marie Olsson.

Liknande presentationer


En presentation över ämnet: "1 ITK:P1 Föreläsning 3 Klassarv och inkapsling DSV Marie Olsson."— Presentationens avskrift:

1 1 ITK:P1 Föreläsning 3 Klassarv och inkapsling DSV Marie Olsson

2 2 En programmeringsprincip Divide and Conquer En urgammal princip Att dela upp koden i hanterbara delar Ju större program, desto större behov av modularisering Ett system delas upp i klasser Klasser delas in i paket ( package)

3 3 Klassarv En basklass håller reda på gemensamma saker och kodupprepning undviks En subklass innehåller de specifika delar som innebär en utökning av basklassen I Java anges arv genom det reserverade ordet extends public class Cykel extends Fordon

4 4 Klassarv

5 5 Inkapsling och datagömning Inkapsling = Encapsulation Datagömning = Information hiding Data kapslas in och göms för andra klasser Data nås genom publika åtkomstmetoder private int x; public int getX(){ return x; }

6 6 Inkapsling och datagömning På samma sätt bygger man även metoder som kan ändra värdet på instansvariabler: private int x; public void setX(int i){ x = i; } Accessmetoder Inspektorer – Mutatorer

7 7 Metoder Ett annat sätt att dela upp koden i lagom stora enheter som utför en uppgift är att skriva metoder. Metoder har en returtyp (eller void) Metoder kan ta argument: public int addera (int a, int b) { return a + b; }//en rätt onödig exempelmetod

8 8 Överlagring Metoder och konstruktorer i samma klass med samma namn MEN med olika parameterlistor Exempel med konstruktorer: public Hund() {} public Hund(String namn) {} public Hund(String namn, String ras) {} public Hund(String namn, String ras, int ålder) {}

9 9 Kodexempel class Hund { private String namn, ras; private int ålder; public Hund(String namn) { this.namn = namn; } // Konstruktor som tar ett argument public Hund(String namn, String ras) { this.namn = namn; this.ras = ras; } // Konstruktor som tar två argument

10 10 Kodexempel fortsättning public Hund(String namn, String ras, int åld) { this.namn = namn; this.ras = ras; ålder = åld; } // Konstruktor som tar tre argument public String visaNamn() { return namn; }

11 11 Kodexempel fortsättning public String visaRas() { return ras; } public int visaÅlder() { return ålder; } }//Hund

12 12 Kodexempel fortsättning public class F3_exempel { public static void main(String[] args) { Hund hund1 = new Hund("Fido"); System.out.println("Hundens namn är: " + hund1.visaNamn() + " \n"); Hund hund2 = new Hund("Tom","tax"); System.out.println("Hundens namn är: " + hund2.visaNamn()); System.out.println("Hundens ras är: " + hund2.visaRas() + " \n");

13 13 Kodexempel fortsättning Hund hund3 = new Hund("Bellman","schäfer",11); System.out.println("Hundens namn är: " + hund3.visaNamn()); System.out.println("Hundens ras är: " + hund3.visaRas()); System.out.println("Hundens ålder är: " + hund3.visaÅlder()); }//main }//F3_exempel

14 14 Polymorfism polymorfism = många kroppar I en klasshierarki kan det i de olika klasserna finnas metoder med samma namn och samma signatur MEN med olika metodkroppar Objektorienterade programmeringsspråk har inbyggda mekanismer för dynamisk bindning Rätt metod körs automatiskt när programmet exekveras

15 15 Polymorfism I en abstrakt basklass: public abstract class Figur Finns det en abstrakt metod: public abstract double visaArea(); I den ärvande klassen Rektangel: public class Rektangel extends Figur har metoden implementerats så att den passar för att räkna ut arean hos just en rektangel

16 16 Polymorfism public double visaArea() { return bredd * höjd; }//visaArea i klassen Rektangel Medan den i klassen Cirkel överskuggas enligt: public double visaArea() { return PI * radie * radie; }//visaArea i klassen Cirkel

17 17 Några reserverade ord i Java Reserverade ord som är bra att känna till: this syftar på den egna klassen supersyftar på basklassen abstract förhindrar instansiering finalförhindrar vidare arv staticmarkerar klasstillhörighet inte instanstillhörighet

18 18 Klassvariabler De flesta attribut är instansvariabler Alla objekt får då egna variabler Det finns dock undantagsfall då objekten i en klass behöver ha gemensamma klassvariabler I Java markeras detta med ordet static och en klassvariabel kan deklareras enligt: private static int klassVariabel;

19 19 Klassvariabler En vanlig användning är när klassen behöver en räknare: public class Katt { private static int kattNummer; public Katt(){ ++kattNummer; }//konstruktor }

20 20 Slut för idag! Tack för idag!


Ladda ner ppt "1 ITK:P1 Föreläsning 3 Klassarv och inkapsling DSV Marie Olsson."

Liknande presentationer


Google-annonser