Objects and systems principled design with implementations in C++ and Java - Zeigler, Bernard P. (Springer, 1997)