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

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

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

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

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

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

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

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

TDDC76 Programmering och datastrukturer

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

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

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

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

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

Lösningsförslag övning 2.

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programmering (TDDC77)

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

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

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

Laboration 1 - Grunderna för OOP i Java

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

DAT043 - Föreläsning 7

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

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Konstruktion av klasser med klasser

OOP Objekt-orienterad programmering

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

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

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

Objektorienterad Programmering (TDDC77)

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

Klasshierarkier - repetition

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

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

Föreläsning 9: Arv och UML

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

TENTAMEN OOP

Classes och Interfaces, Objects och References, Initialization

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

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

Föreläsning 13 Innehåll

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

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

Imperativ programmering. Föreläsning 4

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

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

OOP Objekt-orienterad programmering

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

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

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

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

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

Instuderingsuppgifter läsvecka 2

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

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

TENTAMEN OOP

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

Föreläsning 5. Föreläsning 5. Klasser och objekt. Klasser och objekt. Klasser och objekt

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

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

JAVA Mer om klasser och objektorientering

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

Föreläsning 15: Repetition DVGA02

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

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Föreläsning 5. Föreläsning 5

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

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

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

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

Malmö högskola 2008/2009 CTS

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

Föreläsning 7: Objektorienterad programmering - introduktion

Modeller, Objekt och Klasser

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

Arv. Objektorienterad och komponentbaserad programmering

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

Enkla variabler kontra referensvariabel

Objektorienterad Programmering DAT043

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

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

JAVAUTVECKLING LEKTION 11

Laboration 1: Figurer i hierarki

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

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

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

TDDC Terminologi Uppdaterad Fö #1

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Konstruktorer Statiska metoder & attribut Synlighet Arv och polymorfism Unified Modelling Language 1

Hitta felet! public class Human { int age; public void printage() { int unusedvar; System.out.println("Jag är " + age + " år gammal"); public static void main(string[] args) { Human lisa; lisa.printage(); KRASH! Ett objekt måste instantieras innan det kan användas. 2

public class Human { Hitta felet! int age; = 27; public void printage() { int unusedvar; System.out.println("Jag är " + age + " år gammal"); public static void main(string[] args) { Human lisa = new Human(); lisa.age = 27; lisa.printage(); Nu kommer alla Humans vi skapar ha age 27... På På skärmen: Jag är är 027 år år gammal gammal Instansvariabler måste tilldelas ett värde innan de används. 3

Konstruktorer Används för att initiera ett objekt Kan finnas flera konstruktorer Kan även helt sakna konstruktorer (En tom defaultkonstruktor skapas av kompilatorn) public class Human { int age; // Detta är konstruktorn Defaultkonstruktorn: public Human(int startingage) { public Human() { age = startingage; public void printage() { System.out.println("Jag är " + age + " år gammal"); public static void main(string[] args) { Human lisa = new Human(27); lisa.printage(); 4

Konstruktorer (exempel) public class Movie { int year; String title; double rating; Vi kan kalla parametrarna för samma sak Men hur kommer vi då åt instansens variabler? public Movie(int year, String title, double rating) { this. year = year; this. title = title; this. rating = rating; Vid instansiering: Movie m = new Movie() m.year = 1999; m.title = The Matrix ; m.rating = 10.0; Vid instansiering (med konstruktor): Movie favomovie = new Movie(1999, The Matrix, 10.0); 5

Statiska metoder & attribut public class KiaCeedSW{ Color color; int modelyear; String licenseplate; public KiaCeedSW(. // Konstruktorn KiaCeedSw mykia = new KiaCeedSW(Gray, 2010, KPY038 ); Vissa egenskaper hör snarare till Klassen, (d.v.s ritningen, konceptet eller beskrivningen ) snarare än de enskilda instanserna (objekten). I java beskrivs sådana egenskaper med static. KiaCeedSw gulliskia = new KiaCeedSW(Red, 2011, RJU552 ); KiaCeedSw tjskia = new KiaCeedSW(Black, 2012, FFS123 ); static String manufacturer = Kia Motors Corporation ; static double rating = 7.2; Ex: bilens tillverkare skulle kunna representeras. Det hör inte till någon specifik instans, och är samma för alla. Eller t.ex Top Gears betyg för just denna bilmodell. 6

Statiska metoder & attribut public class KiaCeedSW{ Color color; int modelyear; String licenseplate; public KiaCeedSW(. // Konstruktorn KiaCeedSw mykia = new KiaCeedSW(Gray, 2010, KPY038 ); KiaCeedSw gulliskia = new KiaCeedSW(Red, 2011, RJU552 ); KiaCeedSw tjskia = new KiaCeedSW(Black, static String manufacturer = Kia Motors Corporation ; 2012, FFS123 ); static double rating = 7.2; Detta påverkar också hur vi tänker oss att vi kommer åt dessa data. mykia.color tjskia.licensplate Instansvariabler (vi behöver en instans för att komma åt dem) KiaCeedSW.manufacturer KiaCeedSW.rating Klassvariabler (static) (vi behöver inte en instans för att komma åt dem) 7

Statiska metoder & attribut public class KiaCeedSW{ Color color; int modelyear; String licenseplate; public KiaCeedSW(. // Konstruktorn KiaCeedSw mykia = new KiaCeedSW(Gray, 2010, KPY038 ); KiaCeedSw gulliskia = new KiaCeedSW(Red, 2011, RJU552 ); KiaCeedSw tjskia = new KiaCeedSW(Black, static String manufacturer = Kia Motors Corporation ; 2012, FFS123 ); static double rating = 7.2; Från en instans kan man komma åt klassvariabler: mykia.manufacturer Detta är ju rimligt, men kanske inte så tydligt. 8

Statiska metoder & attribut public class KiaCeedSW{ public void drive() { public static void givenewrating(double d) { public void setcolor(color newcolor) { public static void printmanufacturer() { KiaCeedSw mykia = new KiaCeedSW(Gray, 2010, KPY038 ); Vi kan göra samma uppdelning för metoder. KiaCeedSw gulliskia = new KiaCeedSW(Red, 2011, RJU552 ); KiaCeedSw tjskia = new KiaCeedSW(Black, 2012, FFS123 ); mykia.drive() mykia.setcolor(gold) Instansmetoder (vi behöver en instans för att komma åt dem) KiaCeedSW.giveNewRating(8.75) KiaCeedSW.printManufacturer() Klassmetod (static) (vi behöver inte en instans för att komma åt dem) 9

Statiska metoder & attribut Hitta felet! public class Human { int age = 0; static int sum(int a, int b) { return a + b; static void increaseage(int addition) { age = age + addition; public static void main(string[] args) { int x = Human.sum(1, 9); Human lisa = new Human(); lisa.increaseage(1); Statiska metoder kommer inte åt instansvariabler. 10

Statiska metoder & attribut Instansmetoder kommer åt både klass- och instansvariabler Klassmetoder kommer endast åt klassvariabler static Klassmetoder Klassvariabler Klass En instansvariabel hör till en specifik instans En klassvariabel delas mellan alla instanser Dessutom: Beskrivs av Instansmetoder Objekt Instantierar Man behöver (bör) inte gå via en instans för att komma åt en klassmetod/klassvariabel Instansvariabler 11

Synlighet Ex. En videobutik. 12

Synlighet Dölj implementationen, visa upp ett gränssnitt. Tumregel: Visa upp så lite som möjligt Javas synlighetsmodifierare: public synlig för alla protected - synlig inom paketet och subklasser [inget] (package private) synlig inom paketet private - endast synlig inom klassen 13

Synlighet(2) Dölj implementationen, visa upp ett gränssnitt. God sed och vana: Klasser som regel public En del klasser som endast ska användas internt kan ha minskad synlighet Interna hjälpmetoder private Övriga metoder public Attribut - private Möjligtvis protected om motiverat 14

Synlighet(3) Exempel: god programmeringssed public class KiaCeedSW { private String licenseplate; public void setplate(string newplate) { licenseplate = newplate; public String getplate() { return licenseplate; Använd getters och setters för att komma åt medlemsvariabler utanför klassen. 15

Arv Möt tre studenter Gymnasiestudenten Anna Högskolestudenten Harry Impulsive Ivar Har ett skåp. Gillar att lösa problem med penna och papper Har ett antal avklarade HP. Gillar att lösa problem med en väl skriven programmeringsalgoritm Gillar huvudbonader och att gå ut på rast Vägrar att lösa problem. 16

Arv(2) Hur skulle detta se ut Imperativt? (utan objektorientering) Många fullständiga uppräkningar => svårt att underhålla och utöka. Vi löser det istället objektorienterat med en klasshierarki. Alla studenter bör kunna studera och lösa uppgifter. Den gemensam klassen Student får ha dessa metoder. public class Student { public void study() { System.out.println("I am studying very hard."); public String solveproblem(string problem) { System.out.println( I give up!"); return null; 17

Arv(3) Vi lägger till saker som är specifikt för gymnasieelever i denna klass. En gymnasieelever är en Student. => Arv! Vi kan ändra beteenden från Student genom överskuggning. public class HighSchoolStudent extends Student { public void openlocker() { System.out.println( Lots of junk in here ); // I am overriding solveproblem with my implementation public String solveproblem(string problem) { System.out.println( Solving with pen & paper. ); return The answer is 84 / 2 ; 18

Arv(4) Harry är en Student som gillar att lösa problem med en väl skriven programmeringsalgoritm public class CollegeStudent extends Student { private int HP; public int gethp() { return HP; // I am overriding solveproblem with my implementation public String solveproblem(string problem) { System.out.println( Solving with Java. ); return The answer is + (84 / 2); 19

Arv(5) Ivar är en Student som just fyllt nio.. public class YoungStudent extends Student { //This is an override of the already implemented method in // Student! public void study() { System.out.println( *Puts book on head* ); // I am overriding solveproblem with my implementation public String solveproblem(string problem) { System.out.println( No! ); return null; 20

Arv(2) Alla studenter bör kunna studera och lösa uppgifter Men den perfekte studenten är ett abstrakt koncept.. public abstract class Student { public void study() { System.out.println("I am studying very hard."); // this method has to be implemented by concrete // students public abstract String solveproblem(string problem); 21

Arv(6) Några termer: Superklass, Basklass Subklass, härledd klass (en. Derived class) Överskugga (en. Override) "Föräldraklassen" En klass som ärver från en superklass Implementera eller ersätt en metod från en superklass (eller ett interface) HighSchoolStudent, CollegeStudent och YoungStudent ärver ifrån Student Samtliga (ej abstrakta) subklasser till Student måste implementera den abstrakta metoden solveproblem() Subklasser till Student får överskugga study() För att komma åt superklassen från subklassen, använd super Förbjuda subklassning och överskuggning? Använd final 22

Object Alla klasser ärver automatiskt från Object, direkt eller indirekt Visar på att arv i flera led är möjligt Några metoder som finns i klassen Object boolean equals(object other) Object clone() String tostring() void finalize() Dessa metoder behöver ibland överskuggas 23

UML Unified Modelling Language Ett grafiskt språk för att beskriva objektorienterade system i alla steg i programvarutvecklingen De-fakto industristandard idag I den här kursen koncentrerar vi oss på klassdiagram 24

UML Beskrivning av en klass + public - private # protected ~ package private understruken static Italic abstrakt / derived Klassnamn Attribut Metoder 25

UML Beskrivning av relationer mellan klasser Association A använder en B Aggregation A har en B OBS vag definition inom Java, undvik att använda Komposition A äger en B Generalisering (arv) A ärver från B (A kan användas som en B) Realisering (interface) A implementerar B Beroende A är beroende av B Multiplicitet exempel: En A använder en eller flera B 26

UML Exempel: UML-beskrivning av Studentklasserna Student +study() +solveproblem(string problem) : String HighSchoolStudent +openlocker() +solveproblem(string problem) : String YoungStudent +study() +solveproblem(string problem) : String CollegeStudent - int HP +solveproblem(string problem) : String +gethp(): int 27

Polymorfism poly-morf (grek.) = många former public class PolyMorphExample { public static void morphschool(student student) { student.study(); student.solveproblem( What is the matrix? ); Kan vara vilken subklass som helst Dröjer tills körningsögonblicket innan det bestäms Endast det som är deklarerat i Student är tillgängligt public static void main(string[] args) { HighSchoolStudent anna = new HighSchoolStudent(); PolyMorphExample.morphSchool(anna); 28