ObjectOriented Program Development Using C ObjectOriented Program Development

Object-Oriented Program Development Using C++

Object-Oriented Program Development Using C++ 2

Relational Expressions • Decision-making: comparison of two numerical values • Relational expression – Also known as a condition – Evaluates to 1 (true) or 0 (false) – Simple type: two operands and relational operator • Six relational operators: <, >, <=, >=, = =, != • Char type coerced to int for comparison • Strings compared at character level Object-Oriented Program Development Using C++ 3

Figure 5 -1 Anatomy of a Simple Relational Expression Object-Oriented Program Development Using C++ 4

Table 5 -1 Relational Operators for Primitive Data Types Object-Oriented Program Development Using C++ 5

Logical Operators • Complex expressions – Comprised of simple relational expressions – Logical connectors required • AND ( && ), OR ( | | ), NOT (!) • Precedence – AND and OR lower than relational operators – NOT (unary) higher than relational operators • Associativity – AND and OR: left to right – NOT: right to left Object-Oriented Program Development Using C++ 6

Table 5 -2 Operator Precedence Object-Oriented Program Development Using C++ 7

Table 5 -3 Equivalent Expressions Object-Oriented Program Development Using C++ 8

A Numerical Accuracy Problem • Caveat: equality comparison of floating-point types – Avoid use of equality operator – Computer representation slightly inaccurate • Work around problem – If possible, replace floating-point data with integers – If not, use alternative syntax • abs (operand. One - operand. Two) < EPSILON • EPSILON is very small value such as. 0000001 Object-Oriented Program Development Using C++ 9

The if-else Statement • if-else statement: fundamental selection structure • Purpose: alter instruction sequence • Syntax: if (expression) statement 1; else statement 2; • Expression – Relational expression – May consist of single variable, such as type bool Object-Oriented Program Development Using C++ 10

Figure 5 -2 The if-else Flowchart Object-Oriented Program Development Using C++ 11

Compound Statements • Compound statement – Sequence of statements enclosed by braces – Supports construction of complex selection structures • Syntax: if (expression){ //sequence of statements } else{ //sequence of statements } Object-Oriented Program Development Using C++ 12

Block Scope • Code block – Set of compound statements – May be nested • Variable scope – Variable meaningful between closing braces – Name conflict resolved by location • Inner block takes precedence over outer • Compiler seeks declaration moving inside out Object-Oriented Program Development Using C++ 13

One-Way Selection • One-way selection: excludes else portion • Syntax: if (expression) statement; // code block might follow • Non-zero expression triggers statement execution Object-Oriented Program Development Using C++ 14

Figure 5 -3 Flowchart for the One-Way if Statement Object-Oriented Program Development Using C++ 15

Problems Associated with the if -else Statement • Semantic problems – Logical form – Correct by reviewing original design • Syntax problems – Misuse of assignment operator (=) in expression • Assigns value to operand • Non-zero assignments always evaluate to true – Use equality operator (= =) for comparisons Object-Oriented Program Development Using C++ 16

Nested if Statements • Selection structures may be nested – if or if-else statements nest in either (or both) parts of larger if-else statement – Nesting may be deeper than one level • Syntax caveat – Use braces to define logical unit – Misused (or missing) braces may cause fatal logical error Object-Oriented Program Development Using C++ 17

Figure 5 -4 a The if-else Nested Within the if Part Object-Oriented Program Development Using C++ 18

Figure 5 -4 b The if-else Nested Within the else Part Object-Oriented Program Development Using C++ 19

The if-else chain • if-else chain: useful, readable form of nesting • Syntax: if (expression 1) statement 1; // may be code block else if (expression 2) statement 2; // may be code block else statement 3; // may be code block • Additional else-if components may be added Object-Oriented Program Development Using C++ 20

The Switch Statement • Switch statement – Variation on chained if-else statement – Control “switches” to case based on condition – Caveat: condition evaluates to an integer • Cases may include complex structures • Break statement follows each case • Default statement is optional Object-Oriented Program Development Using C++ 21

Figure 5 -5 The Expression Determines an Entry Point Object-Oriented Program Development Using C++ 22

Program Design and Development: Introduction to UML • Think and plan before coding – Primary concern: classes and objects needed • Uniform Modeling Language (UML) – Supports object-oriented design – Set of rules and diagrams • Focus on four UML diagrams – Class, object, state, and sequence – Analogy to specialized blueprints Object-Oriented Program Development Using C++ 23

Figure 5 -7 Basic UML Symbols and Notation Object-Oriented Program Development Using C++ 24

Class and Object Diagrams • Commonality of class and object diagrams – Both employ rectangular containers – Names, attributes, behaviors found in both • Chief differences – – Class diagram: describes classes and relationships Object diagram: describes objects and relationships Class at higher level of abstraction One class can generate many particular objects Object-Oriented Program Development Using C++ 25

Figure 5 -6 A Class and Object Representation Object-Oriented Program Development Using C++ 26

Figure 5 -8 Including Attributes in UML Class and Object Diagrams Object-Oriented Program Development Using C++ 27

Class and Object Diagrams (continued) • Two aspects to class attributes – Data type: may be primitive or class – Visibility: where variable may be seen (or used) • Plus (+) sign indicates public • Minus (-) sign indicates private • No sign for protected status • Operations – Become methods that transform attributes – Follow attribute sign convention for visibility Object-Oriented Program Development Using C++ 28

Figure 5 -9 A Class with Attributes Object-Oriented Program Development Using C++ 29

Figure 5 -10 Including Operations in Class Diagrams Object-Oriented Program Development Using C++ 30

Relationships • Three basic relationships – Association, aggregation, generalization • Association – Signified by phrases such as “works for”, “has a” – Indicated by straight line connecting classes/ objects – Multiplicity • Numerical relationship between objects/classes • Quantities: 0, 1, many, unlimited Object-Oriented Program Development Using C++ 31

Figure 5 -11 An Association Object-Oriented Program Development Using C++ 32

Table 5 -4 UML Association Notation Object-Oriented Program Development Using C++ 33

Relationships (continued) • Aggregation – One class/object consists of other classes/objects – Visualize as relation of whole to parts – Symbolized by diamond • Generalization – Relationship between class and its refinement – Ford Taurus is a type of automobile Object-Oriented Program Development Using C++ 34

Figure 5 -12 Single-Level Aggregation Object-Oriented Program Development Using C++ 35

Figure 5 -13 Another Single-Level Aggregation Object-Oriented Program Development Using C++ 36

Figure 5 -14 Multi-Level Aggregation Object-Oriented Program Development Using C++ 37

Figure 5 -15 A Generalization Relationship Object-Oriented Program Development Using C++ 38

Application: A Date Class • Stage one: identify and name objects • Stage two – Define attributes • Month, day, and year • Integer data types • Stage three – Create object diagram – Object diagram shows assignment of values Object-Oriented Program Development Using C++ 39

Figure 5 -16 Initial Date Class Diagram Object-Oriented Program Development Using C++ 40

Figure 5 -17 First Refinement-Date Class Diagram Object-Oriented Program Development Using C++ 41

Figure 5 -18 A Date Object Diagram Object-Oriented Program Development Using C++ 42

Application: A Date Class (continued) • Stage four – Identify operations that become methods – Basic operations: constructor, mutator, accessor – Additional operations: queries with comparisons • Stage five – Construct second refinement of class diagram – Name, attributes, operations detailed – Visibility denoted Object-Oriented Program Development Using C++ 43

Table 5 -5 Required Operations for the Date Class Object-Oriented Program Development Using C++ 44

Figure 5 -19 Second Refinement-Date Class Diagram Object-Oriented Program Development Using C++ 45

Explanation of the Basic Date Class • Default constructor – Initializes month, day, year – cout object echo prints default data • Overloaded constructor – Initializes Date object with parameterized interface – cout object echo prints default data • set. Date( ): almost identical to overloaded constructor • show. Date( ): accessor manipulates output stream Object-Oriented Program Development Using C++ 46

Using the Basic Date Class • Constructors instantiate two Date objects • Syntax of object declaration – If default constructor used, follow primitive form – If overloaded constructor used, supply arguments • Accessors retrieve data in attributes • Output modified according to current values Object-Oriented Program Development Using C++ 47

Simplifying the Code • Opportunities for optimization exist • Call internal methods when possible – Eliminate redundant code – Do not reinvent your own wheel – Example: call set. Date( ) in constructors • Dealing with other redundancies – Target common or repeated actions – Fold action into method Object-Oriented Program Development Using C++ 48

Adding Additional Class Methods • Virtue of OO programming: scalability • Add is. Leap. Year ( ) – Based on leap year algorithm – Returns a Boolean value • Add day. Of. Week ( ) – Based on Zeller’s algorithm – Returns an integer value • Include appropriate declarations, definition, visibility Object-Oriented Program Development Using C++ 49

A Closer Look at Program Testing • Added complexity increases likelihood of errors • Selection structures introduce new control paths – – Ideally, programmer tests each path Not physically possible Growth of test paths: 2 n n corresponds to number of if-else statements • Choose critical elements to test – Legal and limiting input values Object-Oriented Program Development Using C++ 50

Summary • Relational expression (condition) evaluates to 1 (true) or 0 (false) • Relational operators: <, >, <=, >=, = =, != • Logical connectors: AND (&&), OR (| |), NOT (!) • Basic selection structure: if-else statement • Compound statement: set enclosed by braces Object-Oriented Program Development Using C++ 51

Summary (continued) • Selection variations: nesting, chained if-else, switch • Uniform Modeling Language (UML): OO design rules/templates • Basic UML diagrams: class, object, state, sequence • Use UML tools to construct/implement Date class • Testing: selectivity avoids combinatorial explosion Object-Oriented Program Development Using C++ 52
- Slides: 52