Abstract: A component is build to be reused, that have significant impact on component generality and flexibility requirement. The components are built for reuse in different systems, many of them yet to be designed. For that reason a precise component's specification are required because it play a critical role in reusability of software component. To support implementation of different level of component's specification features, different component specification techniques are used. Mostly existing component model use two types of approaches to implement component's specification - programming language approach and Interface Description Language (IDL) approach. In this report I mainly address component's specification of CORBA Component Model and .Net Component model.
Keywords: Component's specification, CCM specification, .Net Component's specification
The basic idea behind Component-Based development (CBD), it is to build system out of reusable components. The major motivation for using components is the ability to reuse them in other application for that purpose a component must have well defines interfaces one or more to communicate with other component within system. To build standard component there are some mechanisms exist like patterns and framework in software industry. Software architecture plays vital role in component based software engineering and works as bridge between system requirements and system implementation. Software architecture describes some basic characteristics including components composition, interactions between components, and communication method. The problem in component-based system arises when a component individually well suited to the system but not communicate properly with other components in system. Due to these constrains, component must be designed and developed in a more general way, therefore requirements analysis is more difficult phase in component development.
Basic architecture of software component consist two parts - code and interface. The functionalities and operations of component are implemented in code, and accesses to these operations are possible through component's interface. The component's interface provides guidelines to access component's operations and context dependencies of components usages. In other words, component's interface is a specification of software component, which tells constrains of software component usage or deploy. In traditional software development and component development, specification of system or component is beneficial for users as well as for developers. Component's specification plays an important role in its development and deployment. Component's specification describes its internal structure, operations and context dependencies .
In section 2 of this report, I describe basic concepts of component's specification and short description of current software component's specification techniques. In this section, I also discuss techniques and existing technologies that provide support to implement different techniques. In section 3, I discuss the component's specification concepts of CORBA Component Model (CCM). In remainder of this section I discuss basic and extended component, basic kinds of ports, components and facets, components and identity, and components home. In section 4, I describe shortly .Net component model that include approach used to implement component's interfaces and internal structure.
Component Specification Techniques
In software component development the essential and most important part is to define component specification, in this way we can separate external or user's views of component from internal or developer's views of component. Different component specifications techniques are in practice, short description of these techniques are given in below subsection.
Syntactic Specification of component
Component provides a set of services by defining operations that component provides with interface, which are also called syntactic specification of a component. Syntactic specifications of a component are implemented using Interface Description Language (IDL) in COM and Common Object Request Broker Architecture (CORBA), but Java programming language is used in Enterprise JavaBeans to implement component's interface. Component's interface can be divided into two categories - provided interfaces (incoming interfaces) and required interfaces (outgoing interfaces). A set of specific operations having input and output parameters are associated with each component's interface. These concepts are shown in below figure 1.
Semantics Specification of component
In practice, syntactic specification of component are most commonly used, but effective use of components required to know about component's operations - semantics specification of components. UML and Object Constraint Language (OCL) are used to write semantics specification of component that include what type of parameter values a component's operation accepts, conditions and constraints to invoke component's operation and possible error code produce by operation.
As earlier I describe component provide a set of services by defining operations through a set of interface. In semantics specification of components, each operation have define set of pre- and post-conditions, which are depend on component's state. An interface's state and operation's input parameters are predicated by pre-condition before execution of operation as well as input and output parameters and interface's state before and after execution of operation are predicated by post-condition. In semantics specification of a component's interface consist a set of invariants - "a predicate over the interface's state model that will always hold" .
Specification of Extra-Functional Properties of component
According to research literature the software component can be divided in to two categories - algorithms and data structure components and architecture components. Due to the complexity of architecture component, it's difficult to describe the architecture component's specification in traditional software doctrine, which are Sufficient and complete, static and Homogeneous . In addition to functionality and syntactic specification of component, extra information are required to use architecture component successfully, which are describe as;
"The information required to use an architectural component goes beyond computational functionality to include structural properties that affect how the component can be composed with other components; extra-functional properties that describe performance, capacity, environmental assumptions, and global properties; and family properties that assert relations among similar or related components." .
In practice it is not possible that architectural component is delivered with complete and sufficient specifications and all above properties, because architectural component's specifications are extensible, incomplete and heterogeneous .
Although it is difficult to address such issue in architectural component specification, but in research literature different concepts are proposed to address these issues. Author of  propose the notion of credentials, in other words incremental, evolving specifications of architectural components. I refer article  for detail description of credentials concept. In coming section I will discuss component specification in CORBA Component Model and .Net Component Model.
3 CCM Component Specification
The main objectives of component base development are reusability of components into other application, to achieve these objectives a component must have well defines interfaces one or more to communicate with other component within system. To standardize the communication between software components within system, Object Management Group (OMG) defines Common Object Request Broker Architecture (CORBA) within large model that called Object Management Architecture (OMA). An abstract level of context in which component's operation executes, component communicates with other component within system and services offer by component are defined by Object Management Architecture (OMA). CORBA Component Model (CCM) is a complete and standardized component specification that recently introduced from OMG. As we know component provide a set of services or functionality through interface, in CORBA Interface Definition Language (IDL) is used to define component's interfaces for communication with other component in deployed system .
The major purpose to propose the CCM specification was to facilitate the component developer, designer, assembler, and deployer by solving complexity of CORBA and its services. "CORBA's flexibility gives the developer a myriad of choices, and requires a vast number of details to be specified. The complexity is simply too high to be able to do so efficiently and quickly" . The other focus of CCM was "a server-side component model for building and deploying CORBA applications" . Form CCM point of view a component can be defined as "a self-contained unit of software code consisting of its own data and logic, with well-defined connections or interfaces exposed for communication. It is designed for repeated use in developing applications, either with or without customization" .
CCM specifications consists inheritable component Homes that are defined independently from component, these Homes are typed that managed component instance life cycle. On the basis of functionality and operation capabilities offer by CCM component can be divided into two levels: basic and extended. Each one is manage be component homes .
Interface - Port
The main features of component through which it communicate with other component in system, these features are implemented in component in the form of interfaces or surface features. CCM specification also support such features in the form of ports, which are divided into four basic kinds, figure 3 show these ports. CCM extended components may offer all kind of ports but basic component only can offer attribute port. and short description of these ports are given below:
- Facets, which are distinct, named interfaces provided by the component for client interaction.
- Receptacles, which are named connection points that describe the component's ability to use a reference supplied by some external agent.
- Event sources, which are named connection points that emit events of a specified type to one or more interested event consumers, or to an event channel.
- Event sinks, which are named connection points into which events of a specified type may be pushed.
- Attributes, which are named values exposed through accessor and mutator operations. Attributes are primarily intended to be used for component configuration, although they may be used in a variety of other ways .
Components and Facets
Mostly commonly used component model provide connector concept for communication purpose with other component within system. CCM specification introduce new concept of connection as "an object reference". Multiple object reference that also called facets, can be support by CCM extended components, in basic component only object are available as interface for interact with client and communication with other components. These facets have capability to support distinct IDL interfaces. CCM extended component through single distinguished reference can support a reference, called component's equivalent interface that allow navigation among component's facets and to connect the component's ports . In Figure 4 the relationship between component and facets is shown.
The relationship between the CCM extended component and its facets can be summarized as:
- Clients have no access to internal structure of component and implementation of external view - facet interfaces, which considered as "parts" of component.
- Navigation facility for clients is supported by component equivalent interface.
- If a component has two references for same component instance, client will be able to find such information.
- Component's life cycle can restrict the facet's life cycle .
Components Identity and Homes
The identification CCM extended component instance based on component's reference and any existence of set of facet references. It is possible that two references can belong to the same component's instance; such situation can be determined by component's operations.
In CCM specification component may have some associated identity data values that are visible at component's client side and used to identify component instances and get references for these instances in the context of component home. These identity data values also called primary keys are associated to component and maintained by component home during component management . In CCM specification component home can be defined as:
"A component home is meta-type that acts as a manager for instances of a specified component type. Component home interfaces provide operations to manage component life cycles, and optionally, to manage associations between component instances and primary key values. A component home may be thought of as a manager for the extent of a type (within the scope of a container). A home must be declared for every component declaration." 
Net Component Specification
In CCM Interface Definition Language (IDL) is used to define component's interfaces, but in .Net component model programming languages approach is used to implement the internal structure as well as external view: component's interfaces. In other words .net component program control the external behavior of component and internal structure of component at execution time is control by compiler. The external behavior of component is related to communication and relationship with other components. The internal structure is related to functionality and capability that required by component. The approach used in .net component model contrasts with approach used CCM model by Object Management Group (OMG). In .net component look like an assembly, manifest exists in assembly that contains description of component. It manages all information of .net component that include exported and imported methods and events, code, metadata, and resources about an assembly .
In .Net component model programming language is used as similar to Enterprise JavaBeans component model, to implement component's interface. To implement component's interface by using programming language in .net component model support many features that can be described as:
"Because of the programming language approach, the corresponding programming language, C#, which is very similar to Java, includes some features of a component model: (first-class) events and extensible metadata information. The compiler not only produces MSIL byte code but also generates, in the manifest, the interface description of the component (called assembly), in the form of a list of import and export types. There is no explicit concept of connection but rather the traditional list of imported and exported resources. DotNET relies on a specific dynamic linker to realize the connections, during execution, between the provided and required resources" .
All components operation information and external behavior information how component communicates with other component in system are access by component's interfaces. The component's specification provides detail description of operation offer by components. There are different component specification technique exist, but in practice only syntactic specification of components are implemented. The UML and OCL are mostly use to define semantics specification of components as well as extra-functional properties of component.
Object Management Group (OMG) defines standard for component's interface by Common Object Request Broker Architecture (CORBA) Component Model. CCM adopt different approach to define component's interfaces from .Net component model that use programming language approach to implement component's specification. In CCM Interface Definition Language (IDL) is used to define component's interfaces. In CCM component can be divided into two categories - basic and extended, on base of functionality of offer by component. The extended component in CCM has some facet "an object reference" of component instance. CCM component have identity data value that are associated by component home.
- Frank Lders, Kung-Kiu Lau, Shui-Ming Ho: "Specification of Software Component." Ivica Crnkovic, Magnus Larsson "Building reliable Component-based Software Systems", Artech House Inc., 2002.
- Shaw, M., "Truth vs Knowledge: The Difference between What a Component Does and What We Know It Does", Proc. 8th Int. Workshop Software Specification and Design, Schloss Velen, Germany, IEEE Computer Society, 1996, Pages 181-185.
- Philip T Cox, Baoming Song: "A Formal Model for Component-Based Software", Dalhousie University, Halifax, Canada
- OMG, "CORBA Components, Report ORBOS/99-02-01, OBJECT MANAGEMENT GROUP, 1998, http://www.omg.org.
- OMG Available Specification, CORBA Component Model Specification, Report version 4, formal/06-04-01, OBJECT MANAGEMENT GROUP, Inc 2006.
- Jacky Estublier, Jean-Marie Favre: "Component Models and Technology." Ivica Crnkovic, Magnus Larsson "Building reliable Component-based Software Systems", Artech House Inc., 2002.