Loading...

PPT – Programming for Engineers in Python PowerPoint presentation | free to download - id: 771472-YWJjN

The Adobe Flash plugin is needed to view this content

Programming for Engineers in Python

Lecture 6 More Object Oriented Programming

Autumn 2011-12

Lecture 5 Highlights

- Functions review
- Object Oriented Programming

is and

is will return True if two variables point to the

same object, if the objects referred to by the

variables are equal gtgtgt a 1, 2, 3 gtgtgt b

a gtgtgt b is a True gtgtgt b a True gtgtgt b

a gtgtgt b is a False gtgtgt b a True

Object-Oriented Programming (OOP)

- Represent problem-domain entities using a

computer language - When building a software in a specific domain,

describe the different components of the domain

as types and variables - Thus we can take another step up in abstraction

Class as a Blueprint

- A class is a blueprint of objects

Car Example

- Members 4 wheels, steering wheel, horn, color,
- Every car instance has its own
- Methods drive, turn left, honk, repaint,
- Constructors by color (only), by 4 wheels,

engine,

Shapes 2D Point, Circle

- __init__
- self
- Attributes
- Instances and memory
- Copy (shallow / deep)
- Methods

Code Define Classes

Code Using Classes

Today

- Continue with 2D Shapes
- Rational numbers implementation
- It should feel like native language support
- Inspired by chapter 6 from the book Programming

in Scala

A Rectangle (design options)

- It is not always obvious what the attributes of

an object should be - How would you represent a rectangle?
- (for simplicity ignore angle, assume the

rectangle is vertical or horizontal) - There are several possibilities
- One corner / center point width and height
- Two opposing corners
- We shall select the width, height, lower-left

corner

A Rectangle - Implementation

In class Rectangle

Shell

Rectangle in Memory

Find Center

In class Rectangle

Shell

Grow Rectangle

In class Rectangle

Shell

Has Attributes?

Print All Attributes

Inheritance (briefly)

- The general idea
- class Point(object) what does object stands

for? - Example Animals
- Polymorphism
- We have seen that already!
- Histogram example

Histogram (polymorphism)

Source Think Python

Rational Numbers

- A rational number is a number that can be

expressed as a ratio n/d (n, d integers, d not 0) - Examples 1/2, 2/3, 112/239, 2/1
- Not an approximation!

Specification

- print should work smoothly
- Add, subtract, multiply, divide
- Immutable
- It should feel like native language support

Constructing a Rational

- What are the attributes?
- How a client programmer will create a new

Rational object?

Constructing a Rational

Shell

?

Reimplementing __str__

- __str__ method return a string representation of

an object - A more useful implementation of __str__ would

print out the values of the Rationals numerator

and denominator - override the default implementation

Shell

__repr__

- __repr__ method returns the official string

representation of an object

In class Rational

Shell

Checking Preconditions

- Ensure the data is valid when the object is

constructed

In class Rational

Checking Preconditions

Defining Operators

- Why not use natural arithmetic operators?
- Operator precedence will be kept
- All operations are method calls

From the book Programming in Scala

28

Operator Overloading

- By defining other special methods, you can

specify the behavior of operators on user defined

types - , -, , /, lt, gt,

Adding Rational Numbers

Define __add__ Method

- Immutable

In class Rational

Shell

Other Arithmetic Operations

In class Rational

Other Arithmetic Operations

lt, gt, max

INCORRECT!

lt, gt, max

In class Rational

lt, gt, max

How come max works?

Default Arguments to Constructor

- Constructors other then the primary?
- Example a rational number with a denominator of

1 (e.g., 5/1 ? 5) - We would like to do Rational(5)
- Default arguments
- Useful not solely for constructors
- Remember sorted (reverse, key are default

arguments)?

Revised Rational

In class Rational

Shell

Greatest Common Divisor (gcd)

- 66/42 11/7
- To normalize divide the numerator and denominator

by their greatest common divisor (gcd) - gcd(66,42) 6 ? (66/6)/(42/6) 11/7
- No need for Rational clients to be aware of this
- Encapsulation

Off Topic Calculate gcd (Only if time allows)

- gcd(a,b) g
- a n g
- b m g
- gcd(n,m)1(otherwise g is not the gcd)
- a t b r t m g r ? g is a divisor of

r - gcd(a,b) gcd(b,ab)
- The Euclidean algorithm repeat iteratively
- if (b 0) return a
- else repeat using a ? b, b ? ab
- http//en.wikipedia.org/wiki/Euclidean_algorithm

Correctness

- Example
- gcd(40,24) ? gcd(24,16) ? gcd(16,8) ? gcd(8,0)

? 8 - Prove g gcd(a,b) gcd(b,ab) g1
- g1 is a divisor of a (? g1 g)
- There is no larger divisor of a (? g1 g)
- a t b r ? a t h g1 v g1 ? g1

is a divisor of a - assume g gt g1 ? a t b r ? g is a

divisor of b and r ? contradiction

gcd Implementation

- Lets leave it for next lesson (Recursion)
- Actually, we can use the implementation in the

module fractions.gcd

Revised Rational

In class Rational

Shell

Mixed Arithmetic's

- Now we can add and multiply rational numbers!
- What about mixed arithmetic?
- r 2 wont work ?
- r Rational(2) is not nice ?
- Add new methods for mixed addition and

multiplication - Will work thanks to polymorphism

Usage

- The method invoked is determined in each case

by the type of the right operand - In our code it is implemented only for the

operator on integers (in real life it should

have been implemented for every operator and

every data type that is supported)

Revised __add__

- Isinstance takes a value and a class object, and

returns True if the vlaue is an instance of the

class - Handles addition of integers correctly
- Type based dispatch dispatches the computation

to different executions based on the types of the

arguments

46

Implicit Conversions

- 2 r ? 2.(r) ? method call on 2 (int) ? int

class contains no __add__ method that takes a

Rational argument ? - The problem Python is asking an integer to add a

Rational object, and it doesnt know how to do

that

__radd__ - Right Side Add

- __radd__ invoked when a Rational object appears

on the right side of the operator

In class Rational

Shell

Summary

- Customize classes so that they are natural to use
- Attributes, methods, constructor
- Method overriding
- Encapsulation
- Define operators as method
- Method overloading

Rational Numbers in Python

- Actually, there is a Python implementation of

Rational numbers - It is called fractions http//docs.python.org/libr

ary/fractions.html

50

Next Week

- No class (tirgulim as usual)
- Next topic Recursion

51