Modeller, Objekt och Klasser

Relevanta dokument
Objekt, Klasser, Paket m. m.

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

Classes och Interfaces, Objects och References, Initialization

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

Java, klasser, objekt (Skansholm: Kapitel 2)

DAT043 - Föreläsning 7

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

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

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

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

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

TUTORIAL: KLASSER & OBJEKT

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

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

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

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Föreläsning 5-6 Innehåll

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

Malmö högskola 2008/2009 CTS

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

TENTAMEN OOP

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

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

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

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

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

Lösningsförslag övning 2.

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

Enkla variabler kontra referensvariabel

Föreläsning 13 Innehåll

Objekt och klasser - Introduktion

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

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

Objektorienterad Programmering DAT043

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

TENTAMEN OOP

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

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

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

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

Objektorienterad Programmering (TDDC77)

(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

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

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

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

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

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

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

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

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

Klasser och objekt. Henrik Johansson. August 20, 2008

Objektorienterad programmering

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.

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

Tentamen OOP

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

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

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]

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

Objektorientering: Lagring och livstid

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Konstruktion av klasser med klasser

Laboration 1 - Grunderna för OOP i Java

Objektorienterad programmering i Java

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

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

OOP Objekt-orienterad programmering

Klasshierarkier - repetition

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

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

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

Kopiering av objekt i Java

Objekt och referenser

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Föreläsning 2, vecka 8: Repetition

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Objektorientering: Lagring, räckvidd och livstid

OOP Objekt-orienterad programmering

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

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

Objektorienterad programmering Föreläsning 5

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

DD1342 Programkonstruktion för F1,

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

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

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

TDDD78 Objektorientering: Lagring och livstid

Typkonvertering. Java versus C

Objektorienterad programmering i Java

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

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

Objektsamlingar i Java

Transkript:

Modeller, Objekt och Klasser Bildserie 3

Objekt Orienterad Programmering OO-programmering bygger på att vi som människor uppfattar tillvaron i termer av objekt - Bastu, pizza, öl,... Det borde vara lättare att skriva program om programmen är uppbyggt på liknande sätt - Programmet är en abstraktion (en objektmodell) av en vald del av vår verklighet - Abstraktionen/modellen måste vi själva ta fram - Kan du abstrahera (Bongard problem)?

En Objektmodell av vad? SAOL pelle brickhållare fia brickhållare spelplan påse många bricka bricka bricka bricka bricka bricka bricka (svar)

Lösa Komplexa Problem Det klassiska sättet att lösa komplexa problem är att dela problemet i mindre delproblem - Ev. dela dessa i ännu mindre - När de minsta problemen är lösta, kombinera ihop (del)lösningarna till en lösning för hela problemet - Objektorientering ger oss ett sätt att dela upp problemet, nämligen i objekt

Objekt Ett objekt karakteriseras av - Identitet, det som gör det möjligt att särskilja objektet från andra objekt (pelle, fia) - Tillstånd, den data som finns i objektet (namn, poäng) - Beteende, hur man kan använda objektet, vad man kan göra med det (pelle skall ta bricka ur påse)

Objekt Modeller och Java Objektmodeller består av interagerande objekt - Objekt måste vara kopplade till varann (annars hänger de i luften, de kan inte interagera) Alla värden i Java måste ha en typ - objekten är faktisk värden, de måste ha typer! - Hmm, fia och pelle är värden! Vilken är typen? Abstrahera (flera möjligheter)!

Java-anpassad Modell SAOL: WordBook scrabble är topobjektet, kopplar ihop modellen*) pelle : Player Koppling scrabble: Scrabble brickhållare : Holder fia: Player brickhållare : Holder spelplan: Board påse: TileBag många bricka bricka bricka bricka bricka bricka bricka: Tile *) Kan också ses som objektet för hela spelet Typer i rött (finns andra tänkabar typer)

Objekttyper och Kopplingar Hur skapar man modellens objekttyper och kopplingar? Svar: Detta görs m.h.a. klasser - Klassen anger objekttypen - Klassen deklarerar vilka kopplingar (referenser) till andra objekt ett viss typ av objekt kan ha (m.h.a. instansvariabler = attribut)

Klass För att skapa objekt behöver vi klasser (class) - Klassen skapas först och m.h.a denna ett eller flera objekt - En klass är en beskrivning (ritning) för objekten - Alla objekt som har samma uppbyggnad/struktur skapas utifrån samma klass - pelle och fia har samma struktur, de tillhör (har typen) Player - Ett objekt är en instans (specialfall) av en klass. Pelle är en instans av Player -.. som sagt en klass introducerar en ny referenstyp

Skapa Klasser I Java skapas klasser genom att man - Skapar en text 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. Vi använder alltid public för klasser - Vid kompilering av *.java filer skapas *.class filer (de innehåller Java byte code för klassen

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

Klassmedlemmar I klassdeklarationen anger man klassens medlemmar Vi anger följande medlemmar - Instansvariabler (= attribut) - Konstanter (konstanta instansvariabler) - Metoder - Konstruktor(er) - m.m. mer senare...

Instansvariabler Instansvariabler ger objektets tillstånd - Deklareras i kroppen (alltså mellan { och }) - Var man deklarerar spelar ingen roll, ofta först i kroppen - Synlighetsområdet är hela klassen (klasskroppen) - Deklaration anger typ, namn och ev. modifierare - Normalt använder vi private, som modifierare, mer senare - Instansvariabler har förbestämda värden, int är 0, referenser är null - Alla objekt har en egen uppsättning av instansvariablerna - Vissa av instansvariablerna utgör kopplingar till andra objekt (det är så vi får en sammanhängande modell)

Tile : Instansvariabler I // Tile.java public class Tile { } private String glyph; // Instance variables private int points; private boolean frozen; // Why?... glyph Tile objekt kan kopplas till objekt av typen String points

Metoder Metoder ger beteendet, det vi kan göra med objekten - Metoder deklareras också direkt i klasskroppen enligt; modifierare returtyp* namn ( parameterlista** ){ //Metodhuvud } // 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) - Returtypen är typen för det värde metoden returnerar (om något). Om returvärdet inte sparas (tilldelas en variabel) försvinner det. - Ordningen (var i kroppen) spelar ingen roll *) Om returtyp saknas anges void (= metoden är inte ett uttryck) **) Parameterlistan kan vara tom

Tile: Metoder // Tile.java public class Tile { } private final String glypth; private int final points; private boolean frozen; public String getglypth() { return glypth; } public int getpoints() { return points; } public boolean isfrozen(){ return frozen; } public void freeze(){ frozen = true;} Inget static används, mer senare...

Konstruktor En konstruktor är en speciell metod som exekveras då objektet skapas - Används för initiering (ge instansvariablerna värden, t.ex. koppla ihop objektet med andra objekt) - Har samma namn som klassen - Noll eller flera parametrar - Kan inte anropas som en vanlig metod - Finns alltid en parameterlös default -konstruktor (även om den inte syns i koden). Skapas automatiskt - Ingen returtyp skall anges. Om returtyp anges blir det en vanlig method, isf körs metoden inte då objektet skapas! Varning!

this this står i vårt fall för 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) - Används ofta för att kunna använda samma namn för en metodparameter och en instansvariabel (man kan skilja dem åt genom att använda this framför instansvariabeln)

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 (exempel: koppingen skall aldrig ändras) - Konstanta variabler kan ges värden i konstruktorn - Använd final generöst (det vi inte kan ändra på kan inte bli fel) Finns något som kallas bara konstanter också. återkommer

Tile: Konstruktor och this // Using a constructor to initialize constant values public class Tile { private final String glypth; // When created never changes private final int points; // No use of constructor, shall always start out as false private boolean frozen = false; // Constructor to set start values public Tile(String glypth, int points) { this.glypth = glypth; // Using the this reference this.points = points; }... // methods here...... }

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 Tile t; // No object just a variable!

Klass kontra Typ I fortsättningen används klass och typ som utbytbara begrepp - Typen Dice - eller klassen Dice, syftar på samma sak... - Objekt av klass = objekt av typ - Instans av klass = instans av typ -...

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 - Alla som använder referensen refererar till samma objekt - Sparas inte returvärdet (referensen) finns det senare inget sätt att komma åt objektet!

Skapa Objekt // Instance creation using new, type, classname and assignment 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 Finns ett objekt i minnet som representerar klassen Klasser laddas automatisk in i minnet vid behov t2 Tile.class Minnet Disk

Skräpsamling De objekt vi behöver i programmet skapar vi. Men hur blir vi av med objekt vi inte behöver längre? - Objekten skapas i minnet, många objekt -> mycket minne. Risk att minnet tar slut? - Java hanterar detta genom s.k. skräpsamling (garbage collection) - objekt som inte refereras förstörs automatiskt - Vi behöver normalt inte bekymra oss

Klassen Object Alla klasser vi skapar har en förälder - Anges ingen speciellt sätts föräldern till den befintliga klassen Object (gäller för oss just nu). Föräldern kallas super-klass till vår klass. Object är superklass - Våra klasser ärver därmed metoder från Object, t.ex. metoden tostring() - Om vi inte är nöjda med de metoder vi ärver kan vi skapa egna versioner i vår klass, kallas överskugga. Om så visar vi detta med @Override (en annotering) - Objekt skapade utifrån vår klass kör vår (överskuggade) metod ist för den ärvda - Den överskuggande metoden måste ha exakt samma namn, returtyp och parametrar som den ärvda - De objekt vi skapar utifrån våra klasser har delobjekt av typen Object Klasser Objekt är super-klass till Tile Object Tile t :Object :Tile Objekt Variabeln t refererar ett objekt av typ tile med ett delobjekt av typen Object

Tile: Överskuggning Metoden tostring() ärvs från Object, överskuggas i Tile - Metoden anropas automatisk vid utskrifter, bra vid felsökning // Tile.java public class Tile { }... // attributes, methods here... // Original inherited but we override with own version // (easier to read when written to output) @Override public String tostring() { return "[" + glyph + "," + points + "]"; } // We prefer this

Array och egna Typer Om vi skapat en klass kan vi deklarera en array med hjälp av den nya typen - Klassen Holder (i Scrabble) använder en array av Tile (Tile[] )

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

Läxa Skapa objektmodell för spelet Gris (Pig) - Anpassa modellen till Java