Presentation is loading. Please wait.

Presentation is loading. Please wait.

Subprograms subroutines, procedures, functions, methods.

Similar presentations


Presentation on theme: "Subprograms subroutines, procedures, functions, methods."— Presentation transcript:

1 Subprograms subroutines, procedures, functions, methods

2 Vocabulary float average(float list[], int n) { … } av = average(marks,20); call header / prototype protocol formal parameters actual (arguments) parameter profile

3 Functions vs Procedures  procedures are statements - do not return a value Collections.sort(marks, 20);  functions are expressions - return a value double x = 1000.0 + Math.exp(10.0);  in c, c++, Java, all methods are functions; can be used as procedures; ‘void’s must be used as procedures

4 Parameters keyword positional call call - return return pass-by- value reference name example Java: all parameters are positional primitive parameters are call, pass by value object parameters are call-return, pass by reference

5 Keyword parameter passing  order of actual parameters can be changed if each parameter is identified by keyword (FORTRAN, Ada) av = average(n=>20,list=>marks)

6 Direction of data passing call - data goes into subprogram only at beginning of execution return - data goes from subprogram back to caller at end of execution call-return - data passes in both directions: into subroutine at call and back to caller at end of execution

7 Direction of data passing call - protects caller’s data from effects of subprogram return - useful for initializing data in caller; alternative route for returning data call-return - gives subprogram access to change caller data caller subprogram caller subprogram caller subprogram

8 Implementing parameters (1)  Pass-by-value pass-by-value (call) pass-by-result (return) pass-by-value-result (call - return)  Data is copied between actual and formal parameters a = 10proc sub(int x) sub (a) { print a print x x = 1000 print x } a x

9 Implementing parameters (1)  Pass-by-value pass-by-value (call) pass-by-result (return) pass-by-value-result (call - return)  What happens when actual parameters are not variables? (constants or expressions)

10 Implementing parameters (1)  Pass by value, result, value-result a = 10proc sub(int x) sub (a) { print a print x x = 1000 print x } a x stack sub

11 Implementing parameters (2)  Pass-by-reference (call - return OR call if actual parameters are made read- only)  Formal parameter refers to same memory cell as actual parameter a = 10proc sub(int x) sub (a) { print a print x x = 1000 print x } a x

12 Implementing parameters (2)  Pass-by-reference a = 10proc sub(int x) sub (a) { print a print x x = 1000 print x } a x stack sub address of a

13 Implementing parameters (2)  Pass-by-reference  Formal parameter refers to same memory cell as actual parameter  What happens when actual parameters are not variables? (constants or expressions) java example jButton.addActionListener(new ButtonListener());

14 Implementing parameters (3)  Pass-by-name  formal is bound to actual only when accessed or assigned (i.e., not at call)  effect depends on form of actual parameter: constant - same as pass-by-value variable - same as pass-by-reference expression - like reference but reference may change

15 Implementing parameters (3) - pass-by-name example procedure BIGSUB p. 364 Sebesta integer GLOBAL, LIST[1:2]; procedure SUB(PARAM) begin PARAM := 3; GLOBAL := GLOBAL + 1; // note scope! PARAM := 5; end; begin LIST[1] := 2; LIST[2] := 2; GLOBAL := 1; SUB(LIST[GLOBAL]); end;

16 Implementing Parameters (3)  Pass-by-name x j=4 x thunk sub(x) j=2 sub(list[j]) list[j] j list

17 Parameters - design issues (1)  type checking no checking - mismatched types -> reinterpretation of data type checking - control of type match or legal coercion

18 Parameters - design issues (2)  array parameters - for 2 or more dimensions, length of 2nd, 3rd, etc dimensions is needed to computer offset  tradeoff compile-time (efficient) offset expression forces fixed array dimensions call-time (less efficient) offset expression handles arrays of any size (java)

19 Parameters - design issues (3) security / efficiency tradeoff  security: design according to minimum access requirements: call, return, call-return  efficiency: reference is time and space efficient for large data objects but implies call-return  compromises allow programmer choice ‘read-only’ references (C++) what does java offer?

20 Passing procedures as parameters  example of procedure passing procedure m() var integer[3] arr = {1,2,3}; procedure s (integer[3] k) begin print (k[1]+k[2]+k[3]); end procedure sub (integer[3] cc, procedure w) begin w(cc); end begin sub(arr, s); end

21 Issues unique to procedure parameters  Does protocol of actual parameter procedure match protocol of formal? 1.- early Pascal unchecked 2.- later Pascal – parameters in formal procedure parameter 3.- c pointers to procedures are passed; their type identifies protocol

22 Function design  extreme definition: NO SIDE-EFFECTS no access to global variables only call parameters only effect through return value  return values: single primitive value – math model single value including reference/pointer any one value including record, array or procedure

23 Coroutines – preview to concurrency  subroutines in symmetric control model (not caller-callee relationship)  goal: virtual parallelism  Simula – process simulation  java – threads  classic example – large file copy read and write coroutines with shared buffer

24 Sharing data space  global identifiers by scoping rules  instructions to compiler to share space (Fortran COMMON)  explicit specification of external units needed (Fortran 90, java)

25 Reusability with subprograms  OVERLOADING: reusing a subprogram name in different scopes with different protocols (like operators * ) conflict with default parameters  POLYMORPHIC: different parameter types in different activations dynamic typing type templates C++ * C++ allows overloading of operators

26 C++ templates template void Swap (Etype & First, Etype & Second) { Etype Temp = First; First = Second; Second = Temp; }... in calling program int X = 5, Y = 6, Z = 7; double A = 3.5, B = 9.4; Swap(X,Y);//instantiate int version Swap(X,Z);//re-use int version Swap(A,B);//instantiate double version Swap(A,Z);// illegal – type mismatch

27 Reusability and compilation  problem: variables and procedures defined in one unit and accessed in another – type checking 1.separate compilation (Ada) compile time check of compatibility 2.independent compilation (c) no type checking – run time type errors 3.no compilation except complete programs (original Fortran II)

28 Separate Compilation  compilation checks library of exported entities for types and protocols of external references function int max(int,int) unit A A’s compilation unit int max(int,int) library i = max(j,k) unit B compile A compile B ?


Download ppt "Subprograms subroutines, procedures, functions, methods."

Similar presentations


Ads by Google