Presentation laddar. Vänta.

Presentation laddar. Vänta.

2003-11-25Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.

Liknande presentationer


En presentation över ämnet: "2003-11-25Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring."— Presentationens avskrift:

1 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring

2 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 2 Underprogram procedurer = abstraktion av ett kommando, anropas för att få en effekt funktioner = abstraktion av ett uttryck, returnerar ett värde definition består av funktions-/procedurhuvud och kropp huvudet definierar namn, formella parametrar, resultattyp underprogrammet som vid en viss tidpunkt exekveras sägs vara aktivt Ett underprogram är ett kodstycke som kan anropas med hjälp av ett namn (processabstraktion).

3 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 3 Räckvidd både underprogram och block skapar lokala omgivningar för att begränsa räckvidden av lokala identifierare Lokala variabler kan vara stack-dynamiska el statiska en identifierare är icke-lokal i en programdel om den är synlig men inte deklarerad i denna del Skilj på räckvidd och livslängd Räckvidden av en identifierare (eng. scope) är den del av programmet i vilken identifieraren är synlig (dvs i vilken den kan användas).

4 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 4 Statisk räckvidd Statisk räckvidd: Om x används i underprogram U 0 hittas motsvarande deklaration genom att leta efter den 1.i U 0 2.i den statiska (textmässigt omgivande) föräldern U 1 till U 0 3.i den statiska föräldern U 2 till U 1 4.osv tills den närmaste deklarationen har hittats Vilken variabel namnet x refererar till framgår direkt av programtextens hierarkiska struktur program P; var x: integer; procedure A; var x: real; … x … end A; procedure B; … x … end B end P

5 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 5 Dynamisk räckvidd Vid dynamisk räckvidd letas en variabel i de dynamiska föräldrarna till underprogrammet genom att gå tillbaka i anropssekvensen Nackdelar  svårt att förutse möjliga effekter (låg läsbarhet)  alla underprogram som anropas får tillgång till anroparens lokala variabler  deklarationen kan först hittas vid exekvering program P; var x: integer; procedure A; var x: real; … B … end A; procedure B; … x … end B … A … B … end P första gången som B anropas är A den dynamiska föräldern, alltså refererar x till x i A andra gången som B anropas är P den dynamiska föräldern och x refererar till x i P

6 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 6 Parametrar Parametrisering av underprogram sker genom samspelet mellan formella och aktuella parametrar Formella parametrar är lokala variabelnamn som används för att överföra data mellan underprogrammet och omgivningen Aktuella parametrar binds till formella parametrar när underprogrammet anropas Bindning mellan a.p och f.p; vanligast position, ibland namn

7 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 7 Designfrågor för underprogram Parameteröverföringsmetod(er)? Typkontroller formella aktuella parametrar? Kan underprogram nästas? Kan underprogram skickas som parametrar? Vilken referensomgivning? Överlagrade underprogram? Generiska (polymorfa) underprogram? Funktioner: Sidoeffekter tillåtna? Möjliga typer på returvärden?

8 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 8 Parameteröverföringsmodeller riktningen av dataöverföringen kan variera mellan  in-modusformella parametern får data från den aktuella  ut-modusaktuella parametern får data från den formella  in-ut-modusbåde och de huvudsakliga överföringsmetoderna är  överföring av ett värdedata kopieras  överföring av en accessvägen referens kopieras En parameteröverföringsmodell lägger fast hur aktuella parametrar binds till formella parametrar vid ett anrop.

9 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 9 Parameteröverföringsmodeller (2) Värdeparameter (pass-by-value)  aktuella parameterns värde initialiserar den formella (  in-modus)  vanligtvis överföring (kopiering) av värde Resultatparameter (pass-by-result)  aktuella parametern (som måste vara en variabel) uppda- teras med den formella parameterns värde (  ut-modus)  vanligtvis överföring (kopiering) av värde  problem: »parameterkollision vid anrop, t.ex. sub(x,x) »när bestäms den aktuella parameterns adress (t.ex. i sub(a[i]) om i förändras i sub)? Värde-resultatparameter (pass-by-value-result)  kombination av båda (  in-ut-modus)

10 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 10 Parameteröverföringsmodeller (3) Referensparameter (pass-by-reference)  den formella parametern blir en alias av den aktuella som måste vara en variabel (  in-ut-modus)  problem »aliases minskar läsbarhet och tillförlitlighet »två typer av alias: per definition (om parametern är en icke-lokal variabel) och pga parameterkollision Namnparameter (pass-by-name)  textmässig ersättning av den formella parametern med den aktuella (  sällsam in-ut-modus)  problem: ineffektiv, svårt att implementera, förvirrande (  lämpar sig inte för universella programspråk)  ≈ lat evaluering i frånvaro av sidoeffekter

11 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 11 Ytterligare frågor Funktionsresultat - motsvarar en parameter i ut-modus Underprogram som parametrar  Centralt i funktionella språk, varierar i övriga språk  Vanligast: referensomgivningen ”följer med” det skickade UP (deep binding) Överlagrade underprogram  Flera UP med samma namn i samma referensomgivning  Skiljs åt genom olika ”signatur”  Flexibelt, men kan minska läsbarheten Korutiner  Symmetrisk relation mellan underprogram  ”Kvasi-parallellitet”

12 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 12 Ytterligare frågor (2) Generiska / polymorfa underprogram  Kan ha parametrar av olika typ vid olika aktiveringar  Överlagring = ”ad-hoc polymorphism”  Parametrisk polymorfi = en typ som parameter  I OO-språk ytterligare annan variant (dynamisk bindning)  Finns t ex i Ada, C++, ML Ex (ML):  fun generic_sort precedes itemlist = let fun sort nil = nil | sort [x] = [x] | sort (x::y::xs) = if precedes (x,y) then... in sort itemlist end; val ascending_int_sort = generic_sort ((op bool))


Ladda ner ppt "2003-11-25Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring."

Liknande presentationer


Google-annonser