Creating Components: Object Oriented, Concurrent, and Distributed Computing in Java