1 / 91

Introduction to Object-Oriented Programming: From History to Implementation

Learn about the history and evolution of object-oriented programming, from the early days of Sketchpad and Simula to Alan Kay's vision of the Dynabook. Explore how objects are modeled based on real-world entities and the advantages of objects in managing complexity, supporting growth, and promoting reuse. Discover the role of Smalltalk and the Logo Turtle in introducing object-oriented concepts to programming.

lehtoj
Download Presentation

Introduction to Object-Oriented Programming: From History to Implementation

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. Introduction to Computing and Programming in Python: A Multimedia Approach 4ed Chapter 17: Topics in Computer Science: Object-Oriented Programming

  2. Chapter Objectives

  3. History of Objects: Where they came from • Start of the Story: Late 60's and Early 70's • Windows are made of glass, mice are undesirable rodents • Good programming = Procedural Abstraction • Verb-oriented

  4. Procedural Abstractions • Define tasks to be performed • Break tasks into smaller and smaller pieces • Until you reach an implementable size • Define the data to be manipulated • Design how functions interact • What's the input • What's the output • Group functions into components (“modules" or "classes") • Write the code

  5. Object-oriented programming • First goal: Model the objects of the world • Noun-oriented • Focus on the domain of the program • Phases • Object-oriented analysis: Understand the domain • Define an object-based model of it • Object-oriented design: Define an implementation • Design the solution • Object-oriented programming: Build it

  6. How'd we get from there to here? • Key ideas • Master-drawings in Sketchpad • Simulation “objects” in Simula • Alan Kay and a desire to make software better • More robust, more maintainable, more scalable

  7. Birth of Objects, 1 of 2 • Ivan Sutherland's Sketchpad, 1963

  8. Sketchpad • First object-oriented drawing program • Master and instance drawings • Draw a house • Make an instance • Add a chimney to the master • Poof! The instance grows a chimney • Other interesting features • 1/3 Mile Square Canvas • Invention of “rubber band” lines • Simple animations

  9. Birth of Objects, 2 of 2 • Simula • Simulation programming language from Norway, 1966 • Define an activity which can be instantiated as processes • Each process has it own data and behavior • In real world, objects don't mess with each others' internals directly • (Simulated) Multi-processing • No Universal Scheduler in the Real World

  10. Alan Kay • U. Utah PhD student in 1966 • Read Sketchpad, Ported Simula • Saw “objects” as the future of computer science • His dissertation: Flex, an object-oriented personal computer • A personal computer was a radical idea then

  11. "A Personal Computer for Children of All Ages" • Flex, an object-oriented personal computer • Enabled by Moore's Law • Imagining personal computing in 1969 • Computer as meta-medium • The first medium to encompass other media A 1970's depiction of studentsusing an object-oriented system based on Flex

  12. Kay's Insights • “Computer” as collection of Networked Computers • All software is simulating the real world • Biology as model for objects • Bacterium has 120M of info, 1/500th of a Cell, and we have 1013 of these in us. • Talk about processing power! Talk about managing complexity! • What man-made things can scale like that? • Stick a million dog houses together to get the Empire State Building?

  13. Birth of Objects • Objects as models of real world entities • Objects as Cells • Independent, indivisible, interacting—in standard ways • Scales well • Complexity: Distributed responsibility • Robustness: Independent • Supporting growth: Same mechanism everywhere • Reuse: Provide services, just like in real world

  14. Alan Kay's Dynabook (1972) • Alan Kay sees the Computer as Man's first metamedium • A medium that can represent any other media: Animation, graphics, sound, photography, etc. • Programming is yet another medium • The Dynabook is a (yet mythical) computer for creative metamedia exploration and reading • Handheld, wireless network connection • Writing (typing), drawing and painting, sound recording, music composition and synthesis • End-user programming

  15. Prototype Dynabook(Xerox PARC Learning Research Group)

  16. A Dynabook is for Learning • The Dynabook offers a new way to learn new kinds of things • Dynamic systems (like evolution) • Especially decentralized ones (Resnick, 1992) • Knowledge representation (Papert, 1980) • Programming (Kay & Goldberg, 1977) • But need a system for creative expression • In a time when “windows” were made of glass, and “mice” were undesirable rodents

  17. Smalltalk was the programming language invented for the Dynabook. For the Dynabook, WIMP was invented: overlapping Windows Icons Menus mouse Pointer Smalltalk-72

  18. Challenge • If you interacted with a computer through a terminal (as opposed to punched cards) before Smalltalk-72, what do you think you did to get the computer to do something for you?

  19. A first Object: Logo Turtle • Dr. Seymour Papert at MIT invented the Turtle as a graphical and mathematical object to think with for the children's programming language, Logo • A turtle is an object. • Every turtle understands the same methods. • Every turtle has the same fields or instance variables. • Heading, body color, pen color, X and Y position. • Yet each turtle can have its own values for these fields.

  20. Using Turtles in Python >>> makeWorld()

  21. Adding a Turtle to our World >>> earth = makeWorld () >>> tina = makeTurtle(earth) >>> print tina No name turtle at 320, 240 heading 0.0.

  22. Things turtles can do: Try it! >>> turtleX.penUp () >>> turtleX.moveTo (0,0) >>> turtleX.penDown () >>> turtleX.moveTo (639 ,479) >>> worldX = makeWorld () >>> turtleX = makeTurtle(worldX) >>> turtleX.setVisible(false) #don't draw the turtle >>> turtleX.penUp () # don't draw the path >>> turtleX.moveTo (0 ,240) >>> turtleX.penDown () # draw the path >>> turtleX.setPenWidth (100) # width of pen >>> turtleX.setColor(blue) >>> turtleX.turnRight () >>> turtleX.forward (300) >>> turtleX.penUp () # don't draw the path >>> turtleX.setColor(red) >>> turtleX.moveTo (400 ,0) >>> turtleX.turnRight () >>> turtleX.setPenWidth (160) >>> turtleX.penDown () # draw the path >>> turtleX.forward (400)

  23. Talking to turtles as functions or messages/methods • We can tell a turtle to go forward by calling a function (telling the function to act on the turtle): • Or we can ask Tina to go forward, a certain amount. We are sending a message to Tina, asking her to execute a function that only turtles know: A “method”

  24. Challenge: What do these draw? >>> earth = makeWorld() >>> carol = makeTurtle(earth) >>> for steps in range(4): ... forward(carol,100) ... turn(carol,90) ... >>> for steps in range(5): ... forward(carol,100) ... turn(carol,72) ...

  25. Challenge • How would you draw a triangle?

  26. Sending multiple turtles messages >>> sue = makeTurtle(earth) >>> tina.forward () >>> tina.turnRight () >>> tina.forward () Sue stays put while Tina moves. These are objects on which we execute methods.

  27. Each turtle knows the same things, has the same state • Each turtle knows how to go forward and turn. • Each knows a heading and an X and Y position. • But each turtle has its own X and Y and heading values.

  28. Using multiple turtles at once def chase(): # Set up the four turtles earth = World() al = Turtle(earth) bo = Turtle(earth) cy = Turtle(earth) di = Turtle(earth) al.penUp() al.moveTo(10,10) al.penDown() bo.penUp() bo.moveTo(10,400) bo.penDown() cy.penUp() cy.moveTo(400,10) cy.penDown() di.penUp() di.moveTo(400,400) di.penDown() # Now, chase for 300 steps for i in range(0,300): chaseTurtle(al,cy) chaseTurtle(cy,di) chaseTurtle(di,bo) chaseTurtle(bo,al)

  29. Chasing def chaseTurtle(t1,t2): t1.turnToFace(t2) t1.forward(4)

  30. What four turtles chasing each other looks like

  31. What shape does this draw? • A square with sides of 200 • A set of spikes • A circle • Error – you can’t have 600 turtles.

  32. Dropping pictures from turtles >>> # I chose Barbara.jpg for this >>> p=makePicture(pickAFile()) >>> # Notice that we make the World and Turtle here >>> earth=World() >>> turtle=Turtle(earth) >>> turtle.drop(p)

  33. Spinning and dropping a turtle on a canvas def spinAPicture(apic): canvas = makeEmptyPicture(640,480) ted = Turtle(canvas) for i in range(0,360): ted.drop(apic) ted.forward(10) ted.turn(20) return canvas

  34. Teaching Turtles new Tricks class SmartTurtle(Turtle ): def drawSquare(self ): for i in range (0 ,4): self.turnRight () self.forward () The class Turtle exists. Here, we create a new kind of Turtle, a specialization called SmartTurtle, that knows how to draw squares. drawSquare is a method that SmartTurtle instances understand. All Python methods must accept self as the first parameter—self is the object receiving the message.

  35. Trying our new method >>> earth = World () >>> smarty = SmartTurtle(earth) >>> smarty.drawSquare ()

  36. More than one method class SmartTurtle(Turtle ): def drawSquare(self , width=100 ): for i in range (0 ,4): self.turnRight () self.forward(width) Now SmartTurtle instances understand both how to drawSquare() and drawSquare(someWidth) >>>  mars = World () >>>  tina = SmartTurtle(mars) >>>  tina.drawSquare(30) >>>  tina.drawSquare(150) >>>  tina.drawSquare(100) >>>  # Does the same thing >>>  tina.drawSquare()

  37. Trying the new methods >>> mars = World () >>> tina = SmartTurtle(mars) >>> tina.drawSquare (30) >>> tina.drawSquare (150) >>> tina.drawSquare (100)

  38. Challenge • Write the method drawPolygon which takes a size and number of sides.

  39. Inheritance and Overriding • We can create a version of Turtle that's “confused.” • Turns a random amount. • Goes forward a random amount. • This class is a subclass of Turtle. • That means it inherits everything from Turtle. • It will override how to turn and go forward.

  40. ConfusedTurtle import random class ConfusedTurtle(Turtle): def forward(self,num): Turtle.forward(self,int(num*random.random())) def turn(self,num): Turtle.turn(self,int(num*random.random()))

  41. Works the same, performs different >>> pluto = World() >>> goofy = ConfusedTurtle(pluto) >>> goofy.forward(100) >>> goofy.turn(90)

  42. Combining recursion with turtles • Start from this: def triangle(turtle ,size): for sides in range (3): forward(turtle ,size) turn(turtle ,120)

  43. Recurse before moving def nestedTri(t,size): if size < 10: return for sides in range(3): nestedTri(t,size/2) forward(t,size) turn(t,120)

  44. Recurse in the corners def cornerTri(t,size): if size < 10: return for sides in range(3): forward(t,size) cornerTri(t,size/2) turn(t,120)

  45. Example on Making a Class from Scratch: SlideShow • Let's build a program to show a slide show. • It shows a picture. • Then plays a corresponding sound. • We'll use the introduced-but-never-used blockingPlay() to make the execution wait until the sound is done.

  46. Slideshow def playslideshow(): pic = makePicture(getMediaPath("barbara.jpg")) snd = makeSound(getMediaPath("bassoon-c4.wav")) show(pic) blockingPlay(snd) pic = makePicture(getMediaPath("beach.jpg")) snd = makeSound(getMediaPath("bassoon-e4.wav")) show(pic) blockingPlay(snd) pic = makePicture(getMediaPath("santa.jpg")) snd = makeSound(getMediaPath("bassoon-g4.wav")) show(pic) blockingPlay(snd) pic = makePicture(getMediaPath("jungle2.jpg")) snd = makeSound(getMediaPath("bassoon-c4.wav")) show(pic) blockingPlay(snd)

  47. What's wrong with this? • From Procedural Abstraction: • We have duplicated code. • We should get rid of it. • From Object-Oriented Programming: • We have an object: A slide.

  48. Defining an object • Objects know things. • Data that is internal to the object. • We often call those instance variables. • Objects can do things. • Behavior that is internal to the object. • We call functions that are specific to an object methods. • But you knew that one already. • We access both of these using dot notation • object.variable • object.method()

  49. The Slide Object • What does a slide know? • It has a picture. • It has a sound • What can a slide do? • Show itself. • Show its picture. • (Blocking) Play its sound.

  50. Classes • Objects are instances of classes in many object-oriented languages. • Including Smalltalk, Java, JavaScript, and Python. • A class defines the data and behavior of an object. • A class defines what all instances of that class know and can do.

More Related