Generiska konstruktioner. Kursbokens kapitel 13

Relevanta dokument
Polymorfi. Objektorienterad och komponentbaserad programmering

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

Föreläsning 9 Innehåll

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

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Objektorienterad programmering med Java, Generics

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

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

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

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

OOP Objekt-orienterad programmering

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

JAVAUTVECKLING LEKTION 11

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

TDIU01 - Programmering i C++, grundkurs

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Kopiering av objekt i Java

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

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

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Tentamen OOP

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

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 10 Innehåll

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

DAT043 Objektorienterad Programmering

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

DAT043 - föreläsning 8

Föreläsning 5-6 Innehåll

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

Delegater, events och lambdauttryck

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

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

(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

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TDDC76 Programmering och datastrukturer

Föreläsning 3-4 Innehåll

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

1 Klasser och objektorientering Vad är objektorientering?

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

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

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

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Objektorienterad programmering Föreläsning 5

Objektorienterad programmering D2

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

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

Uno Holmer, Chalmers, :17 Uno Holmer, Chalmers, :17

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

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

Konstruktion av klasser med klasser

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

Programmering A. Johan Eliasson

Föreläsning 4 Innehåll

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

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

Länkade strukturer, parametriserade typer och undantag

Typkonvertering. Java versus C

TUTORIAL: KLASSER & OBJEKT

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

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

TDIU01 - Programmering i C++, grundkurs

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

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

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

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

Föreläsning 3 Innehåll

Diskutera Sortera objekt

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

SMD 134 Objektorienterad programmering

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

OOP Objekt-orienterad programmering

Repetition av OOP- och Javabegrepp

Programmeringsteknik med C och Matlab

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

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

Repetition av OOP- och Javabegrepp

Föreläsning 2, vecka 8: Repetition

Transkript:

Generiska konstruktioner Kursbokens kapitel 13 1

Vad är en generisk konstruktion? Generisk står för; allmän eller generell En generisk konstruktion kan användas för olika typer av data Med hjälp av templates så kan man beskriva en mall för en sådan konstruktion I C# så går det att definiera templates som beskriver hela klasser och templates som beskriver enstaka metoder 2

Generiska metoder En generisk metod kan deklareras på följande sätt [åtkomst] T MetodNamn<T>(T a, T b) [restriktioner] //Ett antal satser [åtkomst] returtyp MetodNamn<T>(T a, T b) [restriktioner] //Ett antal satser [åtkomst] returtyp MetodNamn<T1, T2, T3, >(T1 a, T2 b, T3 c, ) [restriktioner] //Ett antal satser T kallas för en typparameter T fungerar som en platshållare för den riktiga typen T kommer att automatiskt att bytas ut mot den typ som passar för de aktuella parametrar som sänds med vid ett anrop av metoden. Det möjligt att ange flera typparameter 3

Generisk klass Om man deklarerar en klass som generisk så behöver man inte deklarera de metoder som använder klassens typparametrar som generiska metoder [åtkomst] class KlassensNamn <T1, T2> [restriktioner] [åtkomst] T1 variabelnamn; [åtkomst] T2 MetodNamn(T1 namna, T2 namnb) //Satser se exempel GeneriskKlass 4

Ett exempel på en metod En metod som jämför två tecken using System; public class Verktyg public bool ÄrMindreÄn(char värdea, char värdeb) if (värdea < värdeb) return true; return false; Motsvarande generiska metod using System; public class Verktyg public bool ÄrMindreÄn<Typ>(Typ värdea, Typ värdeb) where <Typ> : IComparable<Typ> if (värdea.compareto(värdeb) < 0) return true; return false; Varför använder den generiska metoden CompareTo och inte < operatorn? Eftersom värdea och värdeb är av en okänd typ så är det inte säkert att < operatorn fungerar för den okända typen. Därför måste man i stället använda sig av metoden CompareTo. Metoden CompareTo är deklarerad i gränssnittet IComparable interface IComparableint CompareTo<T>(T a, T b); //Finns färdig i.net-biblioteket Om en klass implementerar IComparable så betyder det att klassen garanterar att det finns en metod CompareTo i klassen where : IComparable <T> begränsar de typer som metoden kan använda till de typer som har implementerat IComparable 5

En klass vars objekt går att jämföra public class Person : IComparable<Person> private string namn; private int ålder; // I och med klassen implementerar gränssnittet IComparable måste den metod som // är deklarerad i gränssnittet definieras här i klassen public int CompareTo(Person enperson) if (enperson == null) throw new Exception("En null-referens!"); if (Åldern < enperson.ålder) return -1; if (Åldern == enperson.ålder) return 0; return 1; 6

En ny version metod ÄrMindreÄn En ny version enbart för personer using System; public class Verktyg public bool ÄrMindreÄn(Person värdea, Person värdeb) if (värdea.compareto(värdeb) < 0) return true; return false; Men den generiska metod består! using System; public class Verktyg public bool ÄrMindreÄn<Typ>(Typ värdea, Typ värdeb) where <Typ> : IComparable<Typ> if (värdea.compareto(värdeb) < 0) return true; return false; Varför använda den generiska metoder? Om vi väljer att använda templates, det vill säga deklarera att metoden MindreÄn ska använda typparametern Typ så kommer den metoden att fungera för både objekt av klassen Person och objekt av alla andra klasser som implementerar gränssnittet IComparable. Dessutom kommer den generiska versionen av metoden att fungera för alla värden av enkla datatyper på grund av att, för de enkla datatyperna är redan gränssnitten IComparable implementerad. Se, Exempel01 och Exempel02 7

Nu ska du kunna Förklara vad generiska klasser och metoder är Använda generiska metoder och klasser Förklara vad de interfaces som förekommer i programkoden är Förstå vad som det innebär att implementera de metoder som är deklarerade i ett interface 8