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

Relevanta dokument
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 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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

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

Lösningsförslag övning 2.

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

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

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

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

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

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

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

JAVA Mer om klasser och objektorientering

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

Malmö högskola 2008/2009 CTS

Objektorienterad Programmering DAT043

TENTAMEN OOP

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

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

Objekt och klasser - Introduktion

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, HT2011. Rum

Objektorienterad Programmering (TDDC77)

Malmö högskola 2007/2008 Teknik och samhälle

Föreläsning 7: Objektorienterad programmering - introduktion

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

Laboration 1 - Grunderna för OOP i Java

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

TENTAMEN OOP

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

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

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

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

Föreläsning 5-6 Innehåll

Laboration 1: Figurer i hierarki

TENTAMEN OOP

TUTORIAL: KLASSER & OBJEKT

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

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

Objektorienterad Programmering (OOP) Murach s: kap 12-16

OOP Objekt-orienterad programmering

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Enkla variabler kontra referensvariabel

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

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

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

TDDD78 Viktiga begrepp, del 2

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

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

Klasshierarkier - repetition

JAVAUTVECKLING LEKTION 11

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

Föreläsning 9: Arv och UML

Malmö högskola 2007/2008 Teknik och samhälle

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

OOP Objekt-orienterad programmering

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

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

(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

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

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Tentamen OOP

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

1 Egna klasser. 1.1 En punkt-klass

Idag ska vi gå igenom. Programmeringsteknik för S, 2004 Grupp IV. Vad är en klass? Klasser och instanser

Objektorienterad Programmering (TDDC77)

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

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

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

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

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

Tentamen. Lösningsförslag

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

OOP Objekt-orienterad programmering

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Objektorienterad Programmering (TDDC77)

DD1342 Programkonstruktion för F1,

Mer om klasser och objekt

Transkript:

TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder Konstruktorer klassmetoder, klassvariabler Synlighet 1

Hello World! I Java använder vi klasser för nästan allt! class Human { int age; void sayhello() { System.out.println( Hello world!"); public static void main(string[] args) { Human david = new Human(); david.age = 20; david.sayhello(); Vi skapar ett objekt av klassen human 2

Objektorienterad programmering Objekt som skapar andra objekt Objekt som interagerar med andra objekt Vem skapar det första objektet då? 3

Introduktion till OOP(1) Fallstudie: Boll Slutsatser: Attribut (en. field) Information/egenskaper Metoder (en. method) Vad den kan göra, Operationer 4

Introduktion till OOP(2) Fallstudie: DVD-spelare Slutsatser: Attribut (en. field) Information/egenskaper Metoder (en. method) Vad den kan göra Objekt kapslar in sin implementation, visar upp ett gränssnitt 5

Introduktion till OOP(3) Fallstudie: DVD-spelare + TV Visa upp den här filmen! Slutsatser: Attribut (en. field) Information/egenskaper Metoder (en. method) Vad den kan göra Objekt kapslar in sin implementation, visar upp ett gränssnitt Objekt samarbetar! 6

Introduktion till OOP(4) Fallstudie: Kia Cee d SW många objekt Slutsatser: Objekt kan vara lika varandra, men är ändå inte samma objekt Objekt som verkar vara likadana hör ändå ihop på något sätt.. 7

Objekt Faktiska instanser av klasser. class KiaCeedSW{ INST ANS Color color; VAR IABL ER int modelyear; String licenseplate; boolean isbeingrepaired;... boolean candrive() { if (isbeingrepaired) { SN return false; A T INS OD T E else { M return true; Klass Beskrivs av Instansierar Objekt 8

Objekt (2) Instansvariabler deklareras i klassen (utanför metoder). Jämför med lokala variabler, parametrar. Klass Varje objekt får sina egna instansvariabler. Beskrivs av Instansmetoder kan använda sitt objekts instansvariabler. Instansierar Objekt 9

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 instansieras innan det kan användas. 10

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

Konstruktorer Är en metod som används för att initiera ett objekt Körs när man kör new... Klasser kan ha flera olika konstruktorer Klasser kan helt sakna konstruktorer (En tom defaultkonstruktor skapas av kompilatorn) public class Human { int age; Defaultkonstruktorn: // Detta är konstruktorn public Human() { public Human(int startingage) { age = startingage; public void printage() { System.out.println("Jag är " + age + " år gammal"); Vi skapar ett public static void main(string[] args) { objekt av klassen Human lisa = new Human(27); human lisa.printage(); genom att anropa konstruktorn. 12

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 (I t.ex. main): Vid instansiering (med konstruktor): Movie m = new Movie() m.year = 1999; m.title = The Matrix ; m.rating = 10.0; Movie favomovie = new Movie(1999, The Matrix, 10.0); 13

Statiska metoder och variabler public class KiaCeedSW{ Color color; int modelyear; String licenseplate; KiaCeedSw mykia = new KiaCeedSW(Gray, 2010, KPY038 ); KiaCeedSw gulliskia = new KiaCeedSW(Red, 2011, RJU552 ); static String manufacturer = Kia Motors ; static double rating = 7.2; public KiaCeedSW(. // Konstruktorn KiaCeedSw tjskia = new KiaCeedSW( Black, 2012, FFS123 ); 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. 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. 14

Statiska metoder och variabler (2) public class KiaCeedSW{ Color color; int modelyear; String licenseplate; static String manufacturer = Kia Motors ; static double rating = 7.2; public KiaCeedSW(. // Konstruktorn 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) 15

Statiska metoder och variabler (3) public class KiaCeedSW{ Color color; int modelyear; String licenseplate; static String manufacturer = Kia Motors ; static double rating = 7.2; public KiaCeedSW(. // Konstruktorn Från en instans kan man komma åt klassvariabler: mykia.manufacturer Detta är ju rimligt, men kanske inte så tydligt. 16

Statiska metoder och variabler (4) public class KiaCeedSW{ public void drive() { public static void givenewrating(double d) { public void setcolor(color newcolor) { public static void printmanufacturer() { Vi kan göra samma uppdelning för metoder. mykia.drive() KiaCeedSW.giveNewRating(8.75) mykia.setcolor(gold) KiaCeedSW.printManufacturer() Instansmetoder (vi behöver en instans för att komma åt dem) Klassmetod (static) (vi behöver inte en instans för att komma åt dem) 17

Statiska metoder och variabler (5) 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. 18

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

Statiska metoder och variabler (7) Testa dig själv. Vad skulle vara static för t.ex. klassen Date som representerar ett datum? Variabel/Metod Beskrivning day, month, year Heltal för att representera datumet. nej nextdate() Metod som returnerar nästa dag. nej firstdate() Metod som returnerar första datumet som går att representera. static daysinaugust Heltal som håller reda på hur många dagar det är i augusti månad. static (och final) isbefore(date d1, Date d2) Metod som returnerar sant om d1 är före d2. static formatoptions Data som beskriver utskriftsformat static?? 20

Synlighet Ex. En videobutik. 21

Synlighet (2) Vi blandar in lite fler klasser... class ChessPiece { int posx; Point pos; int posy; String name; class ChessBoard { void setup() { ChessPiece pawn = pawn.posx = 1; R pawn.posy = 2;RRO E... class ChessGame { void play() { pawn.posy++... OR R ER y x Det finns en klass Point, för att representera punkter I planet! class ChessRules { boolean ischeckmate() { if (king.posy ==...... OR R ER 22

Synlighet (3) x Eller ännu värre... class ChessPiece { int posx; int posy; String name; fixar till... class ChessBoard { void setup() { ChessPiece pawn = pawn.posx = 1; pawn.posy = 2;BUG... class ChessGame { void play() { pawn.posy++... G BU y y x Kanske mer effektivt att ha koordinatsystemet på ett annat sätt? class ChessRules { boolean ischeckmate() { if (king.posy ==...... G BU 23

(En parentes) Varför skall vi hålla på att ändra koden? Verkar ju bara bli problem Koden behöver effektiviseras. Nya krav har kommit från kund. Yttre omständigheter påtvingar att koden renoveras. Koden kanske inte var rätt från början... 24så Designa programmet att ändringar blir så smärtfria som möjligt.

Synlighet (3) Varför blir det så här? Och hur borde man göra då? class ChessPiece { private int posx; private int posy; String name; class ChessBoard { void setup() { ChessPiece pawn ChessPiece pawn = = pawn.x = 1; new ChessPiece(1, 2); pawn.y = 2;... B E F R Ö R O F E class R ChessGame { Å N void G D play() { A E N pawn.y++ pawn.increasey(1);... y x class ChessRules { boolean ischeckmate() { if (king.y ==... (king.ispositioned()...... 25

Synlighet (4) 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 26

Synlighet (5) Dölj implementationen, visa upp ett gränssnitt. Eftersom vi nu kapslar in data är det mycket viktigt att rätt klass ansvarar för sin funktionalitet. Gör man inte detta får man otrevliga beroenden. 27

Synlighet(6) Dölj implementationen, visa upp ett gränssnitt. Riktlinjer: 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 28

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