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

Relevanta dokument
(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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

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

Arv. En klassdefinition class A extends B {... } definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som definierade för B.

Parameteröverföring. Exempel. Exempel. Metodkropp

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Programmering A. Johan Eliasson

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

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning REPETITION & EXTENTA

Tentamen OOP

SMD 134 Objektorienterad programmering

Objektorienterad Programmering (TDDC77)

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

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

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

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

TENTAMEN OOP

Föreläsning 5-6 Innehåll

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

TDIU01 - Programmering i C++, grundkurs

Klasshierarkier - repetition

Classes och Interfaces, Objects och References, Initialization

Introduktion till Java

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

Typkonvertering. Java versus C

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

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

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

Programmering för språkteknologer I, VT2012. Rum

Objektorienterad programmering i Java

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

TENTAMEN OOP

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

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

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

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

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

Objektorienterad programmering i Java

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

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

TDDC77 Objektorienterad Programmering

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

Laboration 1 - Grunderna för OOP i Java

Föreläsning 2, vecka 8: Repetition

Föreläsning 3-4 Innehåll

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

Objekt och referenser

Föreläsning 13 Innehåll

TENTAMEN OOP

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

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

DAT043 - Föreläsning 7

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

Objektorienterad programmering Föreläsning 4

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Övning2. Variabler. Data typer

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

Innehållsförteckning

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

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

LÖSNINGSFÖRSLAG TENTAMEN

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

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

F4. programmeringsteknik och Matlab

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Objekt och klasser - Introduktion

Föreläsning 3: Booleans, if, switch

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

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Konstruktion av klasser med klasser

Malmö högskola 2008/2009 CTS

Dynamisk bindning och polymorfism

Undervisning. Examination

OOP Objekt-orienterad programmering

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

TDDC77 Objektorienterad Programmering

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Transkript:

Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1

Ett första exempel Klassen Hej implementerar ett klassiskt exempel: en applikation som skriver ut ett meddelande. Filen ska heta Hej.java, samma namn som klassen public class Hej { public static void main(string[] args) { System.out.println("Hej hopp"); } } Objectorienterad programmering Sida 2

Enkelt exempel (testkörning Unix) harpo$ javac Hej.java harpo$ java Hej Hej hopp harpo$ harpo$ java -Djava.compiler=NONE Hej Hej hopp Objectorienterad programmering Sida 3

Datatyper i Java: Tre slag Primitiva: Sanningsvärden, tecken, heltal, flyttal (8 stycken) Arrayer (nästan inte alls som i C) Objekt Objectorienterad programmering Sida 4

De åtta primitiva typerna Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000 16 bit byte Heltal 0 8 bit short Heltal 0 16 bit int Heltal 0 32 bit long Heltal 0 64 bit float Flyttal 0.0 32 bit double Flyttal 0.0 64 bit Objectorienterad programmering Sida 5

Typen boolean 1. representerar ett sanningsvärde 2. genereras av relationsoperatorer (tex ==, <) 3. if och while-satser kräver att alla sanningsvärden representeras som boolean Objectorienterad programmering Sida 6

Typen char Ett tecken i Unicode. 16 bitar. Unicode omfattar alla levande och utdöda språk. Hur får dessa plats i 16 bitar? Objectorienterad programmering Sida 7

Typkonvertering heltal & flyttal Ett tal kan automatiskt omvandlas till ett tal av en vidare representation. (Exempel: int->long, int->double, float->double) Ett heltal kan omvandlas till en mindre representation via en uttrycklig omvandling, Aritmetiska operatorer (tex +) returnerar alltid ett värde av type int eller long. b = b + 1 är ej korrekt om b är en byte. Objectorienterad programmering Sida 8

Arrayer i Java: Inte som i C arrayer skapas explicit storlek anges dynamiskt index testas int[] a = new int [10]; a[-1] och a[10] ger felmeddelande! inititiering int[] a = {1, 2, 3}; men även int[] a = {1, n+1, 2*n, n*n}; Objectorienterad programmering Sida 9

Tilldelning Inte som i C (forts) int[] a = new int [10]; int[] b = a; a och b refererar till samma array! Storlek på array ges av.length. int[] a = new int[10]; int x = a.length; a = new int[100]; int y = a.length; Objectorienterad programmering Sida 10

Inte som i C (forts) null står för ingen array. int[] a = null; betyder samma sak som int[] a; Objectorienterad programmering Sida 11

Exempel: Byt värde på två array-variabler static void main (String args[]) { int[] a = {1,2,3}; int[] b = {99, 98, 97, 93, 92, 91}; int[] temp; temp = a; a = b; b = temp; } System.out.println("b[0] = " + b[0]); Objectorienterad programmering Sida 12

Lite om strängar I Java är strängar objekt av en speciell klass String ; inte en primitiv datatyp och inte heller en array. Tecknen i en sträng är av char -typ, dvs Unicode-tecken. Objekt av typ String är konstanta man kan inte ändra i en sträng. (Det finns en klass StringBuffer som tillåter ändringar.) Man kan skapa ett nytt sträng-objekt med syntaxen "En sträng". Objectorienterad programmering Sida 13

Strängar (forts) Strängar slås ihop (konkateneras) med +. Om a och b är strängar så returnerar uttrycket a + b en ny sträng som är konkateneringen av a och b. Om det ena argumentet till + är ett String-objekt, så omvandlas det andra till en sträng. Exempel: int x = 42; System.out.println("Shoesize: " + x); Resultat: Shoesize: 42. Objectorienterad programmering Sida 14

Strängar, jämförelse Notera att två strängar kan ha samma innehåll utan att vara identiska. Operatorn == testar om två referenser är till samma objekt. För att testa om två strängar har samma innehåll, skriv (tex) s1.equals(s2) Objectorienterad programmering Sida 15

Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma egenskaper. En klassdefinition innehåller datafält...... och metoder (= funktioner i C). Man kan också säga: En klassdefinition beskriver kod och data. Ett Javaprogram består av en eller flera klassdefinitioner (och ingenting kan finnas utanför en klassdefinition). Objectorienterad programmering Sida 16

Klasser och objekt Varje objekt tillhör en viss klass. (Objektets klass är detsamma som objektets typ.) Vi säger att objektet är en instans av klassen. Alla objekt av en viss klass kan användas på samma sätt de har samma gränssnitt. En definition av en viss klass kan ses som en mall för objekt av den typen. Objectorienterad programmering Sida 17

Klassdefinition: Exempel class Person { int ålder; String namn; } Konvention: Namnet på en klass skrivs med stor bokstav. namn och ålder är fält i objekt av typen Person. Skansholm: instansvariabler Engelska: field Objectorienterad programmering Sida 18

Klassdefinition: Körexempel Person x; x = new Person (); x.ålder = 42; x.namn = "Kalle Karlsson"; System.out.println( "Personen " + x.namn + " är " + x.ålder + " år gammal"); Objectorienterad programmering Sida 19

Referensvariabler och referenssemantik Person x; Person y; x = new Person (); y = x; x.ålder = 42; x.namn = "Kalle Karlsson"; Vilken ålder har y? Objectorienterad programmering Sida 20

Referensvariabler och referenssemantik(forts) Givet en klassdefinition class X {... } och en variabeldeklaration X a; Variabeln a lagrar en referens. Objectorienterad programmering Sida 21

Exempel: X a, b; a = new X(); b = a; Referensvariabler (forts) Nu refererar a och b till samma objekt. Objectorienterad programmering Sida 22

Referensvariabel, regel Variabler av klasstyp har referenssemantik. Nya objekt skapas med new. Tilldelning kopierar referensen, inte objektet. Objectorienterad programmering Sida 23

Metoder public class Person { int age; } void incrementage() { age = age + 1; } En klassdefinition även innehålla definitioner av metoder. Liknar funktioner i C, men en metod kan referera till objektets instansvariabler. Objectorienterad programmering Sida 24

Referensvariabler i metodanrop Med en metoddefinition void f(x c) {... } och ett anrop f(a) kommer variabeln c inom metodkroppen att referera till samma objekt som a Regel: Objekt kopieras aldrig (om man inte ber uttryckligen om det). Objectorienterad programmering Sida 25

Exempel: Konstruktorer: Att skapa nya objekt class Person { [...] Person (String n, int å) { ålder = å; namn = n; } } Skapa en ny person: Person x = new Person("Kalle", 42); Objectorienterad programmering Sida 26

Konstruktorer (forts) En konstruktor har alltid samma namn som klassen En konstruktor deklareras utan resultattyp (inte ens void) En konstruktor ska initialisera objektets fält (instansvariabler) Om en klass inte har någon konstruktor, kommer Javakompilatorn att definiera en parameterlös konstruktor (defaultkonstruktorn) Objectorienterad programmering Sida 27

Namns räckvidd Instansvariabler och metoder kan kommas åt direkt inom hela den egna klassen Namn på lokala variabler inom ett block (metodkropp) kan bara kommas åt inom blocket (metodkroppen). Om samma namn används för flera olika saker gäller den användning som är "närmast". Instansvariabler och metoder kan alltid kommas åt med this: this.namn ger instansvariabeln i nuvarande klassen även om namn har andra betydelser. Objectorienterad programmering Sida 28

Referenssemantik, repetition Vad händer om... man tilldelar två variabler samma objekt? K x = new K(); K y = x; passar ett objekt som parameter? void m(k x) {... } K y = new K(); m(y); Objectorienterad programmering Sida 29

Referenssemantik (forts) en metod returnerar ett objekt? K m() { K x = new K(); return x; } om variabeln redan är bunden? K x = new K(); K y = new K(); y = x; Objectorienterad programmering Sida 30

Arv En klassdefinition class A extends B {... } definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. Objectorienterad programmering Sida 31

Arv: Ett exempel Fyra klasser: Fordon Motorfordon Bil Cykel Toppfarten för en cykel beräknas från cyklistens ålder. Toppfarten för en bil beräknas från motorstykan. Objectorienterad programmering Sida 32

Arv: Fordonsexempel class Fordon { } class Motorfordon extends Fordon { private double toppfart; Motorfordon (double t) { toppfart = t; } double gettoppfart() { return toppfart; } } Objectorienterad programmering Sida 33

Arv: fordonsexempel (forts) class Bil extends Motorfordon { int motorstyrka; int antal_hjul; Bil(int m, int h){ super(m *1.5); //Antar att toppfarten är motorstyrkan * 1.5 } } motorstyrka = m; antal_hjul = h; Objectorienterad programmering Sida 34

Arv: fordonsexempel (forts) class Cykel extends Fordon { private Person cyklist; Cykel (Person p) { cyklist = p; } double gettoppfart () { if (cyklist.ålder > 60) return 10; if (cyklist.ålder > 25) return 20; return 30; //Larvigt... } } Objectorienterad programmering Sida 35

Arv Hur kan klasser kan relateras genom arv? Arv betyder att en klass ärver implementation av en annan Klasserna bör vara konceptuellt relaterade Exempel: Fordon -> Motorfordon -> Bil Objectorienterad programmering Sida 36

Använd arv endast när Rekommendation det är lämpligt att ärva implementation, och subklassen representerar en delmängd av superklassen Ofta är det lämpligt att introducera en ny klass som rymmer gemensamma datastrukturer och metoder. Objectorienterad programmering Sida 37

Polymorfi En variabel av klasstyp kan bindas till ett objekt av en subklass. Exempel: Fordon f = new Bil(); Objectorienterad programmering Sida 38

Polymorfi... Utöka klassen fordon med metoderna gettoppfart (abstrakt) och beskriv. abstract class Fordon { abstract double gettoppfart (); } void beskriv () { System.out.println("Detta fordon har toppfart " + gettoppfart()+" km/h"); } Objectorienterad programmering Sida 39

Kod för att testa... Person p = new Person("Olle", 24); Cykel c = new Cykel (p); Bil b = new Bil (100, 4); System.out.println("Cykel..."); c.beskriv(); System.out.println("Bil..."); b.beskriv(); Fordon f = new Cykel(new Person("Nisse", 99)); System.out.println("Fordon?..."); f.beskriv(); Objectorienterad programmering Sida 40

Körexempel svenolof@harpo$ javac Fordonstest.java svenolof@harpo$ java Fordonstest Cykel... Detta fordon har toppfart 30.0 km/h Bil... Detta fordon har toppfart 150.0 km/h Fordon?... Detta fordon har toppfart 10.0 km/h Objectorienterad programmering Sida 41

Typer Vi talar om typen av en variabel och typen av ett objekt Typen av en variabel är statisk, givet av programmet och ändras aldrig. Ett objekt får en viss typ när det skapas (med new). Typen ändras aldrig. Objectorienterad programmering Sida 42

Typkonvertering Där ett objekt av klass K förväntas kan man använda ett objekt av en subklass (implicit knvertering) Anta: ett objekt av klass K förväntas, vi har en variabel av en superklass, bunden till ett objekt av klass K. Vi kan konvertera referensen till klass K via explicit typkonvertering. Kompilatorn lägger in ett test för att kontrollera att typen är som angetts Objectorienterad programmering Sida 43

Bil b = new Bil(...); Typkonvertering, exempel Fordon f = b; //OK Bil b1 = f; //Kompileringsfel Bil b1 = (Bil)f; //OK Cykel c = (Cykel)f; //Fel vid körning Objectorienterad programmering Sida 44