Programming for Engineers in Python - PowerPoint PPT Presentation

Loading...

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



Loading


The Adobe Flash plugin is needed to view this content

Get the plugin now

View by Category
About This Presentation
Title:

Programming for Engineers in Python

Description:

Programming for Engineers in Python Lecture 6: More Object Oriented Programming Autumn 2011-12 * – PowerPoint PPT presentation

Number of Views:66
Avg rating:3.0/5.0
Slides: 52
Provided by: ode88
Learn more at: http://courses.cs.tau.ac.il
Category:

less

Write a Comment
User Comments (0)
Transcript and Presenter's Notes

Title: Programming for Engineers in Python


1
Programming for Engineers in Python
Lecture 6 More Object Oriented Programming
Autumn 2011-12
2
Lecture 5 Highlights
  • Functions review
  • Object Oriented Programming

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 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
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
Class as a Blueprint
  • A class is a blueprint of objects

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
Shapes 2D Point, Circle
  • __init__
  • self
  • Attributes
  • Instances and memory
  • Copy (shallow / deep)
  • Methods

8
Code Define Classes
9
Code Using Classes
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
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
A Rectangle - Implementation
In class Rectangle
Shell
13
Rectangle in Memory
14
Find Center
In class Rectangle
Shell
15
Grow Rectangle
In class Rectangle
Shell
16
Has Attributes?
17
Print All Attributes
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
Histogram (polymorphism)
Source Think Python
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
Specification
  • print should work smoothly
  • Add, subtract, multiply, divide
  • Immutable
  • It should feel like native language support

22
Constructing a Rational
  • What are the attributes?
  • How a client programmer will create a new
    Rational object?

23
Constructing a Rational
Shell
?
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 Rationals numerator
    and denominator
  • override the default implementation

Shell
25
__repr__
  • __repr__ method returns the official string
    representation of an object

In class Rational
Shell
26
Checking Preconditions
  • Ensure the data is valid when the object is
    constructed

In class Rational
27
Checking Preconditions
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
28
29
Operator Overloading
  • By defining other special methods, you can
    specify the behavior of operators on user defined
    types
  • , -, , /, lt, gt,

30
Adding Rational Numbers
31
Define __add__ Method
  • Immutable

In class Rational
Shell
32
Other Arithmetic Operations
In class Rational
33
Other Arithmetic Operations
34
lt, gt, max
INCORRECT!
35
lt, gt, max
In class Rational
36
lt, gt, max
How come max works?
37
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)?

38
Revised Rational
In class Rational
Shell
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
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

41
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

42
gcd Implementation
  • Lets leave it for next lesson (Recursion)
  • Actually, we can use the implementation in the
    module fractions.gcd

43
Revised Rational
In class Rational
Shell
44
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

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
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
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 doesnt know how to do
    that

48
__radd__ - Right Side Add
  • __radd__ invoked when a Rational object appears
    on the right side of the operator

In class Rational
Shell
49
Summary
  • Customize classes so that they are natural to use
  • Attributes, methods, constructor
  • Method overriding
  • Encapsulation
  • Define operators as method
  • Method overloading

50
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
51
Next Week
  • No class (tirgulim as usual)
  • Next topic Recursion

51
About PowerShow.com