Presentation is loading. Please wait.

Presentation is loading. Please wait.

EECS 110: Lec 14: Classes and Objects Aleksandar Kuzmanovic Northwestern University

Similar presentations


Presentation on theme: "EECS 110: Lec 14: Classes and Objects Aleksandar Kuzmanovic Northwestern University"— Presentation transcript:

1 EECS 110: Lec 14: Classes and Objects Aleksandar Kuzmanovic Northwestern University

2 A whole new class of programming EECS 110 today Fri., 5/30: recitation Tue., 6/3: recitation, W. lab HW6 Details Projects Final! The Date class Mon., 6/2: rev. for final Wed., 6/4, final Lab and HW #6 Pr1 (the Date class) Pr2 (the Connect4Board ) Pr3 (the Connect4Playe r (e.c.)) Due Sunday Fri., 5/23: online Projects Wed., 5/28: class

3 Lists, Tuples, Dictionaries, … + lots of computer work for the programmer's work! T = {'abe' :['homer','herb'], 'jackie':['marge','patty','selma'], 'homer' :['hugo','bart','lisa','maggie'], 'marge' :['hugo','bart','lisa','maggie']} e.g., the Simpson's dictionary…

4 Lists, Tuples, Dictionaries, … + - lots of computer work for the programmer's work! no options as to data organization… limited to square-bracket naming, e.g., fairly generic capabilities, e.g., len, print A[i] list int float str A A[0]A[1] A[2] A = [ 42, 3.1, '!'] '!' T = {'abe' :['homer','herb'],…} T.getChildren('abe') NOT POSSIBLE! have to use T['abe']

5 Lists, Tuples, Dictionaries, … + - lots of computer work for little programmer work! no options as to data organization… limited to square-bracket naming, e.g., fairly generic capabilities, e.g., len, print A[i] Classes and Objects take care of all 3 drawbacks... list int float str A A[0]A[1] A[2] A = [ 42, 3.1, '!'] '!'

6 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.

7 Examples… Python's class libraries… Graphics libraries

8 Using objects and classes: >>> z = 3 + 4j >>> dir(z) all of the data members and methods of the complex class (and thus the object z !) >>> z.imag 4.0 >>> z.conjugate() 3-4j A particularly complex example… a data member of all objects of class complex its value for this object, z its return value for this object, z a method (function) within all objects of class complex

9 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.

10 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

11 Date this is an object of type Date >>> d = Date(1,1,2012) >>> d 1/1/2012 This is a class. It is a user-defined datatype (that you'll build in Lab this week!) this is a CONSTRUCTOR … the repr esentation of a particular object of type Date >>> d.isLeapYear() True >>> d2 = Date(12,31,2013) >>> d2 12/31/2013 >>> d2.isLeapYear() False the isLeapYear method returns True or False. How does it know what year to check? How does it know to return False, instead of True in this case ?? Another object of type Date - again, via the constructor.

12 class Date: """ a blueprint (class) for objects that represent calendar days """ def __init__( self, mo, dy, yr ): """ the Date constructor """ self.month = mo self.day = dy self.year = yr def __repr__( self ): """ used for printing Dates """ s = "%02d/%02d/%04d" % (self.month, self.day, self.year) return s def isLeapYear( self ): """ anyone know the rule? """ The Date class

13 >>> d = Date(1,1,2012) >>> d 1/1/2012 self These methods need access to the object that calls them >>> d.isLeapYear() True >>> d2 = Date(12,31,2013) >>> d2 12/31/2013 >>> d2.isLeapYear() False is the specific OBJECT THAT CALLS A METHOD These methods need access to the object that calls them

14 a Leap of faith…. class Date: def __init__( self, mo, dy, yr ): (constructor) def __repr__(self): (for printing) def isLeapYear( self ): """ here it is """ if self.year%400 == 0: return True if self.year%100 == 0: return False if self.year%4 == 0: return True return False

15 Date >>> d = Date(1,1,2014) >>> d 1/1/2014 always created with the CONSTRUCTOR … >>> d.yesterday() >>> d 12/31/2013 >>> d.subNDays(35) lots of printing… >>> d the yesterday method returns nothing at all. Is it doing anything? Why is this important? Some methods return a value; others change the object that call it! d has changed!

16 Date id s >>> d = Date(11,10,2014) >>> d 11/10/2014 >>> d2 = Date(11,11,2014) >>> d2 11/11/2014 this initializes a different Date! >>> d == d2 ? >>> d2.yesterday() >>> d == d2 ?

17 Date id s >>> d = Date(11,10,2014) >>> d 11/10/2014 >>> d2 = Date(11,11,2014) >>> d2 11/11/2014 this initializes a different Date! >>> d == d2 False >>> d2.yesterday() >>> d == d2 ?

18 Date id s >>> d = Date(11,10,2014) >>> d 11/10/2008 >>> d2 = Date(11,11,2014) >>> d2 11/11/2014 this initializes a different Date! >>> d == d2 False >>> d2.yesterday() >>> d == d2 False

19 Double Date >>> d = Date(11,10,2014) >>> d 11/10/2014 >>> d.addNDays(36) >>> d2 ? >>> d2 = d.copy() >>> d2 == d ? >>> d.equals(d2) ?

20 Double Date >>> d2 = d >>> d 11/10/2014 >>> d.addNDays(36) >>> d2 12/16/2014 >>> d2 = d.copy() >>> d2 == d ? >>> d.equals(d2) ?

21 Double Date >>> d2 = d >>> d 11/10/2014 >>> d.addNDays(36) >>> d2 12/16/2014 >>> d2 = d.copy() >>> d2 == d False >>> d.equals(d2) ?

22 Double Date >>> d2 = d >>> d 11/10/2014 >>> d.addNDays(36) >>> d2 12/16/2014 >>> d2 = d.copy() >>> d2 == d False >>> d.equals(d2) True

23 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 """ More Date

24 class Date: def __init__( self, mo, dy, yr ): def __repr__(self): def isLeapYear(self): def copy(self): """ returns a DIFFERENT object w/SAME date! ""“ return Date(self.month, self.day, self.year) def equals(self, d2): """ returns True if they represent the same date; False otherwise """ More Date

25 class Date: def __init__( self, mo, dy, yr ): def __repr__(self): def isLeapYear(self): def copy(self): """ returns a DIFFERENT object w/SAME date! ""“ return Date(self.month, self.day, self.year) def equals(self, d2): """ returns True if they represent the same date; False otherwise ""“ return self.month == d2.month and self.day == d2.day and self.year == d2.year More Date

26 "Quiz" class Date: def isBefore(self, d2): """ if self is before d2, this should return True; else False """ if self.year < d2.year: return True if self.month < d2.month: return True if self.day < d2.day: 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,30,31] This method is WRONG! Find why … and suggest how you could fix it! Write this tomorrow method. It does not return anything. It just CHANGES the date object that calls it.

27 class Date: def isBefore(self, d2): """ if self is before d2, this should return True; else False """ if self.year < d2.year: return True if self.month < d2.month: return True if self.day < d2.day: return True return False What's wrong?

28 def isBefore(self, d2): """ Returns true if self is before d2 """ if self.year < d2.year: return True if self.month < d2.month and self.year == d2.year: return True if self.day < d2.day and d2.month == self.month and \ self.year == d2.year: return True return False

29 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] # Leap years not accounted for self.day +=1 if self.day > DIM[self.month]: self.day = 1 self.month += 1 if self.month > 12: self.month = 1 self.year += 1

30 Add to Date these methods Lab tomorrow yesterday(self) tomorrow(self) addNDays(self, N) subNDays(self, N) isBefore(self, d2) isAfter(self, d2) diff(self, d2) diffDebug(self, d2) dow(self) and use your Date class to analyze our calendar a bit…

31 See you in Lab !


Download ppt "EECS 110: Lec 14: Classes and Objects Aleksandar Kuzmanovic Northwestern University"

Similar presentations


Ads by Google