Espresso! A small cup of Java •Erin Adelman - [email protected] •Aaron Bauman - [email protected] •Philip Coakley - [email protected] •Joya Zuber - [email protected] CS4115 Programming Languages and Translators Professor.
Download
Report
Transcript Espresso! A small cup of Java •Erin Adelman - [email protected] •Aaron Bauman - [email protected] •Philip Coakley - [email protected] •Joya Zuber - [email protected] CS4115 Programming Languages and Translators Professor.
Espresso!
A small cup of Java
•Erin Adelman
- [email protected]
•Aaron Bauman - [email protected]
•Philip Coakley - [email protected]
•Joya Zuber - [email protected]
CS4115 Programming Languages and Translators
Professor Stephen Edwards, December 2003
Espresso! is:
A simple and efficient way for programmers of all
levels to create java applets.
An educational language to familiarize novice
programmers with java syntax.
Similar to Tcl and Java in syntax and semantics
11/6/2015
Espresso! Programming Language
2
Key Features
Simple
11/6/2015
Espresso! Programming Language
3
Key Features
Simple
Educational
11/6/2015
Espresso! Programming Language
4
Key Features
Simple
Educational
Object-Oriented
11/6/2015
Espresso! Programming Language
5
Key Features
Simple
Educational
Object-Oriented
Portable
11/6/2015
Espresso! Programming Language
6
Key Features
Simple
Educational
Object-Oriented
Portable
Efficient
11/6/2015
Espresso! Programming Language
7
Key Features
Simple
Educational
Object-Oriented
Portable
Efficient
Scalable
11/6/2015
Espresso! Programming Language
8
A Taste of Espresso!
Hello, World!
card HelloWorld {
print(“Hello World!”);
}
11/6/2015
Espresso! Programming Language
9
A Taste of Espresso!
Hello, World!
11/6/2015
Espresso! Programming Language
10
A Taste of Espresso!
Data Types and Objects
number
– Java double
string
– Java String
number array
– Java double[]
string array
– Java String[]
object
–
–
–
–
–
–
–
TextBox
Button
CheckBox
List
Image
Oval
Rectangle
object array
11/6/2015
Espresso! Programming Language
11
A Taste of Espresso!
Program Structure
card card_name {
statement;
statement;
…
statement;
}
11/6/2015
Espresso! Programming Language
12
A Taste of Espresso!
Type Declarations
number phil = 5;
:
double phil = 5;
string joya = “Joya”;
:
String joya = “Joya”;
TextBox myTextBox;
:
11/6/2015
EspressoTextBoxRT myTextBox = new
EspressoTextBoxRT();
Espresso! Programming Language
13
A Taste of Espresso!
Array Declarations
number[3] aaron = 5.4;
:
11/6/2015
double[] aaron = new double[3];
for( int i=0; i<3; i++ )
aaron[i] = 5.4;
Espresso! Programming Language
14
A Taste of Espresso!
Assignments
phil = phil + 5;
joya = joya + “ is cool”;
aaron[2] = 5;
erin[0] = “Sneak”;
myButton.setWidth(phil);
11/6/2015
Espresso! Programming Language
15
A Taste of Espresso!
Sample Program
Espresso! program (21 lines)
card HelloWorld {
);
Image baby;
baby.setSource(
"http://www.columbia.edu/~adb54/baby.jpg"
Oval myOval;
number cx = 150;
number cy = 90;
number cwidth = 100;
number cheight = 50;
myOval.setX(cx);
myOval.setY(cy);
myOval.setWidth(cwidth);
myOval.setHeight(cheight);
myOval.setColor(red);
Rectangle myRectangle;
myRectangle.setX(cx + 7);
myRectangle.setY(cy + 30);
myRectangle.setWidth(20);
myRectangle.setHeight(20);
print("Hello, World!", cx+10, cy+25);
}
11/6/2015
Java program (106 lines)
import
import
import
import
import
java.awt.*;
java.awt.event.*;
java.applet.*;
java.net.*;
java.util.*;
public class HelloWorld extends Applet implements
Runnable
{
Image img;
Graphics g2 = null;
Image I2;
int sx;
int sy;
…
…
public synchronized void paint(Graphics g) {
g = getGraphics();
I2 = createImage(getWidth(), getHeight());
Graphics temp = I2.getGraphics();
temp.setColor(getBackground());
temp.fillRect(0, 0, getWidth(),
getHeight());
temp.drawImage(img, 0, 0, this);
temp.setColor(Color.white);
…
…
Espresso! Programming Language
16
A Taste of Espresso!
Sample Program
11/6/2015
Espresso! Programming Language
17
A Taste of Espresso!
Development
Create and analyze sample applets with desired
Espresso! functionality.
Java applet control flow and event handling are
confusing.
How can we abstract this applet architecture from
the user?
A robust back end!
11/6/2015
Espresso! Programming Language
18
11/6/2015
Espresso! Programming Language
19
A Taste of Espresso!
State
The walker and Code
Generation class work
together to maintain 5
states:
–
–
–
–
–
Declarations
Initializations
Declaring
Initializing
Executing
Drawing
Action Listening
Execute
Draw
Each state represents a
section in the generated
applet file.
11/6/2015
public class myApplet extends applet {
Actions
}
Espresso! Programming Language
20
A Taste of Espresso!
State
card HelloWorld {
public class myApplet extends applet {
Image baby;
baby.setSource(
"http://www.columbia.edu/~adb54/baby.jpg");
Oval myOval;
number cx = 150;
number cy = 90;
number cwidth = 100;
number cheight = 50;
myOval.setX(cx);
myOval.setY(cy);
myOval.setWidth(cwidth);
myOval.setHeight(cheight);
myOval.setColor(red);
Rectangle myRectangle;
myRectangle.setX(cx + 7);
myRectangle.setY(cy + 30);
myRectangle.setWidth(20);
myRectangle.setHeight(20);
print("Hello, World!", cx+10, cy+25);
Declarations
Initializations
}
Execute
Draw
Actions
}
11/6/2015
Espresso! Programming Language
21
A Taste of Espresso!
Scope
Think Globally
Espresso! has a single scope
Variables can be declared at
any time in Espresso!, but will
all be initialized globally in the
generated Java file.
11/6/2015
Espresso! Programming Language
22
A Taste of Espresso!
Runtime Library
The Runtime Library includes a suite of
wrapper classes that build AWT constructs.
RTL definitions are loaded into a type table
that is used to verify library semantics
The library is fully expandable to support
new user defined objects and functions.
11/6/2015
Espresso! Programming Language
23
A Taste of Espresso!
Runtime Library Definition
Button::EspressoButtonRT(this){
void setText( String )
String getText( void )
void action ( void )
}
11/6/2015
Espresso! Programming Language
24
A Taste of Espresso!
Testing
Build language elements one by one,
testing as we go.
Have others outside the team write
Espresso programs.
– Espresso! is so simple even UBW majors
and monkeys can use it!
11/6/2015
Espresso! Programming Language
25
Lessons Learned
Start early!
Modularity is important for simplicity and
effective testing.
It is difficult to accommodate four busy
schedules.
Espresso! requires a lot of caffeine.
11/6/2015
Espresso! Programming Language
26
Future Developments
Expand the Runtime Library to include
more object types and methods.
Allow the Espresso! programmer some
control over the Applet Layout Manager
Add keywords to dictate the design of the
generated parent website
11/6/2015
Espresso! Programming Language
27