Multi-version programming (MVP) or N-version programming (NVP) concept was first introduced by Algidras Avizhenis in 1977. The main idea of MVP is that several versions of the same algorithm are used simultaneously to deal with the same system tasks. Than the algorithms´ results are analyzed, and the one, which best meets the system objectives at the current situation, is selected. The selection is carried out according to the inner logics of the system, thus the system reliability is increased. MVP can be used in dealing with a large number of various tasks in complex systems. It is obvious that the building of such systems requires a general concept and a general approach to the development of algorithms, which execute separate tasks. Component-oriented programming methodology perfectly meets these requirements.
Component-oriented programming has been introduced relatively recently. According to this methodology software is built from ready components similarly to the way a building is built of blocks by construction workers. Component-oriented software development implies adding components to the project during the design time. At this time the components are adjusted. Components do offer any user interface neither to a programmer nor to an end user, so special wizards and designers of an integrated development system have to be used to do this. The first component-oriented development environment was created by Microsoft at the very beginning of their life. Later many other development environments based on the same principles were created. So by the end of 20th century the majority of development environment manufacturers had introduced the support for component-oriented programming in their products.
At present, the most advanced component model is offered by Microsoft in their .NET platform.
Component, as Microsoft perceive it, is binary code and data, joined together in an alienable form and able to be used later in the development of software systems. Alienability implies the possibility to use a component without any additional knowledge about it. In practice, it means that a component has to contain all the necessary information about itself. Component also must have a public interface to allow executing the code inside itself. Alienability also means that a component instance can be created dynamically and it is not necessary to use any compilers and interpreter.
In other words, a component is a class, which provides information about itself (metainformation) and which instances can be created dynamically without any static information about itself.
Almost every class in .NET meets these requirements: metainformation is created for any class member, any class instance can be created dynamically and all classes can be put into assemblies (one or more executable modules), which can be distributed independently. However, it is not true that any class in .NET is a component. The reason is that .NET has a special class Conponent. Any class which must interact with the development environment must be derived from Component class.
NET remoting enables to build widely distributed applications easily, whether application components are all on one computer or spread out across the entire world. You can build client applications that use objects in other processes on the same computer or on any other computer that is reachable over its network. .NET remoting also is used to communicate with other application domains in the same process.
NET remoting provides an abstract approach to interprocess communication that separates the object from a specific client or server application domain and from a specific mechanism of communication. As a result, it is flexible and easily customizable. One communication protocol can be replaced with another, or one serialization format with another without recompiling the client or the server. In addition, the remoting system assumes no particular application model. Connection can be established from a Web application, a console application, a Windows Service - from almost anything you want to use. Remoting servers can also be any type of application domain. Any application can host remoting objects and provide its services to any client on its computer or network.
Basing on the foregoing description of the .NET component model basic concepts, it can be inferred that .NET components have the following advantages over the components, which are based on other concepts and technologies:
- Ability to integrate a component into any development environment, which supports appropriate Microsoft standards;
- Ability to create and distribute components by third-party developers;
- Ability to create components in any language and development environment, which supports appropriate Microsoft standards.
Consequently, it is obvious to choose .NET component technology for the development of multi-version components.
Sources:
- Vladislav Chistyakov ".NET - classes, components and controls" RSDN Magazine №3 2003.
- A.V. Kotenok "Development of the environment for multi-version execution of program modules" Vestnik NII SUVPT: proceedings collection; Krasnoyarsk: NII SUVPT. - 2003 №14. - p. 13-21.