Lecture 22: Objects I invented the term ObjectOriented, and I can tell you I did not have C++ in mind. — Alan Kay CS200: Computer Science University of Virginia Computer Science David Evans http://www.cs.virginia.edu/evans Menu • A better counter • PS5 Comments – Databases • Programming with Objects 15 March 2004 CS 200 Spring 2004 2 nextx from Lecture 17 global (define x 0) environment (define (nextx) + : #<primitive:+> (set! x (+ x 1)) nextx: x : 24 x) > (nextx) 1 parameters: > (set! x 23) body: (begin (set! x (+ x 1)) x) > (next x) 24 15 March 2004 CS 200 Spring 2004 3 A Better Counter • The place that keeps track of the count would be part of the counter, not part of the global environment • Can we do this? 15 March 2004 CS 200 Spring 2004 4 Recall from Lecture 17: Application 1. Construct a new frame, enclosed in the environment of this procedure 2. Make places in that frame with the names of each parameter 3. Put the values of the parameters in those places 4. Evaluate the body in the new environment 15 March 2004 CS 200 Spring 2004 5 A Better Counter (define (make-counter) ((lambda (count) (lambda () (set! count (+ 1 count)) count)) 0)) 15 March 2004 CS 200 Spring 2004 6 (define (make-counter) ((lambda (count) (lambda () (set! count (+ 1 count)) count)) 0)) > (define mycount (make-counter)) > (mycount) 1 > (mycount) 2 > (mycount) 3 15 March 2004 global environment count : + : #<primitive:+> make-counter: mycount: 3 1 0 2 parameters: body: ((lambda … parameters: body: (lambda () (set! count …) CS 200 Spring 2004 7 An Even Better Counter (define (make-ocounter) ((lambda (count) (lambda (message) (if (eq? message 'reset) (set! count 0) (if (eq? message 'next) (set! count (+ 1 count)) (if (eq? message 'how-many) count))))) 0)) 15 March 2004 CS 200 Spring 2004 8 Using Counter > > > > > 3 > > 0 (define bcounter (make-ocounter)) (bcounter 'next) (bcounter 'next) (bcounter 'next) (bcounter 'how-many) (bcounter 'reset) (bcounter 'how-many) 15 March 2004 CS 200 Spring 2004 9 Objects • When we package state and procedures together we have an object • Programming with objects is object-oriented programming 15 March 2004 CS 200 Spring 2004 10 PS5 How are commercial databases different from what you implemented for PS5? UVa’s Integrated Systems Project to convert all University information systems to use an Oracle database was originally budgeted for $58.2 Million (starting in 1999). Actual cost is likely to be $100 Million. http://www.virginia.edu/isp/ 15 March 2004 CS 200 Spring 2004 11 Real Databases • Atomic Transactions: a transaction may involve many modifications to database tables, but the changes should only happen if the whole transaction happens (e.g., don’t charge the credit card unless the order is sent to the shipping dept) • Security: limit read/write access to tables, entries and fields • Storage: need to efficiently store data on disk, provide backup mechanisms • Scale: to support really big data tables, real databases do lots of clever things 15 March 2004 CS 200 Spring 2004 12 How big are big databases? • Microsoft TerraServer – Claimed biggest in 1998 – Aerial photos of entire US (1 meter resolution) 15 March 2004 CS 200 Spring 2004 13 Rotunda You are here 15 March 2004 Amphitheater CS 200 Spring 2004 14 You are here AFC? 15 March 2004 CS 200 Spring 2004 Picture from 2 Apr 199415 Big Databases • Microsoft TerraServer – 3.3 Terabytes (claimed biggest in 1998) – 1 Terabyte = 240 Bytes ~ 1 Trillion Bytes • Wal-Mart – 285 Terabytes (2003) • Stanford Linear Accelerator (BaBar) – 500 Terabytes (30 KB per particle collision) 15 March 2004 CS 200 Spring 2004 16 How much work? • table-select is (n) where n is the number of entries in the table – Would your table-select work for Wal-Mart? – If 1M entry table takes 1s, how long would it take Wal-Mart to select from 285TB ~ 2 Trillion Entries? 2 000 000s ~ 23 days How do expensive databases perform so much faster? 15 March 2004 CS 200 Spring 2004 17 Object-Oriented Programming 15 March 2004 CS 200 Spring 2004 18 Simula • Considered the first “object-oriented” programming language • Language designed for simulation by Kristen Nygaard and Ole-Johan Dahl (Norway, 1962) • Had special syntax for defining classes that packages state and procedures together 15 March 2004 CS 200 Spring 2004 19 Counter in Simula class counter; integer count; begin procedure reset(); count := 0; end; procedure next(); count := count + 1; end; integer procedure how-many(); how-many := count; end; end 15 March 2004 CS 200 Spring 2004 20 XEROX Palo Alto Research Center (PARC) 1970s: • Bitmapped display • Graphical User Interface – Steve Jobs paid $1M to visit and PARC, and returned to make Apple Lisa/Mac) • • • • Ethernet First personal computer (Alto) PostScript Printers Object-Oriented Programming 15 March 2004 CS 200 Spring 2004 21 Dynabook, 1972 (Just a model) 15 March 2004 The best way to predict the future is to invent it. Alan Kay CS 200 Spring 2004 22 Dynabook 1972 • Tablet computer • Intended as tool for learning • Kay wanted children to be able to program it also • Hallway argument, Kay claims you could define “the most powerful language in the world in a page of code” • Proof: Smalltalk – Scheme is as powerful, but takes two pages 15 March 2004 CS 200 Spring 2004 23 BYTE Magazine, August 1981 15 March 2004 CS 200 Spring 2004 24 Smalltalk • Everything is an object • Objects communicate by sending and receiving messages • Objects have their own state (which may contain other objects) • How do you do 3 + 4? send the object 3 the message “+ 4” 15 March 2004 CS 200 Spring 2004 25 Counter in Smalltalk class name counter instance variable names count new count <- 0 next count <- count + 1 how-many ^ count 15 March 2004 CS 200 Spring 2004 26 Counter in Scheme (define (make-ocounter) ((lambda (count) (lambda (message) (if (eq? message 'reset) (set! count 0) (if (eq? message 'next) (set! count (+ 1 count)) (if (eq? message 'how-many) count))))) 0)) 15 March 2004 CS 200 Spring 2004 27 Counter in Scheme using let (define (make-ocounter) (let ((count 0)) (lambda (message) (if (eq? message 'reset) (set! count 0) (if (eq? message 'next) (set! count (+ 1 count)) (if (eq? message 'how-many) count)))))) 15 March 2004 CS 200 Spring 2004 28 Defining ask (ask Object Method) > (ask bcounter 'how-many) 0 > (ask bcounter 'next) > (ask bcounter 'how-many) 1 (define (ask object message) (object message)) 15 March 2004 CS 200 Spring 2004 29 Who was the first object-oriented programmer? 15 March 2004 CS 200 Spring 2004 30 By the word operation, we mean any process which alters the mutual relation of two or more things, be this relation of what kind it may. This is the most general definition, and would include all subjects in the universe. Again, it might act upon other things besides number, were objects found whose mutual fundamental relations could be expressed by those of the abstract science of operations, and which should be also susceptible of adaptations to the action of the operating notation and mechanism of the engine... Supposing, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition were susceptible of such expression and adaptations, the engine might compose elaborate and scientific pieces of music of any degree of complexity or extent. Ada, Countess of Lovelace, around 1830 15 March 2004 CS 200 Spring 2004 31 Charge • PS6: – Programming with Objects • Monday: Subtyping 15 March 2004 CS 200 Spring 2004 32