WEEK05: computer graphics, using objects
---------------------------------------------------------------
 M: what is an object? simple computer graphics

LAB 4: due Saturday
QUIZ 2 this Wednesday

REVIEW from last week: str methods

>>> help(str)
>>>
>>> S = "we love computer science"
>>> S.upper()
'WE LOVE COMPUTER SCIENCE'
>>> S.capitalize()
'We love computer science'
>>> print S
we love computer science

(upper() and many str methods DON'T CHANGE the string S!!!)

>>> S.split()
['we', 'love', 'computer', 'science']
>>> S.count("e")
5
>>> S.index("w")
0

 there are many useful str methods!!!

OBJECTS AND OOP (Object-Oriented Programming)

- data types we've seen so far: int, float, string, boolean
- each has certain kinds of data/values and operations

- functions we've seen so far: type(5), len("hello"), range(10)

- objects combine data and functions (methods) into one thing


RADIO EXAMPLE:

 - for a real radio, you can turn it on/off, change the
   volume, change the station

 - if you wrote a program to act like a radio (like Pandora)
   you would want similar features:

     myradio = Radio()        <--- constructor creates object
                                   with initial data and methods

 - use dot operator to change the object data 
   (manipulate the object)

     myradio.setVolume(10)
     myradio.setStation(91.5)
     
     anotherradio = Radio()
     anotherradio.setStation(90.1)

     ==> call object methods to change the object

SUDOKU EXAMPLE:

  puzzle  = [9,0,7,5,6,0...]
  row1 = puzzle[0:9]
  col1 = puzzle[0:81:9]

  - can write sudoku program using above, OR we can create
    a Sudoku object that has getRow() and getCol() methods:

  puzzle = Sudoku([9,0,7,5,6,0...])
  row1 = puzzle.getRow(1)
  col1 = puzzle.getCol(1)

  - using objects and methods:   OBJECT.METHOD()


COMPUTER GRAPHICS:

 - we are using the graphics module from the Zelle book

   from graphics import *

 - in the graphics window, x increases to the right, y increases
	 down, so the point 0,0 is the top left corner

  0,0 ------> x 500,0
   |
   |
   |
   V
   y
   0,300         500,300


 - try some simple objects: GraphWin, Point, Line, Circle:

>>> from graphics import *
>>> w = GraphWin()
>>> p = Point(50,90)
>>> p.draw(w)
>>> c = Circle(p, 20)
>>> c.setFill("red")
>>> c.draw(w)


OBJECT-ORIENTED PROGRAMMING

  - build complex systems out of simple objects
  - more intuitive (circle object, fill, draw), objects in code
    correspond to real-world objects
  - reusability (design objects that can be used in other programs)

  - we'll design and create our own objects later this semester

YOUR TURN

 - see if you can write a program to make this image: