http://xkcd.com/ - PowerPoint PPT Presentation

About This Presentation
Title:

http://xkcd.com/

Description:

http://xkcd.com/ – PowerPoint PPT presentation

Number of Views:134
Avg rating:3.0/5.0
Slides: 49
Provided by: Zach155
Learn more at: https://www.cs.hmc.edu
Category:

less

Transcript and Presenter's Notes

Title: http://xkcd.com/


1
http//xkcd.com/
2
IS 313 Today
Schedule
Where we've been
Week 0
Week 4
Functions and Data
Loops and language
Week 1
Week 5
Week 2
Week 6
Classes
Where we're going
Week 8
Week 12
42
'a'
Projects and Networks
Dictionaries and Classes
Week 9
key
value
Week 13
Week 10
Week 14
a Dictionary object
You're saying that Python's got class?
Objects
3
Watch out!
http//www.youtube.com/watch?vnBeUGqeYsQg
4
Objects
42
'a'
"Oh yeah!"
value
key
Data reigns
a Dictionary object
a String object
Python an object-oriented programming language
Classes
input
Methods
Functions
Types
output
5
Some languages are ALL OBJECTS!
Almost all data in Java are OBJECTS
The CLASS of an objects is its type.
METHODS are f'ns "part of the data"!
Now it's data that's royalty!
6
If I had a dictionary, I guess I could look up
what it was!
Lists vs. Dictionaries
Lists are not perfect
reference
42
5
You can't choose what to name data.
L
L0
L1
L0, L1,
You have to start at 0.
L1985 'ox'
L1986 'tiger'
Some operations can be slow for big lists
if 'tiger' in L
7
More on dictionaries
They don't seem moronic to me!
Dictionaries have lots of built-in methods, or
functions
gtgtgt d 1990 'horse', 1991 ram' gtgtgt
d.keys() 1990, 1991 gtgtgt d.has_key( 1991
) True gtgtgt d.has_key( 1969 ) False gtgtgt d.pop(
1988 ) 'dragon'
keys returns a list of all keys
has_key checks if a key is present
pop deletes a key and returns its value
8
Methods
There's madness in this method!
d.has_key( 1991 )
are functions that are called by the data itself!
Functions
has_key( 1991, d )
all data must be passed in as function inputs
Warning this has_key function is for example
purposes only. It does not exist!
are called on their own
9
Classes and Objects
Design-it-yourself data.
10
Software Engineering
creating and composing functions
Building atop the work of others
Insight into details, e.g., data storage and
retrieval.
loops and data handling
creating new data structures
Invention, not reinvention.
11
Classes Objects
An object-oriented programming language allows
you to build your own customized types of
variables.
(1) A class is a type of variable.
(2) An object is one such variable.
12
Classes Objects
An object-oriented programming language allows
you to build your own customized types of
variables.
(1) A class is a type of variable.
(2) An object is one such variable.
There will typically be MANY objects of a single
class.
13
Using objects and classes
A particularly appropriate reference
gtgtgt d dict()
an example of the dictionary constructor
gtgtgt d'answer' 42 gtgtgt dir(d) all of the data
members and methods of the dictionary class (and
thus the object d !) gtgtgt d.keys() 'answer'
gtgtgt d.values() 42
two methods (functions) within all objects of
class dictionary
14
The CONSTRUCTOR
Code
class dict """ a dictionary class """
def __init__( self ) """ the CONSTRUCTOR
""" sets all of the data needed
there's no data here!
Comments
the constructor is named __init__ but is used via
the class name
It sets all the DATA MEMBERS of a new object
defines a new datatype called dict
the object is called self
15
The REPR
Code
class dict """ a dictionary class """
def __repr__( self ) """ a grim method
""" s '' for key in
self.keys() s str(key) ''
s str( selfkey ) ', ' s
'' return s
Comments
this method is named __repr__ and it provides a
string that will be used when printing
the object being printed is called self
the string to print gets returned
16
Object-oriented programming
Do-it-yourself data structures!
Blueprint for an object
class your own TYPE of data
object a variable of your own class type
variables of that type
data members data an object contains
methods functions an object contains
benefits encapsulation abstraction
An object is alive, responsible, and intelligent.
- C FAQs
17
Examples
Python's class libraries
Graphics libraries
Do reference libraries have library references?
http//docs.python.org/lib/
gtgtgt f urllib.urlopen( 'http//www.cs.hmc.edu/do
dds/IS313/HW/index.html' ) gtgtgt text
f.read() gtgtgt text50
18
Objects
An object is a data structure (like a list),
except
(1) Its data elements have names chosen by the
programmer. (2) Data elements are chosen
organized by the programmer (3) An object can
have behaviors built-in by the programmer.
usually called "methods" instead of functions
User-defined structures that become part of the
language (at least locally)
19
But Why ?
  • Flexibility

create-your-own
  • Reusability

write once, take anywhere
  • Abstraction

worry once, use anywhere
ordinary data structures
20
Date
This is a class. It is a user-defined datatype
(that you'll build in Lab this week!)
We want (or need) to represent lots of
interacting calendar days
The Problem
The Design
What data should be set in the constructor?
Are you asking what Date-a a Date needs?
What functionality will we need to support?
d.dow()
usually some, but not all, is known beforehand
21
Using Dates
gtgtgt d Date(1,1,2012) gtgtgt d 1/1/2012
this is a CONSTRUCTOR
What does it do?
this is an object of type Date
the representation of a particular object of type
Date
gtgtgt d.isLeapYear() True
the isLeapYear method returns True or False. How
does it know what year to check?
gtgtgt d2 Date(11,4,2009) gtgtgt d2 11/4/2009 gtgtgt
d2.isLeapYear() False
Another object of type Date - again, via the
constructor.
How does it know to return False, instead of True
in this case ??
22
class Date def __init__( self, m, d, y
) """ the Date constructor """
self.month m self.day d
self.year y def __repr__( self )
""" used for printing Dates """ s
"02d/02d/04d" (self.month, self.day,
self.year) return s def isLeapYear(
self )
The Date class
Why is everyone so far away?!
23
is the specific OBJECT THAT CALLED THE METHOD !
self
gtgtgt d Date(1,1,2012) gtgtgt d 1/1/2012
These methods need access to the object that
calls them
gtgtgt d.isLeapYear() True
gtgtgt d2 Date(12,31,2011) gtgtgt d2 12/31/2011 gtgtgt
d2.isLeapYear() False
These methods need access to the object that
calls them
Why not use d?
24
Which leap is correct?
def isLeapYear( self ) """ left-side leap """
if self.yr400 0 return True elif
self.yr100 0 return False elif
self.yr4 0 return True else
return False
def isLeapYear( self ) """ right-side leap
""" if self.yr4 0 return True elif
self.yr100 0 return False elif
self.yr400 0 return True else
return False
25
a Leap of faith.
How about a 4000-year rule?
class Date def __init__( self, mo,
dy, yr ) (constructor) def
__repr__(self) (for printing) def
isLeapYear( self ) """ here it is """
if self.yr400 0 return True if
self.yr100 0 return False if
self.yr4 0 return True return False
26
Date objects are mutable
but only if we want them to be!
gtgtgt d Date(1,1,2008) gtgtgt d 01/01/2008
always created with the CONSTRUCTOR
gtgtgt d.yesterday() gtgtgt d 12/31/2007 gtgtgt
d.tomorrow() gtgtgt d 01/01/2008
the yesterday method returns nothing at all. Is
it doing anything?
d has changed!
Some methods return a value others (like this
one) change the object that call it!
27
What date is on your id? What id is on your Date?
Date ids
gtgtgt d Date(11,4,2009) gtgtgt d 11/4/2009 gtgtgt d2
Date(11,5,2009) gtgtgt d2 11/5/2009
gtgtgt d d2
Will these be true or false?
gtgtgt d2.yesterday() gtgtgt d d2
gtgtgt d.equals( d2 )
28
Double Date
Excuse me -- ids please!
gtgtgt d2 d gtgtgt d 11/4/2009 gtgtgt d.yesterday() gtgtgt gt
gtgt d2 gtgtgt d2 d gtgtgt d2.equals(d)
What happens here?
29
Using copy
But where does copy come from?
gtgtgt d2 d.copy() gtgtgt d 11/3/2009 gtgtgt
d2 11/3/2009 gtgtgt d.yesterday() gtgtgt d2 gtgtgt d2
d
What happens here?
30
class Date def __init__( self, mo,
dy, yr ) def __repr__(self) def
isLeapYear(self) def copy(self)
""" returns a DIFFERENT object w/same date!
""" def equals(self, d2) """
returns True if they represent the
same date False otherwise """
Where are these TWO inputs coming from?
31
Try it
class Date def isBefore(self, d2) """
True if self is before d2 """ if self.yr lt
d2.yr return True if self.mo lt d2.mo
return True if self.dy lt d2.dy return
True return False def tomorrow(self)
""" moves the date that calls it ahead 1 day
""" DIM 0,31,28,31,30,31,30,31,31,30,31,3
0,31
Why is this method WRONG for the dates
1/1/2010
11/4/2009
how might you fix this problem?
This tomorrow method should not return anything.
It just CHANGES the date object that calls it.
DIM might be helpful
32
class Date def isBefore(self, d2) """
True if self is before d2 """ if self.yr lt
d2.yr return True if self.mo lt d2.mo
return True if self.dy lt d2.dy return
True return False
What's wrong?
Why is this method WRONG for the dates
1/1/2010
11/4/2009
33
class Date def tomorrow(self) """
moves the date that calls it ahead 1 day """
DIM 0,31,28,31,30,31,30,31,31,30,31,30,31
34
HW today / tomorrow
Add these methods to Date
copy(self) equals(self, d2) yesterday(self) tomorr
ow(self) addNDays(self, N) subNDays(self,
N) isBefore(self, d2) isAfter(self,
d2) diff(self, d2) dow(self)
and use your Date class to analyze our calendar a
bit
Prof. Art Benjamin
no computer required
35
Unusual calendar years
36
Application 2
Python has no Connect-four datatype

X X XO XOOOX
O --------------- 0 1 2 3 4 5 6
Aargh!
but we can correct that!
Can I see a demo?
37
Designing classes
1) What data? (Data Members)
Not limited to 7x6!
2) What are objects' crucial capabilities?
(Methods)
38
Connect Four the object b
str
str
str
str
width
list
Board b
data
str
str
str
str
height
str
str
str
str
data
What is the name of the method that will
construct this data?
39
Connect Four constructor
class Board """ a datatype representing a C4
board with an arbitrary number of rows
and cols """ def __init__( self,
width, height ) """ the constructor for
objects of type Board """ self.width
width self.height height
self.data this will be the board
for row in range( 6 )
boardRow for col in range( 7 )
boardRow ' ' add a space
to this row self.data boardRow
Bad magic?
40
Connect Four the object b
str
str
str
str
width
list
Board b
data
str
str
str
str
height
str
str
str
str

X X XO XOOOX
O --------------- 0 1 2 3 4 5 6
What is the name of the method that will print
this data?
41
Connect Four __repr__
def __repr__(self) """ this method
returns a string representation for
an object of type Board """ s
'' for row in range( 6 ) s
'' for col in range( 7 )
s self.datarowcol ''
s '\n' return s
which row is row 0, row 1, and so on?
To remove? To add?
42
Examples
def addMove(self, col, ox) row
self.height-1 while True if
self.datarowcol ' '
self.datarowcol ox row - 1 def
allowsMove(self, col)
a C4 board
col
'X' or 'O'
Step through this addMove method. How does it
work? What's wrong?
allowsMove should return True if col is a valid
move False otherwise.
43
C4 Board class methods
__init__( self, width, height )
the constructor
allowsMove( self, col )
checks if allowed
addMove( self, col, ox )
places a checker
delMove( self, col )
removes a checker
__repr__( self )
outputs a string
isFull( self )
checks if any space is left
winsFor( self, ox )
checks if a player has won
hostGame( self )
play!
Which is trickiest ?
44
Checking wins ?
b
X
O
Thoughts?
corner cases?
45
Thinking about final projects
Lab and hw questions
46
There are several well-made, concise tutorials
want to brush up on anything?
47
Two good references for looking up syntax
http//www.cis.upenn.edu/matuszek/General/JavaSyn
tax/
wikipedia, for sure
for checking out just one thing!
48
"thinking like a computer"
or, at least, like Java.
Aha! But what is this I see?
data
Constructors are giving me a HEAP of trouble!
constructor(s)
Write a Comment
User Comments (0)
About PowerShow.com