Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.

Slides:



Advertisements
Liknande presentationer
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Advertisements

Klasser och objekt.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Klassarv och inkapsling
Repetition av objektorientering
OOP Objekt-orienterad programmering
Metoder i java Det finns två typer av metoder i java
Arv.
Abstract & sealed.
Inkapsling.
Objektorienterad tänkande
Polymorfism.
Metoder.
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Programmering i C# 2. Inledande detaljer.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
Programmering i C# 3. Klasser.
Pekare och speciell programstruktur i inbyggda system
Klasser och objekt Klasser, objekt och instansvariabler
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmering i C# 5. Structer.
Arv.
1. En infrastruktur för programutveckling
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
7. Delegerare och notifierare
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 5 Klasser och instanser
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder.
Arv, abstrakta klasser och gränssnitt
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
1 Mer om metoder, variabler, klasser och objekt. Kursboken: - Kapitel 6 - Kapitel 8.
TDP004 Objektorienterad Programmering Fö 6 Objektorientering forts.
Objektorienterad programmering forts
Presentationens avskrift:

Interface

 Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad abstract klass och det enda som får deklareras i ett interface är metoder, egenskaper, indexer och events.  I övrigt inga fält, konstruktorer, destruktorer, operatorer, konstanter, etc får deklareras i ett interface.  Medlemmarna i ett interface har heller inga modifierare för synlighet, de är alltid public abstract.  Interface innehåller ingen implementering av metoderna, metodkroppen ersätts med ett semikolon.

exempel interface IShape { void Move(int x, int y); double Area(); int X { get; set; } int Y { get; set; } } IShape Circle Class Circle : IShape { public void Move(int x, int y) { } public double Area() { return 0.0 } public int X { get { return x; } set { x = value; } } public int Y { get{ return y; } set{ y = value; } }

Interface  Arv från interface är inte riktigt detsamma som arv från klasser. Mekanismen vid kompilering är annorlunda, det ska inte skapas någon basklassdel i objekten, inte anropas någon basklasskonstruktor, och lite annat.  Därför benämna det inte arv utan kallar det implementation.  En klass kan endast ärva från en basklass, men kan implementera ett valfritt antal interface (kommatecken mellan de).  En struct kan inte ärva från någon klass alls, men kan implementera ett valfritt antal interface.  Varje medlem i ett interface måste implementeras eller ärvas från en basklass.  Interface används vid kompilering för att utföra en koll tillskillnad från arv där länkningen till lämpligt metod sker vid run-time.

Interface  Metoder som finns i interface och som blir implementerade i klassen kan deklareras som:  virtual  anger första implementation av metoden  abstact  metoden har ingen implementation, men klassen blir abstrakt.  Namnsättningen är smaksak, men stilen att namnet inleds med versalen "I" är mycket starkt förankrat, inte bara i C#. ”Vi ska eftersträva att följa konventionen”.  C# skiljer inte på basklassen och interface mha nyckelord. C# använder sig istället av positionsnotation.  Om en klass ärver från en annan klass och implementerar ett interface så skrivs först namnet på basklassen följt av ett komma följt av namnet på interface.

interface interface IA { ……. } class B { …… } class C : B, IA { ….. } ArvImplementaion

Interface  När en klass implementerar ett interface, blir objekt av klassen också av interfacetypen.  Om en klass implementerar två interface där medlemmar har samma namn, måste medlemmarna definieras explicit. Medlemmarna kan nu anropas endast via interfacereferens. interface IA { void SomeMethod(); } interface IB { void SomeMethod(); } class C : IB, IA { void IA.SomeMethod(){ ….. } void IB.SomeMethod(){ ….. } }

public interface IShape { void Move(int x, int y); double Area(); int X { get; } int Y { get; } } public class Circle : IShape { private int x; private int y; private int radius; public Circle(int x, int y, int radius) { this.x = x; this.y = y; this.radius = radius; } public int Radius { get { return radius; } set { radius = value; } } public int Y { get { return radius * 2; } } public int X { get { return radius * 2; } } public void Move(int x, int y) { this.x += x; this.y += y; } public double Area() { return System.Math.PI * radius * radius; } public class Rectangle : IShape { private int x; private int y; public Rectangle(int x, int y) { this.x = x; this.y = y; } public int Y { get { return y; } } public int X { get { return x; } } public void Move(int x, int y) { this.x += x; this.y += y; } public double Area() { return x * y; } public class MainApplication { public static void Main() { IShape[] ishapeLista = new IShape[2]; ishapeLista[0] = new Circle(5,5,10); ishapeLista[1] = new Rectangle(5, 3); foreach (IShape shape in ishapeLista) { Console.WriteLine( shape.Area().ToString()); }

 Här är det enbart beteende som utgör den absoluta basklassen (interface), och implementationen kan bli helt annorlunda i olika sorters klasser.  Att ha vissa fält i basklassen låser implementationen i härledda klasser i viss utsträckning. Med hjälp av interface har vi verkligen separerat beteende från tillstånd och implementation.  När en klass implementerar flera interface måste naturligtvis alla medlemmar i alla interfacen implemeteras. Interface

 Några råd om när det är lämpligt att använda interface  Interface är lämpligt när det finns generella egenskaper i systemet som en klass kan välja att ha eller inte ha.  Interface är tekniken att uppnå en form av multipelt arv, om en klass väljer att implementera ett flertal interface.  Interface används när en klass skall kunna välja att en kombination av många mindre egenskaper. Varje egenskap uttrycks då i ett interface, och varje klass kan välja vilken kombination av egenskaper som är applicerbar på just den klassen. Råd

 Tänk att man har skapat en instans av Circle klassen och undrar om klassen stödjer IShape beteende. Det finns 3 sätt att upptäcka det:  ”type cast” när man vill att en referensvariabel pekar på ett objekt nedåt i arvhierarkin. Om en typomvandling med ”type cast” inte fungerar, händer ett körningsfel  Man kan skaffa en interface från en objektreferens via nyckelordet "as". "as" syntax sätter interface-variabel till null om given interface inte stödjes av objektet än att kasta ett undantag.  man kan skaffa en interface från ett objekt via en "is"-operator as, is, typeof

Circle c = new Circle(5,5,10); IShape sInterface; try { //kasta till en interface sInterface = (IShape)c; Console.WriteLine(sInterface.ToString()); } catch(InvalidCastException e) { Console.WriteLine("No IShape"); } Circle c = new Circle(5,5,10); IShape sInterface = c as IShape; if(sInterface != null) Console.WriteLine(sInterface.ToString()); else Console.WriteLine("No IShape"); Circle c = new Circle(5,5,10); if(c is IShape) Console.WriteLine(c.ToString()); else Console.WriteLine("No IShape");

 Man kan inte skapa instanser av ett interface.  Man får inte skapa några fält i ett interface.  Man får inte ha några konstruktorer i ett inteface.  Man får inte ha destruktorer i ett interface.  Man kan inte nästla in några typer i ett interface.  Man kan inte låta ärva från en struktur eller en klass. Repetition

 När man implementerar ett interface, så måste man försäkra sig om att varje metod exakt överensstämmer med den motsvarande metoden i interfacet:  Metoden måste vara uttryckligen deklarerad som public, eftersom interface metoder är definitionsmässigt publika.  Retyrtyperna måste överrensstämma exakt.  Metodnamnen måste vara exakt samma.  Parametrarna måste stämma överens exakt.  Om det finns några olikheter kommer kompileringen att misslyckas, eftersom interfacemetoden inte har implementerats. Repetition