Download presentation
Presentation is loading. Please wait.
Published byViolet Andrews Modified over 9 years ago
1
1 Programming for Engineers in Python Autumn 2011-12 Lecture 6: More Object Oriented Programming
2
2 Lecture 5 Highlights Functions review Object Oriented Programming
3
3 is and == is will return True if two variables point to the same object, == if the objects referred to by the variables are equal >>> a = [1, 2, 3] >>> b = a >>> b is a True >>> b == a True >>> b = a[:] >>> b is a False >>> b == a True
4
4 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
5
5 Class as a Blueprint A class is a blueprint of objects
6
6 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,…
7
7 Shapes – 2D Point, Circle __init__ self Attributes Instances and memory Copy (shallow / deep) Methods
8
8 Code – Define Classes
9
9 Code – Using Classes
10
10 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
11
11 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
12
12 A Rectangle - Implementation In class Rectangle: Shell:
13
13 Rectangle in Memory
14
14 Find Center In class Rectangle: Shell:
15
15 Grow Rectangle In class Rectangle: Shell:
16
16 Has Attributes?
17
17 Print All Attributes
18
18 Inheritance (briefly) The general idea class Point(object) – what does object stands for? Example: Animals Polymorphism We have seen that already! Histogram example
19
19 Histogram (polymorphism) Source: Think Python
20
20 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!
21
21 Specification print should work smoothly Add, subtract, multiply, divide Immutable It should feel like native language support
22
22 Constructing a Rational What are the attributes? How a client programmer will create a new Rational object?
23
23 Constructing a Rational ? Shell:
24
24 Reimplementing __str__ __str__ method return a string representation of an object A more useful implementation of __str__ would print out the values of the Rational’s numerator and denominator override the default implementation In class Rational: Shell:
25
25 __repr__ __repr__ method returns the “official” string representation of an object In class Rational: Shell:
26
26 Checking Preconditions Ensure the data is valid when the object is constructed In class Rational:
27
27 Checking Preconditions
28
28 Defining Operators Why not use natural arithmetic operators? Operator precedence will be kept All operations are method calls From the book Programming in Scala
29
29 Operator Overloading By defining other special methods, you can specify the behavior of operators on user defined types +, -, *, /,,…
30
30 Adding Rational Numbers
31
31 Define __add__ Method Immutable In class Rational: Shell:
32
32 Other Arithmetic Operations In class Rational:
33
33 Other Arithmetic Operations
34
34, max INCORRECT!
35
35, max In class Rational:
36
36, max How come max works?
37
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) ? 37 Default Arguments to Constructor
38
38 Revised Rational In class Rational: Shell:
39
39 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
40
40 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,a%b) The Euclidean algorithm: repeat iteratively: if (b == 0) return a else repeat using a b, b a%b http://en.wikipedia.org/wiki/Euclidean_algorithm
41
41 Correctness Example: gcd(40,24) gcd(24,16) gcd(16,8) gcd(8,0) 8 Prove: g = gcd(a,b) = gcd(b,a%b)= 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 > g1 a = t * b + r g is a divisor of b and r contradiction
42
42 gcd Implementation Let’s leave it for next lesson (Recursion) Actually, we can use the implementation in the module fractions.gcd
43
43 Revised Rational In class Rational: Shell:
44
44 Mixed Arithmetic's Now we can add and multiply rational numbers! What about mixed arithmetic? r + 2 won’t work r + Rational(2) is not nice Add new methods for mixed addition and multiplication Will work thanks to polymorphism
45
45 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)
46
46 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
47
47 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 doesn’t know how to do that
48
48 __radd__ - Right Side Add In class Rational: Shell: __radd__ invoked when a Rational object appears on the right side of the + operator
49
49 Summary Customize classes so that they are natural to use Attributes, methods, constructor Method overriding Encapsulation Define operators as method Method overloading
50
50 Rational Numbers in Python Actually, there is a Python implementation of Rational numbers It is called fractions http://docs.python.org/library/fractions.html http://docs.python.org/library/fractions.html
51
51 Next Week No class (tirgulim as usual) Next topic: Recursion
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.