CSC 309 Lecture Notes Week 2
General Design Principles and
High-Level Design Patterns
Details of Specification-to-Design Refinement
users.csc.calpoly.edu:~gfisher/classes/309/examples/milestone2
users.csc.calpoly.edu:~gfisher/classes/309/examples/misc-java
"Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use the solution a million times over, without ever doing it the same way twice."
Figure 1: MVP Pattern.
Figure 2: IPT pattern.
Figure 3: Calendar Tool packages.
package caltool.model;
import caltool.view.*;
import caltool.model.file.*;
import caltool.model.edit.*;
import caltool.model.schedule.*;
import caltool.model.view.*;
import caltool.model.admin.*;
import caltool.model.options.*;
import caltool.model.help.*;
import caltool.model.caldb.*;
import mvp.Model;
/****
 *
 * Class CalendarTool is the top-level model class for the regular-user
 * Calendar Tool program.  CalendarTool has references to the functional model
 * classes of the tool: File, Edit, Schedule, View, Admin, Options, and Help.
 * There is also a reference to the CalendarDB class that houses the tool's
 * major data bases.
 *                                                                          <p>
 * Functionalitywise, all of the model classes are autonomous units.  They each
 * do their own work as invoked by the user.  All that this top-level class
 * does is to construct the work-doing model classes and set up the initial
 * state of the tool when it is invoked from the outside operating system.
 *                                                                          <p>
 * See also the companion view class <a href= "caltool_ui/CalendarToolUI.html">
 * CalendarToolUI. </a>
 *                                                                          <p>
 * @author Gene Fisher (gfisher@calpoly.edu)
 * @version 12Nov13
 *
 */
public class CalendarTool extends Model {
    /**
     * Construct this with the given companion view.  Call the submodel
     * constructors.  Initialize the start-up state based on default options
     * and command-line arguments.
     */
    public CalendarTool(CalendarToolUI calToolUI) {
        /*
         * Call the parent constructor.
         */
        super(calToolUI);
        /*
         * Construct and store the submodel instances.  Note that the
         * CalendarDB is constructed before the File so the latter can observe
         * the former for changes.
         */
        caldb = new CalendarDB(null);
        file = new File(null, caldb);
        edit = new Edit(null);
        schedule  = new Schedule(null, caldb);
        calView = new View(null, caldb);
        admin = new Admin(null);
        options = new Options(null);
        /*
         * Set up the initial state of the tool.
         */
        initialize();
    }
    /**
     * Implement the exit method to pass the buck to file.exit().  Per set up
     * performed in the companion CalendarToolUI view, this method is called
     * when the user closes the top-level menubar window, e.g., via the window
     * manager close button.
     */
    public void exit() {
        file.exit();
    }
    /** Return the File model. */
    public File getFile() { return file; }
    /** Return the Edit model. */
    public Edit getEdit() { return edit; }
    /** Return the Schedule model. */
    public Schedule getSchedule() { return schedule; }
    /** Return the View model. */
    public View getCalView() { return calView; }
    /** Return the Admin model. */
    public Admin getAdmin() { return admin; }
    /** Return the Options model. */
    public Options getOptions() { return options; }
    /** Return the Help model. */
    public Help getHelp() { return help; }
    /*-*
     * Protected methods
     */
    /**
     * Set up the initial state of the tool, based on default option values and
     * command-line arguments, if any.  Details TBD.
     */
    void initialize() {}
    /*-*
     * Data fields
     */
    /** File-handling module */
    protected File file;
    /** Basic editing module */
    protected Edit edit;
    /** Scheduling module */
    protected Schedule schedule;
    /** Calendar viewing module */
    protected View calView;
    /** Calendar administration module */
    protected Admin admin;
    /** Tool options module */
    protected Options options;
    /** Tool help module */
    protected Help help;
    /** Calendar database */
    protected CalendarDB caldb;
}
Figure 4: Class diagram for Calendar Tool design in Notes 2.
users.csc.calpoly.edu:~gfisher/classes/309/examples/milestone2
users.csc.calpoly.edu:~gfisher/classes/308/examples/milestone6/specification
users.csc.calpoly.edu:~gfisher/classes/308/examples/milestone8/prototype
Figure 5: Annotated menus showing swing components used.
Figure 6: Annotated dialog showing swing components used.
Figure 7: Annotated dialog showing layout using boxes.
| Suffix | Example | Meaning | 
| UI | ScheduleUI | A top-level view that contains all of the interface components for a companion top-level model. These components are the pulldown command menu and all of the other views that are launched from menu commands. | 
| Dialog | ScheduleAppointmentDialog | A top-level view that allows the user to provide inputs for a single operation. Typically it has OK, Cancel, and Clear buttons. The OK button is used to confirm the operation for which the user is entering the input. | 
| Editor | CategoriesEditor | A top-level view that provides for the editing Has more command buttons than just OK, e.g., Add, Delete. | 
| Display | MonthlyAgendaDisplay | A read-only display, i.e., where no model data are editable. | 
| ButtonListener | OKScheduleAppointmentButtonListener | An event listener for a button or menu item. | 
| Panel | SchedulingOptionsPanel | The internal component of a tiled or tabbed layout. | 
Figure 8: High-level Model/View class diagram.
Figure 9: Highest-level function diagram for Model/View application.
Figure 10: Event diagramming notation.
Figure 11: Setting up Calendar Tool event handlers.
Figure 12: Responding to Calendar Tool GUI events.