The design of the composition filters model is an extension of the design of the
kernel object model. The design consists of two major parts – the kernel (implementation part), and the outer layer (interface part). The extensions are made in the interface part to produce the composition filters model from the traditional kernel object model.
Implementation part The implementation part or the kernel consists of a single layer with three types of components: • Instance variables • Methods • Conditions It also consists of an encapsulation boundary which separates the implementation and the interface layers.
Instance variables The Instance Variables are the only components of the kernel which are fully encapsulated. It is not possible to access these variables from outside the boundary. In this model, the Instance Variables can be of any type. Primitive data types such as integers, characters and user-defined data types such as classes and enumerations are all considered to be Instance Variables.
Methods The behavior of an object is implemented through its methods. The method consists of two parts – the method body and the method declaration. The actions that an object is expected to perform on being invoked is defined in the method body. The method declaration consists of the method name, the name and type of the parameters and the return type. Methods are not completely encapsulated in the kernel and can be used in the interface part.
Initial method The initial method is a special method whose function is similar to that of the
constructors in other object oriented models.
Conditions A method which has a Boolean return type and an empty parameter list is called a condition. Conditions can be used to provide information about the current state of an object. Similar to methods, conditions too can be used in the interface part and most of the usage of the conditions is outside the implementation part.
Interface part The interface part of the composition filters object model consists of two major components – the input and output filters. It also contains two supporting components – the internals and the externals. Moreover, the methods and conditions from the implementation part can also be accessed from the interface part.
Filters The input and output filters are similar in design but vary in functionality. The input filters are tasked with dealing with the messages which are sent to the object, while output filters do so for messages being sent by the object. The main function of the filters is to manipulate the messages which arrive and pass them to the next layer. Filters are designed in layers, a message has to pass through one layer to reach the next. Each layer may consist of different filters. Each filter specifies a particular pattern. The pattern defines a syntax which an incoming or outgoing message must conform to. When a message arrives, two possibilities exist – the message is rejected by the filter or is manipulated by the filter. The way in which a message is rejected or manipulated depends upon the type of the filter.
Filter design A filter is designed using a set of filter element. This set is ordered since each message is applied from left to right. This continues till a match occurs. Each filter element consists of three components – a condition, a matching part and a substitution part. • Condition – The necessary state which the element has to be in to continue the evaluation of the message. • Matching part – The part where the evaluated message is matched against a pattern. • Substitution part – The part where the replacement values are specified for a message which has been matched earlier.
Internals Internals are nested objects which reference to the input filters. They are completely encapsulated in the interface part. They are automatically created during the creation of an object.
Externals Externals are nested objects which reference to the output filters. They are used to declare objects which lie outside the composition filters model but are still within its scope. An example of such objects are global variables. == SINA programming language ==