java: the core language what it looks like: class onceagain { public static void main (string[]...

37
Java: the core language • What it looks like: class OnceAgain { public static void main (String[] args){ int X = 1234; System.out.println (“we’ve seen this before”); } } • A superficial resemblance to C++

Post on 21-Dec-2015

226 views

Category:

Documents


0 download

TRANSCRIPT

Java: the core language

• What it looks like:

class OnceAgain {

public static void main (String[] args){

int X = 1234;

System.out.println (“we’ve seen this before”);

}

}

• A superficial resemblance to C++

References

• Formal definition: Gosling, Joy & Steele

• White paper (early draft): Gosling

• Cornell & Horstmann : Core Java

• 10,000 other books

• Java is work in progress: no ISO standard in sight

white paper buzzwords (Gosling et al)

• Simple • Object-Oriented• Distributed • Robust• Secure• Architecture neutral

• Portable • Interpreted• High Performance• Multithreaded

Core language

• Imperative, procedural language

• Object-oriented: inheritance is central

• Garbage-collected

• conventional control structures

• Exceptions and event-handling

• concurrency can’t really be simple will al that...

The type model: primitive types and classes

• Conventional primitive types with value semantics: int, short, long, byte, float, double, char, boolean

• int Value = 123;

• char BigA = ‘A’;

• Language defines size of numeric types (eg int is 4 bytes)

• char is Unicode (16 bits)

• char badkspace = \u0008;

• Some implicit conversions on numeric operations

Classes

• The basic abstraction mechanism

• A long lineage:– Simula (algol derivative with concurrency)– Smalltalk (fully dynamic, class is everything)– Eiffel (hybrid)– C++ (Hybrid, multiple inheritance)– CLOS (dynamic, multiple inheritance)

Class encapsulates data and code

Public class counter {

counter (int init) { value = init;}

counter () { value = 0;};

public int val () { return value;};

public void incr () { value = value + 1;);

private int value;

}

Contrast with Ada

• A package contains both type declarations and subprogram declarations (like a class)

• Related types can appear in the same package (unlike a class)

• A package is not a type (unlike a class)

• Class unifies (or confuses) the notion of package and type

OO terminology

• An object is an instance of a class• A method defines a message that the object can

receive• A message is received by a particular object at

run-time• Within a method, the current object is called this

– if X is local data, a reference to X is equivalent to this.X

Using a class

class TestCounter {

counter c1 = new counter ();

counter c2 = c1; // an alias of c1

c1.incr(); // call with implicit parameter c1)

if (c1.val() > 0) c2.incr(); };

}

Is everything an object?

• Only in Smalltalk (even classes!) • Often necessary to define data and methods

without any explicit object to which they belong

public class Math {

public static double sqrt (double X);

public static final double PI = 3.14159265;

}

can then write X = Math.sqrt (Y * Math.PI);

Classes are not enough

• Need other tools for large program structuring• Packages: group of classes, with privileged

visibility • Mimics directory structure of OS

– package MyGraphics; // locus for current class

– import java.io.*; // get access to all classes therein

– public class Polygons { … } // in MyGraphics

• Interfaces: abstract classes

Predefined packages

• A large built-in programming environment– java.lang: Object, String, Math…– java.awt: graphical interface– java.awt.event : interaction with devices– java.applet: the web– java.io: stream and file manipulation– java.util: data and time– java.net: communications

Java is a high-level language

• User does not concern itself with the size of objects. Storage management is controlled by the system

• Garbage collection must be safe: user cannot manipulate addresses directly, language cannot have pointers.

• No need for destructors or free commands• Garbage collection is unpredictable: unsuitable for

real-time applications

Can you program without pointers?

• Pointers are implicit: objects and array have reference semantics

class List {

int value;

List next;

}

primitive types have value semantics

Value/Reference semantics

int x, y;

x = y; // value copy

y = y + 1; // x is unaffected

counter c1, c2;

c2 = c2; // value sharing: denote same object

c2.incr(); // c1 is modified as well

int table1 [], table2 [];

table1 = table2; // reference semantics also

Equality works like assignment (value /reference)

Value/reference choices

• Ada : reference requires explicit access types. Arrays have value semantics

• C++ : structs have value semantics

• SETL : all types have value semantics

• pure LISP : functional with no side-effects, no assignment, value semantics with implicit sharing for efficiency

Arrays and Strings

• Impractical to make them classes: standard semantics across languages, need efficient implementation

int table []; // variable definition

table = new int(100); // object allocation

• Indexing from zero. Index always checked against bounds

Multidimensional arrays and aggregates

• Multidimensional arrays are arrays of arrays

int[][] matrix =

({ 2,4,6}, {3, 6, 9}, 1, 2, 3}};

matrix [2][2] = 0;

matrix [3][3] = 100; // will raise exception

Strings

• Could be arrays (unification or confusion?)• Instead, special syntax• Many special-purpose operations

String message = “ what’s new?”;

message = message.substring (0, 6) + “up doc?”;

Note: only operator overloading in Java, no user-defined overloading (reaction to C++)

Strings are constants

• Need separate class for mutable strings:

• class StringBuffer: public int length (); // also strings and arrays

public int capacity ()

public synchronized char charAt (int index)

public synchronized void setCharAt (int index, char ch);

Inheritance

• Programming by extension and specialization:• A class refines an existing class by adding data

members and methods, and redefining methods• What is not redefined is inherited

class Point { int x = 0; int y = 0; …};

class Pixel extends Point { int R,G,B; …};

Polymorphism

• A variable of a given class can denote an

• instance of any descendant of the class:

class Root…

class Better extends Root …

class Best extends Better…

Root thing = new Root ();

.. Thing = new Best (..); // ok

Dynamic Dispatching

• If class Root has method Mangle, then all its descendants either inherit or redefine Mangle.

• Thing.Mangle(..); // what gets executed?

• Objects carry run-time identification. The class denoted by the current value of the object determines the method to be called

The power of polymorphism

• The functionality of a system can be extended by adding class extensions. The code that manipulate existing classes does not need to be modified.

• Object-oriented programming = inheritance + polymorphism + dynamic dispatching

The mother of all classes

• Every class is the extension of another.

• The root of the class hierarchy is Object

• Object has no visible data, and several generally useful methods:

boolean equals (Object O);

String ToString ();

Mixing classes and primitive types

• We want to write a “generic” matrix that can have integer or real components.

• Can write Object[][] matrix;• but can’t put numeric values in matrix because ints

are not objects.• Solution: wrapper classes

matrix [0][0] = new Integer (5);

Wrapper classes

• Integer, Float, Double, Boolean• Constructors, conversion operations, etc.• No overloading:

Integer I1, I2, I3;• can’t write:• I1 = I2 + I3;• instead

I1 = new Integer (I2.value + I3.value);

Class Object and generic programming

Object thing;

• thing can denote an instance of any class: compiler cannot check legality of any usage, all checks are at run-time.

Object [] bag;• no way to define a homogeneous bag.• The absence of templates/generics is the largest

deficiency in the language

A large built-in collection of classes

• Object– Font– Component

– Container

• Panel

• Applet

– Button

– label

• Layout manager

Superclasses and subclasses

Class Root {..};

Class Better extends Root {…};

Root thing1 = new Root ();

Object anything = new Better ();

anything = thing1; // ok

thing1 = anything; // illegal

thing1 = (Root)anything; // run-time check

Interfaces

• A package spec with no body• An abstract class that can have multiple

implementations• A substitute for genericity

public interface Comparable {

public boolean LessThan (Comparable C);

public boolean Equals (Comparable C);

}

Implementing an interface

• Any class that has operations with the right signature can be said to implement the interface:

class Point implements Comparable {

int X, Y;

public boolean LessThan (Comparable C) {

return X < (Point (C).X;

}

A class can implement multiple interfaces

Event-Driven programming

• Events happen asynchronously (mouse click, button push)

• Events are objects:– AWTevent

• ActionEvent

• ComponentEvent– ContainerEvent, PaintEvent, WindowEvent…..

• Events have a source

• Events can be handled by designated components

Event-Handling

• Delegation-based: source object notifies a registered listener

• listener must implement the appropriate interface:

Interface MouseListener {

public void MouseClicked (MouseEvent e)

public void MouseEntered (…)

public void MouseReleased (…)

...

A listener

class Ringer extends Frame implements ActionListener {

private Button ring;

public Ringer () { // constructor

ring = new Button (“press here”);

ring.addActionListener (this);

}

public void ActionPerformed (ActionEvent e) {

// play something

}

white paper buzzwords (Gosling et al)

• Simple (no chance)

• Object-Oriented (definitely)

• Distributed (yes)

• Robust (more than C/C++)

• Secure (ditto, generic programming less safe)

• Architecture neutral (the advantage of the JVM)

• Portable (if standard is developed and followed)

• Interpreted (performance penalty)

• High Performance (hope for now)

• Multithreaded (less than Ada)