270 likes | 286 Views
"Espresso! is an educational and efficient programming language for creating Java applets. Learn Java syntax easily with Espresso! and build scalable, portable apps. Explore data types, program structure, and object-oriented concepts in Espresso!. The language features simple, object-oriented, and efficient programming styles. Discover sample programs and understand the stateful architecture of Espresso!. Scope and runtime library details provided for easy learning."
E N D
Espresso!A small cup of Java Erin Adelman - eca41@columbia.edu Aaron Bauman - abd54@columbia.edu Philip Coakley - pwc35@columbia.edu Joya Zuber - jaz49@columbia.edu 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 Espresso! Programming Language
Key Features • Simple Espresso! Programming Language
Key Features • Simple • Educational Espresso! Programming Language
Key Features • Simple • Educational • Object-Oriented Espresso! Programming Language
Key Features • Simple • Educational • Object-Oriented • Portable Espresso! Programming Language
Key Features • Simple • Educational • Object-Oriented • Portable • Efficient Espresso! Programming Language
Key Features • Simple • Educational • Object-Oriented • Portable • Efficient • Scalable Espresso! Programming Language
card HelloWorld { print(“Hello World!”); } A Taste of Espresso!Hello, World! Espresso! Programming Language
A Taste of Espresso!Hello, World! Espresso! Programming Language
number Java double string Java String number array Javadouble[] string array Java String[] object array object TextBox Button CheckBox List Image Oval Rectangle A Taste of Espresso!Data Types and Objects Espresso! Programming Language
A Taste of Espresso!Program Structure card card_name { statement; statement; … statement; } Espresso! Programming Language
A Taste of Espresso!Type Declarations number phil = 5; : double phil = 5; string joya = “Joya”; : String joya = “Joya”; TextBox myTextBox; : EspressoTextBoxRT myTextBox = new EspressoTextBoxRT(); Espresso! Programming Language
A Taste of Espresso!Array Declarations number[3] aaron = 5.4; : double[] aaron = new double[3]; for( int i=0; i<3; i++ ) aaron[i] = 5.4; Espresso! Programming Language
A Taste of Espresso!Assignments phil = phil + 5; joya = joya + “ is cool”; aaron[2] = 5; erin[0] = “Sneak”; myButton.setWidth(phil); Espresso! Programming Language
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); } Java program (106 lines) import java.awt.*; import java.awt.event.*; import java.applet.*; import java.net.*; import 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); … … A Taste of Espresso!Sample Program Espresso! Programming Language
A Taste of Espresso!Sample Program Espresso! Programming Language
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! Espresso! Programming Language
The walker and Code Generation class work together to maintain 5 states: Declaring Initializing Executing Drawing Action Listening Each state represents a section in the generated applet file. A Taste of Espresso!State public class myApplet extends applet { Declarations Initializations Execute Draw Actions } Espresso! Programming Language
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); } A Taste of Espresso!State public class myApplet extends applet { Declarations Initializations Execute Draw Actions } Espresso! Programming Language
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. Espresso! Programming Language
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. Espresso! Programming Language
A Taste of Espresso!Runtime Library Definition Button::EspressoButtonRT(this){ void setText( String ) String getText( void ) void action ( void ) } Espresso! Programming Language
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! Espresso! Programming Language
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. Espresso! Programming Language
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 Espresso! Programming Language