1 / 12

Generiska subrutiner

Generiska subrutiner. i olika programmeringsspråk. 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++). Generiska subrutiner i Ada.

eryk
Télécharger la présentation

Generiska subrutiner

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 genericunit • 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 typeItem is private; -- generisk parameter procedureSwap(X,Y: in outItem); 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: procedureSwap_Floatisnew Swap(Float);

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

  6. Generiska subrutiner i C++ • Ett exempel: template<typename T> voidSwap(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; } • Klassenanvänds sedan påföljandesä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) { returnnew 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 • Whatcauses a C++ templatefunction 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 waydo the generic parameters to a Java 5.0 genericmethoddiffer 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.)

More Related