Lecture 22: Objects Object- I did not have C++ in mind.

advertisement
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
Download