Package becker.xtras.grapher

The grapher package provides a graphical user interface to graph mathematical functions which implement one of three Java interfaces: IFunction, IQuadraticFunction, or IPolynomialFunction.

See:
          Description

Interface Summary
IFunction Objects implementing the IFunction interface represent a mathematical function, say f(x).
IPolynomialFunction A polynomial function, f(x), has a number of terms, each of the form aixi.
IQuadraticFunction A quadratic function, f(x), has the form ax2 + bx1 + cx0, or more simply, ax2 + bx + c where the coefficients a, b, and c are real numbers.
 

Class Summary
GrapherGUI GrapherGUI provides a user interface for graphing mathematical functions when supplied with an instance of a student-written class implementing one of the three interfaces IFunction, IQuadraticFunction and IPolynomialFunction.
SamplePolynomialFunction A sample class implementing the IPolynomialFunction interface.
 

Package becker.xtras.grapher Description

The grapher package provides a graphical user interface to graph mathematical functions which implement one of three Java interfaces: IFunction, IQuadraticFunction, or IPolynomialFunction.

The interface looks like this:

A typical main method using Grapher is:

import becker.xtras.grapher.*;

public class Main extends Object
{  public static void main(String[] args)
   {  IFunction qf = new MyFunction(2, 0, -1);
      GrapherGUI g = new GrapherGUI(qf);
   }    
}
where MyFunction is a student-written class implementing one of the supported interfaces. Substituting SamplePolynomialFunction for MyFunction and IPolynomialFunction for IFunction in the above code will yield a working demonstration program.

This program uses the Model-View-Controller pattern for classes implementing IQuadraticFunction and IPolynomialFunction. The classes implementing these interfaces form the model part of the Model-View-Controller pattern. They must arrange to update the views each time the model's state (that is, one of its instance variables) changes. This can be done easily with code such as the following:

import becker.util.IView;
import becker.util.ViewList;

public class Function implements IPolynomialFunction
{
   private ViewList views = new ViewList();

   ...
   
   public void stateChangingMethod()
   {  ...
      this.views.updateViews();
   }
   
   public void addView(IView aView)
   {  this.views.addView(aView);
   }
}

Classes implementing the IFunction interface should not have state that changes and are therefore exempt from the above requirements.