06 picture world intro web - Wellesley...

20
1 CS111 Computer Programming Department of Computer Science Wellesley College PictureWorld A world of fruitful methods Friday, September 21, 2007 PictureWorld 6-2 Buggles and BuggleWorld Primitives Simple values: integers, booleans Black-box objects: buggles, points, colors Black-box methods: forward(), left() Means of Combination Arithmetic on numbers: 1 + 2 Instance variable reference: p.x Class variable reference: Color.red Void method invocation: becky.forward() Fruitful method invocation: becky.getColor() Constructor method invocation: new Location(1,2) Sequences of statements: bob.forward(3); bob.left(); Means of abstraction Creating our own methods: buildDogHouse(), buildStair() Creating our own classes: PuppyBuggle, StairBuggle

Transcript of 06 picture world intro web - Wellesley...

Page 1: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

1

CS111 Computer Programming

Department of Computer ScienceWellesley College

PictureWorldA world of fruitful methods

Friday, September 21, 2007

PictureWorld 6-2

Buggles and BuggleWorldPrimitives

Simple values: integers, booleansBlack-box objects: buggles, points, colorsBlack-box methods: forward(), left()

Means of CombinationArithmetic on numbers: 1 + 2Instance variable reference: p.xClass variable reference: Color.redVoid method invocation: becky.forward()Fruitful method invocation: becky.getColor()Constructor method invocation: new Location(1,2)Sequences of statements: bob.forward(3); bob.left();

Means of abstractionCreating our own methods: buildDogHouse(), buildStair()Creating our own classes: PuppyBuggle, StairBuggle

Page 2: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

2

PictureWorld 6-3

PictureWorld

o A world for studying (1) fruitful methodsand (2) the notion that complexstructures can be built from simpleprimitives using powerful means ofcombination and means of abstraction.

o Each picture exists within the unitsquare, and understands one method: howto stretch itself to fill a given rectangleon the screen.

o PictureWorld’s GUI is much simpler thanBuggleWorld’s. (0.0,0.0)

(1.0,1.0)

x

y

PictureWorld 6-4

Some “Primitive” Pictures

bp(blue patch) mark

gw(green wedge)

leavesrp(red patch)

empty

Page 3: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

3

PictureWorld 6-5

Adding Pictures to a PictureWorldpublic class SimplePictureWorld extends PictureWorld {

public void initializePictureChoices() {

// Create new “primitive” pictures // (they’re not really primitive, as we’ll see later) Picture bp = this.patch(Color.blue); // blue patch Picture rp = this.patch(Color.red); // red patch Picture mark = this.checkmark(Color.red, Color.blue); // red/blue check Picture gw = this.wedge(Color.green); // green wedge Picture leaves = this.twoLeaves(Color.green); // green leaves

// Add pictures to the menu this.addPictureChoice(“blue patch”, bp); this.addPictureChoice(“red patch”, rp); this.addPictureChoice(“mark”, mark); this.addPictureChoice(“green wedge”, gw); this.addPictureChoice(“leaves”, leaves);

// Notes: // 1. “this.” is optional; can omit it! // 2. Can always use Picture expression in place of name. // For example: // addPictureChoice(“mark”, checkMark(Color.red, Color.blue)) } ...}

PictureWorld 6-6

PictureWorld contract// Automatically invoked when a PictureWorld window is createdpublic void initializePictureChoices();

// Adds name to the menu and associates it with picpublic void addPictureChoice(String name, Picture pic);

public Picture empty(); // Returns an empty picture

But wait! There are more …

Page 4: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

4

PictureWorld 6-7

Rotating Picturespublic Picture clockwise90(Picture p) // Returns p rotated 90° clockwisepublic Picture clockwise180(Picture p) // Returns p rotated 180° clockwisepublic Picture clockwise270(Picture p) // Returns p rotated 270° clockwise

gw clockwise90(gw)

clockwise180(gw) clockwise270(gw)

PictureWorld 6-8

Flipping Picturespublic Picture flipHorizontally(Picture p) // Returns p flipped across vert axispublic Picture flipVertically(Picture p) // Returns p flipped across horiz axispublic Picture flipDiagonally(Picture p) // Returns p flipped acros diag axis

gw

flipVertically(gw)

flipHorizontally(gw)

flipDiagonally(gw)

Page 5: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

5

PictureWorld 6-9

Putting one picture beside another

// Returns picture resulting from putting p1 beside p2public Picture beside(Picture p1, Picture p2)

// Returns picture resulting from putting p1 beside p2,// where p1 uses the specified fraction of the rectangle.public Picture beside(Picture p1, Picture p2, double fraction)

beside(gw,rp) beside(gw,rp,0.25) beside(gw,rp,0.75)

PictureWorld 6-10

Putting one picture above another

// Returns picture resulting from putting p1 above p2public Picture above(Picture p1, Picture p2)

// Returns picture resulting from putting p1 above p2,// where p1 uses the specified fraction of rectangle.public Picture above(Picture p1, Picture p2, double fraction)

above(gw,rp) above(gw,rp,0.25) above(gw,rp,0.75)

Page 6: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

6

PictureWorld 6-11

Putting one picture over another// Returns picture resulting from overlaying p1 on top of p2public Picture overlay(Picture p1, Picture p2)

overlay(mark,leaves) overlay(leaves,mark)

PictureWorld 6-12

Combining Four Picturespublic Picture fourPics(Picture p1, Picture p2, Picture p3, Picture p4) { return above(beside(p1,p2), beside(p3,p4));}

public Picture fourSame(Picture p) { return fourPics(p, p, p, p);}

fourPics(bp,gw,mark,rp) fourSame(leaves)

Page 7: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

7

PictureWorld 6-13

PictureWorld JEM Example: fourSame(leaves)

return fourPics( p , p , p , p );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

To save space, we omit “this.” from all PictureWorld method invocations.

PictureWorld 6-14

Begin Evaluating the fourPics() Expression

return fourPics( p , p , p , p );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

Page 8: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

8

PictureWorld 6-15

Evaluate the First Argument of fourPics()

return fourPics( p , p , p , p );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PictureWorld 6-16

Evaluate the Second Argument of fourPics()

return fourPics( , p , p , p );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1

Page 9: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

9

PictureWorld 6-17

Evaluate the Third Argument of fourPics()

return fourPics( , , p , p );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PictureWorld 6-18

Evaluate the Fourth Argument of fourPics()

return fourPics( , , , p );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1

Page 10: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

10

PictureWorld 6-19

Invoke the fourPics() Method on Its Arguments

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

PictureWorld 6-20

Create an Execution Frame for the fourPics() Invocation

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( beside( p1 , p2 ),

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Due to lack of space, we don’t show the this variable in the new frame

Page 11: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

11

PictureWorld 6-21

Begin Evaluating the above() Expression

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( beside( p1 , p2 ),

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

PictureWorld 6-22

Begin Evaluating the first argument of above()

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( beside( p1 , p2 ),

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Page 12: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

12

PictureWorld 6-23

Evaluate the first argument of the first beside()

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( beside( p1 , p2 ),

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

PictureWorld 6-24

Evaluate the second argument of the first beside()

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( beside( , p2 ),

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

PIC1

Page 13: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

13

PictureWorld 6-25

Invoke the First beside() method …

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( beside( , ),

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

PIC1 PIC1

PictureWorld 6-26

… Which Creates and Returns a New Picture

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( ,

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2

PIC2

Page 14: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

14

PictureWorld 6-27

Begin Evaluating the Second Argument of above()

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( ,

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2

PIC2

PictureWorld 6-28

Evaluate the First Argument of the Second beside()

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( ,

beside( p3 , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2

PIC2

Page 15: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

15

PictureWorld 6-29

Evaluate the Second Argument of the Second beside()

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( ,

beside( , p4 ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2

PIC2

PIC1

PictureWorld 6-30

Invoke the Second beside() Method …

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( ,

beside( , ) );

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2

PIC2

PIC1 PIC1

Page 16: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

16

PictureWorld 6-31

… Which Creates and Returns Another New Picture

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( ,

);

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2

PIC2

Picture PIC3

PIC3

PictureWorld 6-32

Now Invoke above() …

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return above( ,

);

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2

PIC2

Picture PIC3

PIC3

Page 17: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

17

PictureWorld 6-33

… Which Creates and Returns Yet Another Picture

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return ;

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2 Picture PIC3 Picture PIC4

PIC4

PictureWorld 6-34

Return from the fourPics() Execution Frame …

return fourPics( , , , );

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

PIC1 PIC1

PIC1 PIC1

return ;

.fourPics( , , , )SPW PIC1 PIC1 PIC1 PIC1

p1 PIC1 p2 PIC1 p3 PIC1 p4 PIC1

Picture PIC2 Picture PIC3 Picture PIC4

PIC4

Page 18: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

18

PictureWorld 6-35

… to the Place where fourPics() was Invoked

return ;

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

Picture PIC2 Picture PIC3 Picture PIC4

PIC4

PictureWorld 6-36

Finally, Return from the fourSame() Invocation Frame …

return ;

this

.fourSame( )

p

PictureSPW

SimplePictureWorld

Object Land

Execution Land

SPW

SPW

PIC1

PIC1

PIC1

Picture PIC2 Picture PIC3 Picture PIC4

PIC4

Page 19: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

19

PictureWorld 6-37

… To the Place Where fourSame() was Invoked

PictureSPW

SimplePictureWorld

Object Land

Execution Land

PIC1 Picture PIC2 Picture PIC3 Picture PIC4

PIC4

This object reference replaces the invocationof fourSame() that created the frame

PictureWorld 6-38

Repeated Tilingpublic Picture tiling (Picture p) { return fourSame(fourSame(fourSame(fourSame(p))));}

tiling(mark) tiling(gw)

Page 20: 06 picture world intro web - Wellesley Collegecs.wellesley.edu/~cs111/fall07/notes/lectures/06_picture_world_intro... · to stretch itself to fill a given rectangle on the screen.

20

PictureWorld 6-39

Rotation Combinatorspublic Picture rotations (Picture p) { return fourPics(clockwise270(p), p, clockwise180(p), clockwise90(p));}

public Picture rotations2 (Picture p) { return fourPics(p, clockwise90(p), clockwise180(p), clockwise270(p));}

rotations(gw) rotations2(gw)

PictureWorld 6-40

A Simple Recipe for Complexitypublic Picture wallpaper (Picture p) { return rotations(rotations(rotations(rotations(p)));}

public Picture design (Picture p) { return rotations2(rotations2(rotations2(rotations2(p)));}

wallpaper(gw) design(gw)