Enum, mer om Arv, Abstrakta klasser, Polymorfism, Recursion! Förelasning 14!! TDA540 Objektorienterad Programmering!

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

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

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

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

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

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

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

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

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

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

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Arv och Grafiska Användargränssnitt

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

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Modeller, Objekt och Klasser

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

DAT043 - Föreläsning 7

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

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

Classes och Interfaces, Objects och References, Initialization

Polymorfi. Objektorienterad och komponentbaserad programmering

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Klasshierarkier - repetition

Föreläsnings 9 - Exceptions, I/O

OOP Objekt-orienterad programmering

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

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

Kopiering av objekt i Java

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

Repetition av OOP- och Javabegrepp

Föreläsning 13 Innehåll

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

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

OOP Objekt-orienterad programmering

Repetition av OOP- och Javabegrepp

Objektorienterad programmering i Java

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

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

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

Föreläsning 14. Filhantering

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

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

PROGRAMMERINGSTEKNIK TIN212

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Konstruktion av klasser med klasser

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

Arv. Objektorienterad och komponentbaserad programmering

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

Föreläsning 15: Repetition DVGA02

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

OOP Objekt-orienterad programmering

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

TENTAMEN OOP

Imperativ programmering. Föreläsning 4

Agenda. Objektorienterad programmering Föreläsning 13

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

DAT043 Objektorienterad Programmering

1 Comparator & Comparable

Laboration A Objektsamlingar

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

TENTAMEN OOP

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

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

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

Objektorienterad Programmering (TDDC77)

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

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

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Objekt, Klasser, Paket m. m.

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Objektorienterad Programmering (TDDC77)

LÖSNINGSFÖRSLAG TENTAMEN

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

F4. programmeringsteknik och Matlab

TENTAMEN OOP

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Lösningsförslag till tentamen

DAT043 - föreläsning 8

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

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

Arv och polymorfism i Java

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

Lösningar för tenta 2 DAT043,

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

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

(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

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

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Föreläsning 12: Exempel och problemlösning

Transkript:

Enum, mer om Arv, Abstrakta klasser, Polymorfism, Recursion! Förelasning 14!! TDA540 Objektorienterad Programmering!

Enum Uppräkningstyp (enum = enumeration) - Används då en typ har ett fåtal (oföränderliga) objekt t. ex. veckodagar, färger, kön, (varje objekt fungerar som ett värde) - Typen deklareras som en klass men med enum istf class - I enum:en räknas de ingående objekten upp (objekten skapas automatiskt vid körning) - enum; kan inte ärva/ärvas, kan inte använda new, kan ha konstruktor och metoder, m.m.

Varför Enum? Antag att vi använde heltal eller strängar för veckodagar // Using int or String for weekdays public final int MONDAY = 0 // Using int... public final String FRIDAY = friday ; //.. or String // Compiler can t warn us for misstakes... private int today = MONDAY; // Ok! private int today = -1; // Oh, oh, // Safe compiler reject anything but a Weekday private Weekday today =... must have type Weekday here...

Arv och Överskuggning Om vi låter en subklass överskugga en metod från superklassen gäller följande vid anrop av metoden; - Om objektet är av superklasstyp anropas metoden i superklassen - Om objektet är av subklasstyp anropas metoden i subklassen - Vad som sker bestäms inte av den deklarerade typen (typen på referensvariabeln) Kallas för sen bindning (late binding). Vad som sker bestäms under körning (inte vid kompilering)

getclass() Om man använder överskuggning (override) så bestäms vilken metod som skall köras utifrån objektets typ* (inte referensvariabelns) Man kan kontrollera vilken typ ett objekt har m.h.a. metoden getclass() - Finns i alla klasser (ärvd från objekt) - Som svar får man ett Class-objekt (som alltså är klassen för objektet (kan ej ändra detta)) *) Kallas ofta runtime typ (för variabeln, förvirrande...)

instanceof Ibland måste vi använda explicit typomvandling - Gör vi fel blir det ClassCastException Det går att kontrollera om typomvandlingen kommer att fungera m.h.a. instanceof operatorn. Ger sant om en referens är typkompatible med en given klass // Using instanceof Object o = // o could be of any type // If true o typcompatible with String (or any subclass of) if( o instanceof String ){ String s = (String) o; } // Never exception

Mer om final Sammanfattning av final - Anges för variabler som inta skall kunna ändras - Anges för metoder som inte kan överskuggas - Om det anges framför klassen (final class) kan man inte ärva klassen De två sista används för att förhindra arv (arv kan vara farligt ibland, ingår inte denna kurs...)

super Vi har tidigare sett super (anrop av superklassens konstruktor) super kan även användas för att komma åt superklassens metoder ifall dessa är överskuggade // Overridden method in subklass @Override public void doit(){ super.doit(); // Call method in superklass }

Abstrakta Metoder En abstrakt metod saknar metodkropp (som i ett gränssnitt, i gränssnitt är metoderna automatisk abstrakta, i klasser måste vi ange...) // Abstract method in a class public abstract void doit(); Tanken är att någon subklass skall överskugga metoden och förse den med en kropp (körbar kod)

Abstrakta Klasser En klass är abstrakt om den innehåller någon abstrakt metod - Måste anges med public abstract class - Abstrakta klasser kan inte instansieras (inte new) - Används för att faktorisera d.v.s. flytta kod som är gemensam för flera subklasser till en gemensam superklass (den abstrakta klassen). Mycket dåligt att ha samma kod på flera ställen

Polymorfism Är ett centralt men svårfångat begrepp inom objekt orienterad programmering (på svenska mångformighet ) Vi syftar på det i föregående bild, saker beror på vilka typer som är inblandade (beteende utifrån typ)

Mer om Undantag I Java finns två sorters undantag, unchecked exceptions och checked exceptions Vid undantag skapas automatisk instanser av dessa klasser

Mer om Undantag, forts Checked exceptions används för situationer programmet måste hantera (t.ex. nätet nere) - Checked exception måste fångas (hanteras), kontrolleras att så sker vid kompilering - Om man inte vill fånga felet direkt där det kan uppstå kan man skicka det vidare, man anger throws + typen för felet metodhuvudet ) Unchecked exceptions används för fel som programmeraren kan göra - Unchecked fångas vanligen inte, har vi gjort fel så skall det smälla så snabbt och högt som möjligt (programmet skall krascha så att vi märker felet direkt)

Fånga Undantag Checked exception fångas med try..catch.. - Satsen där undantaget kan uppstå finns i trygrenen - I catch-grenen fångas (och ev åtgärdas) felet. Man deklarera vilken typ av felobjekt man fångar och namn på felobjektet (kan ha flera catch grenar för olika undantag) Ibland låter man undantaget vandra hela vägen upp till GUI:et där man fångar och visar en dialogruta

Filhantering Program behöver normal komma ihåg data mellan körningarna (användarinställningar, high-score:listor, m. m.) - Då ett program avslutas töms minnet på allt som tillhör programmet - För att kunna användas vid nästa körning sparas data på datorns hårddisk (i vårt fall), en fil skapas - Vid nästa körning kan programmet läsa in datan i filen (eller delar av) och spara i minnet - Vi kan inspektera filen i något filhanteringsprogram

Filhantering i Java Finns färdig klasser för allt - Vi använder de färdiga Scanner, PrintWriter och File (finns i boken) - Filhantering innebär att vi kan få IOExceptions (filen kanske saknas), en Checked exception, måste fångas mer senare...

Filformat Filformatet bestämmer hur datan skall lagras - Binärfiler, sparar data som ren dump av minnet, ej läsbart för människor, konstiga tecken då man tittar på innehållet m.h.a. av något program, inga rader (Java:s class-filer är binärfiler) - Textfiler, innehåller text, ordnad i rader, läsbar för människor (filnamn ofta *.txt) Vi använder bara textfiler (en textfil behövs)

Lab 1: Omvandling av Text När vi sparar instansvariabler kommer värdena att automatiskt att omvandlas till String (sköts av PrintWriter) När vi läser in värden (strängar) så måste vi själva omvandla från String till t.ex. int eller boolean, görs enligt nedan // From String to int int i = Integer.valueOf( 123 ); // If abc exception boolean b = Boolean.valueOf( false ); // false or true // else exception

Swing och Filhantering För att välja filer att öppna eller spara (namn och placering i filsystemet) finns en färdig komponent i Swing; JFileChooser

Rekursion Recursion is a method of solving problems that involves breaking a problem down into smaller and smaller subproblems until you get to a small enough problem that it can be solved trivially. Usually recursion involves a function [method] calling itself. While it may not seem like much on the surface, recursion allows us to write elegant solutions to problems that may otherwise be very difficult to program. - Ett enkelt problem: Summera alla tal i en lista (enklare med loop, exemplet bara för demo) - Ett svårare problem: Towers of Hanoi!

Tower of Hanoi The objective of the puzzle is to move the entire stack to another rod, obeying the following simple rules: 1. Only one disk may be moved at a time. 2. Each move consists of taking the upper disk from one of the stacks and placing it on top of another stack. 3. No disk may be placed on top of a smaller disk Min antal flyttningar : 2 n - 1 (64 diskar, flytta en per sek. 2 64-1 = 18,446,744,073,709,551,615 s = 585 miljarder år, 127 gånger solens nuvarande ålder)

Lösning Tower of Hanoi public static int move(int n, int from, int to, int aux) { // Flytta n brickor från pinne from till pinne to // med pinne aux som hjälppinne och aldrig med en större // bricka ovanpå en mindre (brickor numrerade, n). if (n > 0) { move(n - 1, from, aux, to); move(n - 1, aux, to, from); } } move(nrofdiscs, 1, 2, 3); // Första anrop

Lab 1: Rekursion Det skall vara möjligt att ändra fontstorlek i hela GUI:et (meny View > Big Font). Hur göra? - OBS! Att ett GUI:et har en struktur som ett (upp och nedvänt) träd JPanel JFrame JMenuBar Behållare för komponenter (Container) JPanel JPanel JMenu JMenu JTextField JButton JButton JMenuItem JMenuItem JMenuItem Inte behållare

Lab 1: Rekursion, forts Indata: En (start) komponent Om komponenten inte är en behållare* (t.ex en JButton) Ändra font för denna (avsluta metoden) Annars för alla komponenter i behållaren (t.ex. JPanel) { anropa detta rekursivt } *) Kan undersökas med: if( component instanceof Container )