Top-Down Design with Functions and Classes By Dr. Awad Khalil Computer Science & Engineering Department.

Presentation on theme: "Top-Down Design with Functions and Classes By Dr. Awad Khalil Computer Science & Engineering Department."— Presentation transcript:

Top-Down Design with Functions and Classes By Dr. Awad Khalil Computer Science & Engineering Department

2 3.1 Building Programs from Existing Information  Reuse of existing programs  Develop program in stages  Compile along the way  Keep it small  Comments to describe actions

3 Washers.cpp // File: washers.cpp // Computes the weight of a batch of flat // washers. #include #include using namespace std; int main() { const float PI = 3.14159; const float PI = 3.14159; float holeDiameter; // input - float holeDiameter; // input -

4 Washers.cpp float edgeDiameter; // input - diameter float edgeDiameter; // input - diameter float thickness; // input - thickness float thickness; // input - thickness float density; // input - density float density; // input - density float quantity; // input - number float quantity; // input - number float weight; // output - weight float weight; // output - weight float holeRadius; // radius of hole float holeRadius; // radius of hole float edgeRadius; // radius of outer edge float edgeRadius; // radius of outer edge float rimArea; // area of rim float rimArea; // area of rim float unitWeight; // weight of 1 washer float unitWeight; // weight of 1 washer

5 Washers.cpp cout << "Inner diameter in centimeters: "; cin >> holeDiameter; cin >> holeDiameter; cout << "Outer diameter in centimeters: "; cout << "Outer diameter in centimeters: "; cin >> edgeDiameter; cin >> edgeDiameter; cout << "Thickness in centimeters: "; cout << "Thickness in centimeters: "; cin >> thickness; cin >> thickness; cout << "Material density in grams per cout << "Material density in grams per cubic centimeter: "; cubic centimeter: "; cin >> density; cin >> density; cout << "Quantity in batch: "; cout << "Quantity in batch: "; cin >> quantity; cin >> quantity;

6 Washers.cpp // Compute the rim area. // Compute the rim area. holeRadius = holeDiameter / 2.0; holeRadius = holeDiameter / 2.0; edgeRadius = edgeDiameter / 2.0; edgeRadius = edgeDiameter / 2.0; rimArea = PI * edgeRadius * edgeRadius - rimArea = PI * edgeRadius * edgeRadius - PI * holeRadius * holeRadius; PI * holeRadius * holeRadius; // Compute the weight of a flat washer. // Compute the weight of a flat washer. unitWeight = rimArea * thickness * density; unitWeight = rimArea * thickness * density; // Compute the weigh // Compute the weigh weight = unitWeight * quantity; weight = unitWeight * quantity;

7 Washers.cpp // Display the weight // Display the weight cout << "The expected weight of the batch cout << "The expected weight of the batch is " << weight; is " << weight; cout << " grams." << endl; cout << " grams." << endl; return 0; return 0;}

8 Washers.cpp Program Output Inner Diameter in centimeters: 1.2 Outer Diameter in centimeters: 2.4 Thickness in centimeters: 0.1 Material density in grams per cubic centimeter: 7.87 Quantity in batch: 1000 The expected weight of the batch is 2670.23 grams

9 3.2 Library Functions  Goal of Structured Programming  Error free code  Reusability  Don’t reinvent the wheel  C ++ provides collection of functions  Organized in Libraries  Library examples Table 3.1

10 C++ Math Library  Functions in the Math library  sqrtcos sinpow  Examples Table 3.1  Function use in Assignments y = sqrt (x); sqrt is function name x is function argument  Activated by a “function call”  Result of execution is assigned to variable y

11 C++ Math Library (cont) Function sqrt as a “black box” Square root computation X is 16.0Result is 4.0

12 C++ Library Functions  We can effectively utilize existing functions by learning to read function prototypes with the preconditions and postconditions.  Example prototype (or signature) double sqrt(double x) double sqrt(double x) // PRE: x >= 0.0 // PRE: x >= 0.0 // POST: Returns the square root of x. // POST: Returns the square root of x.

13 Preconditions and Postconditions  Comments that represents a contract between the implementor of a function and the user (client) of that function.  We'll look at two such comments:  Precondition: What the function requires.  Postcondition: What the function will do if the precondition is met.

14 Preconditions and Postconditions  The preconditions are the circumstances that must be true before the function can successfully fulfill the promised postconditions.  Example (Precondition abbreviates to PRE: double sqrt(double x); // PRE: x >= 0 // POST: Returns square root of argument X

15 SquareRoot.cpp // File: squareRoot.cpp // Performs three square root computations #include // sqrt function #include // i/o functions using namespace std; int main() { float first; float second; float answer;

16 SquareRoot.cpp // Get first number and display its square root. cout << "Enter the first number: "; cin >> first; answer = sqrt(first); cout << "The square root of the first number is " << answer << endl; // Get second number and display its square root. cout << "Enter the second number: "; cin >> second; answer = sqrt(second); cout << "The square root of the second number is " << answer << endl;

17 SquareRoot.cpp // Display the square root of the sum of first // and second. answer = sqrt(first + second); cout << "The square root of the sum of both numbers is " << answer << endl; return 0; }

18 SquareRoot.cpp Program Output Enter the first number: 9 The square root of the first number is 3 Enter the second number: 16 The square root of the second number is 4 The square root of the sum of both numbers is 5

19 3.3 Top-Down Design and Structure Charts Original Problem Detailed subproblem s Level 0 Level 1 Level 2

20 3.4 Functions without Arguments  Functions used in Top-Down Design  main() is just a function  called by OS  C++ program is a collection of Functions  top level function is called the main()  lower level functions  User Defined or Libraries  Example StkFigMn.cpp

21 StickFigure.cpp // File: stickFigure.cpp // Draws a stick figure #include using namespace std; // Functions used... void drawCircle(); // Draws a circle void drawTriangle(); // Draws a triangle void drawIntersect(); // Draws intersecting lines void drawBase(); // Draws a horizontal line

22 StickFigure.cpp int main() { // Draw a circle. drawCircle(); // Draw a triangle. drawTriangle(); // Draw intersecting lines. drawIntersect(); return 0; }

23 Function Calls  We can call a function and get results without knowing the implementation of that function.  pow(x, y) returns x to the yth power.  For now, we need not know exactly how a function is implemented.  However, we do need to know how to use the function.

24 Function Calls  This general form of a function call: function-name ( optional argument-list ); function-name ( optional argument-list );  Example function call: drawCircle (); drawCircle ();  The function name is drawCircle  No arguments to the function

25 Function Prototype  This general form of a function prototype: type function-name ( optional argument-list ); type function-name ( optional argument-list );  Example function prototype: void skipThree ();  Type  int - float - char  Name  ( );  Descriptive comment

26 Function Definition  General form of a function definition: type function-name ( optional argument-list ) type function-name ( optional argument-list ){ local-declarations- function body executable-statements}  Example function definition: void drawTriangle () void drawTriangle ()

27 Function Definition void drawTriangle () { // Draw a triangle. drawIntersect (); drawBase (); } function header function body

28 StickFigure.cpp // Draws a circle void drawCircle() { cout << " * " << endl; cout << " * *" << endl; } // end drawCircle

29 StickFigure.cpp void drawCircleChar(char symbol) { cout << " " << symbol << " " << endl; cout << " " << symbol << " " << symbol << endl; cout << " " << symbol << " " << symbol << endl; } // Draws a triangle void drawTriangle() { drawIntersect(); drawBase(); }

30 StickFigure.cpp // Draws intersecting lines void drawIntersect() { cout << " / \\ " << endl; } // draws a horizontal line void drawBase() { cout << " -------" << endl; }

31 Order of Execution int main() { drawCircle(); drawTriangle(); drawIntersect(); return 0; } void drawCircle() { cout << “ * “ << endl; cout << “ * * “ << endl; }

32 Function Advantages  Program team on large project  Simplify tasks  Each Function is a separate unit  Top-down approach  Procedural abstraction  Information hiding  Reuse (drawTriangle)

33 Abstraction  Abstraction:  Refers to the act of ignoring details to concentrate on essentials.  Allows us to use complicated things with little effort (CD players, automobiles, computers ).

34 Displaying User Instructions We still have not covered passing in and out of a function We still have not covered passing in and out of a function Following example shows displaying info Following example shows displaying info  instruct(); function call in main

35 Instruct.cpp // DISPLAYS INSTRUCTIONS TO THE USER // OF AREA/CIRCUMFERENCE PROGRAM int instruct () { cout << "This program computes the area and " << endl; cout << "circumference of a circle. " << endl << endl; cout << "To use this program, enter the radius of the " << endl; cout << "circle after the prompt" << endl;

36 Instruct.cpp cout << "Enter the circle radius: " << endl << endl; cout << "The circumference will be computed in the same ” << endl; cout << "units of measurement as the radius. The area " << endl; cout << "will be computed in the same units squared." << endl << endl; }

37 Program Output This program computes the area and circumference of a circle. To use this program, enter the radius of the circle after the prompt Enter the circle radius: The circumference will be computed in the same units of measurement as the radius. The area will be computed in the same units squared.

38 3.5 Functions with Input Arguments  Functions used like building blocks  Build systems one functions at a time  Stereo Components  Use function return values and arguments to communicate between functions  Discuss AreaMain.cpp  Flow of arguments and returns

39 Function Call Form:fname (actual arg list); Example:scale (3.0, z);

40 Function Return Functions must return a value unless declared as void Functions must return a value unless declared as void Form:return expression; Example:return x * y;

41 Function Definition Form: type fname (formal arg list) { function body } Example: float scale(float x, int n) { float scaleFactor; scaleFactor = pow(10, n); return (x * scaleFactor); }

42 Function Prototype Form: type fname (formal arg type list); Example: float scale (float x, int n);

43 TestScale.cpp // File testScale.cpp // Tests function scale. #include using namespace std; // Function prototype float scale(float, int); int main() {

44 TestScale.cpp float num1; int num2; // Get values for num1 and num2 cout << "Enter a real number: "; cin >> num1; cout << "Enter an integer: "; cin >> num2; // Call scale and display result. cout << "Result of call to function scale is " << scale(num1, num2) << endl; return 0; }

45 TestScale.cpp float scale(float x, int n) { float scaleFactor; scaleFactor = pow(10, n); return (x * scaleFactor); }

46 Argument / Parameter List Correspondence  Functions can have more than 1 arg  Correspondence between Actual & Formal arguments Function call scale (3.0, z); Actual ArgumentFormal Argument 3.0x zn zn

47 Argument / Parameter List Correspondence float scale(float x, int n) float scale(float x, int n){ float scaleFactor; scaleFactor = pow(10, n); return (x * scaleFactor); }

48 Argument / Parameter List Correspondence Function call scale (x + 2.0, y); Actual ArgumentFormal Argument x + 2.0x x + 2.0x y y y y

49 Argument / Parameter List Correspondence Function call scale (y, x); Actual ArgumentFormal Argument yx yx xy xy Watch for type matches in formal and actual arguments

50 Key Points Ê The substitution of the value of an actual argument in a function call for its corresponding formal argument is strictly positional. That is, the value of the first actual argument is substituted for the first formal argument; the second and so on

51 Key Points Ë The names of these corresponding pairs of arguments are no consequence in the substitution process. The names may be different, or they may be the same. Ì The substituted value is used in place of the formal argument at each point where that argument appears in the called function.

52 3.6 Scope of Names Variable declared in a function has a local scope within the function Variable declared in a function has a local scope within the function Same for variables declared in the main Same for variables declared in the main Variable declared before main is global scope Variable declared before main is global scope  Call anywhere in program Functions declared globally Functions declared globally

53 Scope of Names Positional correspondence Positional correspondence Type consistent is key because of positional correspondence Type consistent is key because of positional correspondence  Argument types  Return types

54 Scope of Names Type of a value returned by a called function must be consistent with the type expected by the caller as identified in the prototype Type of a value returned by a called function must be consistent with the type expected by the caller as identified in the prototype Type of an actual argument in a function call must be consistent with the type of its corresponding formal argument Type of an actual argument in a function call must be consistent with the type of its corresponding formal argument

55 void one (ont anArg, double second);// prototype 1 int funTwo (int one, char anArg);// prototype 2 // const int MAX = 950; const int limit = 200; // int main () { int localVar......... }// end main // void one(int anArg, double second}// header one { int oneLocal;// local variable ……………. ……………. } // end one // int funTwo (int one, char anArg)// header funTwo { int localVar;// local variable ……………. } // end funTwo

56 3.7 Extending C++ through Classes  Discuss two classes  String class part of compiler  Money class is a user defined class  #include  #include  #include “money.h”

57 String Class Declaring string objects Declaring string objects Reading & Displaying strings Reading & Displaying strings Assignment & Concatenation Assignment & Concatenation Operator Overloading Operator Overloading Dot Notation Dot Notation Member Functions Member Functions Object Assignments Object Assignments

58 Declaring string Objects A number of ways to declare A number of ways to declare string firstName, lastName; string wholeName; string greeting = “Hello “;

59 Reading & Displaying string Objects Use extraction operator >> and the stream cin for input Use extraction operator >> and the stream cin for input  cin >> firstName; Use insertion operator << and the stream cout for output Use insertion operator << and the stream cout for output  cout << greeting << wholeName << endl;

60 Reading & Displaying string Objects getline (cin, lastName, ‘\n’); reads all characters typed in from the keyboard up to the new line into the string object reads all characters typed in from the keyboard up to the new line into the string object

61 StringOperations.cpp // FILE: StringOperations.cpp // ILLUSTRATES STRING OPERATIONS #include using namespace std; int main () { string firstName, lastName; string wholeName; string greeting = "Hello "; cout << "Enter your first name: "; cin >> firstName;

62 StringOperations.cpp cout << "Enter your last name: "; cin >> lastName; // Join names in whole name wholeName = firstName + " " + lastName; // Display results cout << greeting << wholeName << '!' << endl; cout << "You have " << (wholeName.length () - 1) << " letters in your name." << endl;

63 StringOperations.cpp // Display initials cout << "Your initials are " << (firstName.at(0)) << (lastName.at(0)) << endl; return 0; }

64 StringOperations.cpp Program output Enter your first name: Caryn Enter your last name: Jackson Hello Caryn Jackson! You have 12 letters in your name. Your initials are CJ

65 Assignment Stores the first and last name Stores the first and last name  wholeName = firstName + “ “ + lastName; Concatenation Concatenation  + joins the two objects together “ “ for string values not ‘ ‘ “ “ for string values not ‘ ‘

66 Operator Overloading + normally means addition but with strings it means concatenation + normally means addition but with strings it means concatenation The + can take on many meanings The + can take on many meanings  Operator Overloading  C++ can have multi meanings to 1 operator  >> & > & << are overloaded operators  * / - == = all can be overloaded

67 Dot Notation Dot notation used to call an objects member functions Dot notation used to call an objects member functionswholeName.length();  Applies member function length to string object wholeName  Function returns the objects length  Table 3.3 lists some additional functions

68 Money Class Process money objects Process money objects Two attributes Two attributes  dollars  cents Why do this ?? Why not float ?? Why do this ?? Why not float ??

69 Money Class Allocate a money object Allocate a money object  money creditLimit = 5000.00; Assignments Assignments  taxAmount = salePrice * taxPercent/100.0;  finalCost = salePrice + taxAmount;

70 MoneyDemo.cpp // FILE: MoneyDemo.cpp // ILLUSTRATES MONEY OPERATIONS #include #include "money.h" using namespace std; int main () { // Local declarations const float taxPercent = 6.25; money creditLimit = 5000.00;

71 MoneyDemo.cpp money salePrice; money taxAmount; money finalCost; cout << "Enter item price: "; cin >> salePrice; // Compute tax amount taxAmount = salePrice * taxPercent / 100.0; // Compute final cost finalCost = salePrice + taxAmount;

72 MoneyDemo.cpp // Display sales receipt cout << "Sales receipt" << endl; cout << "Price " << salePrice << endl; cout << "Tax " << taxAmount << endl; cout << "Paid " << finalCost << endl << endl; // Compute new credit limit cout << "Your initial credit limit is " << creditLimit << endl; creditLimit = creditLimit - finalCost; cout << "Your new credit limit is " << creditLimit << endl; return 0; }

73 MoneyDemo.cpp Program output Enter item price: 345.77 Sales Receipt Price \$345.77 Tax \$21.61 Paid \$367.38 Your initial credit limit is \$5,000.00 Your new credit limit is \$4,632.62

74 Header and Implementation Files Header file (.h) Header file (.h)  File containing information that C++ needs to compile a program that accesses a user-defined class Implementation file (.cpp) Implementation file (.cpp)  File containing the C++ code for the operators of a user defined class

75 3.8 Common Programming Errors  Semicolon in Function Prototype (Declaration)  Inconsistencies in Number of Arguments  Too few arguments in a call  Too many arguments in a call  Incorrect number of arguments in call  Extra argument in call  Argument Mismatch  Correct position (formal & actual params)

76 Common Programming Errors  Function Prototype & Definition Mismatches  Both are the same except for the ;  Return Statements  “Return value expected”  “Function should return value”  Missing Object Name in Call to Member Function  Missing #include  Type Mismatches

Download ppt "Top-Down Design with Functions and Classes By Dr. Awad Khalil Computer Science & Engineering Department."

Similar presentations