1 more on modular design: module communications. 2 when a function is invoked, memory is allocated...
DESCRIPTION
3 ANOTHER METHOD OF PASSING PARAMETERS IS REFERRING TO MEMORY LOCATIONS BEYOND THE FUNCTION. IN SUCH CASE, THERE IS ONLY ONE MEMORY LOCATION FOR THE DATA, WHICH IS USED BY THE CALLING MODULE AND THE MODULE BEING CALLED. ANY CHANGE THAT A MODULE MAKES TO ITS FORMAL PARAMETERS AFFECTS THE ACTUAL PARAMETERS.TRANSCRIPT
![Page 1: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/1.jpg)
1
MORE ON MODULAR
DESIGN: MODULECOMMUNICATIONS
![Page 2: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/2.jpg)
2
WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF EACH ACTUAL PARAMETER IS COPIED INTO THE CORRESPONDING LOCAL MEMORY CELL. THIS IS REFERRED TO AS PASS BY COPY (VALUE).
BECAUSE THE MODULE DOES NOT KNOW THE LOCATION OF THE ACTUAL PARAMETER, IT CAN MANIPULATE THIS LOCAL COPY, BUT IT CAN NOT CHANGE ITS CONTENT.
![Page 3: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/3.jpg)
3
ANOTHER METHOD OF PASSING PARAMETERS IS REFERRING TO MEMORY LOCATIONS BEYOND THE FUNCTION. IN SUCH CASE, THERE IS ONLY ONE MEMORY LOCATION FOR THE DATA, WHICH IS USED BY THE CALLING MODULE AND THE MODULE BEING CALLED. ANY CHANGE THAT A MODULE MAKES TO ITS FORMAL PARAMETERS AFFECTS THE ACTUAL PARAMETERS.
![Page 4: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/4.jpg)
4
RETURN PARAMETERS
THE FUNCTION MAY RETURN A SINGLE VALUE USING A return STATEMENT.
HOWEVER, MORE THAN ONE RESULT MAY BE RETURNED TO THE CALLING MODULE USING PARAMETERS.
![Page 5: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/5.jpg)
5
// FILE: FindAvg2.cpp// Finds the average of three test scores#include <iostream.h>// global data:float test1, test2, test3, average;
void main (){ // functions used: void Get_data (); void Find_average (); void Display_results (); // function calls: Get_data (); Find_average (); Display_results (); return;}
PROGRAM FindAvg (REVISITED)
![Page 6: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/6.jpg)
6
FUNCTION Find_average ..void Find_average(){ // Calculates the average const int NUMBER_OF_TESTS = 3; average = (test1 + test2 + test3) / NUMBER_OF_TESTS; return;} // end Find_average()..
THE VALUE OF average IS RETURNED TO THE CALLING MODULE BY WAY OF GLOBAL VARIABLE.
![Page 7: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/7.jpg)
7
FUNCTION Find_averageRECODED TO RETURNtotal AND average
// FILE: FindTotAvg.cpp// Finds the total and average of three numbers
:void Find_tot_avg (float num1, float num2, float num3, // IN: 3 values float &total, // OUT: total of the values float &average) // OUT: average of the values{ // Calculates total and average const int NUMBER_OF_VALUES = 3; total = num1 + num2 + num3; average = total / NUMBER_OF_VALUES; return;} // end Find_tot_avg()
![Page 8: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/8.jpg)
8
THE FUNCTION CALL
Find_tot_avg (test1, test2, test3, total, average);
![Page 9: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/9.jpg)
9
// Finds the total and average of three test scores
void Find_tot_avg (float, float, float, // IN: values for 3 tests float &, // OUT: total of test scores float &); // OUT: average of test scores
THE FUNCTION PROTOTYPE
![Page 10: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/10.jpg)
10
ACTUAL PARAMETERS FORMAL PARAMETERS
test1 num1 test2 num2 test3 num3 total total average average
PARAMETER CORRESPONDENCE
![Page 11: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/11.jpg)
11
STATE OF MEMORYALLOCATION
(BEFORE EXECUTION OF FUNCTION)
90.0
addressof total
addressof average
85.0
80.0
test1
test2
test3
total
average
num1
num2
num3
total
average
ACTUALPARAMETERS
FORMALPARAMETERS
?
?
85.0
90.0
80.0
![Page 12: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/12.jpg)
12
STATE OF MEMORYALLOCATION
(AFTER EXECUTION OF FUNCTION)
90.0
85.0
80.0
test1
test2
test3
total
average
num1
num2
num3
ACTUALPARAMETERS
FORMALPARAMETERS
255.0
85.0
85.0
90.0
80.0
addressof total
addressof average
total
average
![Page 13: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/13.jpg)
13
PARAMETERS ARE PASSED IN EITHER OF TWO WAYS: 1. BY VALUE 2. BY REFERENCE
PARAMETER CATEGORIES
![Page 14: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/14.jpg)
14
IN CASE OF THE VALUE ITSELF BEING PASSED,
ONLY A COPY OF WHAT IS STORED ON THE
MEMORY, AND NOT THE LOCATION, IS SHARED. A
SEPARATE MEMORY CELL IS ALLOCATED TO
HOLD THE CORRESPONDING FORMAL
PARAMETERS.
![Page 15: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/15.jpg)
15
WITH REFERENCE PARAMETERS (DENOTED WITH THE &
SYMBOL FOLLOWING THE TYPE OF THE FORMAL PARAMETER),
THERE IS ONLY ONE MEMORY LOCATION FOR THE DATA,
WHICH IS USED BY THE CALLING MODULE AND THE
MODULE BEING CALLED. ANY CHANGE THAT A MODULE
MAKES TO ITS FORMAL PARAMETERS AFFECTS THE
ACTUAL PARAMETERS.
![Page 16: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/16.jpg)
16
CAN BE CATEGORIZED INTO THREE TYPES:
1. DATA IMPORT: WHAT THE CALLING MODULE HAS THAT THE CALLED MODULE NEEDS.
2. DATA EXPORT: WHAT THE CALLED MODULE COMPUTES AND RETURNS TO THE CALLING MODULE.
3. DATA IMPORT/ EXPORT: WHAT THE CALLING MODULE HAS THAT THE CALLED MODULE NEEDS, CHANGES, AND RETURNS TO THE CALLING MODULE.
DATA FLOW DESIGNFOR MODULES
![Page 17: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/17.jpg)
17
ANY OBJECT THAT CAN BE CLASSIFIED AS IMPORT
SHOULD BE PASSED BY VALUE.
ITEMS IN THE REMAINING TWO CATEGORIES
(EXPORT AND IMPORT/EXPORT) MUST BE PASSED
BY REFERENCE.
![Page 18: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/18.jpg)
18
SUGGESTED GUIDELINESFOR PARAMETER
PASSING(VALUE)
WHEN DATA IS PASSED TO A FUNCTION AND IS NOT TO BE CHANGED, THEN FORMAL PARAMETER SHOULD BE A VALUE PARAMETER.WHEN DATA IS PASSED TO A FUNCTION AND IS CHANGED, BUT THE CHANGE IS NOT TO AFFECT THE VALUE OUTSIDE THE FUNCTION, THEN THE FORMAL PARAMETER SHOULD BE A VALUE PARAMETER.
![Page 19: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/19.jpg)
19
SUGGESTED GUIDELINESFOR PARAMETER
PASSING(REFERENCE)
WHEN DATA IS PASSED TO A FUNCTION AND IS CHANGED AND IS TO BE RETURNED, THEN FORMAL PARAMETER SHOULD BE A REFERENCE PARAMETER.WHEN INFORMATION IS GENERATED IN A FUNCTION AND IS TO BE RETURNED, THEN THE FORMAL PARAMETER SHOULD BE A REFERENCE PARAMETER.
![Page 20: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/20.jpg)
20
1. TO MAKE THE DATA FLOW DESIGN CLEAR.
2. TO PREVENT UNWANTED SIDE EFFECTS
3. TO HAVE ACTUAL PARAMETERS AS CONSTANTS OR EXPRESSIONS (IF NEEDED).
ADDITIONAL REASONS FOR USING
VALUE PARAMETERS
![Page 21: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/21.jpg)
21
EXPRESSIONS AS ACTUAL
PARAMETERS
Find_tot_avg (test1 + extra_credit_1, test2 + extra_credit_2, test3 + extra_credit_3, total, average);
![Page 22: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/22.jpg)
22
1. MULTIPLE RESULTS RETURNED FROM MODULES CAN ONLY BE PASSED BACK THROUGH REFERENCE PARAMETERS.
2. MORE EFFICIENT MEMORY MANAGEMENT.
ADDITIONAL REASONS FOR USING REFERENCE
PARAMETERS
![Page 23: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/23.jpg)
23
PARAMETER CORRESPONDENCE
THE CORRESPONDENCE BETWEEN ACTUAL AND FORMAL PARAMETERS IS DETERMINED BY THE POSITION. ALSO, THERE SHOULD BE CONSISTENCY WITH RESPECT TO THE PARAMETER TYPE.
![Page 24: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/24.jpg)
24
TYPE CONVERSION
ALTHOUGH IDENTICAL MATCH BETWEEN ACTUAL AND FORMAL PARAMETER TYPE IS DESIRABLE, IN THE CASE OF MISMATCH, THE COMPILER MAY PERFORM A CONVERSION (THE RESULT PRODUCED MAY NOT BE THE DESIRED ONE).
WHEN NECESSARY, EXPLICIT CONVERSION USING CASTING OPERATORS SHOULD BE USED.
![Page 25: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/25.jpg)
25
EXAMPLE:
IF total_grade IS A float VARIABLE, THE EXPRESSION
int (total_grade)
CREATES A COPY OF total_grade OF TYPE int.
float MAY BE USED TO CREATE A FLOATING POINT COPY OF AN int VALUE.
![Page 26: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/26.jpg)
26
A TRANSLATION-TIME CONCERN. DETERMINES WHERE IN A PROGRAM A GIVEN OBJECT MAY BE ACCESSED.
THE FOUR SCOPES FOR AN OBJECT ARE:
1. FILE SCOPE
2. FUNCTION SCOPE
3. BLOCK SCOPE
4. FUNCTION-PROTOTYPE SCOPE
SCOPE OF OBJECTS
![Page 27: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/27.jpg)
27
SCOPE RULES:FILE SCOPE
AN OBJECT DECLARED OUTSIDE ANY FUNCTION IS ACCESSIBLE FROM ALL FUNCTIONS THAT FOLLOW ITS DECLARATION.GLOBAL VARIABLES, CLASSES, FUNCTION DEFINITIONS, AND FUNCTION PROTOTYPES PLACED OUTSIDE A FUNCTION ALL HAVE FILE SCOPE.
![Page 28: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/28.jpg)
28
SCOPE RULES:FUNCTION SCOPE
LABELS (i.e. case LABELS IN switch STATEMENT) ARE THE ONLY OBJECTS WITH FUNCTION SCOPE. LABELS CAN BE REFERENCED ONLY IN THE FUNCTION IN WHICH THEY APPEAR.
![Page 29: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/29.jpg)
29
SCOPE RULES:BLOCK SCOPE
AN OBECT DECLARED INSIDE A BLOCK IS ACCESSIBLE FROM ITS DECLARATION TO THE END OF THE BLOCK (THE RIGHT BRACE “}”).LOCAL VARIABLES AND FUNCTION PARAMETERS HAVE BLOCK SCOPE.
![Page 30: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/30.jpg)
30
SCOPE RULES:FUNCTION-PROTOTYPE
SCOPE
OBJECTS USED IN THE PARAMETER LIST OF A FUNCTION PROTOTYPE (NOT REQUIRED) HAVE FUNCTION-PROTOTYPE SCOPE. THOSE OBJECTS CAN BE REUSED ELSEWHERE IN THE PROGRAM.
![Page 31: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/31.jpg)
31
NAMING CONFLICTS
ANY BLOCK MAY CONTAIN OBJECT DECLARATIONS. WHEN BLOCKS ARE NESTED, AND THE SAME OBJECT NAME IS INCLUDED IN MORE THAN ONE BLOCK, ACCESS IS GIVEN TO THE OBJECT WITHIN THE BLOCK THAT IS CURRENTLY IN EXECUTION.
![Page 32: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/32.jpg)
32
// FILE: SimpleScope.cpp#include <iostream.h>
float a, b, c;int d;
void main (){ void Average (float, float, float, int &);
cin >> a >> b >> c; Average (a, b, c, d); cout << d << endl; return;} // end of main ()
void Average (float x, float y, float z, int &w){ float total;
total = x + y + z; w = total / 3; // result is automatically converted to int return;} // end of Average ()
EXAMPLE:
![Page 33: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/33.jpg)
33
ANOTHER EXAMPLE:// FILE: NestedScope.cpp
float number;
void main (){ :} // end of main ()
void Module_one (){ float total; :} // end of Module_one ()
float Module_two (){ float total;
: { int sum; : sum = sum + total; } :} // end of Module_two ()
![Page 34: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/34.jpg)
34
ANY EFFECT OF ONE MODULE ON ANOTHER MODULE
THAT IS NOT A PART OF THE EXPLICITLY DEFINED
DATA FLOW BETWEEN THEM.
WHEN A MODULE ACCESSES INFORMATION OUTSIDE
OF ITS OWN BLOCK IN A MANNER OTHER THAN
THROUGH ITS PARAMETERS, THE POTENTIAL
EXISTS FOR UNWANTED SIDE EFFECTS.
SIDE EFFECTS
![Page 35: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/35.jpg)
35
IT IS ALSO POSSIBLE FOR UNWANTED SIDE EFFECTS
TO OCCUR IF A FORMAL REFERENCE PARAMETER IS
USED WHERE A VALUE PARAMETER WILL SUFFICE.
![Page 36: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/36.jpg)
36
AVOIDING SIDE EFFECTSMODULES SHOULD ACCESS NONLOCAL VARIABLES
THROUGH THEIR PARAMETER LISTS AND FUNCTION
RESULTS, AND ALL IMPORTS ONLY PARAMETERS
SHOULD BE PASSED AS VALUE PARAMETERS.
![Page 37: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/37.jpg)
37
MAIN PROGRAM (OR OTHER
CALLING MODULE)
CALLEDMODULE
AVOIDING SIDE EFFECTS
VALUE PARAMETERS
REFERENCE PARAMETERS
NON-PARAMETERRELATIONSHIP
FUNCTION RESULT
![Page 38: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/38.jpg)
38
// FILE: SideEffect.cpp#include <iostream.h>
void Char_count (); // counts characters read
int count; // counts input lineschar ch; // input character
EXAMPLE:
![Page 39: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/39.jpg)
39
void main (){ count = 0; ch = ' '; while ( !cin.eof() ) // a class function, // checks for the end // of file { count ++; Char_count (); } cout << count << " lines of input." << endl; return;} // end of main ()
![Page 40: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/40.jpg)
40
void Char_count ()// counts the number of characters read{ count = 0; // side effect ch = ' ’; // intialize ch while ((!cin.eof()) && (ch != '\n')) { cin >> ch; // global variable access count ++; // side effect } // end of while cout << count // global access to count << " characters in this line." << endl; return;} // end of Char_count ()
![Page 41: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/41.jpg)
41
ESCAPE SEQUENCE
\n NEWLINE\t HORIZONTAL TAB\r CARRIAGE RETURN (CURRENT LINE)\a ALERT (SYSTEM BELL)\\ BACKSLASH\” DOUBLE QUOTE
![Page 42: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/42.jpg)
42
IT IS ACCEPTABLE TO REFERENCE NAMED CONSTANTS
GLOBALLY SINCE THE VALUES OF GLOBAL
CONSTANTS CAN NOT BE CHANGED DURING
PROGRAM EXECUTION.
THERE ARE TWO ADVANTAGES TO GLOBALLY
REFERENCING CONSTANTS : EASE OF CHANGE
AND CONSISTENCY.
GLOBAL CONSTANTS AND SIDE EFFECTS
![Page 43: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/43.jpg)
43
IF A CONSTANT IS ONLY NEEDED IN ONE MODULE,
THEN IT SHOULD BE DEFINED LOCALLY WITHIN
THAT MODULE.
LOCAL CONSTANTS
![Page 44: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/44.jpg)
44
AN EXECUTION-TIME CONCERN. REFERS TO LIFE SPAN OF OBJECTS DECLARED WITHIN FUNCTIONS.
COVERS THE PERIOD OF TIME FROM THE CONSTRUCTION TO THE DESTRUCTION OF AN OBJECT.
OBJECT LIFETIME
![Page 45: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/45.jpg)
45
CONSTRUCTION OF DATAOBJECTS
A MEMORY LOCATION IS ASSOCIATED WITH THE DATA OBJECT. THEN, THE DATA OBJECT IS INITIALIZED TO A SPECIFIC VALUE (EVENTUALLY).
![Page 46: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/46.jpg)
46
{ : int counter; : counter = 1;
// the following is a loop while (counter <= 10) { : } :}
EXAMINE THE DATA OBJECT counter IN THEFOLLOWING CODE SEGMENT:
![Page 47: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/47.jpg)
47
THE CONSTRUCTION OF THE DATA OBJECTcounter TOOK PLACE AS FOLLOWS :
1. A MEMORY LOCATION WAS ASSOCIATED WITH counter.2. THAT MEMORY LOCATION WAS INITIALIZED TO 1
![Page 48: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/48.jpg)
48
DESTRUCTION OF DATAOBJECTS
A MEMORY ALLOCATION IS DISASSOCIATED FROM THE DATA OBJECT.
![Page 49: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/49.jpg)
49
WHAT INDICATES THE END OF counter LIFETIME?
THE DESTRUCTION OF THE DATA OBJECT counterTAKES PLACE BY DISASSOCIATING IT FROM THE
MEMORY ALLOCATION.
![Page 50: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/50.jpg)
50
AUTOMATIC OBJECTS(DEFAULT STORAGE CLASS-- ALSO CALLED LOCAL)
CONSTRUCTED WHEN EXECUTION ENTERS THE BLOCK IN WHICH THEY ARE DECLARED AND DESTROYED AT EXIT FROM SAME BLOCK.
STORAGE CLASSES
![Page 51: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/51.jpg)
51
STATIC OBJECTS
CONSTRUCTED WHEN PROGRAM BEGINS EXECUTIONAND DESTROYED WHEN PROGRAM TERMINATES.
![Page 52: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/52.jpg)
52
{ int i = 1; : }
EXAMPLE: AUTOMATIC OBJECTS
![Page 53: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/53.jpg)
53
while (logical_expression){ int i = 1; :}
FOR EACH ITERATION, i IS CONSTRUCTED AT THE BEGINNING OF THE LOOP AND DESTROYED ATTHE END !!!
![Page 54: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/54.jpg)
54
{ static int i = 1; : }
i IS CONSTRUCTED AT THE BEGINNING OF PROGRAMEXECUTION AND DESTROYED AT THE END.
EXAMPLE: STATIC OBJECTS
![Page 55: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/55.jpg)
55
RecursionA recursive function is a function that calls itself, either
directly, or indirectly (through another function).
e.g. Factorial function (Fig 3.14)Fibonacci function (Fig 3.15)
![Page 56: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/56.jpg)
56
Recursion VS Iteration
Recursion is expensive in terms of processor time and memory usage than iteration.
![Page 57: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/57.jpg)
57
• Inline functions• Setting Default argument
![Page 58: 1 MORE ON MODULAR DESIGN: MODULE COMMUNICATIONS. 2 WHEN A FUNCTION IS INVOKED, MEMORY IS ALLOCATED LOCALLY FOR THE FORMAL PARAMETERS AND THE VALUE OF](https://reader035.vdocuments.net/reader035/viewer/2022070605/5a4d1ad67f8b9ab0599731a3/html5/thumbnails/58.jpg)
58
Function Overloading• You can use same function name as long as it has
different signature than the other function that has same name.
E.g. square functionOr sqrt(int)Sqrt (long)Sqrt (double)