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

Relevanta dokument
TDDE10 TDDE11, 725G90/1. 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

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

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

Lösningsförslag övning 2.

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

Objekt och klasser - Introduktion

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

Objektorienterad Programmering DAT043

JAVA Mer om klasser och objektorientering

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

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programmering (TDDC77)

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

TENTAMEN OOP

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

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

Enkla variabler kontra referensvariabel

TUTORIAL: KLASSER & OBJEKT

Laboration 1 - Grunderna för OOP i Java

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

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

TENTAMEN OOP

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

Malmö högskola 2008/2009 CTS

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

Imperativ programmering. Föreläsning 4

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

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

Föreläsning 7: Objektorienterad programmering - introduktion

OOP Objekt-orienterad programmering

TENTAMEN OOP

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

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

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

Föreläsning 5-6 Innehåll

(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

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

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

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

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

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

Klasshierarkier - repetition

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

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

JAVAUTVECKLING LEKTION 11

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.

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

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

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

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

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

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

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

OOP Objekt-orienterad programmering

Laboration 1: Figurer i hierarki

Tentamen OOP

Föreläsning 9: Arv och UML

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

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

Classes och Interfaces, Objects och References, Initialization

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

Objektorientering: Lagring, räckvidd och livstid

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

Mer om klasser och objekt

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

Objektorienterad Programmering (TDDC77)

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 programmering i Java

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

OOP Objekt-orienterad programmering

Objekt och referenser

TDDD78 Viktiga begrepp, del 2

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

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

Objektorienterad Programmering (TDDC77)

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Design av en klass BankAccount som representerar ett bankkonto

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Transkript:

TDDE10 TDDE11, 725G90 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 Inkapsling/Synlighet 1

Hello World! with use... procedure Hej is begin Put( Hello World! ); end Hej; class MyProgram { public static void main(string[] args) { System.out.println( Hello world!"); Men vi behöver ändå en klass! 2

Objektorienterad programmering Fokus: Att modellera/representera, ansvar... 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

Hello World! Vi tänker om, och försöker tänka i objekt class Human { int age; class MyProgram { public static void main(string[] args) { System.out.println( Hello world!"); Vi skapar ett void sayhello() { objekt av klassen System.out.println( Hello world! I'm " + age +. ); human. (en instans). public static void main(string[] args) { Human david ; = new Human(); david.age = 20; david.sayhello(); Nu lägger vi över ansvaret för hur det skall hejjas på människan. Objekt utanför behöver inte bry sig om hur detta går till! ABSTRAKTION 5

6

Abstraktion (igen) När vi väl har vår abstraktion, så blir det lätt att använda den! class VeryFunGame { public static void main(string[] args) { Die die1 = new Die(); die1.roll(); Exakt hur detta går till får klassen Die ansvara för skönt! System.out.println( Du slog " + die1.result); 7

Introduktion till OOP(2) 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... 8

Objekt Faktiska instanser av klasser. Jmf. typer och värden/variabler. 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 9

public static void main(string[] args) { KiaCeedSW mycar = new KiaCeedSw(); mycar.year = 2010; Faktiska instanser av klasser. mycar.isbeingrepaired = false; if (mycar.candrive()) { System.out.prinln( Vroom! ); class KiaCeedSW{ Color color; Objekt (2) int year; String licenseplate; boolean isbeingrepaired;... boolean candrive() { if (isbeingrepaired) { return false; else { return true; Klass KiaCeedSW bengans = new KiaCeedSw(); bengans.year = 2014; if (mycar.year < bengans.year) { System.out.println( I need a new car ); Beskrivs av Instansierar mycar = new KiaCeedSw(); mycar.year = 2018; Objekt System.out.println( My Kia is from + mycar.year) 10

Objekt (3) 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 11

Om Variabler... Sedan tidigare kände vi till tre typer: Lokala variabler (finns lokalt inne i metoder) Parametrar (data som skickas in till metoder via ett anrop) Konstanter (data som inte får förändras under körning) Nu har vi även: Instansvariabler (data varje objekt sparar) Hur/Var en variabel deklareras är viktigt för dess livslängd och tillgänglighet! 12

Konstruktorer Är en speciell metod som används för att initiera ett objekt Körs när man kör new... Heter samma som klassen. 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. 13

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; Refererar till den egna instansen Varför bättre? Ungefär lika mycket att skriva... 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); 14

Konstruktorer (forts) Är viktiga! För att Lägger över ansvaret på skapandet av objektet på objektet själv. Förhindrar skapandet av default -objekt. Gör klassen smidig att använda. Bör komma som första metod(er) I klassen. (Under instansvariablerna). 15

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

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) 17

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. 18

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 Instansmetoder (vi behöver en instans för att komma åt dem).printmanufacturer() Klassmetod (static) (vi behöver inte en instans för att komma åt dem) 19

Statisk kontext För metoder innebär detta att när vi kör så kan vi antingen vara i en statisk eller icke-statisk kontext. Om vi under körning befinner oss i en klassmetod (deklarerad med static), så är vi i en statisk kontext. I praktiken kan man fråga sig detta är vi just nu i ett objekt?. Om svaret är nej så är vi i en statisk kontext. När vi är i en statisk kontext, kan vi inte komma åt några instansvariabler (ty vi har ingen instans) och referensen this kan inte användas (eftersom den annars refererar till nuvarande instans). Programmet börjar alltid i statisk kontext (main är ju static). 20

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. 21

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 Klassmetoder Klassvariabler Klass Beskrivs av Dessutom: Man behöver (bör) inte gå via en instans för att komma åt en klassmetod/klassvariabel Instantierar Objekt Instansmetoder Instansvariabler 22

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?? 23

Introduktion till OOP(3) 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 24

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! 25

Inkapsling Ex. En videobutik. 26

Inkapsling (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 RO pawn.posy = 2; R 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 27

Inkapsling (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; G pawn.posy = 2; BU... 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 28

(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 Koden ändras ju medan vi skapar den! 29 Designa programmet så att ändringar blir så smärtfria som möjligt.

(En parentes) Ändra synsätt på att programmera: Från: Få specifikationerna X, skapa program Y, KLART! Till: Levande programvara. Ändringar i koden är naturliga. 30 Designa programmet så att ändringar blir så smärtfria som möjligt.

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

Synlighet (2) 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 32

Synlighet (3) 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. 33

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

Synlighet (5) 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 35 klassen.