## Webcompmath

Programming Information

WCM (Web Components for Mathematics) is a collection of Java classes that can be used to assemble educational mathematical applets and programs. The current version is written in Java 1.5 and covers mainly pre-calculus and calculus. The main project page has more information and links to sample applets. This page gives an overview of how the system is designed and how to program with it. This information is meant for people who understand Java.

The WCM classes are contained in several Java packages: net.sourceforge.webcompmath.applets, net.sourceforge.webcompmath.data, net.sourceforge.webcompmath.awt, net.sourceforge.webcompmath.draw, net.sourceforge.webcompmath.functions and several other packages ending in .beans. What follows on this page is an overview of each package with a link to a page that discusses the classes in that package in more detail.

## Package net.sourceforge.webcompmath.applets

The net.sourceforge.webcompmath.applets package contains the classes for the configurable applets. In general, these are used as is and customized via various

paramscoded into the html for a web page. However, you can use one of these applets as a starting place to make a new configurable applet. GenericGraphApplet is the base class for most of these applets and provides much of the framework, including the processing of a large number ofparams.

## Package net.sourceforge.webcompmath.data

The net.sourceforge.webcompmath.data package contains the core classes for working with mathematical objects such as variables, expressions, and functions. (This package should probably have been named net.sourceforge.webcompmath.core, but the name stuck from an earlier version.) The

Valueinterface represents an object that has a real number value. This interface is implemented by classes such asConstant, which represents a constant value,Variable, which is a subclass of Constant that allows its value to be changed, andExpression, which represents mathematical expressions such as "x^2+3" and "sqrt(2*x)". Objects of any of these types can be used elsewhere in WCM where Value objects are required. TheFunctioninterface defines another type of mathematical object: a function that can be evaluated on an array of Values. ASimpleFunctionobject provides a basic way of creating a function: by considering an Expression as a function of one or more of the variables that it contains.An object of type

Parseris used to parse an expression represented as a string, such as "x^2+3", and to produce the corresponding object of type Expression. Variables can be added to a Parser, which then becomes able to understand those variables when they occur in expressions. Things that can be added to a Parser implement theMathObjectinterface. TheParserExtensioninterface is a type of MathObject that makes it possible to extend the capabilities of a parser, although doing so involves some rather tricky programming.The classes in net.sourceforge.webcompmath.data do not depend on any of the other classes in the WCM, so they could be used independently in other software projects.

## Package net.sourceforge.webcompmath.awt

The net.sourceforge.webcompmath.awt package provides classes for building the Graphical User Interface of a mathematical applet or program. Many of these classes are subclasses of Java's Swing components (I chose to keep the original .awt name for the package from JCM, instead of renaming it to .swing). Some of the classes correspond to mathematical objects. An

ExpressionInputis an input box where the user can type in a mathematical expression. Similarly, aVariableInputcan be used to enter the value of a variable. AVariableJSliderlets the user set the value of a variable in another way: by adjusting a slider. ADisplayLabelis a Label that can display the values of one or more Value objects, embedded in a string of text. ADataTableInputmakes it possible for the user to input numbers in multiple rows and columns.In a mathematical applet, something has to

happenwhen the user enters a new value for a variable or expression. Other objects, such as graphs or value displays, have to be updated to reflect the change. In the WCM, the updates are done by aControllerobject. A Controller works with objects of three types:InputObject, which represents objects that can change, requiring other updates;Computablewhich represents object that might have to be updated; andTie, which makes it possible to synchronize two objects so that they will always have the same value. Objects of these three types must be added to a Controller if they are to function properly, and, in addition, each InputObject must be set to notify the Controller when it changes in order for the change to have any effect on other objects.The

WcmPanelclass makes it possible to avoid much of the work of setting up Controllers. WcmPanel is a subclass of Java's JPanel class, so it can contain other graphical user interface components, including other WcmPanels. If an interface is built entirely of WcmPanels, then most of the Controller setup is done automatically, and anther aspect of the setup can be accomplished simply by calling thegatherInputs()method in the main WcmPanel.

## Package net.sourceforge.webcompmath.draw

The net.sourceforge.webcompmath.draw package makes it possible to display two-dimensional graphical objects such as graphs of functions, parametric curves, and vector fields. The core class in the package is

DisplayCanvas, which represents an area where such objects can be displayed. ACoordinateRectis an object that lays out horizontal and vertical coordinates on a DisplayCanvas (or on a rectangular area within a DisplayCanvas). Graphical objects are actually associated with CoordinateRects. ALimitControlPanelis a graphical user interface component that can be placed elsewhere in an applet -- outside the DisplayCanvas -- to allow the user to control the range of horizontal and vertical coordinates on a CoordinateRect.Objects that can be added to CoordinateRects are subclasses of the abstract class

Drawable. These include, for example:WcmAxes, representing pair of horizontal and vertical coordinate axes, andGraph1D, representing the graph of a function of one variable. TheDrawStringclass makes it possible to display some text, which can include the values of one or more Value objects.DrawGeometriccan produce geometric objects such as lines and rectangles. ATangentLineis a type of DrawGeometric that represents the tangent line to a given function at a giveb x-coordinate (which is specified by aValueobject).Some of the things that can be added to a CoordinateRect are InputObjects, which allow user interaction. A

MouseTrackeris an invisible Drawable that responds when the user clicks or clicks-and-drags the mouse on the DisplayCanvas. The x- and y-coordinates of the mouse are Variables whose values can provide input to other objects. ADraggablePointis similar, except that is visible. The user can drag a DraggablePoint around, thereby changing the values of the associated variables. APanneris another invisible Drawable that responds when the user right-clicks-and-drags on the DisplayCanvas. It let's the user slide the coordinate rectangle around in the xy-plane.

## Package net.sourceforge.webcompmath.functions

The net.sourceforge.webcompmath.functions package provides a few classes for working with functions. A Parser, by default, knows about certain standard functions such as sin(x). The class

ExpressionFunctionmakes it possible to define other, non-standard functions, and add them to a Parser so that they can be used in expressions. An ExpressionFunction is defined by a mathematical expression. ATableFunction, on the other hand, is defined by a finite table of (x,y)-points. It is possible to use several different interpolation methods to compute the value of the function at x-coordinates that lie between points in the table. ATableFuctionGraphis a Drawable object that can be added to a DisplayCanvas. It lets the user modify a TableFunction interactively, by dragging points up and down. ATableFunctionInputis a large JPanel where the user can define a TableFunction by typing in values and by interacting with the graph of the function. (This class is not used in the current WCM version. It should be part of a more general facility for entering and editing functions. This might be added to a future version of WCM.)The

SummationParserclass represents another way to add capabilities to a Parser. If a SummationParser object is added to a Parser, the parser will understand summations such as "sum(i,1,10,x/i)".

## Package net.sourceforge.webcompmath.*.beans

The net.sourceforge.webcompmath.*.beans packages provide JavaBean implementations of many of the other classes in WCM. The goal is for these bean versions of the class to be used by GUI-builder tools in creating WCM applets. The Eclipse Visual Editor is one example of such a tool. These bean versions of classes usually subclass one of the WCM classes in the main packages and provide explicit set/get methods for the parameters for that class, with the intention that these parameters be set via property sheets in the GUI builder tool. In many cases the bean classes also simplify their base class, hiding some of the less-used functionality and attempting to automatically wire up controllers and error reporters. While intended for use with GUI-builders, the bean classes can also be used in hand-coded applets, just like any of the other WCM classes.