0% found this document useful (0 votes)
7 views59 pages

Subprogram

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views59 pages

Subprogram

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

TWELFTH EDITION

GLOBAL EDITION

Chapter 9

Subprograms

Copyright © 2023 Pearson Education Ltd. All Rights Reserved.


Chapter 9 Topics
• Introduction
• Fundamentals of Subprograms
• Design Issues for Subprograms
• Local Referencing Environments
• Parameter-Passing Methods
• Parameters That Are Subprograms
• Calling Subprograms Indirectly
• Overloaded Subprograms
• Generic Subprograms
• Closures
• Coroutines

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-2


AAsort()Stack
function sorts a list. The user only needs to know what it does (sorts), not whether it uses quicksort, mergesort, or bubblesort internally.

class exposes operations like push and pop, but users do not need to know if the stack is implemented using an array or a linked list.

1. Introduction

• Two fundamental abstraction facilities


– Process abstraction
• The reuse save coding time and memory
• hides the details of how actions are performed.
• A sort() function sorts a list. The user only needs to
know what it does (sorts), not whether it uses
quicksort, mergesort, or bubblesort internally.
– Data abstraction
• hides the details of data representation.
• A Stack class exposes operations like push and pop,
but users do not need to know if the stack is
implemented using an array or a linked list.

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-3


A sort() function sorts a list. The user only needs to know what it does (sorts), not whether it uses quicksort, mergesort, or bubblesort internally.

1. Introduction

• Two fundamental abstraction facilities


– Process abstraction

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-4


1. Introduction

• What is a subprogram
– A sequential algorithm that describe
computation
– Collection of statements that describes a
parameterized compuation
– a program inside any larger program that can be
reused any number of times
– a sequence of instructions whose execution is
invoked from one or more remote locations in a
program
– Examples of subprogram( functions and procedure)

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-5


1.1 Fundamentals of Subprograms

• Each subprogram has a single entry point


• The calling program is suspended during
execution of the called subprogram
• Control always returns to the caller when
the called subprogram’s execution
terminates

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-6


1.2 Basic Definitions
• A subprogram definition describes the interface to and the
actions of the subprogram abstraction
• A subprogram call is an explicit request that the subprogram
be executed
• A subprogram header is the first part of the definition,
including the name, the kind of subprogram, and the formal
parameters def adder (parameter)
• The parameter profile (aka signature) of a subprogram is the
number, order, and types of its parameters
• The protocol is a subprogram’s parameter profile and, if it is
a function, its return type

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-7


Based on subprogram in colab

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-8


1.2 Basic Definitions (continued)

• Function declarations in C and C++ are often


called prototypes
• A subprogram declaration provides the protocol,
but not the body, of the subprogram
• A formal parameter is a dummy variable listed in
the subprogram header and used in the
subprogram
• An actual parameter represents a value or address
used in the subprogram call statement

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-9


Example

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-10


1.2 Basic Definitions (continued)

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-11


1.3 Actual/Formal Parameter
Correspondence
• Positional
– The binding of actual parameters to formal parameters is
by position: the first actual parameter is bound to the first
formal parameter and so forth
– Safe and effective
• Keyword
– The name of the formal parameter to which an actual
parameter is to be bound is specified with the actual
parameter
– Advantage: Parameters can appear in any order, thereby
avoiding parameter correspondence errors
– Disadvantage: User must know the formal parameter’s
names

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-12


1.3 Formal Parameter Default
Values
• In certain languages (e.g., C++, Python, Ruby, PHP), formal
parameters can have default values (if no actual parameter is
passed)

– In C++, default parameters must appear last because


parameters are positionally associated (no keyword parameters)

• Variable numbers of parameters


– C# methods can accept a variable number of parameters
as long as they are of the same type—the corresponding
formal parameter is an array preceded by params

– In Ruby, the actual parameters are sent as elements of a


hash literal and the corresponding formal parameter is
preceded by an asterisk.
Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-13
1.3 Variable numbers of
parameters
– C# methods can accept a variable number of parameters
as long as they are of the same type—the corresponding
formal parameter is an array preceded by params

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-14


1.3 Variable numbers of
parameters
– In Ruby, the actual parameters are sent as elements of a
hash literal and the corresponding formal parameter is
preceded by an asterisk.

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-15


Variable Numbers of Parameters

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-16


Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-17
1.4 Procedures and Functions
• There are two categories of subprograms
– Procedures are collection of statements that
define parameterized computations
• Does not return a value (or returns nothing/void);
• it simply performs an action.
– Functions structurally resemble procedures but
are semantically modeled on mathematical
functions
• They are expected to produce no side effects
• In practice, program functions have side effects
• Returns a value and is used as part of an
expression.

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-18


Procedure versus function

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-19


1.5 Design Issues for Subprograms
• Are local variables static or dynamic?
• Can subprogram definitions appear in other subprogram
definitions?
• What parameter passing methods are provided?
• Are parameter types checked?
• If subprograms can be passed as parameters and subprograms can
be nested, what is the referencing environment of a passed
subprogram?
• Are functional side effects allowed?
• What types of values can be returned from functions?
• How many values can be returned from functions?
• Can subprograms be overloaded?
• Can subprogram be generic?
• If the language allows nested subprograms, are closures supported?

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-20


1.6 Local Referencing Environments
• Local variables can be stack-dynamic
- Advantages
• Support for recursion
• Storage for locals is shared among some subprograms
– Disadvantages
• Allocation/de-allocation, initialization time
• Indirect addressing
• Subprograms cannot be history sensitive(pseudorandom
numbers)
• Local variables can be static
– Advantages and disadvantages are the opposite of those
for stack-dynamic local variables

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-21


1.6Local Referencing Environments: Examples

• In most contemporary languages, locals are


stack dynamic
• In C-based languages, locals are by default
stack dynamic, but can be declared static
• The methods of C++, Java, Python, and C#
only have stack dynamic locals

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-22


Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-23
1.7 Semantic Models of Parameter
Passing
• In mode
• Out mode
• Inout mode

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-24


Inmode

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-25


Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-26
Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-27
1.7.1Conceptual Models of
Transfer
• Physically move a value ( copy)
• Move an access path to a value( path e.g
pointer)

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-28


Pass-by-Value (In Mode)

• The value of the actual parameter is used to


initialize the corresponding formal parameter
• Make a copy, pass to the function, don’t return any
value
– Normally implemented by copying
– Can be implemented by transmitting an access path but
not recommended (enforcing write protection is not easy)
– Disadvantages (if by physical move): additional storage is
required (stored twice) and the actual move can be costly
(for large parameters)
– Disadvantages (if by access path method): must write-
protect in the called subprogram and accesses cost more
(indirect addressing)

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-29


Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-30
Pass-by-Value

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-31


Pass-by-Result (Out Mode)
• When a parameter is passed by result, no value is
transmitted to the subprogram; the corresponding
formal parameter acts as a local variable; its value
is transmitted to caller’s actual parameter when
control is returned to the caller, by physical move
– Require extra storage location and copy
operation
• Potential problems:
– whichever formal parameter is
sub(p1, p1);
copied back will represent the current value of p1

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-32


Pass-by-Value-Result (inout Mode)

• A combination of pass-by-value and


pass-by-result
• Sometimes called pass-by-copy
• Formal parameters have local storage
• Disadvantages:
– Those of pass-by-result
– Those of pass-by-value

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-33


Example of pass by value-result

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-34


Pass-by-Reference (Inout Mode)

• Pass an access path


• Also called pass-by-sharing
• Advantage: Passing process is efficient (no
copying and no duplicated storage)
• Disadvantages
– Slower accesses (compared to pass-by-value) to
formal parameters
– Potentials for unwanted side effects (collisions)
– Unwanted aliases (access broadened)
fun(total, total); fun(list[i], list[j]; fun(list[i], i);

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-35


Copyright © 2023 Pearson Education Ltd. All Rights Reserved.
Pass-by-Reference

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-37


Pass-by-Reference (continued)

- Another issue:

Can the passed reference be changed in the


called subprogram?

- In C, it is possible

- But in some other languages, such as Pascal


and C++, formal parameters that are
addresses are implicitly dereferenced, which
prevents such changes

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-38


Pass-by-Name (Inout Mode)

• By textual substitution
• Formals are bound to an access method at
the time of the call, but actual binding to a
value or address takes place at the time of
a reference or assignment
• Allows flexibility in late binding
• Implementation requires that the
referencing environment of the caller is
passed with the parameter, so the actual
parameter address can be calculated

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-39


Pass-by-Name

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-40


1.8 Implementing Parameter-Passing
Methods

• In most languages parameter


communication takes place thru the run-
time stack
• Pass-by-reference are the simplest to
implement; only an address is placed in the
stack

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-41


1.8.1Implementing Parameter-Passing
Methods

Function header: void sub(int a, int b, int c, int d)


Function call in main: sub(w, x, y, z)
(pass w by value, x by result, y by value-result, z by reference)
Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-42
1.8.2Parameter Passing Methods of
Major Languages
• C
– Pass-by-value
– Pass-by-reference is achieved by using pointers as parameters

• C++
– A special pointer type called reference type for pass-by-
reference

• Java
– All non-object parameters are passed are passed by value
So, no method can change any of these parameters
– Object parameters are passed by reference

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-43


Parameter Passing Methods of Major
Languages (continued)
• Fortran 95+
- Parameters can be declared to be in, out, or inout mode
• C#
- Default method: pass-by-value
– Pass-by-reference is specified by preceding both a formal
parameter and its actual parameter with ref
• PHP: very similar to C#, except that either the actual or the
formal parameter can specify ref
• Swift: default passing method is by value, but pass-by-
reference can be specified by preceding the formal with
inout
• Perl: all actual parameters are implicitly placed in a
predefined array named @_
• Python and Ruby use pass-by-assignment (all data values are
objects); the actual is assigned to the formal
Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-44
Type Checking Parameters

• Considered very important for reliability


• FORTRAN 77 and original C: none
• Pascal and Java: it is always required
• ANSI C and C++: choice is made by the user
– Prototypes
• Relatively new languages Perl, JavaScript, and PHP
do not require type checking
• In Python and Ruby, variables do not have types
(objects do), so parameter type checking is not
possible

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-45


Design Considerations for Parameter
Passing

• Two important considerations


– Efficiency
– One-way or two-way data transfer
• But the above considerations are in conflict
– Good programming suggest limited access to
variables, which means one-way whenever
possible
– But pass-by-reference is more efficient to pass
structures of significant size

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-46


Parameters that are Subprogram
Names
• It is sometimes convenient to pass
subprogram names as parameters
• Issues:
1. Are parameter types checked?
2. What is the correct referencing environment for
a subprogram that was sent as a parameter?

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-47


Parameters that are Subprogram
Names: Referencing Environment
• Shallow binding: The environment of the
call statement that enacts the passed
subprogram
- Most natural for dynamic-scoped
languages
• Deep binding: The environment of the
definition of the passed subprogram
- Most natural for static-scoped languages
• Ad hoc binding: The environment of the call
statement that passed the subprogram

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-48


Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-49
Parameters that are Subprogram
Names

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-50


Overloaded Subprograms

• An overloaded subprogram is one that has the


same name as another subprogram in the same
referencing environment
– Every version of an overloaded subprogram has a unique
protocol
• C++, Java, C#, and Ada include predefined
overloaded subprograms
• In Ada, the return type of an overloaded function
can be used to disambiguate calls (thus two
overloaded functions can have the same
parameters)
• Ada, Java, C++, and C# allow users to write
multiple versions of subprograms with the same
name

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-51


Example of overlaoding

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-52


Coroutines
• A coroutine is a subprogram that has multiple
entries and controls them itself – supported
directly in Lua
• Also called symmetric control: caller and called
coroutines are on a more equal basis
• A coroutine call is named a resume
• The first resume of a coroutine is to its beginning,
but subsequent calls enter at the point just after
the last executed statement in the coroutine
• Coroutines repeatedly resume each other, possibly
forever
• Coroutines provide quasi-concurrent execution of
program units (the coroutines); their execution is
interleaved, but not overlapped
Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-53
Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-54
Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-55
Coroutines Illustrated: Possible
Execution Controls

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-56


Coroutines Illustrated: Possible
Execution Controls

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-57


Coroutines Illustrated: Possible
Execution Controls with Loops

Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-58


Summary
• A subprogram definition describes the actions
represented by the subprogram
• Subprograms can be either functions or
procedures
• Local variables in subprograms can be stack-
dynamic or static
• Three models of parameter passing: in mode, out
mode, and inout mode
• Some languages allow operator overloading
• Subprograms can be generic
• A closure is a subprogram and its ref. environment
• A coroutine is a special subprogram with multiple
entries
Copyright © 2023 Pearson Education Ltd. All Rights Reserved. 1-59

You might also like