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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

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

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

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

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

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Laboration 1 - Grunderna för OOP i Java

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

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

TENTAMEN OOP

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

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

TENTAMEN OOP

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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

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

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

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

Grundläggande programmering med C# 7,5 högskolepoäng

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Lösningsförslag till exempeltenta 2

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

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

(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

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

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

JAVA Mer om klasser och objektorientering

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

Föreläsning 13 Innehåll

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

1 Repetition av viktiga begrepp inom objektorienterad programmering

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

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

PROGRAMMERINGSTEKNIK TIN212

Klasshierarkier - repetition

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Enkla variabler kontra referensvariabel

Repetition av viktiga begrepp inom objektorienterad programmering

Imperativ programmering. Föreläsning 4

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

Föreläsning 9: Arv och UML

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

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

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

Föreläsning REPETITION & EXTENTA

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

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 OOP

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

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

Classes och Interfaces, Objects och References, Initialization

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

TENTAMEN OOP

Konstruktion av klasser med klasser

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Anteckningar 1: Grundläggande saker

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lösningsförslag till exempeltenta 1

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

Föreläsning 8: Exempel och problemlösning

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

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

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

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

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

Kursplanering Objektorienterad programmering

OOP Tenta

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Transkript:

Programmering för språkteknologer II, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Idag - Kursplan och planering - Repetition - Objektorientering Klasser Arv Polymorfism Gränssnitt 2

Kursplan Mål Efter avslutad kurs skall studenten för att förtjäna betyget Godkänd minst kunna: - redogöra för följande begrepp och självständigt utforma Javaprogram som exemplifierar och drar nytta av dem: paket och synlighet, objektorientering: --- arv, polymorfism, abstrakta klasser, gränssnitt, undantag, reguljära uttryck, hashtabeller och mappningar; 3

Kursplan Mål Efter avslutad kurs skall studenten för att förtjäna betyget Godkänd minst kunna: - i Java implementera elementära algoritmer för dessa typer av uppgifter, och föra grundläggande resonemang om deras tidskomplexitet: stackar, köer och listor, sökning, sortering. 4

Kursplan Examination Tentamen: Alla lärandemål, speciellt teorin Laborationer: framförallt praktiska - Lab 0. Objektorientering, synlighet - Lab 1. Regulära uttryck, automater, hashtabeller - Lab 2. Sökning, sortering - Lab 3. Stackar, köer, listor, undantag, paket - Lab 4. Objektorientering, applicering av övriga lärandemål 5

Kursplan Innehåll - Två teoretiska delar: Objektorientering Datastrukturer och algoritmer - Ni ska även kunna applicera delarna praktiskt egen implementering Förstå och använda Javas implementationer 6

Kursplan Betyg Betyget G: Betyget G på tentamen Betyget G på laboration 1-4 Betyget VG: Betyget VG på tentamen Betyget G på laboration 1-4 7

Planering Följer laborationernas innehåll: V. 36 Introduktion, objektorientering Fö 0, Lab 0 V. 37 Reguljära uttryck, automater, hashtabeller, läsning/skrivning Fö 1, Lab 1 V. 38-39 Sökning, sortering, generics Fö 2, (3), Lab 2 8

Planering Följer laborationernas innehåll: V. (38) 39-41 Stackar, köer, listor, interface, paket Fö 3-4, Lab 3 V. 41-44 Fördjupning och applicering av kunskaper Fö 5, Lab 4 V. 45 Repetition, tentamen Fö 6, tentamen 9

Laborationer - Utförande - 5 laborationer - Redovisning: laboration 0 : ingen redovisning laboration 1 4: skriftlig redovisning (via mail) - Laborationerna får göras två och två Ni väljer själva vem ni vill arbeta med Det underlättar om båda är på ungefär samma nivå Man får arbeta själv om man vill 10

Laborationer - Förberedelser - För att utnyttja laborationstillfället kan ni förbereda er: Läs alltid igenom laborationen innan laborationstillfället Läs relevant litteratur Börja programmera Laboration 0 nu på onsdag behöver inte förberedas i förväg, men börja gärna arbeta med den idag. 11

Laborationer - Omfattning - Blir större och större och mer omfattande - Mer tid finns för det större laborationerna, speciellt laboration 3 och 4. - Planera för det! 12

Laborationer - deadlines - Rekommenderade deadlines Laboration 1: 17/9 Laboration 2: 29/9 Laboration 3: 13/10 Laboration 4: 29/10 - i fas med kurs - Slutlig deadline: 7/11 - Uppsamling: 6/12 13

Datum för tentamen Tentamen: 7/11 Omtentamen: 12/12 14

Kurslitteratur Kursbok: Eck, David J. Introduction to Programming Using Java. Alternativ litteratur: Clifford A. Shaffer. Data Structures and Algorithm Analysis (Java version) Bruno R. Preiss. Data Structures and Algorithms with Object-Oriented Design Patterns in Java Böcker på svenska: Holm, Per. Objektorienterad programmering och Java. Studentlitteratur. Skansholm, Jan. Java direkt med Swing. Studentlitteratur. 15

Kursarbete - 7,5 hp motsvarar 200 timmars arbete Schemlagt: 32 timmar 7*2 h föreläsningar, 7*2 h laborationer, 4 h tentamen Eget arbete: 168 timmar - Arbete med laborationer - Läsning och föreberedelse för tentamen - Eget arbete med programmering 16

Repetition 17

Programskal Enkel klass public class Name{ public static void main(string args[]) {... Koden behöver sparas i filen Name.java 18

Programskal Enkel klass public class Name { public static void printnumber(int i) { System.out.println("The number is" + i); public static void main(string args[]) { printnumber(4711); 19

Programskal Kompilera och exekvera > javac Name.java > java Name The number is: 4711 20

Metoder En rad programsatser som beskriver hur en metod utför något. sats; 21

Metoder Indata: meningsfulla argument/parametrar: arg_1 arg_2... arg_n sats; 22

Metoder Indata: Lämpliga argument/parametrar Utdata: Resultatet (valbart) arg_1 arg_2... arg_n sats; resultat 23

Lokala variabler public class Main{ i j 5 public static void main(string args[]) { // deklarera i utan tilldelning int i; // deklarera j med tilldelning int j = 5; 24

Lokala variabler public class Main{ public static void main(string args[]) { // deklarera i utan tilldelning int i; // deklarera j med tilldelning int j = 5; // i tilldelas värde 4 i = 4; // i tilldelas samma värde som j, dvs 5 i = j; 25

Enkla typer - Heltal Typ Minsta värde Högsta värde byte - 127 128 short - 32 768 32 767 int -2 147 483 648 2 147 483 647 long -9 223 372 036 854 775 808 9 223 372 036 854 775 807 26

Enkla typer - Decimaltal Typ Minsta värde Högsta värde Noggrannhet float 7 siffror double 3,4 10 38 3,4 10 38 1,7 10 308 1,7 10 308 15 siffror 27

Enkla typer - Sanningsvärden Typ Minsta värde Högsta värde boolean falskt sant 28

Enkla typer - char char är en teckentyp Exempel: char c = 'A'; 29

Normalt programflöde sats; sats; sats; 30

Normalt programflöde- exempel public class Normal{ public static void main(string args[]) { int i = 4; int j = 5; boolean samenumber = (i == j); System.out.println(sameNumber); 31

Villkorsflöde sant? sats; falskt sats; sats; sats; sats; sats; 32

Villkorsflöde Exempel 1 public class Condition{ public static void main(string args[]) { int i = 4; int j = 5; if(i == j) System.out.println("Same number"); else { System.out.print("Not the same "); System.out.println("number"); 33

Villkorsflöde Exempel 2 public class Condition{ public static void main(string args[]) { int i = 4; int j = 5; if(i == j) { System.out.println("Same number"); else if ( i < j){ System.out.print("First number smaller"); else { System.out.print("First number bigger"); 34

Upprepningsflöde? sats; sant falskt steg; sats; sats; 35

Upprepningsflöde Exempel 1 public class While{ public static void main(string args[]) { int i = 0; while(i < 4) { System.out.println(i); i++; 36

Upprepningsflöde Exempel 2 public class For{ public static void main(string args[]) { for(int i = 0; i < 4; i++) System.out.println(i); 37

Fält(array) Ett fält(array) är en samling element av samma typ. index: 0 1 2... n 38

Fält(array) Ett fält(array) är en samling element av samma typ. Exempel: int[] array = new int[5]; array index: 0 1 2 3 4 39

Fält(array) Ett fält(array) är en samling element av samma typ. Exempel: int[] array = new int[5]; array[2] = 17; array index: 17 0 1 2 3 4 40

Fält(array) Ett fält(array) är en samling element av samma typ. Exempel: int[] array = new int[5]; array[2] = 17; array[4] = 42; array index: 17 42 0 1 2 3 4 41

Fält(array) Att loopa genom ett fält public class ForArray{ public static void main(string args[]) { int[] array = new int[5]; array[0] = 34; array[1] = 100; array[2] = 17; array[3] = 500; array[4] = 42; for(int i = 0; i < array.length; i++) System.out.println(array[i]); 42

Fält(array) Att loopa genom ett fält public class ForEachArray{ public static void main(string args[]) { int[] array = new int[5];... for(integer i: array) { System.out.println(i); 43

Argument till programmet public class CmdTest{ public static void main(string args[]) { if(args.length >= 1) { System.out.println("Hello " + args[0]); else { System.out.println("What is your name?); 44

Kodkonventioner Beskriver hur kod ska se ut Viktigt för att få koden läsbar Konsekvens(speciellt om man är flera) Exempel: Klassnamn börjar på stor bokstav Variabler/metoder börjar på liten bokstav Den kod ni skriver i laborationerna ska följa Oracles kodkonventioner. 45

Hur använder man javafilen? 1. Öppna terminalen 2. Gå till den katalog där filen med koden finns i (använd kommandot cd) 3. För att kompilera filen skriver man: javac Filnamn.java 4. För att köra programmet skriver man: java Filnamn 46

Objektorientering - Klasser - Instans- och klassvariabler - Instans- och klassmetoder - Arv - Polymorfism - Gränsnitt - Synlighet och inkapsling - UML-diagram 47

Klasser/Objekt Klass beskriver objekt class Circle{... class Square{... 48

Klasser i Java - Standardklasser: String, File, ArrayList Vanliga metoder för dessa: String s; if(s.length() > 0) { String t = s.tolowercase(); String[] words = s.split("\\w+"); //... 49

Klasser i Java - Skillnad på array och ArrayList //Fast storlek String[] name = new String[5]; //Varierande storlek ArrayList<String> = new ArrayList<String>(); (implementeras som en array med fast storlek, men storleken ändras vid behov) 50

Klasser i Java - Wrapper-klasser klasser för att hantera enkla typer: Integer int Double double Används när man behöver en klass Exempel: ArrayList<Integer> tal; 51

Klasser i Java Autoboxing/Unboxing - Autoboxing: enkel datatyp konverteras till motsvarande wrapper-klass - Unboxing: Wrapper-klass konverteras till motsvarande enkla datatyp Exempel: list.set(0, 28); //motsvarar list.set(0, new Integer(28)); 52

Klasser Loopa igenom en ArrayLista 1 public class ForEachLoop{ public static void main(string args[]) { ArrayList<Integer> array = for(integer i: array){ System.out.println(i); 53

Klasser Loopa igenom en ArrayLista 2 public class WhileIterator{ public static void main(string args[]) { ArrayList<Integer> array = ; Iterator<Integer> it = array.iterator(); while(it.hasnext()){ System.out.println(it.next()); 54

Skapa egna klasser 55

Exempel - Person public class Person{ // instance-variable private String name = ""; // constructor public Person(String name){ this.name = name; public synlig för alla private endast synlig för klassen 56

Exempel - Person public private name 57

Exempel - Person public class Person{ private String name = ""; // constructor public Person(String name){ this.name = name; // method public String getname(){ return name; 58

Exempel - Person public getname() private name 59

Exempel - Person Hur kan vi lägga till ålder? public class Person{ private String name = ""; public Person(String name){ this.name = name; public String getname(){ return name; 60

Exempel - Person public class Person{ private String name = ""; private int age = 0; public Person(String name, int age){ this.name = name; this.age = age; public String getname(){ return name; 61

Exempel - Person public getname() private name age 62

Exempel - Person Hur kan vi komma åt åldern? public class Person{ private String name = ""; private int age = 0; public Person(String name, int age){ this.name = name; this.age = age; public String getname(){ return name; 63

Exempel - Person public class Person{ private String name = ""; private int age = 0; public Person(String name, int age){ this.name = name; this.age = age; public String getname(){ return name; public int getage(){ return age; 64

Exempel - Person public getname() private name age getage() 65

Instansvariabler Instansvariabel variabel med ett värde för varje instans av en klass Exempel i klassen Person: private int name; private int age; 66

Inkapsling - Skydda variabler genom att man INTE tillåter att andra klasser kommer åt dem - Deklarera variabler som private: private String name = ""; - Använd getter/setter för att hämta värde/ändra på dem: get-metoder: getname() set-metoder: setname(string n) - Implementationen hålls gömd => - Lätt att ändra - Går att kontrollera värden (ex: tillåtna dagar i ett datum) 67

Klassvariabler Klassvariabler - unik variabel för klassen och finns tillgänglig för varje instans av klassen Alla instanser av klassen delar på klassvariablerna. Exempel: public static int adultage = 18; 68

Klassen Person public class Person{ public static int adultage = 18; private String name = ""; private int age = 0; public Person(String name, int age){ this.name = name; this.age = age;... 69

Exempel - Person public getname() private name age getage() adultage 70

Klassen Person Hur kan vi använda adultage? public class Person{ public static int adultage = 18; private String name = ""; private int age = 0; public Person(String name, int age){ this.name = name; this.age = age;... 71

Klassen Person Hur kan vi använda adultage? public class Person{ public static int adultage = 18; private String name = ""; private int age = 0; public Person(String name, int age){ this.name = name; this.age = age;... public boolean isadult() { return age >= Person.adultAge; 72

Exempel - Person public getname() private name age getage() isadult() adultage 73

Klassmetoder Klassmetod En metod som får använda klassvariabler men inte instansvariabler Exempel: public static int getadultage() { return Person.adultAge; 74

Klassen Person public class Person{ public static int adultage = 18; private String name = ""; private int age = 0; public Person(String name, int age){ this.name = name; this.age = age;... public static int getadultage() { return Person.adultAge; 75

Exempel - Person public getname() private name age getage() isadult() adultage getadultage() 76

UML Unified modeling Language - Verktyg för att uttrycka idéer Grafisk beskrivning av olika aspekter av objektorienterade system - Världsstandard - Vi kommer att använda klassdiagram Beskriver klasser och relationer mellan klasser 77

UML Klassnamn variabler metoder Person 78

UML Klassnamn variabler metoder Person +adultage: int - name: String - age: int 79

UML Klassnamn variabler metoder Person +adultage: int - name: String - age: int +getname(): String +getage(): int +isadult() : boolean +getadultage(): int 80

UML Person +adultage: int - name: String - age: int +getname(): String +getage(): int +isadult() : boolean +getadultage(): int Förklaring instansvariabel instansmetod klassvariabel klassmetod - privat +publik 81

UML relationer mellan klasser Association Klass 1 Klass 2 Arv subklass Association betyder att två klasser känner till varandra på något sätt. Kan specifieras ytterligare. 82

Mer om objektorientering Arv Abstrakta klasser Polymorfism Gränssnitt 83

Arv 84

Klassen Cat public class Cat{ private Person owner; private String name; public Cat(person myowner, String myname){ owner = myowner; name = myname; public String getinfo(){ return "Cat: " + name; Cat -owner: Person -name: String +getinfo(): String 85

Klassen Dog public class Dog{ private Person owner; private String name; public Dog(person myowner, String myname){ owner = myowner; name = myname; public String getinfo(){ return "Dog: " + name; Dog -owner: Person -name: String +getinfo(): String 86

Klassen Rabbit public class Rabbit{ private Person owner; private String name; private boolean incage; public Rabbit(Person myowner, String myname, boolean cage){ owner = myowner; name = myname; incage = cage; public String getinfo(){ return "Rabbit: " + name + " InCage: " + incage; Rabbit -owner: Person -name: String -incage: boolean +getinfo(): String 87

Klasserna samlade: Cat Dog Rabbit -owner: Person -name: String -owner: Person -name: String -owner: Person -name: String -incage: boolean +getinfo(): String +getinfo(): String +getinfo(): String 88

Använda klasserna public class ExampleWithoutInheritance{ public static void main(string args[]) { Person owner = new Person("Kalle", 20); Cat mycat = new Cat(owner, "MyCat"); Dog mydog = new Dog(owner, "MyDog"); Rabbit myrabbit = new Rabbit(owner, "MyRabbit", true); System.out.println("My name is " + owner.getname() + " and these are my pets:"); System.out.println(myCat.getInfo()); System.out.println(myDog.getInfo()); System.out.println(myRabbit.getInfo()); 89

Provkör!!! - Resultat My name is Kalle and these are my pets: Cat: MyCat Dog: MyDog Rabbit: MyRabbit incage: true 90

Arv Hur kan vi tala om att de är husdjur? Pet Cat Dog Rabbit -owner: Person -name: String -owner: Person -name: String -owner: Person -name: String -incage: boolean +getinfo(): String +getinfo(): String +getinfo(): String 91

Arv Vad har alla husdjur gemensamt? Pet Cat Dog Rabbit -owner: Person -name: String -owner: Person -name: String -owner: Person -name: String -incage: boolean +getinfo(): String +getinfo(): String +getinfo(): String 92

Arv Vad har alla husdjur gemensamt? Pet -owner: Person Cat Dog Rabbit -name: String -name: String -name: String -incage: boolean +getinfo(): String +getinfo(): String +getinfo(): String 93

Arv Vad har alla husdjur gemensamt? Pet -owner: Person -name: String Cat Dog Rabbit -incage: boolean +getinfo(): String +getinfo(): String +getinfo(): String 94

Arv Pet känner till Person Pet - owner: Person - name: String Person Cat Dog Rabbit -incage: boolean 95

Superklass och subklass Pet Superklass #owner: Person #name: String Cat Dog Rabbit -incage: boolean +getinfo(): String +getinfo(): String +getinfo(): String Subklass Subklass Subklass 96

Förra koden utan arv public class Cat{ private Person owner; private String name; public class Dog{ private Person owner; private String name; public class Rabbit{ private Person owner; private String name; private boolean incage; 97

Ny kod med arv public class Pet { protected Person owner; protected String name; public class Cat extends Pet{ public class Dog extends Pet{ public class Rabbit extends Pet{ private boolean incage; Nyckelordet extends används när man vill ärva från en annan klass. 98

Synlighet Samma klass paket subklass Alla klasser public X X X X protected X X X Inget (package) private X X X Vi kommer att gå igenom paket senare i kursen 99

Synlighet - UML Pet #owner: Person #name: String Förklaring - private # protected + public ~ package Cat Dog Rabbit -incage: boolean +getinfo(): String +getinfo(): String +getinfo(): String 100

Ny kod med arv Hur kan vi skapa konstruktorerna? public class Pet { protected Person owner; protected String name; public Pet(Person owner, String name){ this.owner = owner; this.name = name; public class Cat extends Pet{ public Cat(Person owner, String name){ super(owner, name); super() används för att anropa konstruktorn för klassen Pet 101

Ny kod med arv Hur kan vi skapa konstruktorerna? public class Dog extends Pet{ public Dog(Person owner, String name){ super(owner, name); public class Rabbit extends Pet{ private boolean incage; public Rabbit(Person owner, String name, boolean incage){ super(owner, name); this.incage = incage; super() används för att anropa konstruktorn för klassen Pet 102

Main-metoden public class ExampleWithInheritance{ public static void main(string args[]) { Person owner = new Person("Kalle", 20); Cat mycat = new Cat(owner, "MyCat"); Dog mydog = new Dog(owner, "MyDog"); Rabbit myrabbit = new Rabbit(owner, "MyRabbit", true); System.out.println("My name is " + owner.getname() + " and these are my pets:"); System.out.println(myCat.getInfo()); System.out.println(myDog.getInfo()); System.out.println(myRabbit.getInfo()); 103

Provkör!!! - Resultat My name is Kalle and these are my pets: Cat: MyCat Dog: MyDog Rabbit: MyRabbit incage: true 104

Arv - Fakta Arv Arv innebär att man skapar nya klasser genom att utgå från redan existerande klasser och utöka dem med ytterliggare instansvariabler och metoder. Exempel: Klassen Rabbit är en utökning av klassen Pet. 105

Arv - Fakta Superklass - Den klass man ärver från, till exempel klassen Pet. Subklass Den klass som ärvt från en superklass, Till exempel klasserna Cat, Dog och Rabbit Enkelt arv När klassen endast ärvt från en superklass Multipel arv När klassen ärvt från flera superklasser (Finns inte i JAVA) super() - används för att anropa superklassens konstruktor super.x() används för att komma åt metod x() i superklassen 106

Arv Varför? - Det blir lättare att göra ändringar i rätt klass. - Programmet blir lättare att underhålla och blir mer stabilt 107

Abstrakt klass 108

Main-metoden - alternativ public class ExampleWithInheritance{ public static void main(string args[]) { Person owner = new Person("Kalle", 20); Pet mycat = new Cat(owner, "MyCat"); Pet mydog = new Dog(owner, "MyDog"); Pet myrabbit = new Rabbit(owner, "MyRabbit", true); System.out.println("My name is " + owner.getname() + " and these are my pets:"); System.out.println(myCat.getInfo()); System.out.println(myDog.getInfo()); System.out.println(myRabbit.getInfo()); 109

Provkör!! - Resultat Problem: Pet does not have any method called getinfo(); Lösning: Lägg till metoden getinfo() i klassen Pet! Men, vad ska den göra för något? 110

Lösning 1 Lägg till getinfo() i Pet public class Pet { protected Person owner; protected String name; public Pet(Person owner, String name){ this.owner = owner; this.name = name; public String getinfo() { return "Pet:" + name; getinfo() kommer nog aldrig att anropas! 111

Lösning 2 Lägg till getinfo() i Pet public abstract class Pet { protected Person owner; protected String name; public Pet(Person owner, String name){ this.owner = owner; this.name = name; public abstract String getinfo(); Då en abstrakt klass kan innehålla en metod som inte är implementerad så kan man inte skapa en instans av den. Alla icke abstrakta klasser som ärver en abstrakt klass Måste implementera alla abstrakta metoder. 112

Synlighet - UML Pet #owner: Person #name: String Abstrakt klass Abstrakt metod - kursiv +getinfo(): String Cat Dog Rabbit -incage: boolean +getinfo(): String +getinfo(): String +getinfo(): String 113

Main-metoden - alternativ public class ExampleWithInheritance{ public static void main(string args[]) { Person owner = new Person("Kalle", 20); ArrayList<Pet> pets = new ArrayList<Pet>(); pets.add(new Cat(owner, "MyCat")); pets.add(new Dog(owner, "MyDog")); pets.add(new Rabbit(owner, "MyRabbit", true)); System.out.println("My name is " + owner.getname() + " and these are my pets:"); for(pet v: pets) { System.out.println(v); 114

Provkör!!! - Resultat My name is Kalle and these are my pets: Cat: MyCat Dog: MyDog Rabbit: MyRabbit incage: true 115

Abstrakta klasser - Fakta Abstrakta klasser En klass som har minst en metod som inte är implementerad. Abstrakt metod En metod som finns i en abstrakt klass men som saknar implementering. - Man kan inte skapa en instans av en abstrakt klass - När man ärver en abstrakt klass måste man alltid implementera de abstrakta metoderna. 116

Polymorfism - Fakta Polymorfism (mångformiget) Möjligheten att kunna skapa objekt som har mer än en form. Objekten härstammar från en superklass och har liknande egenskaper. Exempel: Pet mycat = new Cat(owner, "MyCat"); Pet mydog = new Dog(owner, "MyDog"); Även om objektet är deklarerad med en superklass så anropas metoden som finns i subklassen: Exempel: // här anropas getinfo() i Cat // istället för den i Pet mycat.getinfo(); 117

Hur kan vi byta ägare på ett husdjur? public Class Pet { protected Person owner; protected String name; public void transferownership(person newowner) { owner = newowner; public String getownername() { return owner.getname(); public class Cat extends Pet{... 118

Main-metod public class ExampleWithTransferOwner{ public static void main(string args[]) { Person owner = new Person("Kalle", 20); Pet mycat = new Cat(owner, "MyCat"); Pet mydog = new Dog(owner, "MyDog"); System.out.println(myCat.getOwnerName() + " owns the cat."); System.out.println(myDog.ogetOwnerName() + " owns the dog."); 119

Main-metod System.out.println("Stina buys the cat from " + mycat.getownername() + "."); mycat.transferownership (new Person("Stina",18)); System.out.println(""); System.out.println(myCat.getOwnerName() + " owns the cat."); System.out.println(myDog.ogetOwnerName() + " owns the dog."); 120

Provkör!!! - Resultat Kalle owns the cat. Kalle owns the dog. Stina buys the cat from Kalle. Stina owns the cat. Kalle owns the dog. 121

Arv Vad ser vad? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Cat Dog Rabbit -incage: boolean +getinfo():string +getinfo():string +getinfo():string Klassen Pet ser endast sig själv! 122

Arv Vad ser vad? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Cat +getinfo():string Dog +getinfo():string Rabbit -incage: boolean +getinfo():string Klassen Cat ser både sig själv och Pet!! 123

Arv Vad ser vad? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Cat +getinfo():string Dog +getinfo():string Rabbit -incage: boolean +getinfo():string Klassen Dog ser både sig själv och Pet!! 124

Arv Vad ser vad? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Cat +getinfo():string Dog +getinfo():string Rabbit -incage: boolean +getinfo():string Klassen Rabbit ser både sig själv och Pet!! 125

Arv - Fakta En klass kan bara se sig själv och de klasser den ärvt från. Exempel: - Superklassen Pet kan bara se Pet - Subklassen Cat kan se både Cat och superklassen Pet - Subklassen Dog kan se både Dog och superklassen Pet - Subklassen Rabbit kan se både Rabbit och superklassen Pet 126

Kan vi kategorisera klasserna ytterliggare? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Cat +getinfo():string Dog +getinfo():string Rabbit -incage: boolean +getinfo():string 127

Kan vi kategorisera klasserna ytterliggare? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Cat Dog Rabbit -incage: boolean +getinfo():string +getinfo():string Katter och hundar är rovdjur! +getinfo():string 128

Vad ser vad nu? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat Dog Rabbit -incage: boolean +getinfo():string +getinfo():string +getinfo():string 129 Katter och hundar är rovdjur! Vi skapar klassen Predator!

Vad ser vad nu? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat Dog Rabbit -incage: boolean +getinfo():string +getinfo():string Vad ser klassen Predator? +getinfo():string 130

Vad ser vad nu? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat Dog Rabbit -incage: boolean +getinfo():string +getinfo():string +getinfo():string Vad ser klassen Predator? Klasserna Predator och Pet 131

Vad ser vad nu? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat Dog Rabbit -incage: boolean +getinfo():string Vad ser klassen Cat? +getinfo():string +getinfo():string 132

Vad ser vad nu? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat Dog Rabbit -incage: boolean +getinfo():string +getinfo():string +getinfo():string Vad ser klassen Cat? Klasserna Cat, Predator och Pet 133

Vad ser vad nu? Pet #owner: Person #name: String +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat Dog Rabbit -incage: boolean +getinfo():string Vad ser klassen Dog? +getinfo():string +getinfo():string 134

Vad ser vad nu? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat Dog Rabbit -incage: boolean +getinfo():string +getinfo():string +getinfo():string 135 Vad ser klassen Dog? Klasserna Dog, Predator och Pet

Vad ser vad nu? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat +getinfo():string Dog +getinfo():string Rabbit -incage: boolean +getinfo():string Vad ser klassen Rabbit? 136

Vad ser vad nu? #owner: Person #name: String Pet +transferownership(newowner: Person) +getowner(): String +getinfo(): String Predator #hasprey: boolean Cat +getinfo():string Dog +getinfo():string Rabbit -incage: boolean +getinfo():string Vad ser klassen Rabbit? Klasserna Pet och Rabbit 137

Gammal kod public class Cat extends Pet{ public Cat(Person myowner, String myname){ super(myowner, myname); public class Dog extends Pet{ public Dog(Person myowner, String myname){ super(myowner, myname); 138

Ny kod public class Predator extends Pet{ protected boolean hasprey = false; public Predator(Person myowner, String myname){ super(myowner, myname); public class Cat extends Predator{ public Cat(Person myowner, String myname){ super(myowner, myname); public class Dog extends Predator{ public Dog(Person myowner, String myname){ super(myowner, myname); 139

Ny main public class ExampleWithInheritance{ public static void main(string args[]) { Person owner = new Person("Kalle", 20); ArrayList<Pet> pets = new ArrayList<Pet>(); pets.add(new Cat(owner, "MyCat")); pets.add(new Dog(owner, "MyDog")); pets.add(new Rabbit(owner, "MyRabbit", true)); System.out.println("My name is " + owner.getname() + " and these are my pets:"); for(pet v: pets) { System.out.println(v); 140

Provkör!!! - Resultat My name is Kalle and these are my pets: Cat: MyCat Dog: MyDog Rabbit: MyRabbit incage: true 141

Gränssnitt 142

Gränssnitt Fakta Ett gränssnitt defininerar ett gränssnitt (eller en mall) och får INTE innehålla kod. Exempel: public interface PetInterface{ public void print();... 143

Gränssnitt Fakta Ett gränssnitt kan INTE ärvas. class Cat extends PetInterface{ void print() {... class Dog extends PetInterface{ void print() {... class Rabbit extends PetInterface{ void print() {... 144

Gränssnitt Fakta Ett gränssnitt MÅSTE implementeras. Exempel: class Cat implements PetInterface{ void print() {... class Dog implements PetInterface{ void print() {... class Rabbit implements PetInterface{ void print() {... 145

Klasserna samlade: PetInterface print() Cat -owner: Person -name: String Dog -owner: Person -name: String Rabbit -owner: Person -name: String -incage: boolean 146

Ny Main-metod public class ExampleInterface{ public static void main(string args[]) { Person owner = new Person("Kalle", 20); PetInterface[] pets = new PetInterface[3]; pets[0] = (PetInterface) new Cat(owner, "MyCat"); pets[1] = (PetInterface) new Dog(owner, "MyDog"); pets[2] = (PetInterface) new Rabbit(owner, "Rabbit", true); for(int i = 0; i < pets.length; i++) pets[i].print(); 147

Provkör!!! - Resultat Cat: MyCat Dog: MyDog Rabbit: MyRabbit incage: true 148

Gränssnitt - Fakta Casting innebär att man konverterar från ett objekt till ett annat. Exempel: pets[0] = (PetInterface) new Cat(owner, "MyCat"); Detta fungerar eftersom klassen Cat har implementerat gränssnittet PetInterface. 149

Gränssnitt - Fakta En klass kan implementera ett gränssnitt men inte ärva den. En klass kan endast ärva en klass men kan implementera flera gränssnitt. Exempel: class X implements interface1, interface2 { 150

Laboration 0 - Övning på objektorienterad programmering - Implementera ett litet objektorientar program om fordon, steg för steg - Frågor efter varje steg samt i slutet, som man bör kunna svara på: Frågorna är även relevanta inför tentan - Ingen redovisning, men materialet är relevant för resten av kursen! - Fråga gärna om ni är osäkra på något! 151

Arbeta själv under veckan - Gör färdigt laboration 0 - Gör programmeringsövningar Repetition: Eck kap 1-4 Objektorientering: Eck kap 5 - Repetera från tidigare kurser Reguljära uttryck och automater Grundläggande programmering Läs på inför nästa vecka Reguljära uttryck (se hemsida för material) Hashtabeller, Eck kap 10.3-4 152

Nästa vecka - Tema: Reguljära uttryck --- Fokus: hur de används i Java Hashtabeller Läsning/skrivning - Föreläsning - Laboration 1: Applicera ovanstående på språkteknologiska problem 153