Inheritance and class hierarchies
A class for straight lines
A first try on a class for parabolas
A class for parabolas using inheritance
Checking the class type
Attribute vs inheritance: has-a vs is-a relationship
Superclass for defining an interface
Class hierarchy for numerical differentiation
Classes for differentiation
Verification
A flexible main program
Extensions
Alternative implementation via functions
Alternative implementation via functional programming
Alternative implementation via a single class
Class hierarchy for numerical integration
Numerical integration methods
Classes for integration
Verification
Using the class hierarchy
About object-oriented programming
Class hierarchy for making drawings
A first glimpse of Pysketcher
Basic construction of sketches
Inner workings of the Pysketcher tool
Example of classes for geometric objects
Adding functionality via recursion
Scaling, translating, and rotating a figure
Classes for DNA analysis
Class for regions
Class for genes
Subclasses
Summary
Chapter topics
Example: Input data reader
Exercises
Exercise 1: Demonstrate the magic of inheritance
Exercise 2: Make polynomial subclasses of parabolas
Exercise 3: Implement a class for a function as a subclass
Exercise 4: Create an alternative class hierarchy for polynomials
Exercise 5: Make circle a subclass of an ellipse
Exercise 6: Make super- and subclass for a point
Exercise 7: Modify a function class by subclassing
Exercise 8: Explore the accuracy of difference formulas
Exercise 9: Implement a subclass
Exercise 10: Make classes for numerical differentiation
Exercise 11: Implement a new subclass for differentiation
Exercise 12: Understand if a class can be used recursively
Exercise 13: Represent people by a class hierarchy
Exercise 14: Add a new class in a class hierarchy
Exercise 15: Compute convergence rates of numerical integration methods
Exercise 16: Add common functionality in a class hierarchy
Exercise 17: Make a class hierarchy for root finding
Exercise 18: Make a calculus calculator class
Exercise 19: Compute inverse functions
Exercises
Exercise 20: Make line drawing of a person; program
Exercise 21: Make line drawing of a person; class
Exercise 22: Animate a person with waving hands
References
This document introduces the basic ideas of object-oriented
programming. Different people put different meanings into the term
object-oriented programming: some use the term for programming with
objects in general, while others use the term for programming with
class hierarchies. The author applies the second meaning, which is the
most widely accepted one in computer science. The first meaning is
better named object-based programming. Since everything in Python
is an object, we do object-based programming all the time, yet one
usually reserves this term for the case when classes different from
Python's basic types (int
, float
, str
, list
, tuple
, dict
)
are involved.
Necessary background for the present document includes basic knowledge
about classes in Python, at least concepts such as attributes
(method attributes, data attributes),
methods, constructors, the self
object, and the __call__
special method.
For the sections Class hierarchy for numerical differentiation
and Class hierarchy for numerical integration one must know the most basic methods for numerical
differentiation and
integration.
During an initial reading of the document, it can be beneficial to skip
the more advanced material in
the sections Extensions-Alternative implementation via a single class.
All the programs associated with this document are found in the folder src/oo.
This chapter is taken from the book A Primer on Scientific Programming with Python by H. P. Langtangen, 5th edition, Springer, 2016.