1 / 31

EECS 110: Lec 14: Classes and Objects

Learn about the benefits of classes and objects in programming: customization, data organization, and built-in behaviors. Explore object-oriented programming principles through examples and hands-on practice.

newson
Download Presentation

EECS 110: Lec 14: Classes and Objects

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EECS 110: Lec 14: Classes and Objects Aleksandar Kuzmanovic Northwestern University http://cs.northwestern.edu/~akuzma/classes/EECS110-s10/

  2. Wed., 5/26: rev. for final Wed., 6/2, final EECS 110 today A whole new classof programming The Date class HW6 Details Lab and HW #6 Pr1 (the Date class) Pr2 (the Connect4Board) Pr3 (the Connect4Player (e.c.)) Due Sunday 5/23 Final! Projects Projects Fri., 5/21: online Fri., 5/28: recitation (LR5) Tue., 6/1: recitation, W. lab Mon., 5/24: class

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

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

  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… Graphics libraries Python's class libraries… http://docs.python.org/lib/

  8. Using objects and classes: A particularly complex example… >>> 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 data member of all objects of class complex its value for this object, z a method (function) within all objects of class complex its return value for this object, z

  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 a class. It is a user-defined datatype (that you'll build in Lab this week!) >>> d = Date(1,1,2008) >>> d 1/1/2008 this is a CONSTRUCTOR … this is an object of type Date the representation of a particular object of type Date >>> d.isLeapYear() True the isLeapYear method returns True or False. How does it know what year to check? >>> d2= Date(12,31,2007) >>> d2 12/31/2007 >>> 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 ??

  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 defisLeapYear( self ): """ anyone know the rule? """ The Date class

  13. is the specific OBJECT THAT CALLS A METHOD self >>> d = Date(1,1,2008) >>> d 1/1/2008 These methods need access to the object that calls them >>> d.isLeapYear() True >>> d2= Date(12,31,2007) >>> d2 12/31/2007 >>> d2.isLeapYear() False 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) defisLeapYear( 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,2008) >>> d 1/1/2008 always created with the CONSTRUCTOR … >>> d.yesterday() >>> d 12/31/2007 >>> d.subNDays(35) lots of printing… >>> d the yesterday method returns nothing at all. Is it doing anything? d has changed! Why is this important? Some methods return a value; others change the object that call it!

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

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

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

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

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

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

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

  23. More Date class Date: def __init__( self, mo, dy, yr ): def __repr__(self): def isLeapYear(self): defcopy(self): """ returns a DIFFERENT object w/SAME date! """ defequals(self, d2): """ returns True if they represent the same date; False otherwise """

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

  25. More Date class Date: def __init__( self, mo, dy, yr ): def __repr__(self): def isLeapYear(self): defcopy(self): """ returns a DIFFERENT object w/SAME date! ""“ return Date(self.month, self.day, self.year) defequals(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

  26. "Quiz" class Date: defisBefore(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 deftomorrow(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. What's wrong? class Date: defisBefore(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

  28. defisBefore(self, d2): """ Returns true if self is before d2 """ if self.year < d2.year: returnTrue if self.month < d2.month and self.year == d2.year: returnTrue if self.day < d2.day and d2.month == self.month and \ self.year == d2.year: returnTrue returnFalse

  29. class Date: deftomorrow(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. Lab tomorrow Add to Date these methods 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 !

More Related