programming in - massachusetts institute of …...programming in java lyla fischer, sipb iap 2012...

32
Lyla Fischer, SIPB IAP 2012 PROGRAMMING IN Thursday, January 12, 12

Upload: others

Post on 21-May-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012

PROGRAMMING IN

Thursday, January 12, 12

Page 2: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

• Review of Object-Oriented Programming (OOP)• Applets!

• Threads• tvald.applet.AnimatedApplet (on website)• Swing/AWT basics• Event model

Announcements Course website: http://sipb.mit.edu/iap/java/

Email: [email protected]

Today

Thursday, January 12, 12

Page 3: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

SoftwareJava Development Kit (JDK) - http://java.sun.com/javase/downloads/index.jsp

Eclipse Platform - http://www.eclipse.org/

ReferenceThe Java Tutorial - http://java.sun.com/docs/books/tutorial/index.html

Java Language API - http://java.sun.com/javase/reference/api.jspJava SE Documentation - http://java.sun.com/javase/downloads/index.jsp

Java SE Source Code - http://java.sun.com/javase/downloads/index.jsp

Wake up and smell the coffee!

Thursday, January 12, 12

Page 4: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Native Code Integration

http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/

class HelloWorld { public native void displayHelloWorld();

static { System.loadLibrary("hello"); }}

javah

#include <jni.h>#include "HelloWorld.h"#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return;}

Make a Shared Librarycl -Ic:\java\include -Ic:\java\include\win32 -LD HelloWorldImp.c -Fehello.dll

Thursday, January 12, 12

Page 5: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012

OBJECT-ORIENTED

PROGRAMMING

Thursday, January 12, 12

Page 6: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

A class is a template, blueprint, or prototype from which objects are created.

<modifiers> class name {

// members: fields, methods, constructors

}

What is a Class?

Thursday, January 12, 12

Page 7: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Inheritance

abstractchangeGear()getSpeed()

setSeatHeight() addSecondRider()

instances

ObjectgetClass()finalize()...

Thursday, January 12, 12

Page 8: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Constructors

class Bicycle { int gear,speed; public Bicycle(int startSpeed, int startGear) { gear = startGear; speed = startSpeed; } public Bicycle() { this(1, 0); }

public static void main(String[] args) { Bicycle myBike = new Bicycle(0, 8); Bicycle otherBike = new Bicycle(); }}

modifiers classname (parameter list) throws exceptionlist { // method body}

Thursday, January 12, 12

Page 9: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

• instantiation• do stuff

• instantiate and manipulate other objects• serialize and send over network• interact with system libraries•STATE DEPENDANT

• garbage collection• public void finalize()

Life cycle of an object

Thursday, January 12, 12

Page 10: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Java is very Object-Oriented. Anything that has any state can be an object.

Objects can have a lifetime greater than the object that created them.

An Object-Oriented language should support:

• Encapsulation - information hiding and modularity (abstraction)• Polymorphism - behavior is dependent on the nature of the object receiving a

message • Inheritance - new classes are defined based on existing classes to obtain code

re-use and organization • Dynamic binding - objects could come from anywhere, possibly across the

network. Objects can be anything, and its behavior will be effected by its true identity, not just how you decide to treat it.

Object-Oriented Programming

Thursday, January 12, 12

Page 11: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

int i = 2;Integer intObject;intObject = i; // autoboxing automatically converts primitivesintObject = new Integer(i); // equivalent, but unnecessaryi = new Integer(4); // unnecessarily circuitous, but it works

// also: Boolean, Byte, Double, Character, etc.

Autoboxing

Thursday, January 12, 12

Page 12: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Inheritance vs. Composition

Object

http://www.artima.com/designtechniques/compoinh.html

Thursday, January 12, 12

Page 13: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

An interface is a contract between a class and the outside world. When a class implements an interface, it promises to provide the behavior published by that interface.

interface Bicycle { // constant declarations, if any public static final MAX_GEAR = 10; void changeGear(int newValue); //interfaces are completely abstract void speedUp(int increment); public abstract void applyBrakes(int decrement); // implied}

class ACMEBicycle implements Bicycle { // remainder of this class implemented as before}

What is an Interface?

Thursday, January 12, 12

Page 14: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Interfaces and Classes

ObjectInterface

Thursday, January 12, 12

Page 15: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012

APPLETS

Thursday, January 12, 12

Page 16: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Click to edit references

Why Applets?

An alternative: Java as a backend. There are plenty of frameworks out there. Research many, pick one, learn it and stick with it. Then you can use the languages that you already know (HTML/CSS/Javascript/HTML5) for the frontend.

Applets:– can run offline/without a browser– are fast– are highly customizable– aren’t the console.

Thursday, January 12, 12

Page 17: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

A special kind of Java application that can be loaded into a web browser.

Applets

<html><body><applet code="HelloWorld.class" width="200" height="200"></applet><body></html>

import java.applet.Applet;import java.awt.Graphics;

public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); g.drawString("Hello world!", 5, 15); }}

demo.html

HelloWorld.java

Thursday, January 12, 12

Page 18: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012

Graphics

java.awt.Graphics;

...

public void paint(Graphic g) { g.drawLine(x1,y1,x2,y2); g.drawRect( x, y, w, h); g.fillRect( x, y, w, h); g.drawOval( x, y, w, h); g.fillOval( x, y, w, h); g.drawString(x, y);

g.setColor(new Color(r, g, b));}

x

y

Thursday, January 12, 12

Page 19: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

init:Initialize your applet. Called when the applet first loads.

start:Called whenever the user visits the page containing the applet.

paint:This method updates the graphical interface.

stop:Called whenever the user moves away from the page containing applets.

destroy:Clean up (like finalize). Called when the applet is unloaded.

Life cycle of an Applet*

* Not really

Thursday, January 12, 12

Page 20: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

init:Initialize your applet. Called when the applet first loads.

start:Called whenever the user visits the page containing the applet.

paint:This method updates the graphical interface.

stop:Called whenever the user moves away from the page containing applets.

destroy:Clean up (like finalize). Called when the applet is unloaded.

Life cycle of an Applet*

* Not really

Thursday, January 12, 12

Page 21: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

init, start: Called upon navigation to pagepaint: Called when display is stale

stop, destroy: Called upon leaving page

Static fields may (but probably won't) persist between visits.

(Yes, browsers suck at compatibility and at following specifications…)

The real life cycle of an Applet

Thursday, January 12, 12

Page 22: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

// retrieve an Imagejava.awt.Image image = getImage(getCodeBase(), "imgDir/a.gif");

g.drawImage(image, x, y);

// retrieve a fileFile f = new File("config.txt");

// all file paths are resolved from the Applet source directory

Files

Thursday, January 12, 12

Page 23: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Process: a self-contained execution environment, usually with its own memory space.

Thread: a lightweight process; a thread exists within a single process, sharing processor resources

http://www.doc.ic.ac.uk/~jnm/concurrency/classes/ThreadDemo/ThreadDemo.html

Threads

public class HelloRunnable implements Runnable {

public void run() { System.out.println("Hello from a thread!"); }

public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); }

}

Thursday, January 12, 12

Page 24: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Process: a self-contained execution environment, usually with its own memory space.

Thread: a lightweight process; a thread exists within a single process, sharing processor resources

http://www.doc.ic.ac.uk/~jnm/concurrency/classes/ThreadDemo/ThreadDemo.html

Threads

public class HelloThread extends Thread {

public void run() { System.out.println("Hello from a thread!"); }

public static void main(String args[]) { (new HelloThread()).start(); }

}

Thursday, January 12, 12

Page 25: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Click to edit references

Animationspublic class HelloRunnable implements Runnable {

public void run() {! while (True) { // Display the next frame of animation. repaint(); // Delay depending on how far we are behind. try { tm += delay; Thread.sleep(100);//in milliseconds } catch (InterruptedException e) { break; }

} } public void paint(Graphics g) { g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); g.drawString("Hello world!", 5, 15); }

public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); }

}Thursday, January 12, 12

Page 26: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

public class Thread1 extends Thread { public void run() { Thread.sleep(2000); Thread otherThread = new ThreadThatDoesSomething(); otherThread.join(); // wait for the thread to finish // do stuff }

// synchronization:// neither of these can be called at the same time.// a second call will cause the calling Thread to// block until it execution has completes public synchronized foo() { } public synchronized bar() { }

// lock an object public void foo() { // locks object synchronized(object) { statement(s)... } statement(s)...}

Dealing with traffic

Thursday, January 12, 12

Page 27: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012

SWING/AWT

Thursday, January 12, 12

Page 28: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Modeling Widgets as Objects

JTabbedPane

JScrollPanel

JMenuBar

JMenuItem JFrame

JLabel

JTextField

Thursday, January 12, 12

Page 29: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Components, Containers, Layouts,

AWT/Swing

This is a text label.

Thursday, January 12, 12

Page 30: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Graphical User Interfaces (GUIs) are event-driven. Most of the time they sit around waiting for user input or other things to happen.

Events describe actions, like pressing a key, clicking the mouse, resizing the window, etc.

Listeners handle events.

Event s and Listeners

public class ClickHandler extends MouseListener {

public void initialize() { JComponent button = new JButton("Click Me!"); button.addMouseListener(this); } public void MouseDown(MouseEvent e) { // do something }}

Thursday, January 12, 12

Page 31: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012Programming in Java

Event s and Listeners

This is a text label.

JFrame

JScrollPane JLabel

JScrollBar JLabel

MouseDown

Event

Events "bubble" up the layout tree until a component handles the event.

Thursday, January 12, 12

Page 32: Programming in - Massachusetts Institute of …...Programming in Java Lyla Fischer, SIPB IAP 2012 • Review of Object-Oriented Programming (OOP) • Applets! • Threads • tvald.applet.AnimatedApplet

Lyla Fischer, SIPB IAP 2012

Thanks for coming!

Thursday, January 12, 12