OMT Class Diagrams

I have picked up James Rumbaugh's OMT notation because of its simplicity and express transparency. It miss some of Java constructs but there is a way how to work out this absence.
Interfaces are titled with enclosing '|'s. That means the |Monster| is name of an interface and Monster is name of a class. Therefrom the generalization of an interface means implementing the interface. And that is all folks !

b.examples.generic

Here is nothing to explain. Counter serves as a basic for other more sophisticated samples.


b.examples.idl.counter

Implementing the *Servant interface makes an object remote. Thus CounterImpl implements CounterServant interface to be remote and extends b.examples.generic.Counter to inherit generic counter behavior.
The only operations one can involve remotely are defined in *Operations interface. Server then publish CounterImpl to be accesible by others and Client do resolve its remote reference CounterRef to point to particular remote counter (published by Server). After doing that, client can call methods of CounterRef which are dispatched by IDL mechanism to real remote object.
Note that *Servant, *Ref and *Operations are generated automaticly from IDL definition file.


b.examples.idl.counter - observed

The observed version of remote counter is based on the previous one. The ObservedCounterImpl implements ObservedCounterServant interface to be remotely observable - methods addObserver and removeObserver are dispatched to b.util.idl.RemotelyObservable object (see link has) and serves to clients to be able to register and unregister themselfs as remote observers of this counter.
Next ObservedCounterImpl extends CounterImpl to be remote counter and overides setValue method to notify all observers about counter value change by invoking notifyObservers method of b.util.idl.RemotelyObservable class. An instance of this class then call update method to all of its observers. Thus ObserverClient has to implement b.util.idl.RemoteObserverServant interface.


b.examples.rmi.counter

Implementing an interface based on java.rmi.Remote makes an object remote (big surprice!). Only methods defined in this interface can be then invoked remotely. Thus CounterImpl implements Counter interface to be remote and extends b.examples.generic.Counter to inherit generic counter behavior.
Server then bind CounterImpl in the registry to be accesible by others and Client look up the registry and resolve its remote reference Counter to point to particular remote counter. After doing that, client can call methods of Counter which are dispatched by RMI mechanism to real remote object.


b.examples.rmi.counter - observed

The observed version of remote counter is based on the previous one. The ObservedCounterImpl implements ObservedCounter interface to be remotely observable - methods addObserver and removeObserver are dispatched to b.util.rmi.RemotelyObservable object (see link has) and serves to clients to be able to register and unregister themselfs as remote observers of this counter.
Next ObservedCounterImpl extends CounterImpl to be remote counter and overides setValue method to notify all observers about counter value change by invoking notifyObservers method of b.util.rmi.RemotelyObservable class. An instance of this class then call update method to all of its observers. Thus ObserverClienthas to implement b.util.rmi.RemoteObserver interface.



(c) 1997 by Josef Vosyka. Any questions or comments send to josef.vosyka@vsb.cz.