Objektorienterad Programmering (TDDC77)

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

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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

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

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

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

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

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

Objektorienterad Programmering (TDDC77)

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

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

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

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

Objektorienterad Programmering (TDDC77)

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

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

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)

Föreläsning 15: Repetition DVGA02

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 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

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

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

Konstruktion av klasser med klasser

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

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

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

OOP Objekt-orienterad programmering

Tentamen för TTIT71 Programmering kl Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 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

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

Classes och Interfaces, Objects och References, Initialization

Klasshierarkier - repetition

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

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

OOP Tenta

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

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

OOP Objekt-orienterad programmering

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

Imperativ programmering. Föreläsning 4

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

Instuderingsuppgifter läsvecka 2

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

Föreläsning 13 Innehåll

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

Objektorienterad Programmering (TDDC77)

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

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

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

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

TDDC77 Objektorienterad Programmering

Outline. Objektorienterad Programmering (TDDC77) Lösningen heter Collection. Collection gränsnittet. Collection. Iterable. Ahmed Rezine.

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

Objektorienterad Programmering (TDDC77)

TUTORIAL: KLASSER & OBJEKT

Föreläsning 6: Metoder och fält (arrays)

Föreläsning 2. Polyfmorfism Dynamisk bindning Interface och abstrakta klasser Överlagring Överskuggning Accessorer och mutatorer

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

TDDC77 Objektorienterad Programmering

Föreläsning 4. Polymorfism. Polymorfism Dynamisk bindning Inkapsling Information hiding Access-metoder och mutator-metoder

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

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

Föreläsning 9: Arv och UML

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

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

TDDC Terminologi Uppdaterad Fö #1

kl Tentaupplägg

Arv. Objektorienterad och komponentbaserad programmering

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

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

TENTAMEN OOP

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

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

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

Objektorienterad programmering Föreläsning 5

Laboration 1 - Grunderna för OOP i Java

TENTAMEN OOP

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

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Transkript:

Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016

Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring (overloading) Inkapsling (encapsulation) Arv (inheritance)

Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring (overloading) Inkapsling (encapsulation) Arv (inheritance)

Vad händer under HT2 I Klasser och objekt (classes and objects) I Inkapsling och arv (encapsulation and inheritance) I Åsidosättning och överlagring (overriding and overloading) I Abstrakta klasser och gränssnitt (abstract classes and interfaces) I Samlingar (collections), generics I Uppräkningar (enumerations) I Undantag (exceptions)

Laborationsserie del två lab 4: Två små uppgifter (kom igång) lab 5: Multiplikationstabell (arv versus inkapsling) lab 6: Dictionary (Samling, generics) lab 7: Menysystem (Objekthierarkier, abstrakta klasser)

Miniprojekt I Som avslutning genomförs ett miniprojekt. Det finns förslag på projekt på kurshemsidan I Det är tillåtet att komma med egna projektförslag, man får då skriva motsvarande projektbeskrivning själv. Denna ska godkännas av mig innan projektet börjar.

Datorbaserat tenta I Ett individuellt datorbaserat prov med live rättning I Där ni ska lösa ett antal problem I Tentan är planerat för den 2015-01-10 kl 14-18.

Tenta förberedelse I Programmera, Kör, förstå och prova på med alla exemplen som vi tar under föreläsningar, I Samma för labbarna och projektet I Prova lösa förra årets tentan: det blir samma svårighets grad

Ett objekt Identitet Tillstånd Tjänster

Ett objekt Typ och referens Variabler Metoder

Calculator class CalculatorDriver { public static void main ( String [] args ){ Calculator calc1 = new Calculator (); Calculator calc2 = new Calculator (); System.out. println (" calc1 +5 : " + calc1.add (5)); System.out. println (" calc2 +10: " + calc2.add (10)); System.out. println (" calc1 = " + calc1.add (0)); System.out. println (" calc2 = " + calc2.add (0)); class Calculator { private double result ; public Calculator (){ result = 0; public double add ( double a){ result = result + a; return result ; public double reset (){ result = 0; return result ;

Ett objekt (typ: Calculator) calc1, calc2 (result) 10 double add(double), void reset()

Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring (overloading) Inkapsling (encapsulation) Arv (inheritance)

Åtkomst I I Java finns fyra åtkomstnivåer för variabler och funktioner I public : alltid synlig I protected: tas upp senare I default (package): tas upp senare I private: endast synlig inom klassen I i den här kursen håller vi oss till public och private

Åtkomst grundregel I Deklarerar alla variabler som private I Deklarerar alla funktioner som public I Detta bettyder att om man vill kunna läsa/skriva en variabel från en annan klass så måste man göra funktioner som utför det. Detta kallas för getters och setters och eclipse kan generera den automatiskt I Det finns undantag, men dessa kommer ni att lära er att känna igen så småningom I Konstruktorer bör vara deklarerade som public

Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring (overloading) Inkapsling (encapsulation) Arv (inheritance)

Abstrakt datatyp I Ibland vill man behandla data på ett sätt som inte riktigt stämmer med de primitiva datatyperna. I Man måste då kombinera ihop en ny datatyp som är anpassad för det man faktiskt vill göra med den I Ett exempel på detta är stacken som ni implementerade till lincalc I En abstrakt datatyp är ofta en kombination av variabler (tillstånd) och funktioner (tjänster)... I... det låter som att abstrakta datatyper och klasser har en del gemensamt

Öva - gör om stacken som en klass I Skapa en klass StringStack som kan lagra 100 strängar I Strängarna ska lagras i en Array som det inte ska gå att ändra i så att stacken hamnar i ett otillåtet tillstånd I Ska klara operationerna push, pop och isempty

StringStack public class StringStack { private static int MAX = 100; private String [] data = new String [ MAX ]; private int pos = 0; public boolean isempty (){ return pos == 0; public void push ( String s){ data [ pos ++] = s; public String pop (){ return data [-- pos ];

Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring (overloading) Inkapsling (encapsulation) Arv (inheritance)

UML I UML = Unified Modeling Language I En enorm standard för att modellera precis allt I En liten del kallas för klass-diagram och beskriver hur klasser hänger ihop med varandra I Vi kommer i kursen att använda en mycket begränsad delmängd av dessa klass-diagram kallad Lättviktsdiagram

Lättviktsdiagram I De som ska rätta era uppgifter behöver förstå era design och vill därför ha diagram som beskriver era klasser och relationerna dem emmellan I Ni behöver inte göra formellt korrekta UML-diagram

Klassen calculator class Calculator { private double result ; result: double Calculator Calculcator() Calculcator(double) add(a: double): double add(a: double, b: double): double reset():void public Calculator (){ result =0; public double add ( double a){ result += a; return result ; public void reset (){ result = 0;

Klasser I Klasser ritas som tredelade rutor I Översta rutan innehåller klassnamnet I Därefeter följer attribut (alltså variabler) I Understa rutan innehåller metoderna attribut1namn : attribut1typ attribut2namn : attribut2typ... KlassNamn metod1namn(param1namn: param1typ,...) : returtyp1...

Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring (overloading) Inkapsling (encapsulation) Arv (inheritance)

Klassen calculator class Calculator { private double result ; memory: double result: double Calculator Calculator() Calculator(mem: double) add(a: double): double add(a: double, b: double): double store():void load():void public Calculator (){ result = 0; public Calculator ( double mem ){ result = mem ; public double add ( double a){ result += a; return result ; public double add ( double a, double b){ result = a + b; return result ; public void reset (){ result = 0;

Signatur public static int parseint ( String s) throws NumberFormatException I En konkret metod deklareras med hjälp av sex komponenter I Accessmodifierare såsom public och protected I Returtyp eller void I Metodens namn (identifierare) som ska börja med liten bokstav I Parameterlista med noll eller fler datatyper och identifierare I Eventuella checked exceptions som metoden kastar I Metodens kropp inom måsvingar I Metodens signatur betäms av metodens namns samt datatyper och ordning på parameterlistan

Överlagring I En metod överlagrar en annan om den har samma namn (identifierare) men olika signatur I Returtyp spelar ingen roll för överlagring vilket innebär att två metoder med olika returtyp men samma signatur inte är tillåtet (kompilatorn kan inte skilja på dem).

Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring (overloading) Inkapsling (encapsulation) Arv (inheritance)

Inkapsling (encapsulation)

Inkapsling (encapsulation) public private variabler bryter mot inkapsling verkställer inkapsling metoder tjänster till andra klasser hjälpar egna metoder

Personnummer class Personnummer { private int year, month, day, birthnumber, controlnumber ; public Personnummer ( String str ){ year = Integer. parseint (str. substring (0,4)); month = Integer. parseint (str. substring (4,6));... public void set_year ( int _year ){ year = _year ; public void set_month ( int _month ){ month = _month ;... public int getyear (){ return year ; public int getmonth (){ return month ;...

Employee class Employee { private Personnummer personnummer ; public Personnummer getpersonnummer (){ return personnummer ; public void readdata () { Scanner in = new Scanner ( System. in ); System. out. println (" Personnummer?"); personnummer = new Personnummer ( in. nextline ());

Driver class Driver { public static void main ( String [] args ){ Employee e = new Employee (); e. readdata (); System. out. println (" The employee was born on: " + e. getpersonnummer (). getyear () );

Inkapsling (encapsulation) anställd år personnummer Tjänster månad dag Tjänster...

Inkapsling (encapsulation)

Inkapsling (encapsulation) public private variabler bryter mot inkapsling verkställer inkapsling metoder tjänster till andra klasser hjälpar egna metoder

Inkapsling (encapsulation) I Anta att klass A kapslar in klass B. Detta illustreras genom att ett streck ritas från A till B, samt att en ifylld romb ritas vid A, alltså den klass som kapslar in den andra.

Inkapsling (encapsulation) I Student inkapslar Studiemedelw name: String Student isregistred(semester:semester):boolean register(semester:semester):void getname(): String Studiemedel

Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring (overloading) Inkapsling (encapsulation) Arv (inheritance)

Arv (inheritance) I Är en relation class Student { private int points ; private Studiemedel studiemedel ; class ITare extends Student { private int pointsdatavetenskap ;

Arv (inheritance) Superklass Subklass

Protected eller getters och setters I Vill man komma åt instansvariabler i basklassen så fungerar inte det om de är deklarerade som private. I Lösning: deklarera som protected : som private men synlig i subklasser I Bättre lösning: använd getters och setters

Att prata om arv I Subklasser ärver tillstånd och tjänster från superklasser I Ett sätt att dela på gemensam kod I En subklass utöker eller specialiserar sin superklass I En subklass är en subtyp till superklassens datatyp I En superklass kan ha flera subklasser

Arv (inheritance) I Antag att klass B ärver från klass A. Detta illustreras genom att en icke ifylld pil ritas från B till A name: String studiemedel: Studiemedel Student isregistered(semester:semester): boolean register(semester:semester):void getname(): String ITare Dare Uare

Polymorfism via Arv (inheritance) name: String Animal Animal(_name: String) getname(): String says(): String Dog Dog(_name: String) Cat Cat(_name: String) Animal hunden = new Dog (" bobby "); Animal katten = new Cat (" kitty "); System.out. println ( hunden. getname () + " says " + hunden.says ()); System.out. println ( katten. getname () + " says " + katten.says ());