Objekt, Klasser, Paket m. m.

Relevanta dokument
Modeller, Objekt och Klasser

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

TUTORIAL: KLASSER & OBJEKT

JAVA Mer om klasser och objektorientering

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

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 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 5-6 Innehåll

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

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

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

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

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

Objekt och klasser - Introduktion

Objektorienterad Programmering (TDDC77)

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.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

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

Kopiering av objekt i Java

Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

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

Objektorienterad Programmering (TDDC77)

Objektorienterad programmering Föreläsning 5

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

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

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

Klasser och objekt. Henrik Johansson. August 20, 2008

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

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

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

Malmö högskola 2008/2009 CTS

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

Föreläsning 13 Innehåll

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

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

Laboration 3, uppgift En klass för en räknare

Konstruktion av klasser med klasser

Objektorienterad programmering i Java I

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

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

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

Klasser och objekt i C#

Att skriva till och läsa från terminalfönstret

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

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

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

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Classes och Interfaces, Objects och References, Initialization

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 Comparator & Comparable

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

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

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

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

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

Objektorienterad Programmering DAT043

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

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

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

(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

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

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]

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 4. Klasser och objekt

OOP Objekt-orienterad programmering

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

Design av en klass BankAccount som representerar ett bankkonto

Övningar Dag 2 En första klass

Objektorienterad programmering D2

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

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

Enkla variabler kontra referensvariabel

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

C++ Objektorientering - Klasser. Eric Elfving

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

Lösningsförslag övning 2.

Presentation av trafiksimuleringsprojektet

Föreläsning 3-4 Innehåll

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

DAT043 - Föreläsning 7

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

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

Transkript:

Objekt, Klasser, Paket m. m. Bildserie 3

Objekt Ett objekt karakteriseras av - Identitet, det som gör det möjligt att särskilja objektet från andra objekt - Tillstånd, den data som finns i objektet - Beteende, hur man kan använda objektet, vad man kan göra med det För att kunna exekvera (köra) vår modell behöver vi objekt

En Modell av?(svar) Vad står rektanglarna för? Vad står linjerna för?

Klass För att skapa objekt behöver vi klasser (class) - En klass är en beskrivning (ritning) för objekten - Alla objekt som har samma uppbyggnad/struktur skapas utifrån samma klass Modeller brukar visualiseras m.h.a. UML klassdiagram (Unified Modelling Language), förgående bild är ett dylikt Rektanglarna står för klasser

Skapa Klasser I Java skapas klasser genom att man - Skapar en fil, med klassens namn. Filändelsen måste vara.java - I filen skriver man en klassdeklaration där man anger klassens namn (samma som filen) samt kropp (class body) - Man kan även ange modifierare, public betyder att klassen kan användas i alla delar av programmet (man bygger program av delar, s.k. paket, kommer senare...). Vi använder alltid public för klasser

Tile : Klassdeklaration // Class declaration in file Tile.java public class Tile { // Class body, delimited by { and } } Använder klasser från Scrabble (Alfapet) som genomgående exempel, anges med grön text

Klassmedlemmar I klassdeklarationen anger man dessutom klassens medlemmar Vi anger följande medlemmar; - Instansvariabler (attribut) - Metoder - Konstruktor(er) - mer senare...

Instansvariabler Instansvariabler ger objektets tillstånd - Deklareras i kroppen (alltså mellan { och }) - Var man deklarerar spelar ingen roll, normalt först i kroppen - Deklaration anger typ namn och ev. modifierare - Normalt använder vi private, som modifierare d.v.s. andra objekt kommer inte åt instansvariabeln - Instansvariabler har förbestämda värden, int är 0, String (referenser) är null,...

Konstanta Instansvariabler Mycket vanligt med konstanta instansvariabler, instansvariabler som inte kan ändras - Variabler deklarerade som final kan inte ändras - Variablerna måste ges värden i samband med att objektet skapas och ändras därefter aldrig - Använd final generöst (det vi inte kan ändra på kan inte bli fel). Vill vi ändra är det ofta bättre att skapa ett nytt objekt (med det ändrade tillståndet) - Finns även begreppet konstanter, se klassvariabler senare

Tile : Instansvariabler I // Tile.java public class Tile { private final String glypth; // Instance variables private final int points; // Can t change }...

Position : Instansvariabler Klassen Tile är inte kopplad till någon annan modellklass, det är däremot Position (linjen i klassdiagrammet till Tile) public class Position { private final int row; private final int col; private final Bonus bonus; private final Tile tile; // The line in the diagram! // Should we use final? }

Metoder Metoder ger beteendet, det vi kan göra med objekten - Metoder deklareras också direkt i kroppen enligt; } modifierare returtyp namn ( parameterlista* ){ // Metod kropp - Vi använder public och private som modifierare. Public kan anropas av andra objekt, private kan bara användas internt i objektet (hjälpmetoder). - Ordningen (var i kroppen) spelar ingen roll *) Parameterlistan kan vara tom

Tile: Metoder // Tile.java public class Tile { } private final String glypth; private int final points; public String getglypth() { // Very simple method } return glypth; public int getpoints() { } return points;

Konstruktor En konstruktor är en speciell metod som exekveras då objektet skapas (körs så fort minne till objektet har reserverats) - Används för initiering, ge objektet ett starttillstånd - Har samma namn som klassen - Noll eller flera parametrar - Ingen returtyp. Om returtyp anges blir det en vanlig method, isf körs metoden inte då objektet skapas! - Kan inte anropas som en vanlig metod (dock kan konstruktorer anropa varann)

Konstruktor, forts - Finns alltid en parameterlös default -konstruktor (även om den inte syns i koden). Skapas automatiskt - Kan ha flera konstruktorer (med olika antal/typ på parametrar) - Lägger man till egna försvinner default - konstruktorn (kan återskapas med egen parameterlös konstruktor)

this This står för två saker i koden En referens till det aktuella objektet - this-referensen är tillgänglig i konstruktorn och syftar då på det objekt vi håller på att konstruera - this referensen kan även användas i andra metoder (objektet vars metod vi exekverar) Vid explicit anrop av en konstruktor från en annan konstruktor står this för den konstruktor man anropar

Tile: Konstruktor och this public class Tile { private final String glypth; private final int points; public Tile(String glypth, int points) { // Constructor this.glypth = glypth; // Using the this reference this.points = points; } } public Tile(String glypth) { // Other Constructor... this(glypth, 0); //..calling the above } Se även klassen Position

Klasser och Typer Att deklarera en klass innebär att vi får en ny referenstyp (med samma namn) Givet: Alla variabeldeklarationer måste ange en typ Givet: Vi har en ny typ Slutsats: Vi kan deklarera variabler av den nya typen // Declaring a variable using our new type Tile private final Tile t; Q: Vilka element ingår i typen? A: De vi skapar med new!

Instansieringsuttryck För att skapa ett objekt (en instans av klassen) används ett instansieringsuttryck (där new operatorn ingår) // Class instance creation expression new Classname (arg, arg,... ) Värde för uttrycket är en referens till det nyss skapade objektet, den unika identiteten ges av denna referens! - Alla som använder referensen refererar till samma objekt

Skapa Objekt // Instance creation using new, new type and klassname Tile t1 = new Tile(); Tile t2 = new Tile(); Returvärde från new (referensen) t1 Tile objekt Tile objekt (instans) new class Tile {... } Tile klassen Klasser laddas automatisk in i minnet vid behov t2 Minnet

Överlagring Att man kan ha flera konstruktorer men med olika antal parametrar kallas överlagring (overloading) - Vilken konstruktor som anropas bestäms av parametrarna (antal, typ, ordning) - Man använder flera av bekvämlighetsskäl, man utgår från konstruktorn med flest parametrar och skapar sedan andra konstruktorer med förvalda värden för vissa parametrar

Överlagring av Metoder Överlagring är inte specifikt för konstruktorer, fungerar även för vanliga metoder - Används om samma sak skall göras men med flera olika varianter av parameterlista - Samma metodnamn för flera metoder, bekvämt (slippa hitta på nya namn) - Vi får ett beteende utifrån parametrarna - Metodens returtyp har ingen betydelse för överlagring (räknas inte)

Paket Normalt består ett Java-program av ett stort antal klasser För att organisera programmet och samla klasser som hör ihop, skapar man paket (package) - Ett paket i Java motsvaras av en folder i filsystemet - För att placera en klass i ett paket lägger man klassfilen i foldern och anger först i filen package + foldernamn - För att enkelt kunna använda en klass från ett annat paket används import

Lab 1: Paket Paketet ingår egentligen i klassnamnet (=kvalificerat klassnamn) d.v.s. Yatzy heter egentligen yatzy.yatzy yatzy package yatzy; public class Yatzy {... } gui Om vi flyttar filen till annan katalog måste vi ändra package och import package yatzy.gui; import yatzy.yatzy public class MainFrame {... }

Namnkonventioner Som vi sett ovan så används för - Instansvariabler och metoder; inledande liten bokstav och därefter camelcase - Klasser; inledande stor bokstav och därefter CamelCase - Paket; små bokstäver

Design av Klasser (Objekt) Hittills har vi tittat på tekniska aspektert av klasser och objekt, en del teknik att lära men allt är entydigt bestämt Värre är det att avgöra vilka objekt vi behöver och tillstånd/beteenden för dessa??? - Finns inga enkla svar, modellen ger tänkbara objekt, men exakt hur de skall utformas och hur de skall samverka är ofta höljt i dunkel

Undantag Ett typiskt designproblem är hur ett objekt skall bete sig då det inte kan utföra en uppgift // Assume a Dice class // Method to roll. Nothing can go wrong public int roll(){ } // Method to get last result // If roll not called there is no last result! What to do?? public int getlastresult(){...}

Undantag forts. Finns flera lösningar på föregående problem - Returnera ett värde som är omöjligt, t. ex. -1 (måste kontrolleras efter anrop). Ibland svårt att hitta omöjligt värde - Returnera sant eller falskt (boolean) om det gick bra respektive inte. Fungerar inte med getlastresult(), vi måste få ett int-värde - Kasta ett undantag, måste hanteras annars avbryts programmet. Kasta undantag ofta bäst (använd)

Lab1: Klassen Dice // Use exception to handle impossible situation public int getlastresult(){ // if no roll done throw new IllegalStateException( Must roll first ); } Generellt är felhantering mycket komplext, finns ingen allmänt accepterad metod hur man skall hantera fel. I denna kurs fungerar koden ovan ofta bra

Flöde Undantag Då en anropad metod är klar sker alltid ett återhopp till den rad där metoden anropades Om vi däremot kastar ett undantag så ändras flödet - Programmet kommer att passera genom alla metodanrop för att slutligen nå main(), där programmet kommer att avbrytas med en felutskrift - Ett sätt att stoppa detta är att fånga (catch) undantaget. Kan ske i vilken metod som helst på vägen

Fånga Undantag Om man inte vill att programmet skall avbrytas kan man fånga undantaget (felet kanske går att åtgärda) - Görs med konstruktionen try catch... - Vi använder framför allt i samband med filhantering senare...återkommer

Testning av Klasser Testning är ett sätt att höja kvaliteten på våra klasser - Normalt testas all icke triviala klasser och metoder - Enhetstestning (unit tests), testa en klass i isolering - Integrationstestning (integration testing) testa några samverkande klasser - En test är i vårt fall en Java klass med testmetoder (vi har en testklass och vi har klassen/klasser som skall testas) - Vi använder manuell testning, d.v.s. vi får granska utskrifter och avgöra om resultatet är ok (finns bättre men inte just nu )

Lab 1: Tester Det finns många färdiga tester för många klasser - Testerna ligger i mappen yatzy.test - Testerna är egna program, går att köra - En del tester är färdiga andra skall ni komplettera - Privata metoder måste ändras till publika om de skall testas (till privat igen efter test, det finns bättre sätt men inte just nu)