The JavaTech Web Course provides an introduction
to the Java programming language along with a selection of more
advanced topics, such as using Java for networking and embedded
applications. We emphasize how Java can benefit scientific and other
technical computing tasks.
We use an example based teaching approach and provide lots of program
as applets and standalone applications.
The companion book JavaTech: Topics in Scientific and Technical
Computing with Java will be published in 2005 by Cambridge University
Press. To distinguish the book from the online materials here, we
typically refer to the website as the Web Course.
The goal for the Web Course is to allow you to choose from an array
of optional tracks that provide different topics and different levels
of detail according to your particular interests and background.
We organize it along the lines of a course or series of courses.
(The extent of the material here is more than would normally be
covered in a single course.) As shown by the Course
Map, JavaTech is divided into three main parts:
- Part I provides an introduction
to Java along with a set of supplemental information. The materials
within Part I are arranged into tracks (more detail in Part
I below), that cover Java basics and supplementary topics,
technical computing, and physics.
Tools and techniques from the new Java 5.0 version are included.
- Part II examines networking
programming and distributed computing with Java.
- Part III focuses on how
Java can interact with the local platform and with hardware such
as the serial port. The last chapter looks at Java for small platforms
and embedded applications, and surveys processors that implement
Most of the Java for Scientists and Engineers types of books
combine an introduction to Java with a numerical analysis course.
While we will discuss a number of numerical algorithms and use them
in examples, particularly in the Physics
track, we do not try to systematically teach numerical analysis
(or computational physics as its now called when applied
to physics problems.)
Instead, we concentrate on how Java can help scientists and engineers
carry out a variety of tasks in addition to purely numerical computations.
For example, a simulation of an experimental setup can take advantage
of Java graphics, multi-threading and other capabilities. Or if
a computation requires multiple processors, we look at how to use
Java to do distributed computing.
The Part I materials are organized
into basic areas or tracks:
- Java -
the essentials for learning the language. Supplementary
material of both tutorial and more advanced is included.
- additional material on using Java for general technical
- additional material on the use of Java in physics.
The Java track includes the
Core area with the basics of
the lanugage. The Supplements
area ranges from additional introductory level discussions on some
topics to discussions of more advanced topics.
For example, someone with no experience in object oriented programming
(OOP) can refer to a more basic explanation of objects to help scale
the steep learning curve involved with OOP.
On the other hand, someone who has programmed in C++ can refer
to the more advanced section where there is a discussion of the
differences between Java and C++ and a detailed examination of the
Java Virtual Machine.
The Tech track provides those
in science and engineering with discussions of relevant topics such
as the capabilities of the Math
class, how to format numbers in scientific notation, using Java
for various numerical computation examples, and so forth.
track discusses topics of particular interest to physicists
and includes more about numerical analysis. Combined with the Java
and Tech materials,
it forms the basis of an undergraduate physics course on programming
with Java to create simulations of physical phenomena.
All the tracks include many demonstration applets and application
Part II examines network and
distributed computing applications with Java. The core set of Java
packages includes a strong array of tools for building network applications
such as Web client/server systems.
We begin with an introduction to network concepts in Chapter 13.
In Chapters 14 and 15 we develop custom Web server and client applications
using socket-based communications techniques. These example programs
illustrate how you could use client/servers to monitor and control
remote devices, such as an array of sensors, or to interact with
a simulation or other program run by a central server.
Chapters 16-20 deal with distributed computing using Java RMI (Remote
Method Invocation) or CORBA. Distributed computing allows a program
to run on multiple platforms simultaneously. With RMI a Java program
on one machine can invoke a method in an object on another machine
just as if it were running on the same platform. Java serialization
allows objects to be transported back and forth just like primitive
With these tools you can, for example, have a server program directly
interact with client programs rather than, say, exchanging HTML
commands as with a Web client/server.
To assist with the development of distributed computing codes,
we introduce UML (Unified Modelling Language) for building classes
and illustrating the interactions between objects. UML has become
a powerful and popular approach to good object oriented program
design and analysis.
Chapter 21 discusses Web Services. This is becoming a popular approach
for network applications. It uses a Web client/server type of system
in which data is exchanged in XML format.
Part III looks at ways that
Java can interact with the local platform. Chapter 22 presents JNI
(Java Native Interface) in which a Java program can link with a
C/C++ program. This removes platform portability but allows a Java
program to take advantage of existing legacy code in C/C++ or in
other languages such as Fortran via intermediate C code.
Chapter 23 looks at several topics including how to access information
about the platform and how to run external programs from within
Java. Most of the chapter deals with how Java can communicate over
the serial port.
Chapter 24 focuses on embedded applications with Java and hardware
Java processors. Brief overviews of the Java Micro Edition and of
Real-Time Java are presented. A survey is made of processors that
directly execute Java bytecode. A demonstration program that runs
on a Javelin Stamp module to obtain temperature sensor data is given
(it communicates with the Java desktop via the serial line techniques
discussed in Chapter 23.) Also, a Imsys Technologies SNAP board
is programmed to run a server program that obtains solar panel voltage
Map illustrates the progression
of topics presented in the course.
Refer to this table frequently
as you work through the course to keep a clear view of where you
are in your progress through the material.
The following pages provide links to find particular materials
in the course.
- Course Map - outline of course
- Topic Index - index with links
to topics in the course.
- Code Index - index with links to
programs in the course.
- Exercises - index to the exercises
in the course.
- Resources - links to Java related
sites on the Web.