robo david davenport computer eng. dept., bilkent university ankara - turkey. email:...
Post on 20-Dec-2015
219 views
TRANSCRIPT
Robo
David Davenport
Computer Eng. Dept.,Bilkent UniversityAnkara - Turkey.
email: [email protected]
...a lightning introduction to the engineering of software
Robo Robo is a little robot with a pen
you command him to move around he leaves a trail with the pen as he moves
Robo’s world is infinite flat white surface
Your objective: to have Robo produce
given pattern/picture
Robo Commands
f(x) - move forward x units r(x) - turn right x degrees l(x) - turn left x degrees p - pick up/put down the pen
(switch drawing mode on/off)
Initial condition middle of surface facing north in drawing mode
One command at a time please! (i.e. only one per line)
Sorry, but I can’t do any
maths or even fractions!
Robo - examples Have Robo draw
a straight line 100 units long a horizontal line 150 units long a 100 by 200 unit rectangle an equilateral triangle with 150 units sides a dashed line, 50 unit spaces, 100 unit dashes
Points to note:• Robo only understands f,r,l & p (not any natural language)• Syntax error when Robo doesn’t understand command• A program is a sequence of commands (instructions)• Multiple correct solutions
Simple isn’t it?
Robo - problem What is this?
No one can IMMEDIATELY say what it is!How can we find out?
TRACE itput yourself in position of
Robo and follow the commands
r(180)f(50)l(90)f(100)l(90)f(100)l(90)
f(100)l(100)f(50)r(90)f(150)l(90)f(70)
l(120)f(140)r(120)f(140)r(120)f(70)
Robo - solution After tracing...
program has Logical Errors & needs to be corrected...
DEBUG the program
BUGS
but itshould
look like this
It looks like this!
Robo - TRACE & DEBUG Debug it...
r(180)f(50)l(90)f(100)l(90)f(100)l(90)
f(100)l(100)f(50)r(90)f(150)l(90)f(70)
l(120)f(140)r(120)f(140)r(120)f(70)
& check by tracing again!
l(90) r(120)
l(90)To correct... add, remove & change commands
Homework (Exercises)! Try one of these yourself
Star Computer House Robot Tree Cube
Important your program should be correct
i.e. it should be right-first-time Robo is asked to do (run/execute) it
Design not experiment.
Reflections
Your observations…?
There must be an easier way to
earn a living!
How can we make our lives as programmers easier?
Simple to followDifficult to understandLong & therefore complex to doDifficult to debug and/or changeOften use same/similar sets of commands
Ok, now Robo programmers earn living by writing them but only if right-first-time!
& jobs require HUGE pictures
The easy life... Ideas to make life easier
comments blank space methods parameters repetition
Top down structured design
Root cause of difficulties Lack of mapping btw problem & solution
l(90)f(50)l(90)f(100)l(90)f(100)l(90)f(100)l(90)f(50)r(90)f(150)l(90)f(70)r(120)f(140)r(120)f(140)r(120)f(70)
?see some structure
see no structure
Program to draw a Wishing Well
finally, draw roof
then draw pole
First draw base
So add notes
Problem: notes would cause syntax errors!Solution: modify Robo to ignore such notes.
Comments Are natural language notes
written in the program Ignored by Robo
(i.e. no syntax error)
// any_natural_language_textsyntax:
// Wishing Well// Author: David// Date: Sept. 2002// draw basel(90)f(50)l(90)f(100)l(90)f(100)l(90)f(100)l(90)f(50)r(90)// draw polef(150)l(90)// draw rooff(70)r(120)f(140)r(120)f(140)r(120)f(70)
Use comments… to say what each section does, & to tell about the program as a whole
Every program should have a Header,a block of comments at the top that
detail what, where, when & by whom.
The Inheritance of the Labour Movement
The British Labour Movement draws its inspiration from a history that goes back over many centuries. This movement arose directly from the twin struggles by the British people to control Parliament through the popular vote and to gain the right to organise free trade unions.
The battle against the Combination Acts and similar legislation which made trade unionism illegal went hand in hand with the campaigns for working men and women to be represented in Parliament. But even before these historic struggles, which first saw the light of day in the industrial revolution, the origins of socialism can be traced back as far as the time of Christ himself and even to the Old Testament.
Tony Benn, 1979.
Aids to Reading Can you read this comfortably?
theinheritanceofthelabourmovementthebritishlabourmovementdrawsitsinspirationfromahistorythatgoesbackovermanycenturiesthismovementarosedirectlyfromthetwinstrugglesbythebritishpeopletocontrolparliamentthroughthepopularvoteandtogaintherighttoorganisefreetradeunionsthebattleagainstthecombinationactsandsimilarlegislationwhichmadetradeunionismillegalwenthandinhandwiththecampaignsforworkingmenandwomentoberepresentedinparliamentbutevenbeforethesehistoricstruggleswhichfirstsawthelightofdayintheindustrialrevolutiontheoriginsofsocialismcanbetracedbackasfarasthetimeofchristhimselfandeventotheoldtestamenttonybenn1979
Blank Space Help visualisation & reading
Blank lines, indentation & spaces
// Wishing Well// Author: David// Date: Sept. 2002
// draw basel(90)f(50)l(90)f(100)l(90)f(100)l(90)f(100)l(90)f(50)r(90)
// draw polef(150)l(90)
// draw rooff(70)r(120)f(140)r(120)f(140)r(120)f(70)
First see 3 partsthen comments
then code
Combine Comments & Blank space Answers without tracing! Aid debugging & maintenance
What does this code do?
// Wishing Well// Author: David// Date: Sept. 2002
// draw basel(90)f(50) l(90) // left f(100) l(90) // bottom f(100) l(90) // right f(100)l(90)f(50)r(90)
// draw polef(150)l(90)
// draw rooff( 70)r( 120)f( 140)r( 120)f( 140)r( 120)f( 70)
Methods Are named blocks of commands Short, so easier to understand Facilitates reuse, testing & debugging
d method_namesyntax:
Defining method:
// Draw …// Author: …// Date: …:// draw …:
method_name
Using method:
Example:
// Draw pole
f(150)l(90)
pole
d poled poled pole
Wishing Well using methods
// draw roof of wwell// Author: David// Date: Sept. 2002
f(70)l(120)f(140)r(120)f(140)r(120)f(70)
roof// draw base of wwell// Author: David// Date: Sept. 2002
l(90)f(50)l(90)f(100)l(90)f(100)l(90)f(100)l(100)f(50)r(90)
base// Wishing Well// Author: David// Date: Sept. 2002
// draw based base
// draw polef(150)l(90)
// draw roofd roof
wwell
& again…? Changed method names What does it do now?
(remember comments are ignored)
// draw roof of wwell// Author: David// Date: Sept. 2002
f(70)r(120)f(140)r(120)f(140)r(120)f(70)
a123// draw base of wwell// Author: David// Date: Sept. 2002
l(90)f(50)l(90)f(100)l(90)f(100)l(90)f(100)l(90)f(50)r(90)
xyz// Wishing Well// Author: David// Date: Sept. 2002
// draw based xyz
// draw polef(150)l(90)
// draw roofd a123
wwell
…it looks like a
wishing well, but…
MORAL – use meaningful names!
d xyzd poled a123
wwell
// draw pole of wwell// Author: David// Date: Sept. 2002
f(150)l(90)
pole
House
250 x 250 x 250
50 x 50
250 x 250
50 x 100
House
f(50)r(90)f(50)r(90)f(50)r(90)f(50)r(90)
windowf(250)r(90)f(250)r(90)f(250)r(90)f(250)r(90)
wallsf(150)r(90)f(50)r(90)f(150)r(90)f(50)r(90)
door housebodyd wallsr(90)f(100)l(90)d doorpf(125)l(90)f(75)r(90)pd windowpr(90)f(150)l(90)pd window
housed housebodypf(125)l(90)f(175)r(120)pd roof
roof
f(250)r(120)f(250)r(120)f(250)
Generalize methods Looking at specific method instances
notice repetition of similar code so, abstract/generalize through parameters
f(50)r(90)f(50)r(90)f(50)r(90)f(50)r(90)
windowf(250)r(90)f(250)r(90)f(250)r(90)f(250)r(90)
wallsf(150)r(90)f(50)r(90)f(150)r(90)f(50)r(90)
doorf( height)r(90)f( width)r(90)f( height)r(90)f( width)r(90)
rect( width, height)
These are known as formal
parameters They must be replaced with actual values
when the Robo does the method
Can you write equtri?
Using general methods
Example, in place of draw door: d door Need to say “draw rectangle with width=50 & height=150” Use notation d rect( 50, 150)
f(150)r(90)f(50)r(90)f(150)r(90)f(50)r(90)
doorf( height)r(90)f( width)r(90)f( height)r(90)f( width)r(90)
rect( width, height)
Actual parameter values
f( 150)r(90)f( 50)r(90)f( 150)r(90)f( 50)r(90)
rect( 50, 150)
Replace formal
parameters with actual parameter
values
Rewriting the house program Using general rectangle method
in place of draw door: d door• say “draw rectangle with width=50 & height=150”
i.e. d rect( 50, 150) in place of draw walls: d walls
• say “draw rectangle with height=250 & width=250”i.e. d rect( 250, 250)
d roofd wallsd leftwindowd rightwindowd door
housed roofd rect( 250, 250)d rect( 50, 50)d rect( 50, 50)d rect( 50, 150)
house
Now need comments!
Restricted parameter names!
Robo allows only names: a, b, c, d translate rect method for Robo…
f( height)r(90)f( width)r(90)f( height)r(90)f( width)r(90)
rect( width, height)f( b)r(90)f( a)r(90)f( b)r(90)f( a)r(90)
rect( a, b, c, d )
Robo methods always have these
four formal parameters, even if they are not used.
For this reason, they are not explicitly
written each time.
Now need to include comments to say what a, b, c & d represent…
// Params: a – width, b - height
Methods are independent!
Methods can call other methods only connection is parameter list matched one-by-one in order, not by name!
d moveturn( b, 90)d moveturn( a, 90)d moveturn( b, 90)d moveturn( a, 90)
rect( a, b)
d rect( a, b)r( c)
rectturn( a, b, c)
f( a)r( b)
moveturn( a, b)
Must understand: a’s, b’s, etc. are different
in each method.
Repetition Automatically repeat method
x 2 halfrect( a, b)rect( a, b)
x c rectturn( a, b, d) pretty( a, b, c, d)
d moveturn( b, 90)d moveturn( a, 90)
halfrect( a, b)
d rect( a, b)r( c)
rectturn( a, b, c)
f( a)r( b)
moveturn( a, b)
x number_of_times method_name ( parameter_list )syntax:
x 10 rectturn( a, b, 36)pretty( a, b)
Try doing square & rewriting equtri
Repetition -- HECTOGONAL
EQUTRI
// equilateral // trianglef(a)r(120)f(a)r(120)f(a)
d equtri(a)r(180)
r(30)x 6 sequtri(a)
r(30)x 3 equtri(a)l(60)x 3 equtri(a)
sequtri
hecto1
hecto2
Repetition -- CİRCLE
r(a)f(b)
circlepart
x 360 circlepart(1,1)
circle
Summary You should have learnt about
& understand the rationale for… Comments White space Meaningfully named methods Method parameters Repetition
Coming next… Top-down structured design!