DOC PREVIEW
NYU CSCI-GA 2110 - JAVA

This preview shows page 1-2-3-4-5 out of 15 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 15 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 15 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 15 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 15 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 15 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 15 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

How is Java different from other languagesOriginal design goals (white paper 1993)PortabilityContrast with conventional systems languages (C, C++, Ada)Serious omissionsA new construct: interfacesInterface ComparableThreads and their interfaceThe runnable interface allows any object to have dynamic behaviorInterfaces and event-driven programmingEvents and listenersIntrospection, reflection, and typeless programmingReflection and metaprogrammingReflection classesReflection and beansHow is Java different from other languages•Less than you think:–Java is an imperative language (like C++, Ada, C, Pascal)–Java is interpreted (like LISP, APL)–Java is garbage-collected (like LISP, Eiffel, Modula-3)–Java can be compiled (like LISP)–Java is object-oriented (like C++, Ada, Eiffel)•A succesful hybrid for a specific-application domain•A reasonable general-purpose language for non-real-time applications•Work in progress: language evolving rapidlyOriginal design goals (white paper 1993)•Simple •Object-oriented (inheritance, polymorphism)•Distributed •Interpreted•multithreaded•Robust•Secure•Architecture-neutral•a language with threads, objects, exceptions and garbage-collection can’t really be simple!Portability•Critical concern: write once-run everywhere•Consequences:–Portable interpreter–definition through virtual machine: the JVM–run-time representation has high-level semantics–supports dynamic loading–(+) high-level representation can be queried at run-time to provide reflection–(-) Dynamic features make it hard to fully compile, safety requires numerous run-time checksContrast with conventional systems languages(C, C++, Ada)•Conventional languages are fully compiled:–run-time structure is machine language–minimal run-time type information–language provides low-level tools for accessing storage–safety requires fewer run-time checks because compiler–(least for Ada and somewhat for C++) can verify correctness statically.–Languages require static binding, run-time image cannot be easily modified–Different compilers may create portability problemsSerious omissions•No parameterized classes (C++ templates, Ada generics)•Can simulate generic programming with untyped style: casting Object down into specific class. –Forces code duplication, or run-time conversions•No operator overloading (syntactic annoyance)•No enumerations (using final constants is clumsy)A new construct: interfaces•Allow otherwise unrelated classes to satisfy a given requirement•Orthogonal to inheritance–inheritance: an A is-a B (has the attributes of a B, and possibly others)–interface: an A can-do X (and other unrelated actions)–better model for multiple inheritance•More costly at run-time (minor consideration)Interface Comparablepublic interface Comparable {public int CompareTo (Object x) throws ClassCastException;// returns -1 if this < x,// 0 if this = x, // 1 if this > x};// Implementation has to cast x to the proper class.// Any class that may appear in a container should implement ComparableThreads and their interface class Doodler extends Thread { // override the basic method of a thread public void run( ) { ... // scribble something } } … Doodler gary = new Doodler ( ); gary.start( ); // calls the run methodThe runnable interface allows any object to have dynamic behaviorclass Simple_Gizmo { …}class Active_Gizmo extends Simple_Gizmo implements Runnable { public void run ( ) {…}}// a thread can be constructed from anything that runs:Thread thing1 = new Thread (new Active_Gizmo ( ));Thread thing2 = new Thread (new Active_Gizmo ( )); thing1.start( ); thing2.start ( );Interfaces and event-driven programming•A high-level model of event-handling:–graphic objects generate events•mouse click, menu selection, window close...–an object can be designated as a handler•a listener, in Java terminology–an event can be broadcast to several handlers•several listeners can be attached to a source of events–a handler must implement an interface•actionPerformed, keyPressed, mouseExited..Events and listenersclass Calm_Down extends Jframe { private Jbutton help := new Jbutton (“HELP!!!”); // indicate that the current frame handles button clicks help.addActionListener (this); // if the button is clicked the frame executes the following: public void actionPerformed (ActionEvent e) { if (e.getSource () == help) { System.out.println (“can’t be that bad. What’s the problem?”); } } }Introspection, reflection, and typeless programming public void DoSomething (Object thing) { // what can be do with a generic object? if (thing instanceof gizmo) { // we know the methods in class Gizmo ….•Instanceof requires an accessible run-time descriptor in the object.•Reflection is a general programming model that relies on run-time representations of aspects of the computation that are usually not available to the programmer.•More common in Smalltalk and LISP.Reflection and metaprogramming•Given an object at run-time, it is possible to obtain:–its class–its fields (data members) as strings–the classes of its fields–the methods of its class, as strings–the types of the methods•It is then possible to construct calls to these methods•This is possible because the JVM provides a high-level representation of a class, with embedded strings that allow almost complete disassembly.Reflection classes•java.lang.Class–Class.getMethods () returns array of method objects–Class.getConstructor (Class[] parameterTypes)•returns the constructor with those parameters•java.lang.reflect.Array–Array.NewInstance (Class componentType, int length)•java.lang.reflect.Field•java.lang.reflect.Method•All of the above require the existence of run-time objects that describe methods and classesReflection and beans•The beans technology requires run-time examination of foreign objects, in order to build dynamically a usable interface for them.•Class Introspector builds a method dictionary based on simple naming conventions: public boolean isCoffeeBean ( ); // is... predicate public int getRoast ( ); // get... retrieval public void setRoast (int darkness) ; // set…


View Full Document

NYU CSCI-GA 2110 - JAVA

Download JAVA
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view JAVA and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view JAVA 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?