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

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

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

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

OOP Objekt-orienterad programmering

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

Lösningar för tenta 2 DAT043,

Klasshierarkier - repetition

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

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

1 Comparator & Comparable

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

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

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) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

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

Objektorienterad Programmering (TDDC77)

Föreläsning 14. Filhantering

Lösningsförslag till tentamen

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

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

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)

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

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

Föreläsning 13 Innehåll

Classes och Interfaces, Objects och References, Initialization

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

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

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

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

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

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

Kopiering av objekt i Java

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

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

F4. programmeringsteknik och Matlab

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

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

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

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

OOP Objekt-orienterad programmering

DAT043 - Föreläsning 7

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

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

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Lösningsförslag till tentamen

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

Konstruktion av klasser med klasser

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

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

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

Fördjupad Java. Undantagshantering. Fel

Objektorienterad Programkonstruktion. Föreläsning jan 2016

TENTAMEN OOP

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

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Felhantering TDDD78, TDDE30, 729A

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Klassen javax.swing.timer

Objektorienterad Programmering (TDDC77)

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

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

trafiksimulering Intro OU5 trafiksimulering

DAT043 Objektorienterad Programmering

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

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

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Objektorienterad Programmering (TDDC77)

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

TENTAMEN OOP

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

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

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

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Repetition av OOP- och Javabegrepp

PROGRAMMERINGSTEKNIK TIN212

Länkade strukturer, parametriserade typer och undantag

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

Laboration 1: Figurer i hierarki

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

Repetition av OOP- och Javabegrepp

Testning av program. Verklig modell för programutveckling

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

TENTAMEN OOP

(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

Föreläsning REPETITION & EXTENTA

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

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

Transkript:

Objektorienterad Programkonstruktion Föreläsning 4 8 nov 2016

Nästade klasser I Java går det att deklarera en klass inuti en annan klass. Vi kallar detta för att en yttre klass innehåller en inre klass. Det finns fyra sorters inre klasser en statisk nästad klass fungerar som en vanlig klass definierad i samma paket, men finns i samma fil en inre klass kan bara instansieras i en instans av den yttre klassen, och har tillgång till alla delar av denna instans, inklusive privata fält och metoder en lokal inre klass definieras inuti ett annat kodblock, och kan sedan användas fritt inuti detta block en anonym inre klass definieras och instansieras vid ett specifikt tillfälle och kan inte användas någon annanstans

Static Nested Class Ett sätt att packetera klassdefinitioner i en fil, om man tycker att de hör samman. Den har inte tillgång till instansvariabler eller -metoder från den yttre klassen. public class OuterClass { static class StaticNestedClass {... OuterClass.StaticNestedClass nestedobject = new OuterClass.StaticNestedClass();

Inner Class Kan bara instansieras i en instans av den yttre klassen Har tillgång till alla delar av denna instans, inklusive privata fält och metoder Kan användas var som helst i den yttre klassen Lämplig om klassen bara används av den yttre klassen class OuterClass { class InnerClass {... Kan instansieras utifrån, om man använder en instans av den yttre klassen: OuterClass.InnerClass innerobject = outerobject.new InnerClass();

Local Class Definieras inuti ett kodblock, finns bara i detta block Är oftast väldigt enkel och/eller specifik Har tillgång till alla instansvariabler och -metoder class OuterClass { public void somemethod(){ class LocalClass{... LocalClass mylocalclass = new LocalClass();...

Anonymous (sub-)class Deklareras och instansieras direkt. Existerar bara där den deklareras, kan ej användas igen, ens i samma kodblock (om man inte deklarerar den igen, förstås) Måste ärva en annan klass eller implementera ett gränssnitt Har tillgång till instanvariabler och -metoder class OuterClass... {... // inside a method in OuterClass : mybutton.addactionlistener(new ActionListener(){ public void actionperformed( ActionEvent e ){ System.out.println( Anonymous! ); );...

Abstrakta Klasser Deklareras med nyckelordet abstract Går inte att instansiera, utan är en mall att ärva från En klass som har minst en metod som är deklarerad som abstract måste själv vara abstrakt För att en ärvande klass ska gå att instansiera måste den explicit deklarera alla metoder som är abstrakta I superklassen, annars blir den ärvande klassen också abstrakt Gränssnitt och deras metoder är implicit abstrakta Abstrakta klasser behöver inte implementera alla metoder ur gränssnitt Abstrakta klasser kan ha statiska fält och metoder public abstract class MyAbstractClass { abstract void doabstractstuff();

Abstrakta klasser eller gränssnitt? Om man deklarerar några instansvariabler och konkreta metoder, men inte vill specificera alla metoder konkret, bör man använda en abstrakt klass Om man inte har några instansvariabler, och alla metoder är abstrakta, bör man använda ett gränsnitt Som exempel kan vi tänka oss den abstrakta klassen Kort, som innehåller information om storlek, och har en gemensam metod för att lägga korten i en hög, med konkreta subklasser som är t.ex spelkort, visitkort, mm gränsnittet Flippable, som gäller för alla kort (och andra föremål) som går att vända på

Polymorfism Man kan deklarera variabler av en superklass och instansiera dem med en subklass Human putte = new SimTek(); Java kommer att behandla variabeln som den deklararerade typen för att avgöra om en metod eller ett fält finns. Java kommer att behandla de som den instansierade klassen för att avgöra icke-statiska metoder eller fält skall tolkas, sk dynamisk bindning. Statiska fält och variabler tas från variabeltypen, oavsett instansiering

Polymorfism, exempel Human putte = new Human(25, "Putte"); Human anna = new Fysiker(2009,25,"Anna"); Denna rad anropar tostring()-metoden från Human: System.out.println(putte.toString()); Denna rad anropar tostring()-metoden från Fysiker: System.out.println(anna.toString()); Denna rad går inte att kompilera (metoden finns ej i Human): System.out.println(anna.getYear());

Deklarera med gränssnitt Man kan deklarera en variabel med typ som är ett gränssnitt Comparable putte = new Human(); man kan nu anropa: putte.compareto(anna); eftersom Comparable inte känner till de metoder som specifikt har deklarerats i Human går det inte att skriva: putte.getage(); // Går inte! men följande går förstås bra! ((Human)putte).getAge();

Deklarera med gränssnitt, exempel public boolean issame(differing obj1, Differing obj2) { if ( obj1.getdifferencefrom(obj2) == 0) return true; else return false; Här antar vi att vi har deklarerat följande gränssnitt: public interface Differing{ Public int getdifferencefrom(differing d);

Exceptions (Särfall) Javas sätt att hantera interna felmeddelanden. En metod som träffar på ett problem skickar ett felmeddelande uppåt i anropsstacken: Metod A anropar metod B. B anropar i sin tur C. C kan inte utföra sin uppgift som förväntat, utan kastar en exception (undantag) som fångas av metod B. B har nu information om att C inte fungerade som tänkt, och kan åtgärda felet. Om B inte tar hand om felet skickas det vidare till A, som nu kan anta att B inte fungerade som tänkt.

Att kasta särfall (Throwing Exceptions) Metoden som vill kasta ett undantag gör detta med kommandot throw. Särfall ska vara av typen Throwable (eller någon av dess underklasser, oftast Exception) throw new IOException("No such file!"); En metod som inte vill fånga ett särfall, utan skickar detta vidare uppåt i hierarkin måste deklarera denna möjlighet i förväg, genom att använda nyckelordet throws, t.ex: public void doerrorproneoperation() throws IOException{ doerrorproneio();

Att fånga särfall (Catching Exceptions) För att hantera särfall som kastas av en annan metod använder man en så kallad try/catch-formulering, t.ex: try{ rawresult = dofileio(myfile); //throws IO related Exceptions result = parse(rawresult); // Only run if no exception occured catch(filenotfoundexception e){ System.err.println("FileNotFoundException: " + e.getmessage()); return defaultemptystring; catch (IOException SQLException ex){ System.err.println("Caught IO/SQL Exception:"+ ex.getmessage()); result = generatedefaultresult(); finally{ // This is (almost) always called! docleanup(); dosomemorestuff(); return result;

Exceptions En metod som träffar på ett problem skickar ett felmeddelande uppåt i anropsstacken Den metod som fångar exceptions av rätt sort anses kunna hantera dem, om ingen fångar rätt exception stoppas programmet

Kedjor En metod kan hantera ett särfall genom att skicka ett nytt, t.ex: try { doerrorproneio(); catch (IOException e) { throw new SampleException("Other IOException", e); Man kan sedan komma åt det underliggande felet med Throwable getcause() // Finns i alla Throwable Throwable initcause(throwable) // " Throwable(String, Throwable) // Konstruktorer Throwable(Throwable)

Feltyper Checked Exceptions - de flesta typer av Exceptions. Dessa måste hanteras med try-catch eller throws Unchecked Exceptions - behöver inte hanteras. Dessa är eller ärver från klasserna Error och RuntimeException. Error och dess underklasser används för externa fel som är svåra att förutse eller göra något åt, t.ex om en fil slutar att existera under pågående inläsning för att disken gick sönder. RuntimeException och dess underklasser används för att rapportera interna fel, som division med noll, pekare till objekt som inte finns, mm Om man inte hanterar unchecked exceptions så kommer programmet att avbrytas och ett felmeddelande skrivs ut på skärmen. Man kan välja att hantera även dessa fel, i mer avancerad kod.