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 ReportTranscript 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