Next: 3 Preliminary design of
Up: Specifying component-based software architectures
Previous: 1 Background
The increasing complexity for present software system compels software builders to research efficient abstractions to simplify and make faster the software development process, by reusing successful solutions to formerly solved design problems. Design patterns , software architecture , and component based software development are techniques that enhance the reusability of software by applying the practical approach of ``divide and conquer'' to software design and implementation [MKMG97,BW96,Cle96]. The basic idea is to recognize and describe the gross structure of a software system, in order to identify the fundamental components and to reuse for them design solutions already experienced. The complexity of design patterns ranges from solutions to concrete programming problems to solutions involving the overall organization of the system, till the development of ``off-the-shelf'' components ready to be connected to compose larger applications [MM97].
Formal notations should guide software builders in the development of applications, in order to be more confident in the result of their work. In this work we are interested in the development of modules and components written in the Java programming language [AG96]. In spite of a multifaced growing community of computer users, Java is making software development scenario more uniform, due to its enormous diffusion and to its features of portability, flexibility, and security. Java comes with a set of built-in features that meet the needs of designers involved in the construction of distributed systems. Java extensions like RMI (Remote Method Invocation) [Sun96b], Java Beans [Sun96a], Java-CORBA, and JavaSpaces [W+97], enrich the basic general framework with advanced facilities which have to be mastered in order to build effective distributed applications. However, in the absence of a formal description for these extensions, all their fundamental features are exposed informally, with a number of examples and tutorials.
In this paper we extend the Larch style of specification to modules written in Java, and explore the use of such a notation for the definition of design patterns and components to be employed in the building of concrete applications. The next section introduces Larch/Java notation, while sections 4 and 5 show the application of such a notation for some basic design patterns and for the definition of a simple client-server architecture.
P. Ciancarini and S. Cimato