Architecture representation is difficult because architecture has various uses. The information necessary for deadlock analysis, for example, is different from the information necessary for a manager to generate work assignments. In this section, we discuss the relationships among various architecture representations and how they are used. Views of the SystemWhen constructing a house, the various tradespeople use differing views of the house to understand their tasks . The plumber's view differs from the electrician's view, which differs from the carpenter 's view. Similarly, differing system views convey different information. The most fundamental distinction is between views that show the static structure of the system before execution and those that show the system when it is executing. This distinction occurs when considering static classes and dynamic objects. It also occurs when considering threads and messages, which exist during the execution of the system but do not exist statically. One requirement for representation, then, is that at least one view must represent the system's static structure and another the system during execution. Another requirement is that at least one view show how the software is mapped onto hardware, including processors, memory, and network connections. Mapping software to hardware is essential for understanding system cost and performance. What's more, the mapping between the views must be clear. Because the various views portray the same system, it must be possible to map entities in one view to entities in another view. These mappings should be clearly identified ”through either naming conventions or written documentation. Levels of GranularityBoth managers and developers use architecture representation. These two groups clearly require different levels of granularity and specificity. A manager tracking progress, for example, should not care about the signature of an interface. A developer constructing a component, on the other hand, is greatly concerned with the signature. Having different levels of granularity allows you to address these different requirements. In each case, you should be able to decompose a high-level representation into a collection of lower-level representations. |