Presentation laddar. Vänta.

Presentation laddar. Vänta.

Generiska subrutiner i olika programmeringsspråk.

Liknande presentationer


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

1 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 function_declaration; Det har ingen betydelse om class eller typename används

6 Generiska subrutiner i C++ Ett exempel: template 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 { 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 grade440 = new Pair ("mike", "A"); Pair marks440 = new Pair ("mike", 100);

9 Generiska subrutiner i Java En generisk subrutin som använder den föregående klassen: public Pair twice(T value) { return new Pair (value,value); } och ett exempel på hur den används: Pair 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 "Generiska subrutiner i olika programmeringsspråk."

Liknande presentationer


Google-annonser