Publications

"Rubber-Banding and Object-Oriented Design", Java Report, September 2000

I wrote a Java application recently that required rubber-banding of lines, rectangles, and circles. When I was through, the mouseDragged() and mouseReleased() methods contained unslightly "case" statements. To the OO practitioner, "case" statements are considered harmful. This article describes how the original implementation was refactored to eliminate: "case" statements, protected attributes, and replicated code.

"Mastermind and Design Paradigms", Java Report, March 2001

I will discuss a design for the game Mastermind that balances OO design, and more general data structure and algorithm design. The "gang of four" State design pattern and several interesting algorithms will be demonstrated. The first several iterations will implement a solitaire version of the game where the user solves the puzzle. The latter segments will implement a state machine that solves any puzzle supplied by the user.

"Incremental J2EE", Java Report, August 2001

J2EE is Sun's application server framework that dramatically simplifies and accelerates the development of distributed applications. It subsumes all the Java APIs targetted at multi-tier, distributed, enterprise information systems. This article takes a simple-minded stand-alone application, and incrementally evolves it to gently introduce the most interesting APIs of J2EE. The coverage includes:

"The Game of SET and Software Design", Java Report, September 2001

Left brain thinking is usually characterized by logical, sequential problem solving. Right brain thinking is generally associated with intuitive, spatial perception. This article introduces the game of SET - a card game that requires its players to exercise both halves of their brain. It then proceeds to discuss two very different designs for a software implementation of the game: one that relies on an interesting insight, the other that uses object-oriented "triple dispatch".

 

Courses Developed

Advanced C++ and Object Design (Valtech, 40 hours)

Nine "gang of four" design patterns (template method, composite, proxy, chain of responsibility, iterator, visitor, observer, command, decorator), templates, operators, STL, auto_ptr, I/O, generic programming, pointers to members, exceptions, RTTI, performance.

Design Patterns with C++ (Raytheon, 20 hours)

All 23 "gang of four" patterns, many one-page implementations of each, 10 programming labs, 3 case studies.

C++ Idioms (Raytheon, 20 hours)

Double dispatch, virtual constructors, proxies, inheritance heuristics, physical design issues and opportunities.

Orbix with C++ (Raytheon, 20 hours)

IDL, implementing a distributed object (the server, the client, the implementation repository), callbacks, factories, publisher-subscriber.

Intro to Java (Raytheon, 20 hours)

Using the standard library classes, defining new classes, inheritance (of implementation and interface), AWT, applets, packages, exceptions, I/O.

Java II (Raytheon, 20 hours)

The Swing library, threads, java.net package, RMI, JNI, JDBC, Java IDL, JavaBeans, java.lang.reflect package.

Realizing Reuse (Raytheon, 7 hours)

An overview of software life cycle disciplines that make reuse possible: domain analysis, architecture, frameworks, design patterns, design for reuse, design with reuse, and reuse metrics.