F3 Klasser och objekt. ID1004 Objektorienterad programmering Fredrik Kilander

Relevanta dokument
F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

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

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

OOP Objekt-orienterad programmering

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

JAVA Mer om klasser och objektorientering

Lösningsförslag övning 2.

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

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

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

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

Arrayer. results

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

(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

DAT043 - Föreläsning 7

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Java, klasser, objekt (Skansholm: Kapitel 2)

Objektorienterad programmering

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

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programmering (TDDC77)

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Classes och Interfaces, Objects och References, Initialization

Objekt och klasser - Introduktion

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

Enkla variabler kontra referensvariabel

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

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

Tvådimensionella fält

JAVAUTVECKLING LEKTION 11

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

TENTAMEN OOP

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

Objektorienterad Programmering DAT043

Typkonvertering. Java versus C

Lösningar för tenta 2 DAT043,

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

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

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

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

Objektorientering: Lagring, räckvidd och livstid

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

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

TENTAMEN OOP

Föreläsning 9: Arv och UML

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

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

Laboration 1 - Grunderna för OOP i Java

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Föreläsning 3-4 Innehåll

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

1 Egna klasser. 1.1 En punkt-klass

Tentamen OOP

Lösningsförslag: Instuderingsfrågor, del A

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

TENTAMEN OOP

Malmö högskola 2008/2009 CTS

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

Transkript:

F3 Klasser och objekt ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se

KLASSER OCH OBJEKTORIENTERAD PROGRAMMERING (OOP)

Allmänt om klasser och OOP Klasser och deras instanser framställs ibland som simpla databehållare Klasser sammanför data med metoder för hantering av data Detta är styrkan med objektorienterad programmering

Simpla databehållare Pelle Persson 1977 Stina Rimlich 1991 Eva Epstein 1961 public class Person { public String name; public int birthyear; }

Simpla databehållare Fälten name och birthyear är oskyddade och kan manipuleras fritt av alla programmerare som arbetar med dem. public class Person { public String name; public int birthyear; }

Klassen Person Med hjälp av metoder (kod) i klassen Person, kan vi bättre skydda data och garantera dess kvalité. name birthyear Person Person(String name) Person(String name, int birthyear) String getname() void setname(string name) int getbirthyear() int getage() String tostring() Se filen Person.java

Allmänt om klasser och OOP Inte sällan används klasser och instanser för att följa en viss modell, till exempel: naturliga element i ett problem komponenter i grafiska gränssnitt databasstruktur händelsestyrd programmering

KLASSENS VARIABLER OCH METODER

Instansvariabler och metoder public class Example { int x; int y; String title; Instansvariabler skapas med objektet. De är tillgängliga så länge objektet är tillgängligt. }

Metoddeklaration <åtkomst> <egenskap> <returdatatyp> <namn> ( <parameterlista> ) * { <kropp> } public (default) protected private (none) static abstract void <datatyp> <datatyp> <namn> [, ] int getcount() { } private double bar(double a, double b) { } public static void main (String [] args) { } (*) <exception-declaration-list>

Metodens kropp Metodens kropp är ett s k block. Ett block inleds med { och avslutas med }. Inuti blocket finns en sekvens av: Lokala variabler Programsatser: Beräkning av uttryck och tilldelning av variabel Konstruktioner för iteration och selektion

Instansvariabler och metoder public class Example { int x; String title; void swapxy() { int temp; temp = x; x = y; y = x; } Instansvariabel Instansvariabel Metoddeklaration Lokal variabel uttryck och tilldelning uttryck och tilldelning uttryck och tilldelning } void settitle(string t){ title = t; } Metoddeklaration, lokal variabel(t) uttryck och tilldelning

Instansvariabler och metoder public class Example { int x, y; String title; Instansvariabler är på samma nivå som metoder i klassen. De skapas med objektet. void swapxy() { int temp = x; x = y; y = x; } } void settitle(string t){ title = t; }

Instansvariabler och metoder public class Example { int x, y; String title; void swapxy() { int temp = x; x = y; y = temp; } Instansvariabler är på samma nivå som metoder i klassen. De skapas med objektet. Lokala variabler (temp, t) i metoder existerar bara i blocket där de deklarerats. } void settitle(string t){ title = t; }

Klassvariabler och metoder (static) Konstanter, variabler och metoder kan placeras i klassdefinitionen med static Statiska variabler finns bara i en kopia i sin klass Statiska metoder kan anropas utan att först skapa instanser(objekt) av klassen public static double cos(double angle) public static void main(string[] args)

När kan man använda static? Metoden main(string[]) måste vara static Rena funktioner, t ex java.lang.math cos, sin, tan, exp, pow, sqrt... Konstanter, t ex java.awt.color Color.red

Är det fel att använda static? Fel använt ger static knepiga problem och osnygga lösningar Grundläget är att undvika static

PACKAGES OCH STANDARDBIBLIOTEKEN

Packages Standardbiblioteken är organiserade i s k packages java.lang (importeras automatiskt) java.util (händiga verktyg) java.io (in- och utmatningsfunktioner) java.net (nätverkskommunikation)... många fler

Importera ett package import java.util.*; Gör alla klasser i java.util tillgängliga import java.util.stringtokenizer; Gör endast klassen StringTokenizer tillgänglig. Om man använder mindre än 20-30% av ett package är det tydligare för andra läsare om man uttryckligen importerar varje klass koden behöver.

java.util.random Random() int nextint(int num) import java.util.random;... Random rnd = new Random ();... int die1 = 1 + rnd.nextint(6); // 1+(0..5) int die2 = 1 + rnd.nextint(6); int dice = die1 + die2;

java.lang.math double acos(double num) double asin(double num) double atan(double num) double cos(double angle) double sin(double angle) double tan(double angle)

java.lang.math double ceil(double num) double floor(double num) double exp(double num) double pow(double angle, double power) double random() double sqrt(double num) // java.lang är redan importerad... double v = Math.sqrt(u);

System.out.printf Klassen java.util.formatter kan användas för formaterad utmatning av text Inspirerad av funktionen printf() i C Funktionaliteten kan enkelt nås genom t ex System.out.printf eller String.format System.out.printf(String format, Object... args) Formatsträngen anger hur argumentet skall formateras Antalet parametrar ska stämma mot formatsträngen

System.out.printf System.out.printf( %s:%4d%n, name, age); Allan Kluring: 42 %s en sträng %4d ett heltal i ett fält om fyra kolumner %n ny rad Läs mer på http://download.oracle.com/javase/6/docs/api/java/util/formatter.html#syntax

System.out.printf However, using the printf method is not a particularly clean object-oriented solution to the problem of formatting output, so we avoid its use in this book. Lewis & Loftus, 6th ed, pg 164 Bah! FK

enum is good for you ENUMERATED TYPES

Enum (uppräkningstyp) Ibland behöver koden distinkta symboliska värden från en liten mängd t ex måndag, tisdag, onsdag,..., söndag Dessa kan modelleras som t ex konstanter: static final int MONDAY=0, TUESDAY=1,...

Enum (uppräkningstyp) Att använda primitiva datatyper för litet antal värden inbjuder till problem static final int MONDAY=1, TUESDAY=1,... int weekday = MONDAY; // detta är förstås ok weekday = -999; // tyvärr även detta Kompilatorn vet inte om att vi vill ha ett fåtal, unika värden, och kan inte hjälpa till

enum Deklarationen enum skapar en ny datatyp med bara de uppräknade värdena enum Weekday {monday, tuesday,... } Därefter kan vi deklarera variabler som vanligt Weekday today; Och tilldela dem today = Weekday.tuesday; Kompilatorn kan nu kontrollera koden bättre

omslag kring primitiva datatyper WRAPPER CLASSES

Wrapper classes Primitiva datatyper (int, long, char,...) är inte klasser Ibland önskar man att de vore det Varje primitiv datatyp har därför en motsvarande wrapper class Integer, Long, Char... (Stor bokstav!) Wrapper-klassen innehåller exakt en lagringsplats för sin primitiva datatyp

Wrapper classes Wrapper-klasser behövs om man vill stoppa in en primitiv datatyp i t ex en hash-tabell java.util.hashtable erbjuder nämligen bl a metoderna: put (Object key, Object value) // stoppa in data Object get (Object key) // ta ut data Men en primitiv datatyp är inte ett Object. Lösningen är att använda en wrapper-klass

Wrapper classes Antag att nyckeln är en int och värdet en sträng. Vi använder Integer runt vår int-nyckel. import java.util.hashtable; HashTable<Integer,String> mytable = new HashTable<Integer,String>(); mytable.put(new Integer(43), Alphanor ); Genom att slå in 43 i en instans av Integer så fungerar det.

Wrapper classes - Autoboxing Kompilatorn inser många gånger när en wrapperklass behövs Den kan då själv lägga till den nödvändiga koden import java.util.hashtable; HashTable<Integer,String> mytable = new HashTable<Integer,String>(); mytable.put(new Integer(43), Alphanor ); mytable.put(43, Alphanor ); // Autoboxing Kompilatorn lägger till koden new Integer(43).

Wrapper classes - unboxing Kompilatorn inser också när en wrapper-klass används som en primitiv datatyp Den kan då själv lägga till den nödvändiga koden Integer myint = new Integer(43); int x = myint.intvalue(); // Det traditionella sättet int x = myint; // unboxing Kompilatorn lägger till anropet till myint.intvalue().

Wrapper classes statiska metoder Wrapper-klasser har även användbara statiska metoder för den primitiva datatypen, t ex static int Integer.parseInt(String s) static String tobinarystring(int num) static String tohexstring(int num) static String tooctalstring(int num) och många fler...

meh SLUT PÅ BILDER

Objekt som datasamlingar List... boolean add(object) void clear() boolean contains(object) Object get(int index) boolean isempty() boolean remove(object) int size() och många fler metoder...

Processelement med lokala data Tårta? På en torsdag?! Words en på torsdag Tårta Tokenizer Parser Punctuation!?! Avdelningsregler Grammatikregler Whitespace

Klassen Person Person name Allan Kluring birthyear 42

Klassen Person Person Referensvariabel name Allan Kluring birthyear 42 Primitiv datatyp

Hundar och hundflock public class Dog { static List<Dog> members... } Om vi använder en statisk variabel i klassen så kan vi bara skapa en enda flock med hundar. Fido Karo Max Heidi

Hundar och hundflock public class Dog {... } public class Pack { List<Dog> members... } Med en separat klass kan vi organisera hur många olika flockar vi vill. Mer generellt! Fido Karo Max Heidi