Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Relevanta dokument
Objektorienterad Programmering (TDDC77)

TDDC77 Objektorienterad Programmering

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

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

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) Lösningen heter Collection. Collection gränsnittet. Collection. Iterable. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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

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

Objektorienterad Programmering (TDDC77)

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

Objektorienterad Programmering (TDDC77)

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

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

Objektorienterad Programmering (TDDC77)

Länkade strukturer. (del 2)

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

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

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Tentamen Programmering fortsättningskurs DIT950

Föreläsning 15: Repetition DVGA02

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

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

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Föreläsning 2. Länkad lista och iterator

Samlingar Collection classes

Repetition av OOP- och Javabegrepp

Föreläsning 2. Länkad lista och iterator

Repetition av OOP- och Javabegrepp

DAT043 - föreläsning 8

TENTAMEN OOP

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

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 2 Datastrukturer (DAT037)

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

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

Objektorienterad Programmering (TDDC77)

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 10. ADT:er och datastrukturer

TENTAMEN OOP

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Objektorienterad Programmering (TDDC77)

OOP Tenta

Stackar, köer, iteratorer och paket

DAT043 Objektorienterad Programmering

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

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

TENTAMEN OOP

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

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

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

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Objektorienterad Programkonstruktion

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

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Objektorienterad programmering i Java

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Föreläsning 4 Innehåll

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

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

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

Interfacen Set och Map, hashtabeller

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

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

Konstruktion av klasser med klasser

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

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

Generisk klass med typparameter Inre klass - ListIterator

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

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

Tentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal

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

OOP Objekt-orienterad programmering

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

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

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

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

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

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

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Föreläsning REPETITION & EXTENTA

Föreläsning 9 Innehåll

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Innehåll

Transkript:

Objektorienterad Programmering (TDDC77) Föreläsning XII: Interfaces, Enums,, Collections Links for: interfaces, enums, generics, collections Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Abstrakta metoder I Metoder som krävs hos alla subklasser men som är meningslösa att implementera hos superklassen. class Animal { protected String name =" anonymous "; public Animal (){ public void setname ( String str ){ name = str ; public String speak (){ return " euhhh.." ; class Duck extends Animal { public String speak (){ return " couac! I am " + name ; I kan inte instansieras abstract class Animal { protected String name =" anonymous "; public Animal (){ public void setname ( String str ){ name = str ; public abstract String speak (); class Duck extends Animal { public String speak (){ return " couac! I am " + name ;

Abstrakta metoder I Abstrakta metoder saknar kropp och måste åsidosättas i alla subklasser som inte är abstrakta I Bara tillåtet i abstrakta klasser class Duck extends Animal { public String speak (){ return " couac! I am " + name ; Multiple arv? Gränsnitt (Interface) I Interface är lite som helt abstrakta klasser I I Java får man endast ärva från en klass I Arv från flera klasser kallas multiplelt arv, och är inte tillåtet I De definierar vilka metoder som ska finnas, men får inte innehålla definitioner av dessa I De kan också definiera konstanter I Man kan inte instansiera ett interface I En klass implementerar ett interface genom att definiera metoder för alla abstrakta metoder som finns i interfacet. I En klass kan implementera flera interface.

Interface UML Klassdiagram för Gränsnitt public interface Student { givehomework ( WorkUnit u); grade ( Grade g, Course c); public class ITStudent extends Person implements Student {... // Må ste implementera metoderna ovan... I Man brukar rita interface som klasser, men märka upp dem med «interface» ovanför klassnamnet I Implementering av interface ritas som arc, men med streckad linje <<interface>> Student givehomework(workunit u):void grade(grade g, Course c):void ITStudent ISYStudent Polymorfism via Interface interface Talker { String speak (); class Cat implements Talker { private String name ; public Cat ( String name ){ this. name = name ; public String speak () { return name + " says Miao!"; class Driver { Talker [] assembly = new Talker [2]; assembly [0] = new Cat (" kitty "); assembly [1] = new Dog (" bobby "); for (int i =0; i< assembly. length ; i ++) System.out. println ( assembly [i]. speak ());

En enkel uppräkningar (enum) Uppräkningar enum Seasons { winter (" vinter "), spring ("vår"), summer (" sommar "), autumn ("höst"); private String name ; public enum Color { red, blue, green String skrivut ( Color c){ if (c == Color. red ) return "röd"; if (c == Color. green ) return "grön"; return "blå"; Seasons ( String name ){ this. name = name ; public String tostring () { return name ; import java.util. Scanner ; class SeasonsDriver { Seasons [] values = { Seasons.winter, Seasons.spring, Seasons.summer, Seasons. autumn ; System.out. println (" Choose among : "); for (int i =0; i < values. length ; i ++) System.out. println (i + ". " + values [i ]); Scanner scan = new Scanner ( System.in ); int i = scan. nextint (); System.out. println ("You chose : " + values [i ]); Klass Hierarki Animal Reptile Bird Mammal Turtle Crocodile Eagle Dog Bat

Interface <<interface>> Athlete <<interface>> Runner <<interface>> Swimmer <<interface>> Biker Triathlete class Triathlete implements Runner, Swimmer, Biker {... En generic typ är en klass eller ett gränsnitt som är parameteriserad med en eller flera typer. class MyPair <T1, T2> { private T1 first ; private T2 second ; MyPair (T1 t1, T2 t2 ){ first = t1; second = t2; public String tostring (){ return "(" + first + ", " + second + ")"; class MyPairDriver { MyPair <String,Integer > p1 = new MyPair <String,Integer >(" Monday ",1); System.out. println (p1 ); MyPair <Integer, Integer > p2 = new MyPair <Integer, Integer >(3,7); System.out. println (p2 );

Att lagra värden Kollektion (Collection, ibland Container) I En variabel: Data av en sort I Problem: om det blir många variabler I En array: En rad av data av samma sort I Problem: Måste veta storlek i förväg, även svårt att bearbeta data i arrayen (söka, sortera osv) I är ett objekt som grupperar flera element i en enda enhet. I används för att lagra, hämta, manipulera, och kommunicera aggregerade data. I bildar en naturlig grupp, såsom en kort hand (en samling av kort), en post mapp (en samling av brev) eller en telefonkatalog (en kartläggning av namn till telefonnummer). Lösningen heter Collection Lösningen heter Collection I Samling av klasser för effektiv och avancerad lagring av data I Finns i paketet java.util I Är uppdelade i Interface och implementationer I Sök efter Collection i API:et! I http://docs.oracle.com/javase/7/docs/api/ I Finns även bra tutorials, ex http: //docs.oracle.com/javase/tutorial/collections

Set - Mängd Set I Oordnad mäng av data utan kopior I Interfacet heter Set I Implementationer exempelvis HashSet äpple import java. util.*; /* The program FindDuplicates prints messages for each duplicated * argument it is passed. * example : java FindDuplicates i came i saw i left */ class FindDuplicates { Set <String > minset = new HashSet <String >(); for (int i =0; i< args. length ; i ++) if ( minset.add (args [i]) == false ) System.out. println (" Duplicate detected : " + args [i ]); päron melon System.out. println ( minset.size () + " distinct words : " + minset ); // for ( String str : args ) List -Lista List I Sekvens av data I Interfacet heter List I Implementationer exempelvis ArrayList och LinkedList äpple import java. util.*; class Panier { List <String > panier = new ArrayList <String >(); panier. add (" melon "); panier. add (" banan "); panier.add (" hallon "); panier.add (" hallon "); System.out. println (" panier in order :"); // for (Iterator <String > it = panier. iterator (); // it. hasnext (); // ){ // String frukt = it. next (); // System.out. println (" contains : " + frukt ); // päron melon for ( String str : panier ) System.out. println (str ); // System.out. println (" panier contains :"); // for ( ListIterator <String > it = panier. listiterator ( panier.size ()); it. hasprevious ();){ // String frukt = it. previous (); // System.out. println (" contains : " + frukt ); //

Map Map I Kopplade par av data I Interfacet heter Map I Implementationer exempelvis HashMap import java. util.*; public class Freq { Map < String, Integer > m = new HashMap < String, Integer >(); äpple frukt tomat grönsak melon frukt // Initialize frequency table from command line for ( String a : args ) { Integer freq = m. get ( a); m. put (a, ( freq == null )? 1 : freq + 1); System. out. println (m. size () + " distinct words :"); System. out. println (m); // java Freq if it is to be it is up to me to delegate Hashing Hashing I Alla klasserna ovan som innehåller Hash i namnet använder något som heter hashing för att öka hastigheten på vissa operationer, exempelvis när man ska göra snabba sökningar i en lista I Det ingår inte i kursen att förstå exakt hur det fungerar, men ni måste förstå tillräckligt för att kunna använda hjälpligt I Hashing går ut på att man för varje objekt beräknar ett så kallad hash (heltal) I Heltalet används sedan för att dela upp mängden i flera mindre mängder, vill man veta vilken del man ska leta i behöver man bara hasha värdet man letar efter I Hashfunktionen måste man alltid returnera samma värde för samma objekt, och för alla andra objekt där equals() returnerar sant I För er ordlistlaboration så räcker det bra att returnera värdet för textsrängens haschcode()

Klassen Collections I Klassen Collections har statiska metoder för att manipulera listor, mängder m.m. I frequency() I min(), max() I reverse() I sort(), shuffle() Collections. reverse (pl ); Iterator I är ett interface som uppfylls av alla klasser som man kan gå igenom element för element I innehåller bara en metod: iterator() som returnerar ett speciellt Iterator-objekt som man kan använda för att gå igenom mängden I Iterator är ett interface med metoderna I hasnext() I next() I remove() //valfritt I Man får inte ändra på den underliggande samlingen medan iteratorn används, då blir det fel

Iterator Iterator I Använda en iterator Person person ; for ( Iterator < Person > iterator = pl. iterator (); iterator. hasnext (); person = iterator. next ()){ // Gör nå got I Enklare med for-each for ( Person person : pl) { // Gör nå got