Föreläsning 4 Klasser Och Objekt
Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras Tips! En klass kan ses som en ritning. Den beskriver ett objekts form, men inte dess innehåll.
Klassdeklaration En klass börjar med en klass-deklaration Klassens innehåll ramas in med klammrar { } I klassen finns medlemmar Fält Metoder Innehåller även eventuellt arv och åtkomstmodifierare
Exempel På En Klass Skriv en klass som ska representera en geometrisk punkt. Klassen ska innehålla information om punktens x och y koordinat. Det ska finnas möjlighet att sätta nya värden på punktens koordinater samt att skriva ut punkten på skärmen. Punkt - xkord : int - ykord : int + setx(x : int) + sety(y : int) + print() : void UML
En klass kan aldrig deklareras som privat (private). Klassdeklaration Exempel public class Punkt { // Inledande vänsterklammer } // Avslutande högerklammer (åtkomstodifierare) class Namn (extends) Vissa modifierare kan uteslutas Notera! En klass kan aldrig deklareras som privat (private).
Fält (attribut) Representerar ett objekts information Lagras normalt som private Behöver andra tillgång till fält, skapa publika set- och get-metoder Kan deklareras vart som helst i klassdeklarationen (normalt överst)
Fält – Deklarera Åtkomstmodifierare Fälttyp Fältnamn private int xkord; Fältnamn Fälttyp Åtkomstmodifierare Exempel: private String namn; private int antalSidor; private int xkord; private double langd; private Button ok; private Person p1; private Punkt start; Fält kan vara primitiva typer eller objekt Skilj mellan fältvariabler och andra variabler. T.ex lokala variabler som deklareras i en metod.
Metoder Beskriver de tjänster som klassen tillhandahåller Innehåller den kod som verkligen utför något Går ej att deklarera metoder utanför en klass
Metoder – Deklarera Åtkomstmodifierare Returtyp Metodnamn Parametrar public void setX(int x) Parametrar Metodnamn Åtkomstmodifierare Returtyp Kodsatser inom matchande klamrar En metod är åtkomlig i hela den egna klassen. Dvs den kan anropas från alla andra metoder i klassen
Objekt Skapas av klassen Är en instans av klassen Kan skapas var som helst i applikationen Kan använda publika metoder och fält
Att Skapa Objekt Enda sättet att skapa är med new Eller Punkt p1 = new Punkt(); objref p1 Eller p1 : Punkt xkord = 0 ykord = 0 + setX(int) : void + setY(int) : void + print() : void Punkt p1; p1 = new Punkt(); new returnerar en referens som lagras i p1 p1 är av typen Punkt En variabel av primitiv typ lagrar värdet, en referensvariabel lagrar adressen till objektet .
Anropa Metoder Publika metoder kan anropas Anrop görs med punktnotation p1.setX(100); Punkt - xkord : int - ykord : int + setx(x : int) + sety(y : int) + print() : void PunktTest p1 : Punkt main(String[]): void setX(100) Använder 1..* 1..1
Försök om möjligt att använda så lokala variabler som möjligt. Fält – Räckvidd Fält på klassnivå finns åtkomlig i hela klassen (metoder) public class Rackvidd { private int tal1; public void metod1() { // tal1 finns tillgänglig här int tal2 = tal1 + 10: } public void metod2() { // tal1 finns tillgänglig här System.out.println(tal1); // men inte tal2 } } Försök om möjligt att använda så lokala variabler som möjligt. Fält i java har en räckvidd som sträcker sig genom hela klassen där den är deklarerad.
Fält – Initiera Tilldelar fältet ett initialvärde Kan ske vid deklarationen, i konstruktorn eller i annan metod Sker i den ordning fälten skrivs Fält initieras innan konstruktorn körs Finns inget initieringsvärde sätts primitiva fält till 0 och objekt-referenser till null
Initiering - Exempel public class Initiering { // Exempel på initiering av fält private String s1; // får värdet null private String s2 = ”Hello”; private char ch = s2.charAt(0); private int t; // får värdet 0 private final int x = 100; // kan ej förändras private double y = 3.14 * 500; private double z1 = x * y; private double z2 = metod1(); private Person p1 = new Person(); // OBS! Deklarationen av z1 hade inte kunnat stå före // deklarationen av x och y! }
Åtkomst Fyra olika åtkomstformer finns för fält och metoder public protected private paketåtkomst
public (publik åtkomst) Tillgänglig för alla Kan användas inom klassen Kan användas av de som skapat objekt av klassen Metoder är normalt publika
protected (skyddad åtkomst) Kan användas inom klassen Kan användas av subklasser (arv) Kan användas av klasser som ligger i samma paket Kan inte användas av de som skapat objekt av klassen Används normalt för fält i klasser som ska ärvas (superklasser)
private (privat åtkomst) Kan endast användas inom klassen Kan inte användas av de som skapat objekt av klassen Kan inte användas av subklasser Kan inte användas av klasser som ligger i samma paket Används normalt för fält i klasser (som inte ska ärvas)
Paketåtkomst Om ingen åtkomstmodifierare anges erhålls automatiskt paketåtkomst Åtkomlig (public) inom ett paket Ej åtkomlig (private) utanför paketet Bör inte användas Använd protected istället