166
Chapter 10 Object-Oriented Programming In Chapter 6, we learned what objects are and how they are used. We found that all values in Python are objects. Classes in object-oriented programming define objects. Thus, a class is a “cookie cutter” for creating any number of objects of that type. As with functions, there are predefined classes in Python, as well as the ability of programmers to define their own. In this chapter, we see how to define and use classes in Python. 1 Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons

Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

  • Upload
    others

  • View
    112

  • Download
    13

Embed Size (px)

Citation preview

Page 1: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Chapter 10 Object-Oriented Programming

In Chapter 6, we learned what objects are and how they are used. We found that all values

in Python are objects. Classes in object-oriented programming define objects. Thus, a class

is a “cookie cutter” for creating any number of objects of that type. As with functions, there

are predefined classes in Python, as well as the ability of programmers to define their own.

In this chapter, we see how to define and use classes in Python.

1Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons

Page 2: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Classification can be described as the act of grouping entities into variouscategories that have something in common. In Biology, organisms are placed in ataxonomy based on their individual traits, for example. Libraries group booksusing various classification systems based on subject matter.

Most classification systems contain subcategories (and subcategories ofsubcategories, etc.), resulting in a hierarchy of types. For example, chimpanzeesare species in the Hominidae family, which is in the order Primate, which is inthe mammal class, which is in the Animal Kingdom. The African elephant, on theother hand, is a species in the Elephantidae family, which is in the orderProboscidea, which is in the same class as chimpanzees, the Mammal class.

In this chapter, we see how the organization of class type and subtypes areutilized in object-oriented programming.

2Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons

Motivation

Page 3: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

3Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons

Taxonomy of Chimpanzees and African Elephants

Page 4: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Object-oriented programming languages, such as Python,provide three fundamental features that support object-oriented programming - encapsulation , inheritance , andpolymorphism. These support a paradigm shift in softwaredevelopment from the focus on variables and passing ofvariables to functions in procedural programming, to thefocus on objects and message passing between them.

4Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.1 What is Object-Oriented Programming?

Object-Oriented Programming

What is Object-Oriented Programming?

Page 5: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Message passing occurs when a method of one object callsa method of another. For example, if Object B were a listand B1 a sorting method, then a call to B1 is a message (orrequest) for it to become sorted.

A message to one object can result in the propagation ofmessages among many other objects in order to accomplisha request.

5Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.1 What is Object-Oriented Programming?

Page 6: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

What is a Class?

6

A class specifies the set of instance variables and methodsthat are “bundled together” for defining a type of object. Aclass, therefore, is a “cookie cutter” that can be used tomake as many object instances of that type object asneeded. For example, strings in Python are object instancesof the built-in String class.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.1 What is Object-Oriented Programming?

Page 7: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

7

One method of the String class is isdigit. Thus, every stringobject has this method. The specific object whose isdigitmethod is called determines the specific string that it isapplied to,

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.1 What is Object-Oriented Programming?

Page 8: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Encapsulation is a means of bundling together instancevariables and methods to form a given type (class). Selectedmembers of a class can be made inaccessible (“hidden”)from its clients, referred to as information hiding.Information hiding is a form of abstraction. This is animportant capability that object-oriented programminglanguages provide.

8

Encapsulation

What is Encapsulation?

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 9: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

9

Private members of a class begin with two underscorecharacters, and should not be directly accessed by themethods of any other class. Public members of a class, onthe other hand, are directly accessible by methods of otherclasses.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 10: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

10

Private Instance Variable Access

frac1.__numerator = 4 ACCESS NOT ALLOWED

frac1.__denominator = 6 ACCESS NOT ALLOWED

Public Method Access

frac1.getNumerator() ACCESS ALLOWED frac1.getDenominator() ACCESS ALLOWED frac1.setNumerator(4) ACCESS ALLOWED

frac1.setDenominator(6) ACCESS ALLOWED

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 11: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

The method below are referred to as getters and setterssince their purpose is to get (return) and set (assign) privateinstance variables of a class. Restricting access to instancevariables via getter and setter methods allows control overhow they are assigned and retrieved.

11

Getters and Setters

frac1.getNumerator()

frac1.getDenominator()

frac1.setNumerator(4)

frac1.setDenominator(6)

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 12: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

12

Defining Classes in Python

The class keyword is used to define classes, much as def isused for defining functions.

All lines following the class declaration line are indented.Instance variables are initialized in the __init__ specialmethod.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 13: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Being private, instancevariables __numeratorand __denominator arenot meant to be directlyaccessed.

In actuality, however,private members areaccessible if written asfollows:

frac1._Fraction__numerator

for Fraction object frac1.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 14: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

14

To understand this, all private class members areautomatically renamed to begin with a single underscorecharacter followed by the class name. Such renaming ofidentifiers is called name mangling.

Unless the variable or method is accessed with its complete(mangled) name, it will not be found. Name manglingprevents unintentional access of private members of aclass, while still allowing access when needed.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 15: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

15

Self Parameter of Methods in Python

The methods of a class are essentially functions meantto operate on the instance variables of the class. InPython, functions serving as a method must have anextra first parameter, by convention named self. Thisparameter contains a reference to the object instance towhich the method belongs.

When a method accesses any other member of thesame class, the member name must be preceded by'self' (self.__numerator).

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 16: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Let’s Try It

16Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 17: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

17

Special Methods in Python

Method names that begin and end with two underscorecharacters are called special methods in Python. Specialmethods are automatically called.

For example, the __init__ method of the Fraction classdeveloped is automatically called whenever a newFraction object is created,

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 18: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

18

The values in parentheses are arguments to the __init__method to initialize a new Fraction object to a specificvalue. Note that although there are three parametersdefined (self, numerator, denominator), the firstargument is always implied. Therefore, only theremaining arguments (numerator and denominator) areexplicitly provided when creating a Fraction object.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 19: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

19

Two other special methods of Python are __str__ and__repr__. These methods are used for representing thevalue of an object as a string.

The __str__ method is called when an object is displayedusing print (and when the str conversion function isused.) The __repr__ function is called when the value ofan object is displayed in the Python shell (wheninteractively using Python).

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 20: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

20

The difference in these special methods is that __str__ isfor producing a string representation of an object’s valuethat is most readable (for humans), and __repr__ is forproducing a string representation that Python canevaluate. If special method __str__ is not implemented,then special method __repr__ is used in its place.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 21: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

21

An implementation of __repr__ for the Fraction class isgiven below,

This, therefore, will display Fraction values as wenormally write them:

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 22: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Let’s Try It

22Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 23: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

23

Arithmetic Operators in Python

The special methods for providing arithmetic operatorsto classes are given below.

The expression frac1 + frac2, for example, evaluates tothe returned value of the __add__ method in the class,where the left operand (frac1) is the object on which themethod call is made: frac1.__add__(frac2).

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 24: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

24Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 25: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Let’s Try It

25Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 26: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

26

Relational Operators in Python

The set of relational operator special methods that can be implemented is shown below.

For example, frac1 < frac2 is determined by call tomethod __lt__ on the first object, frac1, with the secondobject, frac2, passed as an argument, frac1.__lt__(frac2)

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 27: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

27

In order to compare two fractions, they musthave common denominators. If thedenominators are equal, self.__getNumerator()< rfraction.__getNumerator() is returned.Otherwise, since we do not want the fractionsto be altered as a result of the comparison, acopy of each is made, temp_frac1 andtemp_frac2. In order to convert them tocommon denominators, the numerator anddenominator of each is multiplied by thedenominator of the other. This is accomplishedby call to private method __adjust. Then, thecomparison of the numerators is returned.

Most other relational operators are grounded inthe implementation of the less than specialmethod, __lt__. The implementation of specialmethod __le__ (less than or equal to) is basedon the fact that a <= b is the same as not (b < a).Special method __neq__ (not equal to) is simplyimplemented as not (a = b). Finally, specialmethod __gt__ (greater than) is implementedas not (a <= b), and special method __ge__(greater than or equal to) is implemented as not(a < b).

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 28: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

28

The Fraction type developed represents the power ofabstraction, implemented through the use of encapsulation.

The Fraction class contains two integer instance variables andan associated set of methods. That is what it “really” is.Through the use of information hiding, however, the client isprovided an abstract view which, for all intents and purposes, isa Fraction type.

The Fraction class can be defined within its own Python file, andthus serve as a module that can be easily imported and used byother programs.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 29: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

The following Python program will convert the measured amount ofingredients of recipes, based on a provided conversion factor, to vary thenumber of servings. The program utilizes the following programmingfeatures:

➤ programmer-defined classes

29

A Recipe Conversion Program

Let’s Apply It

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 30: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

30Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 31: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

31

Original Recipe

Converted Recipe

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 32: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

32

The program makes use of the Fractionclass module developed above,imported on line 3.

The getFile function prompts for a filename to open, returning both the filename and associated file object as atuple. If, after three attempts, the filefails to open successfully, an IOExceptionis raised containing the error message'Exceeded number of open file attempts'(line 26). Thus, a try block is used tocatch each IOException raised by theopen function, each time incrementingvariable num_attempts (line 22) in thecorresponding exception handler (lines21-23). When an input file is successfullyopened, the loop terminates andfile_name and input_file are returned asa tuple.

Function removeMeasure (lines 30-43)is called to remove any digits andfractions at the start of a line, to appendto a new converted measurement.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 33: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

33

The conversion factor entered by the user,as well as the start of each recipe line, arescanned by function scanAsFraction (lines45-84). If a single integer value is scanned,say '2', the Fraction value 2/1 is returned.If a single fractional value is entered, suchas '2/4', then the Fraction value (inreduced form) 1/2 is returned. If aninteger and fraction are entered such as '11/2', then a Fraction equal to the sum ofboth is returned, 3/2.

Function convertLine (lines 86-104)checks if the first character of the line is adigit. If not, the line is returned unaltered.If a digit is found, then variableblank_char is initialized (line 94), andfrac_meas is set to the Fraction valuereturned by scanAsFunction. Variable lineis set to the remaining part of the line bycall to removeMeasure (line 30), andconv_line is set to the string representationof frac_meas concatenated with a blankand the remaining part of the original line,and returned.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 34: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

34

The main section of the program is in lines106-143. The code following the programwelcome is encompassed within a tryblock for catching any IOError exceptions,raised in function getFile (lines 5-28).

The user is prompted for the conversionfactor (line 119). Since all calculations in theprogram are executed as Fraction types,the conversion factor is scanned by a call tofunction scanAsFraction (lines 45-84).

In lines 123-124, output_file_name isassigned to the input file name prependedwith 'conv_'. Then, empty_str is initializedand the first line of the recipe file is read (asrecipe_line). In the while loop at line 130,function convertLine (lines 86-104), convertsthe current recipe line. If the line does notbegin with a digit, then the line is returnedunaltered. Otherwise, the line is returnedwith the converted Fraction valueconcatenatedwithablankandtheremainingpart of the original line, and returned. Eachlineiswrittenone-by-onetooutput_file.

Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 35: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

35Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 36: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

36Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 37: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

37Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 38: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

38Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 39: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

39Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 40: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

40Intoduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.2 Encapsulation

Page 41: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Inheritance, in object-oriented programming, is the abilityof a class to inherit members of another class as part of itsown definition. The inheriting class is called a subclass (also“derived class” or “child class”), and the class inherited fromis called the superclass (also “base class” or “parent class”).

Superclasses may themselves inherit from other classes,resulting in a hierarchy of classes.

41

Inheritance

What is Inheritance?

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 42: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

42

The items in gray are inherited from superclasses.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 43: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

43

Subtypes

A subtype is something that can be substituted for andbehave as its parent type (and its parent’s parent type,etc.). For example, consider the characteristic featureswithin the Animal Kingdom.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 44: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

44

Andy was very interested in animals. He had

many books about them, and went to see

animals whenever he had the chance.

Andy was very interested in chimpanzees. He

had many books about them, and went to

see chimpanzees whenever he had the

chance.

“Chimpanzee” is subtype of “Animal”, and

therefore can be substituted for it:

Andy was very interested in chimpanzees.

He had many books about them, and loved to

watch the chimpanzees swing from tree to tree.

“Elephant” is NOT a subtype of “Chimpanzee”,

and therefore can be substituted for it:

Andy was very interested in elephants. He had

many books about them, and loved to watch the

elephants swing from tree to tree.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 45: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

45

Defining Subclasses in Python

We now look at how to employ the object-orientedprogramming feature of inheritance in Python. We givean example of an “exploded” string class as a subclass ofthe built-in string class, and look at whether an explodedstring can be substituted as a string type.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 46: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

46

Class Names of the Built-In Types in Python

There exists a class definition for each of the builtin types. Todetermine the type (class name) of a particular value (object) inPython, the built-in function type can be used.

>>> type(12) >>> type(12.4) >>> type('')

<class 'int' > <class 'float' > <class 'str' >

>>> type([]) >>> type(()) type({})<class 'list‘ > <class 'tuple' > <class 'dict‘ >

The resulting expression, class classname, gives the associatedclass name for any value.

A detailed description of a built-in class can be displayed by useof the help function, for example, help(str).

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 47: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance 47

Page 48: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

48

For programmer-defined classes, such as the Fraction classdeveloped earlier, we use the name of the class (with anyrequired arguments) for creating objects of that type,

frac1 = Fraction(1,2)

For built-in types such as the str type, object instances aregenerally created using a more convenient syntax. For example,to create a new string value (object), we simply put quotesaround the desired characters of the string,

name = 'John Smith'

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 49: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

49

Knowing the class names of the built-in types, we can alternatively create object instances of each as follows,

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 50: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

50

Defining an Exploded String Type

Given the built-in string class, we can easily create a new stringtype that is identical to the string class, and in addition providethe option of being “exploded.” By an exploded string is meant astring with spaces (blank characters) between all characters, forexample, 'H e l l o'. We call this new class ExplodedStr.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 51: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance 51

Page 52: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

52

Our new exploded string type can be used as shown below.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 53: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

53

The ExplodedStr class does not define any instance variables ofits own. Thus, its __init__ method simply calls the __init__method of the built-in str class to pass the value that the stringis to be initialized to. If an initial value is not provided, themethod has a default argument assigned to the empty string,

Here str.__init__(value) is used to call the str class’s__init__method.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 54: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

54

We can place the ExplodedStr class in its own module calledexploded_str and import it when needed. Testing this new stringtype, we see that it behaves as desired.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

We see that exploded strings can be used as a regular string or in

exploded form. Thus, it is only the added behavior of being able to be

exploded that is different, not its value. As a result, the ExplodedStr subclassserves as a subtype of the built-in string class.

Page 55: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Let’s Try It

55Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 56: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

The following MixedFraction class is implemented as a subclass (subtype) ofthe Fraction class developed earlier. The program utilizes the followingprogramming features:

➤ inheritance of classes

56

A Mixed Fraction Class

Let’s Apply It

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 57: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

The Fraction class that we developed only represents values as commonfractions, that is, with just a numerator and denominator. Thus, the valueone and a half is represented as 3/2.

Mixed (compound) fractions denote values with a separate whole value and(proper) fraction—3/2 is represented as 1 1/2. In certain applications, suchas in the recipe conversion program developed earlier, the latterrepresentation is preferable.

57Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 58: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

58

The Fraction class is imported on line 3. Thisclass provides the methods for performingarithmetic and relational fraction operations.The operations of addition, subtraction,multiplication, and comparison on mixedfractions can be accomplished by the inheritedmethods of the Fraction class.

The difference between the Fraction class andthe MixedFraction class is in how fractionvalues are displayed. How fractions aredisplayed is determined by theimplementation of special method __str__. Inthe Fraction class, the numerator anddenominator values are simply concatenatedwith a ‘/’ between them. In the __str__method of the MixedFraction class (lines 18-49), however, the fraction value isreconstructed in three parts, a whole numberpart (possibly 0), and a proper fraction part inwhich the numerator is less than thedenominator.

If the denominator is 1, then only thenumerator is displayed (4/1 displayed as 4).Otherwise, both the whole number part andthe associated proper fraction part aredisplayed (5/4 displayed as 1 1/4).

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 59: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

59

The remaining part of the MixedFraction classprovided the needed getters and setters formixed fractions (lines 56–65). It also provides aset of arithmetic operators and arithmeticmethods to replace those inherited from theFraction class (lines 69–87).

Finally, private method __createMixedFractionis defined as a private supporting methodcalled by the arithmetic operators in the class.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 60: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

60Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 61: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

61Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 62: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

62Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 63: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

63Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 64: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

64Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 65: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

65Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.3 Inheritance

Page 66: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

The word polymorphism derives from Greek meaning“something that takes many forms.”

In object-oriented programming, polymorphism allowsobjects of different types, each with their own specificbehaviors, to be treated as the same general type.

66

Polymorphism

What is Polymorphism?

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 67: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Consider the Shape class and its subclasses below.

67Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

All Shape objects have an x,y coordinate (withcorresponding getter/setter methods). Shape objects canalso calculate their areas. How a shape’s area is computed,however, depends on what shape it is. Thus, it is notpossible to define a calcArea method in the Shape classthat serves the purposes of all types of shapes.

Page 68: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Since we want all shape types to have a calcArea method,we add an unimplemented version of the method to theShape class.

68Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

A class with one or more unimplemented methods is calledan abstract class.

Page 69: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Following are three particular subclasses of the (abstract)Shape class – Circle, Square and Triangle – each of whichimplements the calcArea method.

69Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 70: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

70Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 71: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Each subclass contains an __init__ method, with the first twoarguments its x,y location, and the third argument its size. Eachfirst calls the __init__ method of the Shape class witharguments x,y to set its location, since the x,y values aremaintained by the Shape class. Note that methods getXYLocand setXYLoc are not defined in the subclasses, as they areinherited from the Shape class.

71Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 72: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Given the Circle, Square and Triangle classes, all of type Shape,we can see how polymorphism works.

Suppose that there was a list of Shape objects for which thetotal area of all shapes combined was to be calculated,

72Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Because each implements the methods of the Shape class, theyare all of a common general type, and therefore can be treatedin the same way.

Page 73: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

73

Duck Typing in Python

In Python, it is not because Circle, Square, and Triangle aresubclasses of the Shape class that allows them to be treated in asimilar way. It is because the classes are subtypes of a commonparent type.

In Python, any set of classes with a common set of methods,even if not subclasses of a common type, can be treatedsimilarly. This kind of typing is called duck typing— that is, “if itlooks like a duck and quacks like a duck, then it’s a duck.” )

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 74: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Let’s Try It

74Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 75: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

75

The Use of Polymorphism

To fully appreciate the benefits of polymorphism, let’sconsider the development of a program for manipulatinggeometric shapes. We first consider a graphicalenvironment in which classes Circle, Square, and Triangledo not have a common set of methods, and thereforecannot be treated polymorphically.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 76: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

76

We assume that we have a graphics program in whichthe user selects the geometric shape that they want(stored in variable selected_shape) for which theappropriate object type is created:

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 77: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

77

Next, the geometric object is displayed. Since each objecthas its own set of methods, the appropriate methodmust be called. This is determined by use of another ifstatement:

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 78: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

78

The user may then request that the area of the graphicobject be displayed. Since each of the Circle, Square, andTriangle classes have a different method for calculatingtheir area, then an if statement must again be used:

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 79: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

79

And when the graphic object is repositioned, an ifstatement is again needed:

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 80: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

80

The design of this program becomes rather tedious andinelegant. If statements abound throughout the program.

Let’s now look at how the same program can be writtenwith the use of polymorphism.

First, we give a more complete Shape class.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 81: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

81Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 82: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

82

As before, the unimplemented methods of the classraise a NotImplementedError exception. In this case,each of the Circle, Square, and Triangle classes aredefined as subclasses of the Shape class. Therefore, eachis required to have methods for the unimplementedmethods of the Shape class in order to be completelydefined.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

We reconsider the implementation of a graphicsprogram for manipulating geometric shapes. We giveside-by-side listing of nonpolymorphic vs. polymorphiccode.

Page 83: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

83Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 84: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

84

The most significant benefit of polymorphism is that programs aremuch easier to maintain and update. Suppose, for example, thatour program had to be updated to also handle rectangles. Howmuch of the program would need to be changed?

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 85: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

85

Besides the creation of a new Rectangle class, only the followingchange would need to be made in the existing code.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 86: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

86Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 87: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

87Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 88: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

88Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 89: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

89Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.4 Polymorphism

Page 90: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

The Unified Modeling Language (UML) is a language-independent, graphical standardized design specification(modeling) language for specifying an object-orienteddesign. The term “Unified” comes from the fact that thelanguage is a unification of three earlier object-orienteddesign modeling languages.

90Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Object-Oriented Design Using UML

What is UML?

Page 91: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

UML contains numerous types of graphical diagrams forexpressing various aspects of an object-oriented design. Oneof the most widely used graphical diagrams is called a classdiagram.

91Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 92: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

92

Class Diagrams in UML

In UML, class diagrams are used to express the staticaspects of a design, such as the instance variables andmethods of individual classes, their visibility (i.e., publicor private), and various relationships between classes.

Other UML diagrams, called interaction diagrams, areused to represent the dynamic aspect of a design (i.e.,the sequence of method calls between objects duringprogram execution).

We omit discussion of interaction diagrams and look atthe UML notation for denoting the classes of an object-oriented design.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 93: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

93

The Representation of Classes

A class is denoted in UML in three parts:

• a class name• a set of class attributes (instance variables),• and a set of methods

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 94: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

94

The Representation of Classes

Below are UML class specifications for the abstract Shapeand (concrete) Circle classes from the earlier example.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 95: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

95

Note that initialization methods like __init__ are namedcreate() in UML.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 96: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

96

The types of instance variables, parameters, and returntypes of methods is indicated by a colon (:) followed bythe type name.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 97: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

97

The + and - symbols are used to specify if a givenmember of a class has either public (+) or private (-)access.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 98: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

98

Denoting Associations between Classes

Associations are the most common relationship in UMLclass diagrams. An association between two classes indicatesthat the methods of one class make calls to methods of theother.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

In this example, it is assumed that the classes are part of agraphical design package, in which the GraphicsWindow classcreates and can manipulate a set of Shape objects.

Page 99: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

99

The numbers above the association ends are referred to asmultiplicity. The multiplicity of 1 at the GraphicsWindow endof the association and 0..* at the Shape end indicates thatone GraphicsWindow object may be associated with anynumber of (zero or more) Shape objects.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 100: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

100

The creates label at the GraphicsWindow association end isreferred to as a role name. Role names are used to describean association between two classes.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 101: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

101

Finally, the arrow denotes navigability. It indicates thedirection of method calls made. In this example, it showsthat a GraphicsWindow object makes method calls (sendsmessages) to Shape objects, and not the other way around.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 102: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

102

Denoting Subclass Relationships

Subclasses are indicated in UML by use of a solid line with a closed arrow head from a subclass to its superclass.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 103: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

103

Denoting Composition

Composition indicates a “part-of” relationship betweenclasses. The containing object is viewed as “owning” thecontained object, in which the contained object is an integralpart.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 104: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

104Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Composition is denoted using a filled diamond head, used at theend of the line connected to the containing class (the Shapeclass). With composition, it is implied that the containing class(Shape) makes calls to the member class (XYCoord), and thuscomposition also connotes the relationship of association.

Page 105: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

105

We note that, since all values in Python are objects, everyclass with instance variables involves the use of composition,including the Shape class. However, the reason to indicate anon-built-in type as composition is that it provides a place tospecify the details of the type.

Instance variables of a built-in type can simply be included inthe class as primitive types as was done for the x and yinstances variables of the Shape class.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 106: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

106

Denoting Aggregation

Aggregation, in contrast to composition, is not a part-ofrelationship. It is used to denote a class that groups together,or aggregates, a set of objects that exists independently ofthe aggregating class.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 107: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

107Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Aggregation is denoted by an unfilled diamond head. Here,the ShapeCollection class contains references to an arbitrarynumber of Shape objects. This might be used, for example,when a graphics window allows the user to select a group ofShape objects on the screen and change an attribute of each,such as their size, all at once.

Page 108: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

108

An Example Class Diagram

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Although UML is a specification language for modelingobject-oriented software, it can be used to specify any set ofentities and their relationships. Modeling everyday conceptsand entities can be instructive in understanding UML.

We look at an example UML class diagram modeling theconcept of a car.

Page 109: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

109Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

For every car, there is one engine, an integral

part of a car. Thus, a composition relationship

is denoted between Car and Engine, with a

multiplicity of 1 on each end. As with engines,

tires are an integral part of a car, so this is also

indicated by composition, with a multiplicity of

four tires for each passenger car.

A car is still a car with or without a driver.

Therefore, a relationship of composition is not

appropriate here. There is simply an

association between Car and Driver with

multiplicity of 0..1 on the driver end of the

association. Since a Driver is a Person, a

subclass relationship is denoted between the

two.

There is an association between Car and

Person with a multiplicity of 0..*. Since the

association denoted is not so apparent (owner?

passenger?), we add the role name Passenger

to the Person end of the association to be more

explicit. Finally, any number of Drivers may

belong to AAA (Automobile Association of

America), denoted by the use of aggregation.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 110: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

110Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 111: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

111Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 112: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

112Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 113: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

113Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 114: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

114Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 115: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

115Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 116: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

116Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.5 UML

Page 117: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

117

We design, implement, and test a program serving theneeds of a vehicle rental agency.

A Vehicle Rental Agency Program

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 118: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Vehicle Rental Agency Program

The Problem

118

The problem is to develop an object-oriented design andimplementation of a program capable of maintainingreservations for a vehicle rental agency. The agency rents outthree types of vehicles — cars, vans, and moving trucks. Theprogram should allow users to check for available vehicles,request rental charges by vehicle type, get the cost of renting aparticular type vehicle for a specified period of time, andmake/cancel reservations.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 119: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Vehicle Rental Agency Program

Problem Analysis

119

An obvious class to include is a Vehicle class. It can beimplemented to maintain information common to all vehicletypes,

• mpg (mile per gallon)• VIN (vehicle identification number)• reserved or not

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 120: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

120

Rental charges are based on:

• Daily, weekly, weekend rates

• Number of days rented

• Milage charge

(with number of free miles based on vehicle type)

• Optional daily insurance

Since rental rates are not inherently part of a vehicle’sattributes, rental rates will be stored in a separate VehicleCostclass.

Rental Charges

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 121: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

121

Finally, we incorporate a Reservation class that maintains thefollowing information for each reservation made:

• Customer name

• Address

• Credit card number

• VIN

Reservations

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 122: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Vehicle Rental Agency Program

Program Design

122

Meeting the Program Requirements

The general requirements for this program are for users to beable to:

• check available vehicles of a certain type(cars, vans, or trucks)

• request rental charges by vehicle type

• determine the rental cost for a particular vehicle and rentalperiod

• make and cancel reservations

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 123: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

123

Specific Rental Rates

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 124: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

124

Data Description

All the data is stored as string types, converted to a numerictype when needed in a computation (such as the cost of dailyinsurance).

Algorithmic Approach

The algorithmic methods of the program will consist of simplesearch (for finding and retrieving the requested vehicleinformation by the user), updating of information (for markingvehicles as reserved or unreserved), and direct calculation (forcalculating the total cost of a rental).

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 125: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

125

Example Vehicle Data

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 126: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

126

The Overall Steps of the Program

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 127: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

127

Class Diagram

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 128: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

128Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 129: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

129Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 130: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

130

Example Execution

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 131: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

131Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 132: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

132Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 133: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

133Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 134: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

134Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 135: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

135Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 136: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

Vehicle Rental Agency Program

Program Development and Testing

136

From the UML specification, we implement and test theprogram. We start with the implementation of the Vehicle class,and its subclasses.

Each class will be placed in its own file, and imported into theprogram.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 137: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

137

Vehicle Class

In the Vehicle class, the__init__ method (lines 1015) defines the attributescommon to each subclass—mpg, vin, and reserved.

There is only one settermethod, setReserved, sincethe other values are definedwhen the object is created.Other methods includegetType (line 17), getVin(line 22), getDescription(line 27), and Booleanmethod isReserved (line35).

The getType methodsreturns the specific type ofVehicle object by use oftype(self).__name__ whichreturns its own type.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 138: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

138

We can execute the file and interactively and unit test the class inthe Python shell.

We can similarly test the setReserved and isReserved methods.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 139: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

139

Car Class

The Car class is defined as asubclass of the Vehicleclass, imported on line 3.

The methods inheritedfrom the Vehicle class havealready been tested. Wetherefore test methodgetDescription (lines 21–30) by executing the Carclass file and performingthe following.

Test output of method getDescription:

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 140: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

140

Van Class

The Van class is defined,containing an __init__method and its very ofmethod getDescription.

The getDescription methodin a similar manner to thegetDescription of the Carclass.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 141: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

141

Truck Class

The Truck class is defined,containing an __init__method and its very ofmethod getDescription.

The getDescription methodin a similar manner to thegetDescription of the Carclass.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 142: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

142

Implementation and Testing of the Vehicles Class

Whereas the Vehicle class represents the information of a singlevehicle, the Vehicles class maintains a collection of Vehicle types.

We look at the implementation of the Vehicles class, maintainingthe cost, availability, and reservation status of all vehicles of therental agency.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 143: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

143

Vehicles Class

The Vehicles class imports classes Vehicle,Car, Van, and Truck.

An InvalidVinError exception class isdefined, raised when method getVehicle iscalled for a nonexistent VIN.

Method addVehicle adds a new vehicle tothe collection. This is called when theVehicles object is initially populated at thestart of the program (in the SystemInterfaceclass). Method getAvailVehicles returns alist of vehicles that are not currentlyreserved.

We can easily test these classes from thePython shell as given below.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 144: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

144

Method getAvailVehiclesreturns a list of availablevehicles for the providedvehicle type.

Since this returns a list ofvehicles, the first vehiclein the list is selected (atindex [0]), and thegetDescription method iscalled to display the fulldescription of the vehicle.

We see that we get thecorrect results.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 145: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

145

Implementation and Testing of the VehicleCostand VehicleCosts Classes

The VehicleCosts class is responsible for maintaining and providingthe costs for each vehicle type.

We first look at the VehicleCost class for maintaining the costs of aparticular vehicle type.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 146: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

146

VehicleCost Class

The VehicleCost class, like the Vehicleclass, stores information accessed bythe provided getter methods. Theinformation to be stored is passed tothe __init__ method.

The getCosts method returns all theindividual cost components as a list.This method is called when thevehicle costs need to be displayed, orthe cost of a particular vehicle rentalneeds to be determined.

We can easily test the VehicleCostclass from the Python shell as givenbelow.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 147: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

147Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 148: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

148

We next look at the VehicleCosts class that maintains acollection of VehicleCost objects.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 149: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

149

VehicleCosts Class

The vehicleCosts class maintains acollection of VehicleCost objects. TheVehicleCost class is imported on line 3.

On lines 6–8, three symbolic constants aredefined, DAILY_RENTAL, WEEKLY_RENTAL,and WEEKEND_RENTAL. The VehicleCostsclass is defined on lines 10–89. The vehiclecosts for the three types of vehicles arestored in a dictionary, using the vehicletypes as key values. The __init__ method(lines 13–16) initializes instance variablevehicle_costs to an empty dictionary. Thevehicle costs are added to the collection ofcosts by method addVehicleCost (lines 23–26), called from the SystemInterface classwhen populating the rental costs from file.Method getVehicleCost (lines 18–21)returns the costs as a list of individual costs.

Finally, method calcRentalCost (lines 28–89) calculates the cost of a particular rental. We test the VehicleCosts class from the Python shell.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 150: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

150

VehicleCosts Class

The VehicleCost class, like the Vehicleclass, stores information accessed bythe provided getter methods. Theinformation to be stored is passed tothe __init__ method.

The getCosts method returns all theindividual cost components as a list.This method is called when thevehicle costs need to be displayed, orthe cost of a particular vehicle rentalneeds to be determined.

We can easily test the VehicleCostclass from the Python shell as givenbelow.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 151: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

151Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 152: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

152

Implementation the Reservation and Reservations Classes

The remaining aggregating class in the program is theReservations class. We first look at the Reservation class forstoring a single reservation.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 153: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

153

Reservation Class

The Reservation classmaintains the informationfor a single reservation.

The __init__ method (lines6–14) is provided a name,address, credit cardnumber, and VIN when anew Reservation object iscreated, with a gettermethods provided for eachof these four values.

We omit testing of the classand give an imple-mentation of the corres-ponding Reservations class.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 154: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

154

Reservations Class

The Reservation class isimported on line 3. The__init__ method initializes anempty dictionary for storingthe reservations, with creditcard numbers serving as thekey values.

The remaining methods ofthe class include methodisReserved (lines 13–16),getVinForReserv (lines 18–21), addReservation (lines23–26), findReservation (lines28–31), and CancelReservation(lines 33–36 ).

We omit the testing of theReservations class. We finallylook at the implementationof the SystemInterface andRentalAgencyUI classes.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 155: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

155

Implementation the SystemInterface andRentalAgencyUI Classes

We first look at the implementation of the SystemInterfaceclass.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 156: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

156

SystemInterface Class

The docstring for the module specifiesthe formatting of the files storing thevehicle and vehicle rental costs. Thereis one exception raised by the moduleto inform the user interface when a“file not found” or an improperlyformatted file error occurs.

Lines 28–30 import most of the classesin the system. Symbolic constantsVEHICLE_TYPES, VEHICLE_FILENAME, andVEHICLE_COSTS_FILENAME are defined(lines 33–35).

Exception class InvalidFileFormatError isdefined (lines 39–49) and used withinthe SystemInterface class. Theexception class defines special method__str__ to enable information to bedisplayed specific to the error (that is,which file header was expected and notfound, in which file).

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 157: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

157

The __init__ method (lines 55–77) firstcreates instances of the three aggregatorclasses — Vehicles, VehicleCosts, andReservations (each initially empty). The restof the __init__ method consists of a try blockthat attempts to open and read the filesdefined by VEHICLES_FILENAME andVEHICLE_COSTS_FILENAME.

If the files are opened successfully, each isread to populate the corresponding object.The exception handler catches two types ofexceptions, InvalidFileFormatError andIOError.

A set of getter methods is provided (lines 86–103) for retrieving vehicle, vehicle type, andvehicle cost information.

Method getAvailVehicles returns the list ofvehicles that are not currently reserved. (Notethe use of a list comprehension.) The list ofunreserved vehicles is of a specified type.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 158: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

158

Four additional methods are provided(lines 113–132) for maintaining reservationinformation (isReserved, findReservation,addReservation, and cancelReservation).

Finally, method calcRentalCost (lines 134–143) returns the calculated rental chargesfor a given vehicle type, rental period,insurance option, and expected milesdriven.

The rest of the class contains privatesupporting methods. Private methodpopulateVehicles reads the informationfrom the vehicles file and populates theVehicles instance. Private methodpopulateCosts reads the information fromthe vehicle costs file and populates theVehicleCosts instance.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 159: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

159

Here is the remainder of the SystemInterface class.

We next look at the implementation of thefinal class, the RentalAgencyUI class.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 160: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

160

RentalAgencyUI Class

Any user interface for the system must access itthrough the system interface. Thus, the__init__ method (lines 14–16) of theRentalAgencyUI class is passed a reference tothe system interface to store. The only otherpublic method of the class is method Start(lines 18–31). This method begins thecommand loop when called. The rest of themethods of the class are private methods insupport of the commands in the Start method.

Private method displayWelcomeScreen (lines36–41) provides the welcome message. Privatemethod displayMenu (lines 43–53) isrepeatedly called to display the users’options.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 161: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

161

Private method __getSelection is calledto retrieve from the user a numberwithin a specified range.

Method displayDivLine is called to display arow of dashes. It has a default parametertitle. Thus, the method may be called withor without a supplied argument. If anargument is not supplied, then a completerowofdashesisdisplayed.

Method executeCmd (lines 83–97) iscalled to execute each command of themain menu by selection number. Ratherthan place the code for each commandwithin this method, a specific commandmethod is called for each command.Private method CMD_DisplayVehicleTypes(lines 99–104) displays the three types ofvehicles (Cars, Vans, and Trucks). It in turnmakes use of private methoddisplayVehicleTypes(lines281–293).Withinthis method, getVehicleTypes of thesystemInterface is called to retrieve thetypes,sincethatiswheretheyaredefined.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 162: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

162

Private method CMD_DisplayVehicleCosts(lines 106–139) displays the rental costs fora specific vehicle type. It displays two rowsof column headings (lines 118–123), andgets the vehicle costs for the selectedvehicle type by call to methodgetVehicleCosts of the system interface(line 126). The rest of the method displaysthe information using formatted strings toalign under the column headings.

Private method CMD_DisplayAvailVehiclesdisplays all vehicles of a given vehicle typethat are not currently reserved. It displaysa selection of vehicle types (lines 158–159)for the user to select from, and gets theavailable vehicles for the selected typefrom the system interface by call tomethod getAvailVehicles of the systeminterface (line 147). The rest of the methodsimply displays, row-by-row, theinformation for each vehicle.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 163: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

163

Private method CMD__PromptAndDisplayAvailVehicles(lines 161–169) prompts the user for a vehicle type, andthen displays the information of vehicles of that type notcurrently reserved.

Private method CMD_DisplaySpecificRentalCost (lines171–226) displays the costs of a particular vehicle rentalbased on the vehicle type, the time period rented,whether insurance is opted for, and the estimatednumber of miles driven. First, it displays a selection ofvehicle types for the user to choose from (line 176). Itthen requests the desired rental period by a call toprivate method getRentalPeriod (line 180). A tuple isreturned containing constant value DAILY_RENTAL,WEEKLY_RENTAL, or WEEKEND_RENTAL, and thenumber of days or weeks rental period (with weekendsdefaulting to 1). The user is then asked if they want theoptional insurance (line 186) and the number of milesexpected to drive (line 193). The estimated rental cost isthen calculated by a call to method calcRentalCost of thesystem interface. The rest of the method has to do withformatting and displaying the output.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 164: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

164

PrivatemethodmakeReservationallowstheuserto reserve a vehicle of a given type (line 227),checkingiftherearevehiclesavailable(line235). Itthen calls method CMD__DisplayAvailVehicles(line 239) with a default argument of True todisplaythevehicledescriptionsasanumberedlist.

On lines 242–253, the selected vehicle number isread. On line 255, the VIN is retrieved for theselected vehicle, needed by method getVehicle(of the SystemInterface class) to retrieve thecorrespondingVehicleobject.Havingtheobject,itthen calls method getDescription (line 257) todisplay the vehicle description., setting thereservation status to True by a call to methodsetReserved (line259). Theuser’sname,address,andcreditcardnumberarerequested(lines261–263)tomakeanewReservationobject,addedtothe collection of reservations (line 266).Confirmation of the reservation is displayed (line267). Private method CMD_CancelReservation(line 269–279) cancels reservations by the creditcardnumberusedformakingthereservation.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 165: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

165

Finally, private methods displayVehicleTypesand getRentalPeriod, supporting methods ofthe command methods, are given on lines281–337.

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program

Page 166: Chapter 10 Object-Oriented Programmingpeople.uncw.edu/vetterr/classes/csc500-fall2019... · Object-oriented programming languages, such as Python, provide three fundamental features

166

Putting it All Together

The main module first creates the vehicle rental agency system (with a system interface), then creates a user interfacecontaining a reference to the system. The module imports the SystemInterface class (line 6) and the RentalAgencyUIclass (line 7). First, an instance of the SytemInterface class is created (line 11). The __init__ method of the class isimplemented to open the vehicle information file, as well as the vehicle cost file. The information in these files is used topopulate the vehicle and vehicle cost objects in the system. If any file errors occur during this process, an IOErrorexception is raised by the system interface and caught (line 19) to terminate the program. Once the files are successfullyopened and read, an instance of the RentalAgencyUI class is created (line 14). It is passed the needed reference to thesystem interface. Once the user interface is created, the start method of the user interface is called to begin thecommandloopandreceive andexecutecommandsfromtheuser.

Main Module

Introduction to Computer Science Using Python – Dierbach Copyright 2013 John Wiley and Sons Section 10.6 Vehicle Rental Program