Jonny Karlsson 15.1.2007 1 INTRODUKTION TILL PROGRAMMERING Föreläsning 8 (15.1.2007) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Avlusning Debugger (”avlusare”) Breakpoints Watch.
INTRODUKTION TILL PROGRAMMERING
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Klasser och objekt.
Programmeringsteknik
Klassarv och inkapsling
OOP Objekt-orienterad programmering
ObjektOrienterad analys och design. SVP Vt2009 Föreläsning nr 2, måndag 8 april kl Diskussion (kurshemsida): Om designuppgiften Om projektuppgiften.
Metoder i java Det finns två typer av metoder i java
Föreläsning 4 Python: mera om funktioner och parametrar
Arv.
Inkapsling.
Objektorienterad tänkande
Polymorfism.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Objektorienterad programmering i Java
Programmering i C# 3. Klasser.
Föreläsning 2, Kapitel 2 Att förstå klassdefinitioner Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
PROCESSPROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Klasser och objekt Klasser, objekt och instansvariabler
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Räckvidd och synlighet. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Synlighet (meddelandesändning) Det.
Arv.
Programmeringsteknik för Media1 & K1
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
INTRODUKTION TILL PROGRAMMERING
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 5 Klasser och instanser
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
1 Mer om metoder, variabler, klasser och objekt. Kursboken: - Kapitel 6 - Kapitel 8.
Presentationens avskrift:

Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata variabler -Klassmetoder

2Jonny Karlsson Klasser: konstruktorer När man skapar en ny instans/objekt av en klass med nyckel ordet new anropas alltid en metod som kallas konstruktor. Konstruktorn har alltid samma namn som klassen den är knuten till. Konstruktorn returnerar aldrig ett värde. Man behöver inte definiera en konstruktor för en klass. Om man inte definierar en konstruktor för en viss klass anropas alltid en default konstruktor när man skapar ett nytt objek/en ny instans av klassen. Default konstruktorn skapar helt enkelt bara ett nytt objekt/en ny instans av klassen.

3Jonny Karlsson Klasser: konstruktorer En egen definierad konstruktor behövs bl.a. i följande fall: Man vill initialisera instansen med data i samband med att den skapas Man vill att den skapade instansen skall få ett speciellt tillstånd genast då den skapas Ifall man definierar en konstruktor i en klass finns det inte längre någon default konstruktor för den klassen.

4Jonny Karlsson Klasser: konstruktorer Exempel: public class Bil { int arsmodell; String marke; public Bil(int a, String m)//konstruktor { arsmodell = a; marke = m; }} //En ny instans av klassen Bil skapas: Bil opel = new Bil(1999, ”Opel”);//anropar vår egen definierade konstruktor och //ger märke och årsmodell som argument

5Jonny Karlsson Klasser: klassvariabler Instansvariabler (som vi gick igenom förra veckan) är bundna till en viss instans av klassen, dvs. varje instans av en klass har egna instansvariabler. Med andra ord, instansvariabler bestämmer tillståndet hos en viss instans av klassen. Klassvariabler bestämmer tillståndet hos en klass som helhet, inte enskilt för varje instans. Dvs. alla instanser av en viss klass delar på en och samma klassvariabel. En klassvariabel deklareras liksom en instanvariabel inne i en klassdefinition men till skillnad från instansvariabeln markeras klassvariabeln med nyckelordet static. Klassvariabler brukar även kallas för statiska variabler. Statisk innebär här att variabeln endast förekommer i ett exempler. Klassvariabler och instansvariabler initialiseras automatiskt på samma sätt som tabellvärden. (Numeriska värden initialiseras till 0, strängar till NULL osv...)

6Jonny Karlsson Klasser: klassvariabler Exempel: Klassvariabler behövs t.ex. om man vill hållla reda på hur många instanser av en viss klass som skapas under programmets gång. Man vill t.ex. i föregående bil-exempel hålla reda på hur många bilar som skapas. public class Bil { int arsmodell;//instansvariabel String marke;//instansvariabel static antalBilar;//klassvariabel public Bil(int a, String m)//konstruktor { antalBilar++;//värdet i antalBilar inkrementeras för varje gång arsmodell = a;//en ny instans av klassen Bil skapas. marke = m; }} //En ny instans av klassen Bil skapas: Bil opel = new Bil(1999, ”Opel”);//anropar vår egen definierade konstruktor och //ger märke och årsmodell som argument

7Jonny Karlsson Klasser: klassvariabler En klassvariabel är åtkomlig både via en instans/objekt av en klass eller också direkt via klassnamnet. Bil opel = new Bil(1999, ”Opel”);//en ny instans av klassen bil skapas System.out.println(”Så här många bilar har skapats: ” + Bil.antalBilar); //eller System.out.println(”Så här många bilar har skapats: ” + opel.antalBilar); EX

8Jonny Karlsson Klasser: instansmetoder Som vi tidigare konstaterat, bestäms tillståndet hos en instans av en viss klass med instansvariabler. Ett objekt/en instans av en klass har normalt inte endast olika tillstånd utan även ett visst beteende. M.a.o instanser av klasser kan ofta även utföra vissa operationer. Dessa operationer definieras som instansmetoder. En instansmetod är helt enkelt en helt vanlig metod som definieras inne i en klassdefinition. En metod definierad inne i en klass som inte är markerad som static, är en instansmetod.

9Jonny Karlsson Klasser: instansmetoder Exempel public class Bil { int arsmodell;//instansvariabel String marke;//instansvariabel static antalBilar;//klassvariabel public Bil(int a, String m)//konstruktor { antalBilar++;//värdet i antalBilar inkrementeras för varje gång arsmodell = a;//en ny instans av klassen Bil skapas. marke = m; } public void presentera()//instansmetod { System.out.println(”Marke: ” + marke); System.out.println(”Arsmodell: ” + arsmodell); }}

10Jonny Karlsson Klasser: instansmetoder En instansmetod skall alltid vara markerad som public. Om en instansmetod är markerad public (offentlig) betyder det att den är åtkomlig från andra klasser. Om man inte ger någon markering alls åt en metod blir den automatiskt public. En instansmetod är åtkomlig från en annan klass precis på samma sätt som en instansvariabel dvs med punktnotation. Exempel: Bil opel = new Bil(1999, ”Opel”); opel.presentera();

11Jonny Karlsson Klasser: privata variabler En instansvariabel blir automatiskt public (offentlig) om man inte anger någon markering för den (precis som för instansmetoder). En offentlig instansvariabel kommer man åt från vilken klass som helst genom att först skapa en instans/ett objekt av klassen och sedan använda punktnotation (som i övning 16 och övning 17) Vanligtvis brukar man markera instansvariabler som private (privata) vilket betyder att variablerna inte kan uppdateras från övriga klasser förutom den klass variabeln är deklarerad i. Orsaken till att man föredrar att använda privata instansvariabler är att man vill kontrollera en ”användares” användning av variabeln för att förhindra felaktiga värden i dessa variabler.

12Jonny Karlsson Klasser: privata variabler Exempel: Vi antar att vi har en klass som definierar en person. Personen skall ha egenskapen ålder. Vi vill kontrollera uppdateringen av ålder på så vis att om man från en annan klass försöker ge ett negativt värde eller ett värde som är över 120 så tolkas det som orimligt och godkänns inte. Då väljer vi att markera instansvariabeln ålder som private och definierar i stället en instansmetod via vilken man kan uppdatera ålder variabeln. I instansmetoden ”uppdateraAlder” har vi satt in en kontroll för inmatning av korrekt ålder. Se källkoden på nästa sida 

13Jonny Karlsson Klasser: privata variabler Exempel (fortsätter): class Person { private int alder;//privat instansvariabel public void uppdateraAlder(int a)//offentlig instansmetod via vilken man {//kan uppdatera ålder-variabeln if(a 120)//om felaktig ålder ges visas det ett {//felmeddelande System.out.println(”Felektig alder!!”); } elsealder = a; }} //Så här skulle man uppdatera en persons ålder från en annan klass Person ville = new Person(); ville.uppdateraAlder(55);

14Jonny Karlsson Klasser: privata variabler Exempel 2: Det är också oftast skäl att markera klassvariabler (statiska variabler) som private. I exemplet där vi hade en klassvariabel som höll reda på hur många bilar som skapats, se koden nedan, skulle det vara orimligt att göra uppdatering från andra klasser möjligt. Detta p.g.a. att det då lätt kommer ett felaktigt värde i variabeln antalBilar. Då väljer vi i stället att markera klassvariablen antalBilar som private och låter variabeln uppdateras i konstruktorn, dvs varje gång en ny instans av klassen skapas. public class Bil { int arsmodell;//instansvariabel String marke;//instansvariabel private static antalBilar;//klassvariabel public Bil(int a, String m)//konstruktor { antalBilar++;//värdet i antalBilar inkrementeras för varje gång arsmodell = a;//en ny instans av klassen Bil skapas. marke = m; }}EX

15Jonny Karlsson Klasser: klassmetoder Metoder kan liksom variabler vara markerade som static. En statisk metod definierad inne i en klass är gemensam för alla instanser/objekt som skapas av klassen. Dvs. till skillnad från instansmetoder finns det bara ett enda exemplar av en statisk metod. En statisk metod kallas för klassmetod.

16Jonny Karlsson Klasser: klassmetoder Exempel: Vi återgår igen till Bil-exemplet på föregående sida där vi hade en statisk variabeln antalBilar. Eftersom denna klassvariabel är privat är den ej åtkomlig från andra klasser. Fast man inte vill att det ska gå att uppdatera variablen från en annan klass kan det däremot finnas behov av att kontrollera variabelns värde från en annan klass. Då behöver vi en metod via vilken man kan se på innehållet. Eftersom variabeln antalBilar är statisk är det ju helt onödigt att införa en instansmetod som visar innehållet. Vi definierar därför istället en statisk metod för ändamålet: public class Bil { int arsmodell;//instansvariabel String marke;//instansvariabel private static int antalBilar;//klassvariabel public static int getAntal()//klassmetod { return antalBilar;//returnerar värdet i antalBilar }}

17Jonny Karlsson Klasser: klassmetoder För klassmetoder gäller liksom för klassvariabler att de kan användas med antingen en instans av klassen eller klassen själv som syfting: Bil opel = new Bil(); //instansmetoden getAntal kan antingen anropas via instansen/objektet: System.out.println(”Antal bilar: ” + opel.getAntal()); //eller via själva klassen: System.out.println(”Antal bilar: ” + Bil.getAntal());

18Jonny Karlsson Klasser: klassmetoder Det är även vanligt att man definierar klasser som endast innehåller statiska variabler. Orsaken till att man definierar sådana klasser är vanligen att man vill samla ihop en mängd operationer (metoder) som hör till en viss kategori. T.ex. klassen input innehåller metoder för inläsning av värden av olika datatyper från tangentbordet. Alla dessa metoder är statiska och däför anropar vi dem genom att använda klassnamnet (input) som syfting: input.readInt();input.readFloat();input.readString();......

19Jonny Karlsson Sammandrag över nyckelorden för ”åtkomst” privateVariabeln/metoden är endast åtkomlig från innevarande klass. publicVariabeln/metoden är åtkomlig från andra klasser. staticVariablen/metoden är statisk, dvs. det finns endast ett exemplar av den och även om flera objekt/instanser av klassen där den statiska variabeln/metoden är definierad skapas kopieras inte variablen utan den är gemensam för alla instanser/objekt.