UML <-> Erlang
Mon Nov 17 15:44:46 CET 2003
Well for starters...
I'm not sure I understand the mismatch between OO and Erlang. OO to me
is a way of thinking about design. And Erlang is a specific
programming language. There seem to be many things from the OO
perspective that are realized perfectly in Erlang.
Even OO has modeled the notion of a process. An "active object", as it
has been called, is an object with its own local thread of control.
This has been explained previously as a class that has a constructor
that starts a thread that executes the "real code" while the class
interface functions post messages onto the thread's message queue for
dispatching. Thus methods can execute asynchronously w.r.t each
Taking an approach like this it would be a simple matter to port the
"structure" of Erlang code to C++. (Not too sure about the functional
bits. Replacing pattern matching and LCO with C++ counterparts would
be almost but not quite the exact opposite of pleasure.)
One can model active objects in UML. Perhaps one should even declare a
stereotype <<ActiveObject>> to denote such classes in the design.
Then, whenever one sees one of these <<ActiveObject>> stereotypes in
the design one knows that one is (potentially) dealing with an
asynchronously communicating parallel process (methods can still be
synchronous or asynchronous case by case).
Incidentally one of the reasons I decided to use Erlang was because I
understood the ActiveObject pattern and I was thrilled to see how easy
it was to implement in Erlang. Most of our code is like an
ActiveObject. A gen_server is an ActiveObject.
Erlang is far more general purpose, however, and so if I would like to
communicate design intentions less ambiguously I should use a
stereotype. ActiveObject seems to carry the same implications both in
C++ and Erlang. And I can use UML to assist in the design of either
I think UML through association with specific OO programming languages
may have left its more theoretical roots. Grady Booch, one of the
early men behind UML has long supported the asynchronous communicating
process concepts in his design methodology. Hopefully those interested
in UML can still find those aspects that suit UML well for this mode of
> There may be an impedance mismatch between UML (object-oriented) and
> Erlang (functional and process-oriented). Not to say that it is
> impossible, but to say that several different approaches to map UML
> and Erlang could be equally valid.
> The best I think would be to start from example, like yours maybe, and
> see what it would give in UML. Then to generalize and define precise
> mapping rules, that could be implemented in a tool. I am curious to
> see examples of the mappings you have in mind.
More information about the erlang-questions