### Lec14 Introduction to Object-Oriented Programming

# Module (modularity)
  # collection of relected functions
    # refer to the functions using dot notation
    # e.g. import math
         # math.sqrt(4)
    # Dot notation to avoid name conflicts

# Classes (a particular kind of modules)
  # in context of object-oriented programming
  # data abstraction
      #(synonym) abstract data types
  # Java, C++, Python ...

# Object
  # = collection of data and functions (the functions operate on the data)
  # user-defined types (as opposed to built-in types)
  # the essence of object-oriented programming: the combining of data and functions on that data
  # Encapsulation

  # Message passing metaphor:
    # l.sort(), c.area()

# Class = collection of objects with characteristics in common
  # think of built-in types as built-in classes
  # user-defined classes