[netrexx-course] Lesson 1 - HTML

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[netrexx-course] Lesson 1 - HTML

dIon Gillard/Multitask Consulting/AU
Lesson 1 - Intro to the
NetRexx Language



Welcome

Welcome to Lesson 1 of the NetRexx Course.

This lesson is an introduction to the NetRexx language - what it is, where it comes from, what you get with it, how you
can use it, and details about its syntax. Hopefully by the end of this lesson, and by performing some of the suggested
exercises, you will understand more about NetRexx and it's environment. Scattered throughout the lesson you'll find
several 'pop quiz' questions. If you are unsure of the answer, feel free to either email me (mailto:[hidden email])
or the NetRexx Course mailing list (mailto:[hidden email]).
 

What is it?

"NetRexx is a programming language derived from both Rexx and Java. It is a dialect of Rexx that retains the portability
and efficiency of Java, while being as easy to learn and to use as Rexx." - Mike Cowlishaw, inventor of NetRexx.

NetRexx is a computer programming language. It's history comes from Rexx (see http://www2.hursley.ibm.com/rexx), a
human oriented programming language, and a far more recent language, Java (see http://java.sun.com). Because of
this, NetRexx is really a hybrid language - Rexx moulded to fit desirable features of Java. Having said that, NetRexx is
still a programming language, and theoretically it need not be compiled to java executable code, someone could write a
NetRexx compiler to produce native Unix binaries for example.

The 'reference implementation' of NetRexx (the original implementation provided by Mike Cowlishaw of IBM UK
Laboratories, who invented the Rexx programming language), comes with a compiler that takes your NetRexx source
code and compiles it into executable Java binaries called byte code. So that means that programs written in NetRexx will
run just like java programs. If you've heard of Java applets or servlets, theses are just special sorts of executable java
binaries. They, too, can be written using NetRexx. The good side to all of this is that any NetRexx program can be run
anywhere Java is installed, making NetRexx programs VERY portable. In fact, almost every recently developed or
enhanced operating system has Java available.

The NetRexx compiler, the tool that turns your source into executable byte code,  is actually written in NetRexx. Mike
Cowlishaw said at one point that it took 19 years to get Rexx ported to it's current set of platforms, but converting the
NetRexx compiler to NetRexx source (from it's original Rexx source code on OS/2) took 3 weeks and runs on more
platforms! (Correct me if I've got it wrong Mike or anyone else). Now that's productivity.

To program in NetRexx you don't have to know anything about Java. But to write useful programs with NetRexx, you
will. So part of this course will be about explaining how Java works. Don't be worried if you currently know nothing about
Java, we'll gradually fix that problem.

Pop Quiz: Define NetRexx.

What do I get with NetRexx?

I'm assuming you've downloaded and installed NetRexx. You need Java installed to anything useful with NetRexx, so
here's hoping you've downloaded and installed Java 1.1 or higher as well.

When NetRexx installs, it creates a directory (e.g. c:\NetRexx or /usr/NetRexx) to hold it's files. To complete the install,
you should have taken the nrtools.zip file from this directory, and unzipped it into your Java installation directory (e.g.
\java11 or /jdk1.1.6). This step adds important files to your computer:
    NetRexxC.zip - the executable code for the NetRexx compiler
    NetRexxR.zip - the NetRexx run time code
    netrexxc.cmd, netrexxc.bat, nrc.cmd and nrc.bat - a batch file to make executing the compiler easier
    hello.nrx - some sample NetRexx code to test the compiler and your installation

In the NetRexx installation directory (e.g. c:\NetRexx or /usr/NetRexx), there are many useful files to help you with
developing in NetRexx. Starting with the HTML documentation, netrexx.htm, moving along to the many samples that are
worthwhile understanding as we continue with the course. All the samples will have a .nrx extension, e.g. Hello.nrx,
Buttons.nrx, HelloApplet.nrx.

--
Pop Quiz: What's the simplest way of executing the NetRexx compiler for your platform?

Writing And Compiling NetRexx Code

Ok, lets move on to some more practical matters, like writing code.

NetRexx is really an object oriented language, but don't let that scare you, it's also a human oriented language, and that
makes it far easier to get your work done than with almost any other language. For example, if you ask a friend the
telephone to "Go buy some bread" is that any different to asking them to "Go buy some Bread"? Did you pick the
difference? To many computer languages "Bread" and "bread" can be two completely separate things, although us
mere humans usually don't think so.

Tools

To write NetRexx code, you'll need some form of editor to type the code into. On a Microsoft Windows platform, for
example, a simple editor is Notepad. A more full featured editor is Word Pad. There are also a few Integrated
Development Environments (IDEs) available for NetRexx, devpad (see  http://www.mygale.org/~lafaix/devPad/ ) and
Visual NetRexx (see http://www.trongus.com/VisualNetRexx/ ) are two.

Compiling

Once you've chosen your tool for now, you'll need to know how to invoke the compiler. For Windows and OS/2, there
are pre configured batch files (netrexxc.bat, netrexxc.cmd, nrc.bat, nrc.cmd) as a fast path for invoking the compiler. On
other platforms, you'll need to do it "the hard way" by invoking java with the correct arguments:

    java COM.ibm.netrexx.process.NetRexxC NameOfYourNetRexxFileHere.Nrx

--
Suggested Exercise: Compile and run hello.nrx that the NetRexx installation supplies. Read the code.

OO vs 'Scripts'

In writing NetRexx applications, you will either choose to ignore OO concepts altogether and write 'scripts' or get
completely carried away with OO and use it almost all of the time. Writing a script involves only a subset of the NetRexx
syntax, and almost no knowledge of OO concepts.

About Objects

There is a lot of mystique and confusion around Object Oriented Technology. Mostly, it's because the ideas aren't that
well communicated in the first place. You may skip this section if you feel comfortable with OO technology and concepts
already.

What's an object, and why is OO all the rage?

The first real phase of application development that explained things simply was Structural (or Procedural) Application
Development. This way of doing development focused on the functionality that the application was to provide,
progressively dividing the task into more manageable 'procedures' until finally code could be written. This was called top
down development.

This had two problems:
 
 
The functions were completely dependent on the data passed to them by other functions. If the format ('type') of this
data changed, there were changes needed everywhere the data was passed.

The functions were an integral part of the application they were written for, and on the whole, were not very 'reusable'.
So how did OO solve this problem? It changed the focus of development from a functional process to an 'object'
process, where an object is a logical collection of functions and the data those functions share. This meant that the data
that was shared by the functions could be hidden from other objects (called encapsulation), and hence if changes were
needed the impact was far less. Since the functions were now grouped together in some logical way, they usually
provided some sort of service or business process, which was more likely to be reusable.

Objects have properties (data), and methods (functions) that use those properties. The objects properties are available
for as long as the object is available, and can change value over time.

An object can be something simple like a button in a GUI:
 
 
 It has some properties associated with it, things like the text of the button, the size of the button,
background/foreground colours, font used etc.

It also has some functionality associated with it, e.g. it can handle being clicked, and notifies interested parties when it
happens.
Objects can also be very complex. Consider the NetRexx compiler for example. It knows how to do something extremely
complex: read our code and translate it into java code and then compile it.

Why use OO

Applications developed using OO techniques are different from procedural applications, in that they are really a group of
objects co-ordinated to get the job done. Think of a car. The car has some properties: an engine, wheels, doors, a frame
etc. It also has some methods: turn on, accelerate, slow down, turn off. To accelerate the car 'object' co-ordinates with
the engine 'object', which in turn co-ordinates with the wheel objects. Procedural applications are usually a model a
single way of doing things, where OO applications are are a model of the ways things can interact, making OO apps far
more flexible from the developers perspective at least.

The Class

When coding OO applications, the developer writes a definition for all objects of the same type, called a class. A class is
a template for the objects to be created, it defines the properties and methods that all objects of that type will have. For
example, if we have our car object, we can write a class definition for it, like this:
--------------8<----------------------- Cut Here -------
class Car
Properties Inheritable
    anEngine
    wheels
    doors
    frame
method turnOn
    /* put code to turn on the car here */
    Say "The car is on!"
method accelerate(toSpeed)
    /* accelerate the car to the speed passed in the parameter 'toSpeed' */
    Say "Taking it to warp: "toSpeed

/** This method is called when java runs an object from the command prompt */
method main(args=String[]) static
    car1 = Car()    -- our first car
    car1.anEngine = "Fast"
    car2 = Car()    -- our second
    car2.anEngine = "Slow"
    -- do something with the new cars
    car1.turnOn()
    car2.accelerate(12)
--------------8<----------------------- Cut Here -------