This essay has been submitted by a student. This is not an example of the work written by our professional essay writers.
The creation of a pattern language is an incremental process, relating to pattern definition within a particular domain, identification of additional patterns to form a cohesive whole and an assessment of the overall result. The resulting Pattern language should provide an open framework which developers can refine or add new patterns to with ease, whilst using a predefine documented pattern structure."A pattern for software architecture describes a particular recurring design problem that arises in specific design contexts and presents a well-proven generic scheme for its solution. The solution scheme is specified by describing its constituent components, their responsibilities and relationships, and the ways in which they collaborate." (Buschmann et al, 1996).
However, what is not clear is to what extent patterns promote reuse, from the above we can see that patterns form methods for solving previously recognised problems. These problems having arisen a number of times previously in specific design situations. Once the problem has been solved documenting the pattern in a structured way will provide a designer with a basic blueprint for its implementation. Since a pattern will contain a description of the problem it is attempting to solve and a method for it solution, we are able to use the combined knowledge of others to focus on a method in which we will solve the problem. Patterns describe a group of components (classes or objects etc) and how the components interact, and the responsibilities of each component. Therefore, patterns allow us to reuse tried and trusted methods for problem solution without having to worry about the specific code to use. "Design patterns are a level up from code and typically show how to achieve a gaol using a few classes. A pattern represents an idea, not a particular implementation" (S.J. Metsker, 2006) patterns do not provide the solution to a problem they rather suggest a method for solving the problem.
An often stated advantage of patterns is that they will assist in designing a system so that is capable of changing in specific ways. "The key to maximising reuse lies in anticipating new requirements and changes to existing requirements, and in designing your systems so that they can evolve accordingly" (E Gamma, 1995). So whilst Richard Gabriel (1996) in "Patterns of Software" is correct in the sense that a framework can be used for different purposes without the need to completely recode. However, since frameworks are made from the implementation of patterns systems designers using a pattern framework are using the experience of others in solving design problems and are therefore, encouraged to consider how the system might change over time. This is then likely to reducing the need for major design at a later date. Any major redesign are likely to involve class redesign, recoding and retesting, all of which may have additional consequences and require further recoding or redesign. Patterns assist in this by ensuring the ability of a system to change in ways prescribed by the attributes of the particular pattern used, thereby making the system more robust and enabling existing code within the system to be reused. In this patterns fulfill a fundamental principal of Object Orientated Design in that code should be closed to change but open to extension.Further to this patterns enable the reuse of both design and architecture, since they are platform independent. Being platform independent the underpinning design and hardware will be platform independent and should therefore remain stable even with major changes to the hardware of the system; with only the implementation of architecture and design requiring porting.
A Pattern can be viewed as a conceptual description of a framework that makes possible extensive reuse of software architecture. Frameworks provide the tangible realizations of patterns that make possible the reuse of design and code. A framework should incorporate and instantiate design patterns, in order to enforce the reuse of designs in a constructive way (K.Beck, 1994). A significant difference between patterns and frameworks is that patterns are described in language independent manner, whereas frameworks are generally implemented in a particular language. It is then difficult to envisage a pattern language being able to make up an entire framework for a particular language such as Java or C++ as they offer solutions that are not specific and so cannot encompass a complete framework for any one code. However, it is hoped that the next generation of object-oriented frameworks will clearly embody a large number of patterns - and patterns will be widely used to document the form and contents of frameworks.