Objektorienterad Programmering (TDDC77)

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

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

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.

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

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

Objektorienterad Programmering (TDDC77)

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

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

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

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

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

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

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

TUTORIAL: KLASSER & OBJEKT

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

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

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

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

Objektorienterad programmering Föreläsning 5

TDDC77 Objektorienterad Programmering

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

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

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

OOP Objekt-orienterad programmering

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

Klasshierarkier - repetition

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

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

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

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

Konstruktion av klasser med klasser

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

Arv. Objektorienterad och komponentbaserad programmering

Imperativ programmering. Föreläsning 4

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

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

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

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

OOP Objekt-orienterad programmering

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

Classes och Interfaces, Objects och References, Initialization

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 15: Repetition DVGA02

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

Laboration 1 - Grunderna för OOP i Java

OOP Objekt-orienterad programmering

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

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

Föreläsning 13 Innehåll

TENTAMEN OOP

JAVA Mer om klasser och objektorientering

Föreläsning 9: Arv och UML

OOP Objekt-orienterad programmering

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

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

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

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

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

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

TDDC77 Objektorienterad Programmering

kl Tentaupplägg

Objekt och klasser - Introduktion

Klasser och objekt. Henrik Johansson. August 20, 2008

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

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

TENTAMEN OOP

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

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

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

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

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

Föreläsning 5-6 Innehåll

Objekt, Klasser, Paket m. m.

Transkript:

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

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

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

Att instansiera en klass I Man instansierar (skapar ett objekt av) en klass genom att anropa en konstruktor I Detta sker genom att använda nyckelordet new följt av klassnamn och parameterlista I Det kan finnas flera konstruktorer med olika parameterlistor I Exakt en instans skapas för varje gång man kör konstruktorn Greeter glad = new Greeter (" hejhej "); Greeter compis = new Greeter (" tjaba ");

Objekt Greeter glad = new Greeter (" hejhej "); Greeter compis = new Greeter (" tjaba "); Greeter Greeter hejhej speak() tjaba speak() glad compis

Konstruktorer I En konstruktor saknar returtyp och heter samma som klassen I Om ingen konstruktor skrivs så skapas automatiskt en så kallad standardkonstruktor som inte tar några argument I Om man skapar en egen konstruktor så skapas inte standardkonstruktorn automatiskt I Man kan ha godtyckligt många konstruktorer så länge de har olika parameterlistor I Detta gäller generellt för alla funktioner och kallas överlagring (tas upp senare)

Referenser I Objekt är referenstyper,det betyder att när man skapar ett objekt egentligen man får en referens tillbaka I Gör man sedan en tilldelning eller jämförelse så är det referensen som jämförs Greeter john = new Greeter (" God morgon, jag heter John Smith!"); Greeter johnsmor = john ; Greeter johnsfar = johnsmor ;

Flera referenser - samma objekt Greeter... jag heter John... speak() johnsmor john johnsfar

Outline Instansiering Å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 Instansiering Å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 Instansiering Å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 ; Calculator result: double 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 KlassNamn attribut1namn : attribut1typ attribut2namn : attribut2typ... metod1namn(param1namn: param1typ,...) : returtyp1...

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

Klassen calculator class Calculator { private double result ; Calculator memory: double result: double 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 Instansiering Å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 Instansiering Å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) Animal name: String 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 ());