• No results found

Vad vi vet (forts) Mer om klasser. (Skansholm: Kapitel 3) Vad vi vet om objekt och klasser. Klassvariabler

N/A
N/A
Protected

Academic year: 2022

Share "Vad vi vet (forts) Mer om klasser. (Skansholm: Kapitel 3) Vad vi vet om objekt och klasser. Klassvariabler"

Copied!
8
0
0

Loading.... (view fulltext now)

Full text

(1)

Mer om klasser (Skansholm: Kapitel 3)

Sven-Olof Nyström Uppsala Universitet

17 juni 2005

Objectorienterad programmering Sida 1

Mer om klasser Sven-Olof Nyström

Vad vi vet om objekt och klasser

• En klass definierar en typ av objekt.

• Varje klass har

– ett antal fält (instansvariabler) – ett antal metoder

– en konstruktor

• Idé: Fälten beskriver den interna representationen.

Metoderna beskriver gränssnittet till omvärlden.

• Allt data är kopplat till ett visst objekt.

Frågor:

• Ska ett objekts data (fält) alltid vara tillgängligt utifrån?

• Ibland kan det vara naturligt att låta data leva oberoende av något objekt.

Exempel: Matematiska konstanter, räknare för antalet objekt i en klass, “globala datastrukturer”

• Ibland kan det vara naturligt att kunna använda en metod utan att ha skapat objekt i klassen.

Exempel: Matematiska bibliotek

Objectorienterad programmering Sida 3

Mer om klasser Sven-Olof Nyström

Klassvariabler

Exempel:

static int x;

En klassvariabel

• existerar i en version

• allokeras när klassen laddas in

• lever oberoende av om klassen har några objekt

(2)

Klassvariabler (forts)

class X {

static int counter = 0;

int number;

X () {

counter = counter + 1;

number = counter; }}

Objectorienterad programmering Sida 5

Mer om klasser Sven-Olof Nyström

Klassvariabler, testkörning

X a = new X();

X b = new X();

X c = new X();

System.out.println(c.number);

Ger variabeln c ordningsnummer 3.

Klassvariabler...

Exempel (Skansholm, sid 92):

En klass Konto med

• klassvariabel ’räntesats’ (gemensam för alla konton)

• instansvariabel ’saldo’ (varje konto har sitt eget saldo!)

Objectorienterad programmering Sida 7

Mer om klasser Sven-Olof Nyström

Klassmetoder, exempel class F {

static double m(double x, double y) { return (x + y) / 2;

} }

Anropet F.m(4.2, 9) ger resultatet 6.6.

• en klassmetod kan anropas även om klassen inte har några objekt

• en klassmetod har tillgång till klassvariabler men inte instansvariabler (varför inte?)

(3)

Jämför

• klassvariabler — instansvariabler

• klassmetoder — ’vanliga’ metoder

• klassvariabler — globala variabler (i tex C eller Pascal)

• klassmetoder — funktioner i C eller Pascal

Objectorienterad programmering Sida 9

Mer om klasser Sven-Olof Nyström

Inkapsling och synlighet, modell

public class V { private int x;

public void setX(int x1) { x = x1;

}

public int getX() { return x;

} }

• Vi kan inte komma åt instansvariabeln x direkt:

V v; v.x = ...

är inte tillåtet.

• Men med metoderna setX och getX kan värdet på x läsas och skrivas.

Regel: En instansvariabel, klassvariabel eller metod kan deklareras private. Då kan variabeln eller

metoden bara användas i klassen.

• Alternativet, public är default (nästan).

Objectorienterad programmering Sida 11

Mer om klasser Sven-Olof Nyström

Rekommendationer

• Ange alltid synlighet för variabler och metoder.

• Gör alla klass- och instansvariabler private.

(4)

Lite om paket i Java

• Ett paket (package) är en samling av klasser.

• I Javas standardbibliotek finns paket som System.out, java.io, java,lang, java.applet och java.swing.

• Varje klass har ett enkelt namn (som ges i dess definition), till exempel String, och ett fullständigt namn, till exempel java.lang.String.

Objectorienterad programmering Sida 13

Mer om klasser Sven-Olof Nyström

Paket (forts)

Man talar om att en viss klass ska ingå i ett visst paket med en deklaration

package mittPaket;

som ska stå först i filen.

Precis som en klass i Java (normalt) definieras i en klass med samma namn, måste alla .class-filer som ingår i ett visst paket finnas i en mapp (directory) med samma namn.

Paket i paket

Ett paket kan innehålla andra paket (subpaket).

Ett paket med namnet

mittPaket.ettAnnatPaket

är ett subpaket till paketet mittPaket. Dess klassfiler ska ligga i mappen ettAnnatPaket som i sin tur ska finnas i mappen mittPaket.

Objectorienterad programmering Sida 15

Mer om klasser Sven-Olof Nyström

Paket (forts)

För att komma åt en klass i ett visst paket kan man använda klassens fullständiga namn, tex

mittPaket.KlassNamn eller

mittPaket.ettAnnatPaket.KlassNamn

(Klassen KlassNamn kan vara definierad i båda paketen)

(5)

Man kan även importera en viss klass eller ett visst paket, tex

import mittPaket.KlassNamn eller

import mittPaket.ettAnnatPaket.KlassNamn för att importera en viss klass, eller

import mittPaket.* eller

import mittPaket.ettAnnatPaket.*

för att importera alla klasser inom ett visst paket.

Om man importerar två klasser med samma korta namn ger kompilatorn ett felmeddelande.

Objectorienterad programmering Sida 17

Mer om klasser Sven-Olof Nyström

Paket–ett (mycket) enkelt exempel

Filen muu/Hej.java package muu;

public void hej(){

System.out.println("Hej hopp");

} }

Paket–ett (mycket) enkelt exempel (forts)

Filen Hoo.java public class Hoo {

static void main(String[] arg){

muu.Hej x = new muu.Hej();

x.hej();

} }

Objectorienterad programmering Sida 19

Mer om klasser Sven-Olof Nyström

Paket–CLASSPATH

Om man har paket på olika platser i filsystemet kan man använda omgivningsvariabeln CLASSPATH (i

operativsystemet) för att tala om var de olika paketen finns.

I Unix kan man skriva

export CLASSPATH=.:/home/svenolof/minaPaket/

för att dels få Javasystemet att söka under nuvarande mapp (’.’) och under min mapp ’minaPaket’ (som förhoppningsvis innehåller mina paket.

(6)

Paket–synlighet

Om man inte anger synlighet för en klass som definieras inom ett paket kommer klassen att vara sylig för andra klasser inom samma paket.

På samma sätt: Om man inte anger synlighet för en instansvariablel eller en metod blir den synlig i det paket där klassen definieras.

Objectorienterad programmering Sida 21

Mer om klasser Sven-Olof Nyström

public paket protec private

Klassen ja ja ja ja

Annan klass (samma p.) ja ja ja nej

Subklass (annat paket) ja nej ja nej Annan klass (i annat p.) ja nej nej nej

Överlagring (overloading) av konstruktorer

En klassdefinition...

class Person { int ålder;

String namn;

[...]

}

Objectorienterad programmering Sida 23

Mer om klasser Sven-Olof Nyström

Java tillåter att en klass har flera konstruktorer.

Person (String n, int å) { ålder = å;

namn = n; }

Person(String n) { ålder = 65;

namn = n; }

Person (int å) { ålder = å;

namn = "Nisse"; }

(7)

Person () { ålder = 65;

namn = "Nisse"; }

Objectorienterad programmering Sida 25

Mer om klasser Sven-Olof Nyström

Överlagring av konstruktorer: Exempel Person x;

x = new Person ("Kalle", 42);

System.out.println("Personen "

+ x.namn + " är "

+ x.ålder + " år gammal");

x = new Person (42);

System.out.println("Personen "

+ x.namn + " är "

+ x.ålder + " år gammal");

Exempel: Överlagring (forts) x = new Person ();

System.out.println("Personen "

+ x.namn + " är "

+ x.ålder + " år gammal");

Körexempel

Personen Kalle är 42 år gammal Personen Nisse är 42 år gammal Personen Nisse är 65 år gammal

Objectorienterad programmering Sida 27

Mer om klasser Sven-Olof Nyström

överlagring av metoder class Ut {

static void skriv(String s) {

System.out.println("En sträng:"+ s); }

static void skriv(int x) {

System.out.println("Ett heltal:"+ x); }

static void skriv(double d) {

System.out.println("Ett flyttal:"+ d); }

static void skriv(int [] a) {

System.out.println("En array:"+a); }}

(8)

Överlagring av metoder: exempel Ut.skriv(42);

Ut.skriv("eh");

Ut.skriv(3.14);

Ut.skriv( new int[] {5,6,7});

Körexempel:

Ett heltal:42 En sträng:eh Ett flyttal:3.14 En array:[I@73d6a5

Objectorienterad programmering Sida 29

References

Related documents

Där anropade vi defaultkonstruktorn (den automatiskt genererade) när vi skapade objekt, samt så hade vi en funktion skriv_in_data( ) som vi använde för att lägga in ”värden”

Även om lärare i studien påpekat att de äldre eleverna lär sig av de yngre, går det att utläsa av tidigare forskning och denna studie att åldersblandade klassen

Lösningen på att kunna samla underlag och information om varje elev är att ta in eleverna i små grupper vilket är nödvändigt och Lisa som undervisar i engelska förklarar varför:

• Virtuella funktioner: vilken funktion som körs bestäms av vilket objekt funktionen anropats genom - dynamisk bindning. • Detta kallas polymorfi – beteendet bestäms

• Virtuella funktioner: vilken funktion som körs bestäms av vilket objekt funktionen anropats genom - dynamisk bindning. • Detta kallas polymorfi – beteendet bestäms

• Virtuella funktioner: vilken funktion som körs bestäms av vilket objekt funktionen anropats genom - dynamisk bindning. • Detta kallas polymorfi – beteendet bestäms

Klass 12, Icosandria, fler än 12 ståndare på ett ringformigt fäste Klass 13, Polyandria, fler än 12 ståndare tätt under pistillfästet Klass 14, Didynamica, 4 ståndare (2 längre

O m vi anknyter till Anderssons analysmodell så finns det mot bakgrund av d e n n a undersök- ning skäl att påstå att det föreligger faktiska skillnader i värderingar och