Presentation laddar. Vänta.

Presentation laddar. Vänta.

i olika programmeringsspråk

Liknande presentationer


En presentation över ämnet: "i olika programmeringsspråk"— Presentationens avskrift:

1 i olika programmeringsspråk
Generiska subrutiner i olika programmeringsspråk

2 Generiska subrutiner Subrutin vars parameter- och variabeltyper specificeras först när den anropas T.ex. är det möjligt att skapa en subrutin som både kan sortera vektorer och länkade listor (i C++)

3 Generiska subrutiner i Ada
En viktig komponent för generisk programmering i Ada är generic unit I en sådan definieras ett slags mall för en subrutin med generiska parametrar som sedan byts ut mot datatyper när en instans av subrutinen skapas

4 Generiska subrutiner i Ada
Ett exempel: generic type Item is private; -- generisk parameter procedure Swap(X,Y: in out Item); procedure Swap(X,Y: in out Item) is Temp: Item; begin Temp := X; X := Y; Y:= Temp; end Swap; -- instansiering av Swap där Item får datatypen Float: procedure Swap_Float is new Swap(Float);

5 Generiska subrutiner i C++
Kallas template och deklareras i formatet: template <class identifier> function_declaration; template <typename identifier> function_declaration; Det har ingen betydelse om class eller typename används

6 Generiska subrutiner i C++
Ett exempel: template<typename T> void Swap(T & a, T & b) { T temp = b; b = a; a = temp; } Funktionen tar emot variablerna a och b som referenser och skiftar värde på dem Kopior av programmet skapas vid kompilering för alla olika typer av T som används. I varje kopia byts T ut mot den aktuella datatypen, i exemplet ovan skulle t.ex. char eller string vara rimligt.

7 Generiska subrutiner i Java
Har funnits i Java sedan J2SE 5.0 (2004) En klass-, interface-, metod- eller constructor-deklaration som består av en s.k. type variable får generiska egenskaper En type variable är en identifierare för ospecificerade variabler

8 Generiska subrutiner i Java
Ett exempel på en generisk klass: public class Pair<T, S> { public Pair(T f, S s) first = f; second = s; } private T first; private S second; Klassen används sedan på följande sätt: Pair<String, String> grade440 = new Pair<String, String>("mike", "A"); Pair<String, Integer> marks440 = new Pair<String, Integer>("mike", 100);

9 Generiska subrutiner i Java
En generisk subrutin som använder den föregående klassen: public <T> Pair<T,T> twice(T value) { return new Pair<T,T>(value,value); } och ett exempel på hur den används: Pair<String, String> pair = twice("Hello");

10 Generiska subrutinen i Java
Till skillnad från i C++ genereras bara en version av funktionen även om flera olika datatyper används Funktionens korrekthet undersöks vid kompileringstillfället

11 Review questions What causes a C++ template function to be instantiated? För varje datatyp som funktionen anropas med skapar kompilatorn en instans vid anropet. Varje instans är en specialisering av funktionen som används överallt i programmet där samma parametrar används.

12 Review questions In what fundamental way do the generic parameters to a Java 5.0 generic method differ from those of C++ methods? I Java måste parametrarna vara klasser. I C++ kan de också vara primitiva typer (int, double o.s.v.)


Ladda ner ppt "i olika programmeringsspråk"

Liknande presentationer


Google-annonser