Presentation laddar. Vänta.

Presentation laddar. Vänta.

Klassarv och inkapsling

Liknande presentationer


En presentation över ämnet: "Klassarv och inkapsling"— Presentationens avskrift:

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

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 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 Klassarv

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 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 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 Ö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 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.ras = ras; } // Konstruktor som tar två argument

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 Kodexempel fortsättning
public String visaRas() { return ras; } public int visaÅlder() { return ålder; }//Hund

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 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 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 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 Polymorfism Medan den i klassen Cirkel överskuggas enligt:
public double visaArea() { return bredd * höjd; }//visaArea i klassen Rektangel Medan den i klassen Cirkel överskuggas enligt: return PI * radie * radie; }//visaArea i klassen Cirkel

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

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 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 Slut för idag! Tack för idag!


Ladda ner ppt "Klassarv och inkapsling"

Liknande presentationer


Google-annonser