Till skillnad från Pascal/C/C++ finns det inget globalt scope där exempelvis main finns deklarerad utan enbart objekt.

Relevanta dokument
Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

DAT043 - Föreläsning 7

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Objektorientering: Lagring, räckvidd och livstid

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

JAVA Mer om klasser och objektorientering

Föreläsning 5-6 Innehåll

Objektorienterad Programmering (TDDC77)

Klasshierarkier - repetition

Classes och Interfaces, Objects och References, Initialization

Objektorientering: Lagring och livstid

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Objekt och klasser - Introduktion

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Modeller, Objekt och Klasser

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Laboration 1 - Grunderna för OOP i Java

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Föreläsning REPETITION & EXTENTA

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Java, klasser, objekt (Skansholm: Kapitel 2)

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Objektorienterad Programmering (TDDC77)

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDD78 Objektorientering: Lagring och livstid

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Programmering för språkteknologer II, HT2011. Rum

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

TDDC77 Objektorienterad Programmering

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering i Java

Parameteröverföring. Exempel. Exempel. Metodkropp

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Lösningsförslag övning 2.

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Lektion 12. Talbas - Radix. Funktioner. Primitiva datatyper. Procedurer. Att anropa en metod. Repetition Genomgång av gammal tenta

Objektorienterad Programmering (TDDC77)

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Föreläsning 7: Objektorienterad programmering - introduktion

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

OOP Objekt-orienterad programmering

Introduktion till arv

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

TDDC77 Objektorienterad Programmering

TENTAMEN OOP

Dynamisk bindning och polymorfism

TUTORIAL: KLASSER & OBJEKT

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

TENTAMEN OOP

Föreläsning 13 Innehåll

Enkla variabler kontra referensvariabel

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Transkript:

3 Klasser och objekt 3.1 Objektorientering Java är (nästan) helt objektorienterat - det saknas stöd för någon annan form av programstrukturering (förutom de inbyggda typerna int, char, float etc. som inte är klasser) Till skillnad från Pascal/C/C++ finns det inget globalt scope där exempelvis main finns deklarerad utan enbart objekt. C++ globalt Objekt Java Objekt i flera nivåer main() main() Ett program är (vid runtime) uppdelat i ett antal objekt. 3.2 Objektets delar Ett objekt innehåller: ett antal fält, (kallas även attribut eller variabler) vilka representerar objektets lagrade data ett antal metoder, vilka representerar objektets beteende Ett fält är av en viss typ och innehåller ett värde av denna typ. En metod är en serie kodsatser som utför någon form av bearbetning på objektet.

3.3 Objektens roll Ett objekt representerar någon form av begrepp. Objekt kan vara små, t.ex. en enskild variabel som kan skrivas och läsas. Objekt kan vara stora, t.ex. en hel applikation som utformats som ett enda stort objekt. Objekt kan vara "tekniska", t.ex. representera ett fönster på bildskärmen eller en kommunikationsförbindelse. Objekt kan vara verksamhetsspecifika, t.ex. representera ett bankkonto eller en faktura. 3.4 Operationer på objekt Avläsa objektets tillstånd ( getters ) Förändra objektets tillstånd ( setters ) Generellt sett kan man dela in ett objekts operationer i fyra olika kategorier: constructors skapar nya instanser av en klass destructors tar bort/förstör instanser av en klass. transformers påverkar objektets tillstånd accessors läser av objektets tillstånd (predicates) booleska frågor om objektets tillstånd. 3.4.1 Exempel: Stack constructors Stack() // skapar ny stack med defaultstorlek Stack(int size) // skapar ny stack med size som storlek destructor sköter systemet om. Normalt sett vill man här deallkokera minne och liknande, men det tar java run-time-system om. transformers push(anelement) // lägger till ett element överst på stacken. pop() // tar bort översta elementet på stacken. accessors top() // läser av översta elementet på stacken. isempty() //svarar på frågan om stacken är tom eller inte isfull() //svarar om stacken är full eller inte 3.5 Fördelar med OO programmering Objektorienterad programstrukturering har fördelen att olika programdelar får en lösare koppling till varandra med tydliga gränssnitt (man slipper monolitiska program). Data får en tydlig koppling till den programkod som bearbetar data.

Det är viktigt att objekten väljs så att de modellerar "verkliga" begrepp och att de blir autonoma. 3.6 Klasser Beskrivningen av en viss typ av objekt kallas för klass. Klassen beskriver vilka fält och metoder som objekt av denna klass ska ha. När ett exemplar av en viss objektklass skapas (instansieras) så allokeras fysiskt minne för objektets data. Ett objekt är alltså en unik förekomst av en viss klass. En klass är en mall för hur objekt från den klassen kommer att se ut och kunna bete sig. klass objekt 3.7 Statiska metoder och data Data och metoder som är deklarerade som static delas av alla objekt och kan sägas vara egenskaper hos klassen snarare än hos klasserna. En typisk statisk metod är main som (givetvis) måste kunna anropas innan det finns några objekt eftersom den har till uppgift just att skapa (minst) ett objekt och dra igång körningen av programmet. För applets finns inte detta behov eftersom själva HTML-dokumentet tjänar samma uppgift som main gör i en applikation.

3.8 Kommunikation mellan objekt Objekten i ett program kommunicerar genom att de anropar metoder i varandra. Objekten kan också göras så att de direkt kan läsa och skriva varandras fält, men detta bör undvikas eftersom objekten då inte har kontroll över sitt data. Istället ska data läsas och skrivas via metoder där objektet kan göra nödvändiga kontroller av vad som läses och skrivs. All data ska vara privat. För att ni ska få låta er data i klasserna vara public ska ni kunna motivera det mycket väl. Det enda som får vara public i en klass normalt sett är motsvarigheten till konstanter i Pascal/C/C++, dvs variabler som är static final exempelvis static final int SIZE=200; 3.9 Klassdeklaration [public] [abstract final] class <ClassName> [extends SuperClass] [implements InterfaceList] { [Constructors] //Initialiseringsmetod(er), [Fields] //fält och [Methods] //metoder }//i godtycklig ordning ClassModifiers public abstract final public: åtkomlig utanför paketet den deklareras i abstract: innehåller metoder utan kod (abstrakta metoder) final: får ej subklassas (ärvas) Nyckelordet extends anger arv. Maximalt en klass kan ärvas, kallad basklass. Nyckelordet implements anger arv av s.k. gränssnitt, vilket är en speciell typ av klass (nämligen en en helt abstrakt klass som inte innehåller någon kod och inga variabla fält). Man kan ärva flera gränssnitt; de räknas upp i en kommaterad lista. 3.10 Fältdeklarationer och typer [FieldModifiers] Type VariableDeclarators;

FieldModifiers: <ingen accessmodifierare>: åtkomlig inom paketet public: åtkomlig utanför paketet protected private: åtkomlig inom klassen endast (rekommenderas!) final: värdet kan ej ändras; ges i deklarationen/konstr static: klassvariabel (endast en gemensam instans) transient: värdet bevaras ej vid lagring av objektet volatile: vid trådning: måste synkas med masterkopia (ordningen spelar ingen roll ) 3.10.1 Primitiva typer: boolean byte (-128 to 127, inclusive) short (-32768 to 32767, inclusive) int (-2147483648 to 2147483647, inclusive) long (-9223372036854775808 to 9223372036854775807, incl.) char ('\u0000' to '\uffff' inclusive; UNICODE-represent.) float (single-precision 32-bit format IEEE 754) double (double-precision 64-bit format IEEE 754) 3.10.2 Referenstyper ("pekare" till objekt): <ClassName> <InterfaceName> <Typ>[] // Vektor (eller array), kan vara flerdimensionell 3.11 Metoddeklarationer [MethodModifiers] ResultType MethodDeclarator [throws ExceptionClassList] MethodBody MethodModifiers: <ingen accessmodifierare>: åtkomlig inom paketet public: åtkomlig utanför paketet protected private: åtkomlig inom klassen endast abstract: endast metodens signatur; ingen exekverbar kod static: klassmetod ; kan ej anropas i ett objekt

final: metoden kan ej omdefinieras i subklasser synchronized: metoden körs alltid färdigt i en tråd native: en metod som skrivs i ett annat språk (ordningen spelar ingen roll ) ResultType: <PrimitiveType> <ReferenceType> void MethodDeclarator: metodnamn ( [FormalParameterList] ) MethodBody: { <satser> } ; // om metoden är abstract eller native 3.12 Objekt När en klass är definierad så kan man skapa objekt (instanser av klassen) var som helst i applikationen där klassen är åtkomlig, i klassens egna metoder eller i andra klassers metoder. Objekt skapas med operatorn "new": MinKlass mittobjekt = new MinKlass(); eller MinKlass mittobjekt; mittobjekt = new MinKlass(); //referensvariabel skapas //objekt skapas mittobjekt är namnet på en referensvariabel som kan referera till objekt av klassen MinKlass. Det som står efter new, dvs. MinKlass() är namnet på en speciell metod i klassen som kallas konstruktor (som beskrivs strax). 3.13 Konstruktormetoden En konstruktor är en speciell metod som används för att initialisera ett nyskapat objekt. Den anropas när ett objekt skapas med new och aldrig annars.

Man kan deklarera ingen, en eller flera konstruktorer i en klass. Om man inte deklarerar någon konstruktor så skapar kompilatorn en defaultkonstruktor som anropar superklassens konstruktor utan några parametrar. För konstruktorn gäller: den (de) har samma namn som klassen saknar returtyp (men man får ej använda modifieraren void ) deklareras som public Om det finns flera konstruktorer så måste de ha olika antal och typer på parametrarna. Vilken av konstruktorerna som används bestäms av vilka parametrar som ges vid skapandet av objektet. Detta kallas att man har överlagrat konstruktorer (överlagra=overload). Konstruktorerna kan anropa varandra med this() och kan anropa superklassens konstruktor med super(). 3.13.1 Konstruktordeklarationer [ConstructorModifiers] <ClassName> ([FormalParameterList]) [throws ExceptionClassList] ConstructorBody ConstructorModifiers: <ingen accessmodifierare>: instanser skapas inom paketet public: instanser kan skapas från andra paketet protected private: instanser kan bara skapas inifrån egna klassen ConstructorBody: { [this([args]]; [super([args])]; [<satser>] } //anropa en annan konstruktor i klassen //anropa konstruktor i superklassen

3.14 Att referera till objekt Java: ett sätt objreference attr1 method1() objreference.attr1 objreference.method1() C++: tre sätt! objpointer objreference objname attr1 method1() objname.attr1 objname.method1() (*objpointer).attr1 (*objpointer).method1() objreference->attr1 objreference->method1() 3.15 Mainmetoden Main-metoden är den speciella metod som anropas när man startar ett java-program. Main ska se ut på följande sätt: public static void main(string[] args) { <satser> } Main-metoden har alltid följande modifierare: public för att vara åtkomlig för alla static för att kunna anropas även om inga objekt finns void för att inte returnera något värde Inparametern är en sträng-vektor som innehåller alla argument som man vill skicka med när man startar programmet. Vad satserna i main-metoden typiskt gör är att skapa de initiala objekt som behövs för att programmet ska komma igång. När main-metoden har exekverat färdigt avslutas programmet.

3.16 Static: klassmedlemmar Medlemmar (fält och metoder) som deklareras static kommer bara att finnas i ett exemplar för hela klassen och alla objekt av klassen delar på dessa. Statiska fält brukar kallas klassvariabler och statiska metoder klassmetoder fält metoder static: klassnivå K1 kvar1 K1 kvar2 main() kmetx() K2 K1 K2 kvarr kvary() K2 ej static: instansnivå 3 instanser av K1 K1 ivar1 ivar2 ivar3 K2 ivars ivart ivaru imet1() K1 imet2() K1 imetm() K2 3.17 Sju olika sorts variabler i Java En variabel motsvaras i runtime av ett minnesutrymme i datorn där det kan lagras ett värde som överensstämmer med den typ som variabeln är deklarerad med, dvs. ett värde av primitiv typ eller referenstyp. Man kan identifiera sju olika sorts variabler beroende på i vilket sammanhang de deklareras. I runtime existerar variablerna bara under en viss tid. Variabelsort Deklarerad existerar Klassvariabel i en klass med static när klassen är laddad Instansvariabel i en klass, ej med static när objektet existerar Arraykomponent i en arraydeklaration när array-objektet existerar Metodparameter i metodens signatur när metoden exekverar Konstruktor parameter i konstruktorns signatur när konstruktorn exekverar Exception Lokal variabel i ett block eller for-sats hanterar paramter i en catch-sats när catch-blocket exekverar när blocket/for- satsen exeverar

3.18 Minneshantering i Java: Garbage Collection I Java är det systemet som ansvarar för att hantera minnet. Det finns en skräpsamlare som avallokerar objekt när de inte längre används. Exekveringsmiljön håller alltså reda på alla referenser till alla objekt. När alla referenser är borta så avallokeras objektet vid lämplig tidpunkt. Avallokeringen av oanvända objekt sker typiskt när det uppstår minnesbrist eller när programmet termineras. En destruktor liknande den som finns i C++ går alltså inte att skapa själv. Om man vill kan man lägga in en speciell metod med namnet finalize i sina klasser. Denna metod anropas av systemet när objektet avallokeras, vare sig det sker under programmets gång eller vid terminering. I finalize-metoden kan man lägga diverse avinitaliseringar. Finalize-metoden behövs inte ur systemsynpunkt. Använd inte i första taget 3.19 Klass-filer Följande regler skall följas i varje källkodsfil där en klass deklareras: Filnamn: KlassNamn.java Endast en klass i varje fil Klassen kan ej delas upp på flera filer Filen ska inledas med kommentarer som säger vad klassen gör Paketdeklaration som säger i vilket paket klassen ska ingå (endast om paketuppdelning tillämpas) Importdeklarationer som talar om vilka paket som används i klassens implementation Deklaration av klassen med samtliga dess fält och metoder. Implementationen av metoderna görs direkt i samband med deklarationen.