<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nikhil</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nikhil"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Nikhil"/>
	<updated>2026-04-16T01:07:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=42755</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=42755"/>
		<updated>2010-11-27T04:20:38Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
CORBA is the acronym for Common Object Request Broker Architecture. It is an industry standard developed by [http://www.omg.org/ Object Management Group] to provide the object oriented interoperability of applications in distributed systems.&lt;br /&gt;
&lt;br /&gt;
Before diving into the world of CORBA, we need to know the importance of distributed application and it's purpose.&lt;br /&gt;
&lt;br /&gt;
=Purpose of Distributed Applications=&lt;br /&gt;
CORBA can be viewed as a framework for developing and running distributed applications. But the general question to be raised is about the purpose of distributed application. Can’t it be possible to make an application a standalone one everytime?&lt;br /&gt;
&lt;br /&gt;
In most cases the answer is NO. This may be because one or more of the following reasons.&lt;br /&gt;
&lt;br /&gt;
* The data used by the application are distributed.&lt;br /&gt;
&lt;br /&gt;
* The Users of the application are distributed&lt;br /&gt;
&lt;br /&gt;
* The computation is distributed&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Data are distributed&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There may be situations where we want the data to be stored on multiple computers for ownership or administrative reasons and so applications should execute on multiple computers. There may also be the cases where data cannot be co-located and must execute on multiple heterogeneous systems.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Users are distributed&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generally, the Users of the distributed application are distributed, geographically, across different parts. Users of the application communicate and interact with each other via the application by executing a piece of application on his or her computer and shared objects which typically run on one or more servers. A typical architecture is illustrated below&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Computation is distributed&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To utilize the advantage of parallel computing some applications execute on multiple computers. Some applications may want to execute on multiple computers to utilize a unique feature of that particular system.  &lt;br /&gt;
&lt;br /&gt;
=Introduction to CORBA=&lt;br /&gt;
A CORBA-based system is a collection of objects that isolates the clients (one who request a service) and the servers (one who provide a response to the request) by a well-defined encapsulating interface. This is possible because CORBA allows applications to be built in a standard manner using building blocks such as objects.&lt;br /&gt;
&lt;br /&gt;
A CORBA based program from any vendor, on almost any computer, operating system, programming language can interact with a CORBA based program from any vendor on any computer, operating system, programming language. &lt;br /&gt;
&lt;br /&gt;
It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two CORBA based programs. &lt;br /&gt;
&lt;br /&gt;
The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. &lt;br /&gt;
&lt;br /&gt;
Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Difference between CORBA objects and other objects&amp;lt;/b&amp;gt;&lt;br /&gt;
* CORBA objects can run on any platform.&lt;br /&gt;
&lt;br /&gt;
* CORBA objects can be written in any language that has [http://en.wikipedia.org/wiki/Interface_description_language IDL] mapping&lt;br /&gt;
&lt;br /&gt;
* CORBA objects can be located anywhere across the network.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access an application present in another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lots of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
The software that implements the CORBA specification is called the Object Request Broker. This is the core of CORBA and is responsible for the following tasks, whenever it gets the request from the client.&lt;br /&gt;
* It will find the appropriate object implementation for the request&lt;br /&gt;
* It will prepare the object implementation to receive the request&lt;br /&gt;
* It will transfer the data making up the request.&lt;br /&gt;
Some of the examples for ORB are JavaIDL from [http://java.sun.com/products/jdk.idl JavaSoft], ORBIX from [http://www.iona.ie IONA] Technologies etc.&lt;br /&gt;
 [[Image:ORB.png|frame|center]]&lt;br /&gt;
Every request from the client will be handled by ORB independent of the fact that it is a local invocation or a global one.&lt;br /&gt;
* If it is a local invocation, then the request will be directly passed to the sole ORB.&lt;br /&gt;
* If it is a remote invocation, then the invocation will be passed from ORB of the client to ORB of the server.&lt;br /&gt;
Once the ORB gets the appropriate request from the client It will prepare the corresponding Object Implementation and communicates the data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Vendor Specific ORB&amp;lt;/h3&amp;gt;&lt;br /&gt;
  [[Image:ORBs.png|frame|center]]&lt;br /&gt;
From the above discussion and examples, it is evident that CORBA may have more than one implementation and each implementation may be different from different vendors.  So, the commonly raised question is can ORB objects from different vendors be able to communicate with each other?&lt;br /&gt;
&lt;br /&gt;
The answer is yes, if the CORBA implementation is 2.0 and above since all the ORBs that are compatible with CORBA 2.0 and above are able to inter-operate via IIOP protocol. This was not true for CORBA 1.0 products.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
The OMG Interface Definition Language IDL supports the specification of Object Interfaces. The interface of any object describes the actions (operations) that are supported by the object. It does not deal with their implementation details. IDL interfaces are programming language neutral even though they share some syntax notations from C, C++, and Java etc.&lt;br /&gt;
&lt;br /&gt;
From an IDL definition, a particular Object Implementation tells the Client about the available operations and their invocation details. According to these definitions, the objects are mapped to different programming languages, Say C, C++, Java etc. Since mapping of an object to a particular language is completed, you can use any programming language to make requests to that object if you want to use it.&lt;br /&gt;
Some of the data types that are supported by the IDL are short, long, float, string, any etc. and the data structures like struct, union, enum, and sequence etc. &lt;br /&gt;
&lt;br /&gt;
So, using IDL, the following details holds well without regards to any programming language&lt;br /&gt;
* Object Interfaces&lt;br /&gt;
* Actions and the attributes that are supported by that object&lt;br /&gt;
* Operation’s Return value, it’s Data Type, it’s parameters etc.,&lt;br /&gt;
* Exceptions raised by the Operation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample functions and attributes of a product in any catalog.&lt;br /&gt;
&lt;br /&gt;
 module productcatalog{&lt;br /&gt;
  struct product{&lt;br /&gt;
    float weight;&lt;br /&gt;
    double price;&lt;br /&gt;
  };&lt;br /&gt;
  exception Unknown();&lt;br /&gt;
 interface product_details{&lt;br /&gt;
  float get_price();&lt;br /&gt;
  void set_price();&lt;br /&gt;
 };&lt;br /&gt;
};&lt;br /&gt;
The Module block defines the scope of the attributes. Data Structure product and exception are defined and then used in product_details interface.&lt;br /&gt;
&lt;br /&gt;
All these IDL declarations are compiled with an IDL compiler and these are converted to their corresponding representations in target programming languages.&lt;br /&gt;
&lt;br /&gt;
An IDL interface can be defined in terms of other IDL interfaces.&lt;br /&gt;
[[Image:IDL.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
 Interface CatFamily: Cat, Tiger {&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
A CatFamily object supports all of the operations and attributes that are defined by Cat interface as well as those defined by Tiger interface. In other words, the Cat Family interface inherits both Cat and Tiger interfaces.&lt;br /&gt;
&lt;br /&gt;
CORBA products provide an IDL compiler that converts IDL into the Java Programming Language. idltojava is the compiler available for Java 2 SDK.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information can be available to the client application in two ways.&lt;br /&gt;
* Static Invocation Interface&lt;br /&gt;
These interfaces are determined at the compile time and are presented to the client in the form of Stubs.&lt;br /&gt;
* Dynamic Invocation Interface&lt;br /&gt;
The Dynamic Invocation Interface allows client applications to use server objects without knowing the type of server objects at compile time. It allows a client to get an instance of a CORBA object and let it make invocations on that object by constructing requests dynamically. There will be an interface repository for which the DII uses to validate and retrieve the signature of the operation on which a request is made. Normally this information is encapsulated in the CORBA::Request pseudo-object. To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Skeleton Interface==&lt;br /&gt;
&lt;br /&gt;
DSI can be viewed as DII on server side, with minor exceptions though. The functionality of the DSI is to allow the servers to be written without having compile-time knowledge, or skeletons for the objects that are being implemented.&lt;br /&gt;
&lt;br /&gt;
DII was a part of initial CORBA specification where as DSI was introduced in CORBA 2.0. The main purpose of the DSI is to support the interoperability between ORBs by implementing the gateways between them which utilize different communication protocols. Other applications of DSI include interactive software tools based on interpreters and debuggers.&lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Interface Repository, as the name suggests, is a collection of the set of all interfaces that are used to specify different objects. Any new interface will be added to this repository. Using Information Repository, the client should be able to locate an object which is not known at the compile time, finding information about its interface, and then building a request to be forwarded through ORB.&lt;br /&gt;
&lt;br /&gt;
This is how this can be explained in practice.&lt;br /&gt;
&lt;br /&gt;
The service that is supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects, such as Operation Definition, that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface.&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the [http://en.wikipedia.org/wiki/Adapter_pattern Adapter Pattern] comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] and [http://en.wikipedia.org/wiki/Coupling_%28computer_science%29 Coupling] are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
Coupling is a measure of the strength of dependency between different software modules. The stronger the coupling, the stronger the inter dependency between the modules in the system. A design is considered to be bad when there is strong coupling between different modules. It is not possible to completely eliminate coupling, but we should try to minimize it as much as possible. Strongly coupled distributed objects affects the flexibility of our system. In an object oriented system, four types of coupling can occur.&lt;br /&gt;
&lt;br /&gt;
NIL Coupling - No dependency between two classes&lt;br /&gt;
&lt;br /&gt;
Export Coupling - A class is dependent on only the public interface of an other class&lt;br /&gt;
&lt;br /&gt;
Overt Coupling - A class is dependent on implementation details of other class but with permission&lt;br /&gt;
&lt;br /&gt;
Covert Coupling - A class is dependent on implementation details of other class but no permission was given&lt;br /&gt;
&lt;br /&gt;
It is not possible to build a distributed system without Export Coupling as an object will need to interact with another object on a distributed system by making use of the semantics defined by the object interfaces. It is the other types of couplings that prevent us from building a loosely coupled system. However in a distributed system Covert Coupling cannot take place as Interface Definition Language only expresses the public interface of a distributed object and internals are not exposed. We can also avoid Overt Coupling by defining all the interfaces in a subsystem at the same level of abstraction.&lt;br /&gt;
&lt;br /&gt;
=Advantages and Disadvantages=&lt;br /&gt;
CORBA is not a programming language, but a specification for creating and using objects. A few of the advantages that we can avail by using CORBA are,&lt;br /&gt;
&lt;br /&gt;
1)CORBA allows methods on a remote object to be accessed as if they were on the Local machine&lt;br /&gt;
&lt;br /&gt;
2) Using CORBA, one does not need to worry about factors like&lt;br /&gt;
* Packets&lt;br /&gt;
* Flow control&lt;br /&gt;
* Message loss. &lt;br /&gt;
3) The main advantage of CORBA is it is very scalable&lt;br /&gt;
* Platform and Language Independent&lt;br /&gt;
* Object Oriented&lt;br /&gt;
4) Since the functionality is partitioned, it would be very easy to update a client or a server&lt;br /&gt;
&lt;br /&gt;
5) It can deal with Heterogeneous systems.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disadvantages&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) Control over how information is actually sent will be less.&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
The CORBA OMG Common Object Services specification defines a set of event services to support asynchronous communication between potentially distributed CORBA objects. CORBA is an architecture that supports a remote method invocation paradigm by providing location transparency. It allows adding, exchange, and removing services dynamically and hides the system details from the developer. It is language independent and is one of the best architectures for Remote Method Invocation&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
[1] Schmidt, “An Overview of Corba”, http://www.cs.wustl.edu/~schmidt/corba-overview.html&lt;br /&gt;
&lt;br /&gt;
[2] Steve Vinoske, “Distributed Object Computing using Corba” [Print.]&lt;br /&gt;
&lt;br /&gt;
[3] &amp;quot;A tutorial on Corba&amp;quot;, http://www-cdfonline.fnal.gov/daq/CORBAXXX/tutorial.html.&lt;br /&gt;
&lt;br /&gt;
[4] Balen and Henry, “Distributed Object Architectures” [Print.]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;An Introduction to Corba&amp;quot;, http://java.sun.com/developer/Books/corba/ch11.pdf&lt;br /&gt;
&lt;br /&gt;
[6] &amp;quot;An Overview of Corba&amp;quot;, http://java.sun.com/developer/Books/corba/ch11.pdf&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41692</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41692"/>
		<updated>2010-11-18T00:14:37Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs. &lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in [http://en.wikipedia.org/wiki/Interface_description_language IDL]. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the [http://en.wikipedia.org/wiki/Adapter_pattern Adapter Pattern] comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] and [http://en.wikipedia.org/wiki/Coupling_%28computer_science%29 Coupling] are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
Coupling is a measure of the strength of dependency between different software modules. The stronger the coupling, the stronger the inter dependency between the modules in the system. A design is considered to be bad when there is strong coupling between different modules. It is not possible to completely eliminate coupling, but we should try to minimize it as much as possible. Strongly coupled distributed objects affects the flexibility of our system. In an object oriented system, four types of coupling can occur.&lt;br /&gt;
&lt;br /&gt;
NIL Coupling - No dependency between two classes&lt;br /&gt;
&lt;br /&gt;
Export Coupling - A class is dependent on only the public interface of an other class&lt;br /&gt;
&lt;br /&gt;
Overt Coupling - A class is dependent on implementation details of other class but with permission&lt;br /&gt;
&lt;br /&gt;
Covert Coupling - A class is dependent on implementation details of other class but no permission was given&lt;br /&gt;
&lt;br /&gt;
It is not possible to build a distributed system without Export Coupling as an object will need to interact with another object on a distributed system by making use of the semantics defined by the object interfaces. It is the other types of couplings that prevent us from building a loosely coupled system. However in a distributed system Covert Coupling cannot take place as Interface Definition Language only expresses the public interface of a distributed object and internals are not exposed. We can also avoid Overt Coupling by defining all the interfaces in a subsystem at the same level of abstraction.&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
[[#References|[1]]] An overview of Corba [Online]. http://www.cs.wustl.edu/~schmidt/corba-overview.html&lt;br /&gt;
&lt;br /&gt;
[[#References|[2]]] Distributed Object Architectures by Balen, Henry [Print.]&lt;br /&gt;
&lt;br /&gt;
[[#References|[3]]] A tutorial on Corba [Online]. http://www-cdfonline.fnal.gov/daq/CORBAXXX/tutorial.html&lt;br /&gt;
&lt;br /&gt;
[[#References|[4]]] A Distributed Object computing using Corba [Print.]&lt;br /&gt;
&lt;br /&gt;
[[#References|[5]]] Wikipedia. Common Object Request Broker Architecture [Online]. http://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41679</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41679"/>
		<updated>2010-11-18T00:07:21Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs. &lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in [http://en.wikipedia.org/wiki/Interface_description_language IDL]. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the [http://en.wikipedia.org/wiki/Adapter_pattern Adapter Pattern] comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] and [http://en.wikipedia.org/wiki/Coupling_%28computer_science%29 Coupling] are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
Coupling is a measure of the strength of dependency between different software modules. The stronger the coupling, the stronger the inter dependency between the modules in the system. A design is considered to be bad when there is strong coupling between different modules. It is not possible to completely eliminate coupling, but we should try to minimize it as much as possible. Strongly coupled distributed objects affects the flexibility of our system. In an object oriented system, four types of coupling can occur.&lt;br /&gt;
&lt;br /&gt;
NIL Coupling - No dependency between two classes&lt;br /&gt;
&lt;br /&gt;
Export Coupling - A class is dependent on only the public interface of an other class&lt;br /&gt;
&lt;br /&gt;
Overt Coupling - A class is dependent on implementation details of other class but with permission&lt;br /&gt;
&lt;br /&gt;
Covert Coupling - A class is dependent on implementation details of other class but no permission was given&lt;br /&gt;
&lt;br /&gt;
It is not possible to build a distributed system without Export Coupling as an object will need to interact with another object on a distributed system by making use of the semantics defined by the object interfaces. It is the other types of couplings that prevent us from building a loosely coupled system. However in a distributed system Covert Coupling cannot take place as Interface Definition Language only expresses the public interface of a distributed object and internals are not exposed. We can also avoid Overt Coupling by defining all the interfaces in a subsystem at the same level of abstraction.&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
[[#References|[1]]] Wikipedia. (2010, October) Wikipedia - Singleton_Pattern. [Online]. http://en.wikipedia.org/wiki/Singleton_pattern#Traditional_simple_way&lt;br /&gt;
&lt;br /&gt;
[[#References|[2]]] Freeman, Eric, Elisabeth Freeman, Kathy Sierra, and Bert Bates. (October 2004) Head First design patterns. [Print.]&lt;br /&gt;
&lt;br /&gt;
[[#References|[3]]] C# Corner (2010, October) Creational Patterns - Singleton. [Online]. http://www.c-sharpcorner.com/UploadFile/susanabraham/CreationalPatterns06042005050058AM/CreationalPatterns.aspx&lt;br /&gt;
&lt;br /&gt;
[[#References|[4]]] Source Making (2010, October) Singleton Design Pattern. [Online]. http://sourcemaking.com/design_patterns/singleton&lt;br /&gt;
&lt;br /&gt;
[[#References|[5]]] JavaBeginner.com (2010, October) Java Singleton Design Pattern. [Online]. http://www.javabeginner.com/learn-java/java-singleton-design-pattern&lt;br /&gt;
&lt;br /&gt;
[[#References|[6]]] Dalibor Nasevic (2010, October) Ruby Singleton Pattern Again. [Online]. http://dalibornasevic.com/posts/9-ruby-singleton-pattern-again&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41661</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41661"/>
		<updated>2010-11-17T23:55:44Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs. &lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in [http://en.wikipedia.org/wiki/Interface_description_language IDL]. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the [http://en.wikipedia.org/wiki/Adapter_pattern Adapter Pattern] comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] and [http://en.wikipedia.org/wiki/Coupling_%28computer_science%29 Coupling] are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
Coupling is a measure of the strength of dependency between different software modules. The stronger the coupling, the stronger the inter dependency between the modules in the system. A design is considered to be bad when there is strong coupling between different modules. It is not possible to completely eliminate coupling, but we should try to minimize it as much as possible. Strongly coupled distributed objects affects the flexibility of our system. In an object oriented system, four types of coupling can occur.&lt;br /&gt;
&lt;br /&gt;
NIL Coupling - No dependency between two classes&lt;br /&gt;
&lt;br /&gt;
Export Coupling - A class is dependent on only the public interface of an other class&lt;br /&gt;
&lt;br /&gt;
Overt Coupling - A class is dependent on implementation details of other class but with permission&lt;br /&gt;
&lt;br /&gt;
Covert Coupling - A class is dependent on implementation details of other class but no permission was given&lt;br /&gt;
&lt;br /&gt;
It is not possible to build a distributed system without Export Coupling as an object will need to interact with another object on a distributed system by making use of the semantics defined by the object interfaces. It is the other types of couplings that prevent us from building a loosely coupled system. However in a distributed system Covert Coupling cannot take place as Interface Definition Language only expresses the public interface of a distributed object and internals are not exposed. We can also avoid Overt Coupling by defining all the interfaces in a subsystem at the same level of abstraction.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41659</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41659"/>
		<updated>2010-11-17T23:53:53Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs. &lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] and [http://en.wikipedia.org/wiki/Coupling_%28computer_science%29 Coupling] are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
Coupling is a measure of the strength of dependency between different software modules. The stronger the coupling, the stronger the inter dependency between the modules in the system. A design is considered to be bad when there is strong coupling between different modules. It is not possible to completely eliminate coupling, but we should try to minimize it as much as possible. Strongly coupled distributed objects affects the flexibility of our system. In an object oriented system, four types of coupling can occur.&lt;br /&gt;
&lt;br /&gt;
NIL Coupling - No dependency between two classes&lt;br /&gt;
&lt;br /&gt;
Export Coupling - A class is dependent on only the public interface of an other class&lt;br /&gt;
&lt;br /&gt;
Overt Coupling - A class is dependent on implementation details of other class but with permission&lt;br /&gt;
&lt;br /&gt;
Covert Coupling - A class is dependent on implementation details of other class but no permission was given&lt;br /&gt;
&lt;br /&gt;
It is not possible to build a distributed system without Export Coupling as an object will need to interact with another object on a distributed system by making use of the semantics defined by the object interfaces. It is the other types of couplings that prevent us from building a loosely coupled system. However in a distributed system Covert Coupling cannot take place as Interface Definition Language only expresses the public interface of a distributed object and internals are not exposed. We can also avoid Overt Coupling by defining all the interfaces in a subsystem at the same level of abstraction.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41655</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41655"/>
		<updated>2010-11-17T23:50:50Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs. &lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
Cohesion and Coupling are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
Coupling is a measure of the strength of dependency between different software modules. The stronger the coupling, the stronger the inter dependency between the modules in the system. A design is considered to be bad when there is strong coupling between different modules. It is not possible to completely eliminate coupling, but we should try to minimize it as much as possible. Strongly coupled distributed objects affects the flexibility of our system. In an object oriented system, four types of coupling can occur.&lt;br /&gt;
&lt;br /&gt;
NIL Coupling - No dependency between two classes&lt;br /&gt;
&lt;br /&gt;
Export Coupling - A class is dependent on only the public interface of an other class&lt;br /&gt;
&lt;br /&gt;
Overt Coupling - A class is dependent on implementation details of other class but with permission&lt;br /&gt;
&lt;br /&gt;
Covert Coupling - A class is dependent on implementation details of other class but no permission was given&lt;br /&gt;
&lt;br /&gt;
It is not possible to build a distributed system without Export Coupling as an object will need to interact with another object on a distributed system by making use of the semantics defined by the object interfaces. It is the other types of couplings that prevent us from building a loosely coupled system. However in a distributed system Covert Coupling cannot take place as Interface Definition Language only expresses the public interface of a distributed object and internals are not exposed. We can also avoid Overt Coupling by defining all the interfaces in a subsystem at the same level of abstraction.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41650</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41650"/>
		<updated>2010-11-17T23:47:49Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
Cohesion and Coupling are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
Coupling is a measure of the strength of dependency between different software modules. The stronger the coupling, the stronger the inter dependency between the modules in the system. A design is considered to be bad when there is strong coupling between different modules. It is not possible to completely eliminate coupling, but we should try to minimize it as much as possible. Strongly coupled distributed objects affects the flexibility of our system. In an object oriented system, four types of coupling can occur.&lt;br /&gt;
&lt;br /&gt;
NIL Coupling - No dependency between two classes&lt;br /&gt;
&lt;br /&gt;
Export Coupling - A class is dependent on only the public interface of an other class&lt;br /&gt;
&lt;br /&gt;
Overt Coupling - A class is dependent on implementation details of other class but with permission&lt;br /&gt;
&lt;br /&gt;
Covert Coupling - A class is dependent on implementation details of other class but no permission was given&lt;br /&gt;
&lt;br /&gt;
It is not possible to build a distributed system without Export Coupling as an object will need to interact with another object on a distributed system by making use of the semantics defined by the object interfaces. It is the other types of couplings that prevent us from building a loosely coupled system. However in a distributed system Covert Coupling cannot take place as Interface Definition Language only expresses the public interface of a distributed object and internals are not exposed. We can also avoid Overt Coupling by defining all the interfaces in a subsystem at the same level of abstraction.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41633</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41633"/>
		<updated>2010-11-17T23:37:17Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
Cohesion and Coupling are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
Coupling is a measure of the strength of dependency between different software modules. The stronger the coupling, the stronger the inter dependency between the modules in the system. A design is considered to be bad when there is strong coupling between different modules. It is not possible to completely eliminate coupling, but we should try to minimize it as much as possible. Strongly coupled distributed objects affects the flexibility of our system. In an object oriented system, four types of coupling can occur.&lt;br /&gt;
&lt;br /&gt;
NIL Coupling - No dependency between two classes&lt;br /&gt;
&lt;br /&gt;
Export Coupling - A class is dependent on only the public interface of an other class&lt;br /&gt;
&lt;br /&gt;
Overt Coupling - A class is dependent on implementation details of other class but with permission&lt;br /&gt;
&lt;br /&gt;
Covert Coupling - A class is dependent on implementation details of other class but no permission was given&lt;br /&gt;
&lt;br /&gt;
It is not possible to build a distributed system without Export Coupling as an object will need to interact with another object on a distributed system by making use of the semantics defined by the object interfaces.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41280</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41280"/>
		<updated>2010-11-17T20:15:31Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling in Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
Cohesion and Coupling are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
==Cohesion==&lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
==Coupling==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41257</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41257"/>
		<updated>2010-11-17T19:55:45Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling=&lt;br /&gt;
&lt;br /&gt;
Cohesion and Coupling are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. When we produce a cohesive distributed object model, we find that each of the interface represents essential concepts. Each object is easier to understand and the system is more maintainable, and the components that comprise the system are easy to reuse. All of this contributes to reducing the overall cost of the system. In order to build a distributed object model comprising of functionally cohesive interfaces, the following guidelines should be followed.&lt;br /&gt;
&lt;br /&gt;
1 . Each interface should represent a concept and all elements should be strongly related to that abstraction. &lt;br /&gt;
&lt;br /&gt;
2 . Every method should perform a single coherent task.&lt;br /&gt;
&lt;br /&gt;
3 . Each of the subsystems of the distributed architecture should themselves be cohesive. For a subsystem to be cohesive, all the interfaces that comprise that subsystem should also be cohesive. &lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41183</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41183"/>
		<updated>2010-11-17T18:46:37Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling=&lt;br /&gt;
&lt;br /&gt;
Cohesion and Coupling are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
The Distributed system that we build consists of a set of subsystems. Each subsystem consists of a set of distributed objects to support the functionality of that subsystem. Those objects that are present on different systems but belong to a same subsystem interact through CORBA. To come up with a good design a set of guiding principles have to be followed. By design, the subsystem should be cohesive. The Distributed objects with in the sub system should support the object oriented concept represented by the system. Each subsystem should be coherent. Each class we design should represent a well defined concept of a set of concepts derived from the business model. &lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41119</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41119"/>
		<updated>2010-11-17T15:33:09Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling=&lt;br /&gt;
&lt;br /&gt;
Cohesion and Coupling are two of the important concepts that have to be taken care of while designing an object oriented system. &lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41115</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=41115"/>
		<updated>2010-11-17T15:23:11Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Cohesion and Coupling=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40373</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40373"/>
		<updated>2010-11-14T15:41:21Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=CORBA Architecture=&lt;br /&gt;
&lt;br /&gt;
The Following picture depicts the major components in CORBA&lt;br /&gt;
&lt;br /&gt;
                                [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:CORBA_Architecture.png&amp;diff=40372</id>
		<title>File:CORBA Architecture.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:CORBA_Architecture.png&amp;diff=40372"/>
		<updated>2010-11-14T15:37:26Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40371</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40371"/>
		<updated>2010-11-14T15:37:11Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Corba Architecture=&lt;br /&gt;
&lt;br /&gt;
                     [[Image:CORBA_Architecture.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Distributed.png&amp;diff=40370</id>
		<title>File:Distributed.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Distributed.png&amp;diff=40370"/>
		<updated>2010-11-14T15:23:44Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40369</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40369"/>
		<updated>2010-11-14T15:22:55Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
                                [[Image:Distributed.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40368</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40368"/>
		<updated>2010-11-14T15:09:24Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
This is where the Adapter Pattern comes into play. Objects written in a particular programming language need to interact with objects written in other languages. A basic object adapter provides the means by which various objects can interact with the ORB. For example it provides Object reference generation, Object method invocation, security, activation and deactivation of objects and implementations. Object Adapter can either choose to provide these services by delegating them to the ORB or it can provide them by itself. In any case Objects does not know about the differences between other objects as they interface only to the Object Adapter. Each ORB provides a basic object adapter. It supports objects implemented as separate programs. It is expected that most object implementations can work with Basic Object Adapter because it supports various object implementations.  &lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40367</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40367"/>
		<updated>2010-11-14T14:42:14Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
There are &lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40366</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40366"/>
		<updated>2010-11-14T14:33:16Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
Interface repositories can be used for several purposes. Interface browsers can traverse Interface Repository information to help application developers locate potentially re-usable software components. ORB's could use them to check operation parameter types at run time. The primary function of the Interface Repository is to provide the type information necessary to issue requests using the dynamic invocation interface. &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40350</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40350"/>
		<updated>2010-11-14T05:47:20Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object reference to an interface definition that describes the Object's interface. The interface definition is stored in the interface repository which provides persistent storage for IDL interface declarations. The services offered by Interface Repository allow navigation of Objects inheritance hierarchy and provide description of all operations the object supports. Some of these services return references to other Interface Repository objects such as Operation Definition that describe operations and Exception definitions that describe user-defined exception types.&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40346</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40346"/>
		<updated>2010-11-14T05:31:11Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This operation returns an object interface to an interface &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40345</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40345"/>
		<updated>2010-11-14T05:23:18Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references in the get_interface() operation. This interface returns &lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40344</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40344"/>
		<updated>2010-11-14T05:04:55Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
To invoke an operation on a CORBA object an application needs an object reference, the name of the operation and a list of the parameters. In addition the application must know whether the operation is one-way, what user-defined exceptions it may throw, any user-context strings which must be supplied, a `context' to take these values from and the type of the returned value. This information is given by the IDL interface declaration, and so is normally made available to the application via the stub code. In the DII this information is encapsulated in the CORBA::Request pseudo-object.&lt;br /&gt;
&lt;br /&gt;
To perform an operation invocation the application must obtain an instance of a Request object, supply the information listed above and call one of the methods to actually make the invocation. If the invocation causes an exception to be thrown then this may be retrieved and inspected, or the return value on success. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40341</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40341"/>
		<updated>2010-11-13T23:10:45Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
Another service supported by the object interface and hence all object references is the get_interface() operation. This operation returns an object interface to an interface definition that describes the object's interface. &lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40337</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40337"/>
		<updated>2010-11-13T22:58:32Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
In this example, a client of Mailbox object can use the return value of MailMsg operation to invoke operations on a MailMsg object, since the return value is an object reference.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40336</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40336"/>
		<updated>2010-11-13T22:51:20Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
interface MailMsg;&lt;br /&gt;
interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40335</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40335"/>
		<updated>2010-11-13T22:50:44Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
Interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40334</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40334"/>
		<updated>2010-11-13T22:49:36Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
Interface MailMsg;&lt;br /&gt;
&lt;br /&gt;
Interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40333</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40333"/>
		<updated>2010-11-13T22:48:27Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
Interface MailMsg;&lt;br /&gt;
&lt;br /&gt;
Interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40312</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40312"/>
		<updated>2010-11-13T18:03:32Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types. Operations can be declared to return object references and to take object references as arguments by simply using the interface names as follows :&lt;br /&gt;
&lt;br /&gt;
Interface MailMsg;&lt;br /&gt;
Interface Mailbox&lt;br /&gt;
{&lt;br /&gt;
    MailMsg nextMessage();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40311</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40311"/>
		<updated>2010-11-13T17:59:57Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
==Interface Definition Language==&lt;br /&gt;
&lt;br /&gt;
Even though an object reference identifies a particular object, it does not necessarily describe anything about the objects interface. Before an application makes use of an object, it should know what are all the services provided by that object. In CORBA object interfaces are defined in IDL. IDL is a declarative language, with syntax similar to c++. IDL provides basic data, constructed and template types. These are used in operation declarations to define argument types and return types. In turn operations are used in interface declarations to define the services provided by the objects. IDL also provides module construct that can hold interfaces, type definitions and other modules for name scoping purposes. Of all the types provided by IDL, interfaces are the most important. In addition to describing CORBA objects, they are also used to define object reference types&lt;br /&gt;
&lt;br /&gt;
==Dynamic Invocation Interface==&lt;br /&gt;
&lt;br /&gt;
==Interface Repository==&lt;br /&gt;
&lt;br /&gt;
==Object Adapters==&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40309</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40309"/>
		<updated>2010-11-13T16:35:38Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
Regardless to which of these methods the client uses to make a request, the ORB locates the object, activates it and passes the request. The Object does not know whether the request came from a static stub or from a dynamic invocation interface. It just takes the request and delivers the output to the ORB.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40308</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40308"/>
		<updated>2010-11-13T16:29:57Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf. The purpose of ORB is to deliver requests to objects and return the results to the clients. The ORB services necessary to accomplish this are completely transparent to the client. Client need not know where on the network the object resides, how they communicate, how they are implemented etc. Before a client can issue a request to an object, he/she should hold a reference to that object. An ORB uses object references to identify and locate objects so that it can pass requests to them. As long as the referenced object exists, the ORB allows the object holder to request services from it. The Corba specifies two different ways in which client can issue requests to objects&lt;br /&gt;
&lt;br /&gt;
   '''Static Invocation via Interface-Specific [http://en.wikipedia.org/wiki/Method_stub STUBS]'''&lt;br /&gt;
   '''Dynamic Invocation via the ORB dynamic invocation interface [http://en.wikipedia.org/wiki/Dynamic_Invocation_Interface DII]'''&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40305</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40305"/>
		<updated>2010-11-13T16:10:18Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
The Corba is composed of five major components&lt;br /&gt;
&lt;br /&gt;
==ORB Core==&lt;br /&gt;
&lt;br /&gt;
In the [http://www.omg.org/oma/ OMA] object model, objects provide services and clients issues requests for those services to be performed on their behalf.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40304</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40304"/>
		<updated>2010-11-13T16:02:52Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40303</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40303"/>
		<updated>2010-11-13T07:42:31Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Need for CORBA=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;br /&gt;
&lt;br /&gt;
=&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40302</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40302"/>
		<updated>2010-11-13T07:00:47Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
CORBA is an acronym for Common Object Request Broker Architecture. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
CORBA was designed by [http://www.omg.org/ Object Management Group] to provide an object oriented interoperability of applications in a distributed systems. The use of Object Oriented Design, analysis and design using CORBA allows for great re-usability across systems. Advantages of Object Oriented Features such as inheritance, encapsulation and dynamic binding are implemented in CORBA.&lt;br /&gt;
&lt;br /&gt;
=Distributed Systems=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40301</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40301"/>
		<updated>2010-11-13T06:28:05Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources. The Common Object Request Broker Architecture is an effective resource in allowing interoperability of heterogeneous systems in a distributed systems. CORBA is emerging as a standard of distributed computing and has lot of advantages that make use of distributed computing. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two Corba based programs.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40300</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40300"/>
		<updated>2010-11-13T06:21:33Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=CORBA=&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
'''Corba''' is the acronym for &amp;quot;Common Object Request Broker Architecture&amp;quot;. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Request Broker Architecture=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40299</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40299"/>
		<updated>2010-11-13T06:21:07Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CORBA'''&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
'''Corba''' is the acronym for &amp;quot;Common Object Request Broker Architecture&amp;quot;. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two corba based programs.&lt;br /&gt;
&lt;br /&gt;
=Request Broker Architecture=&lt;br /&gt;
&lt;br /&gt;
The recent advances in the technology have resulted in evolution of many different computing architectures. In today's scenario interaction of computer applications in a distributed system is of prime importance. Allowing one computer to access application present on another computer is an example of need of a distributed system that manages these resources.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40298</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40298"/>
		<updated>2010-11-13T05:47:17Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CORBA'''&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
'''Corba''' is the acronym for &amp;quot;Common Object Request Broker Architecture&amp;quot;. It is a vendor independent architecture and infrastructure that computer applications use to work together over networks. A Corba based program from any vendor, on almost any computer, operating system, programming language can interact with a corba based program from any vendor on any computer, operating system, programming language. It uses [http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol IIOP] protocol to form the communication between two corba based programs.&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40280</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6i CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6i_CB&amp;diff=40280"/>
		<updated>2010-11-11T17:33:54Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CORBA'''&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=34368</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 CC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=34368"/>
		<updated>2010-09-09T01:33:22Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Usually most of the real world problems are large, complex and less well defined. Therefore the analysis and refinement of design would be a longer and complex process. As our problem becomes large and complicated, it is unlikely that our initial designs are perfect. Therefore it is a good practice to repeatedly check these initial designs and make necessary changes before we can convert these into final ones. One way of refining our initial designs is by using CRC cards. &lt;br /&gt;
 &lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''CRC''' stands for '''Class Responsibility Collaborator'''.CRC card modeling is one of the venerable Object Oriented Design Technique. This technique is used in determining the various classes, their functionalities and their collaborations in the software system.Class, Responsibilities and Collaborators are recorded on index cards to facilitate team-based role play.&lt;br /&gt;
&lt;br /&gt;
'''Class-Responsibility-Collaboration''' cards have been first introduced by Kent Beck and Ward Cunningham in their paper &amp;quot;A Laboratory for teaching Object-Oriented Thinking&amp;quot; as a way to help beginners learn object oriented design.More recently, the technique has become regarded useful beyond teaching because of the subtle way it supports critical characteristics of design.CRC cards are used to document all the classes and their collaboration with the other classes in the system. This helps us in the process of designing a flawless system. This is also a cheap way of designing a system. Not just one but multiple designers can work together in designing a system using CRC cards modeling technique.&lt;br /&gt;
&lt;br /&gt;
The CRC card technique has three basic strengths.The three strengths are:&lt;br /&gt;
&lt;br /&gt;
* CRC cards facilitate open discussion of static structure of system.&lt;br /&gt;
&lt;br /&gt;
* CRC cards have built-in heuristics that guide design, in the name of determining the Class name, the Responsibilities, and the Collaborators.&lt;br /&gt;
&lt;br /&gt;
* CRC cards facilitate open discussion of dynamic structure, the &amp;quot;what-if&amp;quot; exploration, by use of role play.&lt;br /&gt;
&lt;br /&gt;
== Structure of a CRC card ==&lt;br /&gt;
&lt;br /&gt;
CRC cards explicitly represent multiple objects simultaneously.CRC card components are explained as follows:&lt;br /&gt;
&lt;br /&gt;
'''Class Name'''&lt;br /&gt;
&lt;br /&gt;
The class name appears across the top of the card. The class represents a collection of similar objects. Objects are things of interest in the system being designed. They can be a person, place, thing or any other important concept information to the system at hand. &lt;br /&gt;
 &lt;br /&gt;
'''Class Responsibilities'''&lt;br /&gt;
&lt;br /&gt;
A Responsibility is anything that the class knows or does. These responsibilities are the things that the class has knowledge about itself, or the things the class can do with the knowledge it has. &lt;br /&gt;
&lt;br /&gt;
For example a person class might have knowledge for its name, address and phone number. In other example an automobile class might have knowledge of its size, the number of doors or it might be able to do things like stop and go. The responsibilities of the class appear on the left side of the card.&lt;br /&gt;
&lt;br /&gt;
'''Collaborators'''&lt;br /&gt;
&lt;br /&gt;
A Collaborator is another class that is used to get information from or perform actions for the class at hand. It often works with a particular class to complete a step in a scenario. All the collaborator classes appear on the right side of the card.&lt;br /&gt;
&lt;br /&gt;
[[Image:CRC.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:crc_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
A CRC card might also contain additional information such as Super and Sub classes, name of the author of the class etc. The back side of the card is generally used to give a detailed explanation of the class the card represents.&lt;br /&gt;
&lt;br /&gt;
== CRC Cards in Design Development ==&lt;br /&gt;
&lt;br /&gt;
1. Work using role play. Different individuals are different objects.&lt;br /&gt;
&lt;br /&gt;
2. Pick a use case to building a scenarioto hand simulate.&lt;br /&gt;
&lt;br /&gt;
3. Start with the person who has the card with the responsibility to initiate the use case.&lt;br /&gt;
&lt;br /&gt;
4. In discharging a responsibility card owner may only talk to collaborators for that responsibility.&lt;br /&gt;
&lt;br /&gt;
5. Gaps must be repaid and re-tested against the use case.&lt;br /&gt;
&lt;br /&gt;
== CRC Session ==&lt;br /&gt;
&lt;br /&gt;
The CRC session is conducted by different types of people involved in the project. The overall size of the CRC team should be limited to six. Because as the team size increases the number of conversations increase exponentially. Generally four types of people participate in the crc session. They are&lt;br /&gt;
&lt;br /&gt;
1 . '''Domain Users'''&lt;br /&gt;
&lt;br /&gt;
The Domain Users are the users of the system being designed. They should have good amount of business knowledge about the system which is being modeled.&lt;br /&gt;
&lt;br /&gt;
2 . '''OO Design Analyst'''&lt;br /&gt;
&lt;br /&gt;
Object oriented Analysts are the ones who are familiar with the OO methodologies and techniques. Their responsibilities on the project are well beyond the CRC modelling sessions.&lt;br /&gt;
&lt;br /&gt;
3 . '''Facilitator'''&lt;br /&gt;
&lt;br /&gt;
Facilitator is the one who is responsible to keep the crc session progress forward. This member is responsible to make sure that the team session conforms to the agenda.&lt;br /&gt;
&lt;br /&gt;
4 . '''Scribe'''&lt;br /&gt;
&lt;br /&gt;
Scribes are the members who are responsible for documenting any business logic and discussion that is not captured on the CRC cards. This documentation is often used to rollback the system into requirements and business case documents.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class names ==&lt;br /&gt;
&lt;br /&gt;
The initial work that is carried on in the CRC session is the discovery of classes and their responsibilities. For the sake of designing a better system, the problem statement has to be clearly stated. Discovery of classes is a non-trivial process. The names of the classes can be extracted from the nouns present in the problem summary statement. This may not be the final list. Some of the class names stated may not be required and other class names might not be listed.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class responsibilities ==&lt;br /&gt;
&lt;br /&gt;
Responsibilities are related to actions. They are generally identified by selecting the verbs from the summary of requirements. Although verbs relate to responsibilities, verbs are not the only way of discovering responsibilities. Multiple verbs can be combined for discovering new responsibilities. If two or more responsibilities are shared by multiple classes then each class will have the responsibility. As this is an iterative process, the summary statement and the set of responsibilities have to be revised regularly. The final set of responsibilities may not contain all the responsibilities in the initial draft. &lt;br /&gt;
&lt;br /&gt;
== Discovery of Class Collaborations ==&lt;br /&gt;
&lt;br /&gt;
To identify the Collaborations, it is necessary to study the responsibilities and the classes the object interacts with. We can also discover collaborations by making a note of classes the present object should interact with in order to complete the assigned set of responsibilities. At the time of collaborations we might even discover new classes that might be required for completing the set of responsibilities. In order to discover a collaboration, use cases are required. An use case is a sequence of events performed in response to the request or event.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Problem Statement :&lt;br /&gt;
&lt;br /&gt;
Our aim is to design an airline self check in system. &lt;br /&gt;
&lt;br /&gt;
* A self check-in Kiosk at the air port consists of passport scanner, display console, baggage check in controller, boarding pass dispenser and card swiper.&lt;br /&gt;
* Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session&lt;br /&gt;
* The passport scanner should be able to scan the bar-code on the passport and check if any record exist corresponding to the scanned passport by connecting to the database.&lt;br /&gt;
* The Display console should provide a touch based console to accept the entered airline pnr. It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.&lt;br /&gt;
* Baggage check in controller should provide a count for the maximum number of check in bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.&lt;br /&gt;
* Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Classes'''&lt;br /&gt;
&lt;br /&gt;
Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -&lt;br /&gt;
&lt;br /&gt;
* Kiosk&lt;br /&gt;
* Passport scanner&lt;br /&gt;
* Database class&lt;br /&gt;
* Display Console&lt;br /&gt;
* Baggage check in controller&lt;br /&gt;
* Boarding pass dispenser&lt;br /&gt;
* Card swipe &lt;br /&gt;
&lt;br /&gt;
If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of responsibilities'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to identify the responsibilities of each class listed above.&lt;br /&gt;
&lt;br /&gt;
For every class we should be able to identify a set of responsibilities from the given summary statement. The verbs present in the summary statement helps us in identifying the set of responsibilities for each class.&lt;br /&gt;
&lt;br /&gt;
* Kiosk : should be able to start a new session and provide access to component parts.&lt;br /&gt;
* Passport scanner : scan the bar code on the passport and should be able to query the reservations database&lt;br /&gt;
* Database class : should be able to process the query and transfer the results&lt;br /&gt;
* Display console : should be able to accept the booking reference no from the customer, query the reservations database, display the result.&lt;br /&gt;
* Baggage check in controller : count the maximum no of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage&lt;br /&gt;
* Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding pass have been dispensed&lt;br /&gt;
* Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Collaborations'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal each event step by step.&lt;br /&gt;
&lt;br /&gt;
'''Kiosk'''&lt;br /&gt;
* The whole airline check in system is called as Kiosk. This system consists of sub-parts scanner, display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.&lt;br /&gt;
Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe]&lt;br /&gt;
&lt;br /&gt;
'''Passport Scanner'''&lt;br /&gt;
* As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
&lt;br /&gt;
'''Display Console'''&lt;br /&gt;
* Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
&lt;br /&gt;
'''Baggage check in controller'''&lt;br /&gt;
* Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the db class.&lt;br /&gt;
Collaborators : [Database Controller, Card swipe, passport scanner, display console, Boarding pass dispenser]&lt;br /&gt;
&lt;br /&gt;
'''Boarding pass dispenser'''&lt;br /&gt;
* Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.&lt;br /&gt;
Collaborators : [Display console, Scanner, Kiosk]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
A laboratory for teaching object oriented thinking [http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
Introduction to CRC Models [http://www.agilemodeling.com/artifacts/crcModel.htm]&lt;br /&gt;
&lt;br /&gt;
Object Oriented Thought Process [http://my.safaribooksonline.com/9780768678666]&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=34360</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 CC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=34360"/>
		<updated>2010-09-09T01:29:39Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Usually most of the real world problems are large, complex and less well defined. Therefore the analysis and refinement of design would be a longer and complex process. As our problem becomes large and complicated, it is unlikely that our initial designs are perfect. Therefore it is a good practice to repeatedly check these initial designs and make necessary changes before we can convert these into final ones. One way of refining our initial designs is by using CRC cards. &lt;br /&gt;
 &lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''CRC''' stands for '''Class Responsibility Collaborator'''.CRC card modeling is one of the venerable Object Oriented Design Technique. This technique is used in determining the various classes, their functionalities and their collaborations in the software system.Class, Responsibilities and Collaborators are recorded on index cards to facilitate team-based role play.&lt;br /&gt;
&lt;br /&gt;
'''Class-Responsibility-Collaboration''' cards have been first introduced by Kent Beck and Ward Cunningham in their paper &amp;quot;A Laboratory for teaching Object-Oriented Thinking&amp;quot; as a way to help beginners learn object oriented design.More recently, the technique has become regarded useful beyond teaching because of the subtle way it supports critical characteristics of design.CRC cards are used to document all the classes and their collaboration with the other classes in the system. This helps us in the process of designing a flawless system. This is also a cheap way of designing a system. Not just one but multiple designers can work together in designing a system using CRC cards modeling technique.&lt;br /&gt;
&lt;br /&gt;
The CRC card technique has three basic strengths.The three strengths are:&lt;br /&gt;
&lt;br /&gt;
* CRC cards facilitate open discussion of static structure of system.&lt;br /&gt;
&lt;br /&gt;
* CRC cards have built-in heuristics that guide design, in the name of determining the Class name, the Responsibilities, and the Collaborators.&lt;br /&gt;
&lt;br /&gt;
* CRC cards facilitate open discussion of dynamic structure, the &amp;quot;what-if&amp;quot; exploration, by use of role play.&lt;br /&gt;
&lt;br /&gt;
== Structure of a CRC card ==&lt;br /&gt;
&lt;br /&gt;
CRC cards explicitly represent multiple objects simultaneously.CRC card components are explained as follows:&lt;br /&gt;
&lt;br /&gt;
'''Class Name'''&lt;br /&gt;
&lt;br /&gt;
The class name appears across the top of the card. The class represents a collection of similar objects. Objects are things of interest in the system being designed. They can be a person, place, thing or any other important concept information to the system at hand. &lt;br /&gt;
 &lt;br /&gt;
'''Class Responsibilities'''&lt;br /&gt;
&lt;br /&gt;
A Responsibility is anything that the class knows or does. These responsibilities are the things that the class has knowledge about itself, or the things the class can do with the knowledge it has. &lt;br /&gt;
&lt;br /&gt;
For example a person class might have knowledge for its name, address and phone number. In other example an automobile class might have knowledge of its size, the number of doors or it might be able to do things like stop and go. The responsibilities of the class appear on the left side of the card.&lt;br /&gt;
&lt;br /&gt;
'''Collaborators'''&lt;br /&gt;
&lt;br /&gt;
A Collaborator is another class that is used to get information from or perform actions for the class at hand. It often works with a particular class to complete a step in a scenario. All the collaborator classes appear on the right side of the card.&lt;br /&gt;
&lt;br /&gt;
[[Image:CRC.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:crc_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
A CRC card might also contain additional information such as Super and Sub classes, name of the author of the class etc. The back side of the card is generally used to give a detailed explanation of the class the card represents.&lt;br /&gt;
&lt;br /&gt;
== CRC Cards in Design Development ==&lt;br /&gt;
&lt;br /&gt;
1. Work using role play. Different individuals are different objects.&lt;br /&gt;
&lt;br /&gt;
2. Pick a use case to building a scenarioto hand simulate.&lt;br /&gt;
&lt;br /&gt;
3. Start with the person who has the card with the responsibility to initiate the use case.&lt;br /&gt;
&lt;br /&gt;
4. In discharging a responsibility card owner may only talk to collaborators for that responsibility.&lt;br /&gt;
&lt;br /&gt;
5. Gaps must be repaid and re-tested against the use case.&lt;br /&gt;
&lt;br /&gt;
== CRC Session ==&lt;br /&gt;
&lt;br /&gt;
The CRC session is conducted by different types of people involved in the project. The overall size of the CRC team should be limited to six. Because as the team size increases the number of conversations increase exponentially. Generally four types of people participate in the crc session. They are&lt;br /&gt;
&lt;br /&gt;
1 . '''Domain Users'''&lt;br /&gt;
&lt;br /&gt;
The Domain Users are the users of the system being designed. They should have good amount of business knowledge about the system which is being modeled.&lt;br /&gt;
&lt;br /&gt;
2 . '''OO Design Analyst'''&lt;br /&gt;
&lt;br /&gt;
Object oriented Analysts are the ones who are familiar with the OO methodologies and techniques. Their responsibilities on the project are well beyond the CRC modelling sessions.&lt;br /&gt;
&lt;br /&gt;
3 . '''Facilitator'''&lt;br /&gt;
&lt;br /&gt;
Facilitator is the one who is responsible to keep the crc session progress forward. This member is responsible to make sure that the team session conforms to the agenda.&lt;br /&gt;
&lt;br /&gt;
4 . '''Scribe'''&lt;br /&gt;
&lt;br /&gt;
Scribes are the members who are responsible for documenting any business logic and discussion that is not captured on the CRC cards. This documentation is often used to rollback the system into requirements and business case documents.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class names ==&lt;br /&gt;
&lt;br /&gt;
The initial work that is carried on in the CRC session is the discovery of classes and their responsibilities. For the sake of designing a better system, the problem statement has to be clearly stated. Discovery of classes is a non-trivial process. The names of the classes can be extracted from the nouns present in the problem summary statement. This may not be the final list. Some of the class names stated may not be required and other class names might not be listed.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class responsibilities ==&lt;br /&gt;
&lt;br /&gt;
Responsibilities are related to actions. They are generally identified by selecting the verbs from the summary of requirements. Although verbs relate to responsibilities, verbs are not the only way of discovering responsibilities. Multiple verbs can be combined for discovering new responsibilities. If two or more responsibilities are shared by multiple classes then each class will have the responsibility. As this is an iterative process, the summary statement and the set of responsibilities have to be revised regularly. The final set of responsibilities may not contain all the responsibilities in the initial draft. &lt;br /&gt;
&lt;br /&gt;
== Discovery of Class Collaborations ==&lt;br /&gt;
&lt;br /&gt;
To identify the Collaborations, it is necessary to study the responsibilities and the classes the object interacts with. We can also discover collaborations by making a note of classes the present object should interact with in order to complete the assigned set of responsibilities. At the time of collaborations we might even discover new classes that might be required for completing the set of responsibilities. In order to discover a collaboration, use cases are required. An use case is a sequence of events performed in response to the request or event.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Problem Statement :&lt;br /&gt;
&lt;br /&gt;
Our aim is to design an airline self check in system. &lt;br /&gt;
&lt;br /&gt;
* A self check-in Kiosk at the air port consists of passport scanner, display console, baggage check in controller, boarding pass dispenser and card swiper.&lt;br /&gt;
* Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session&lt;br /&gt;
* The passport scanner should be able to scan the bar-code on the passport and check if any record exist corresponding to the scanned passport by connecting to the database.&lt;br /&gt;
* The Display console should provide a touch based console to accept the entered airline pnr. It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.&lt;br /&gt;
* Baggage check in controller should provide a count for the maximum number of check in bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.&lt;br /&gt;
* Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Classes'''&lt;br /&gt;
&lt;br /&gt;
Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -&lt;br /&gt;
&lt;br /&gt;
* Kiosk&lt;br /&gt;
* Passport scanner&lt;br /&gt;
* Database class&lt;br /&gt;
* Display Console&lt;br /&gt;
* Baggage check in controller&lt;br /&gt;
* Boarding pass dispenser&lt;br /&gt;
* Card swipe &lt;br /&gt;
&lt;br /&gt;
If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of responsibilities'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to identify the responsibilities of each class listed above.&lt;br /&gt;
&lt;br /&gt;
For every class we should be able to identify a set of responsibilities from the given summary statement. The verbs present in the summary statement helps us in identifying the set of responsibilities for each class.&lt;br /&gt;
&lt;br /&gt;
* Kiosk : should be able to start a new session and provide access to component parts.&lt;br /&gt;
* Passport scanner : scan the bar code on the passport and should be able to query the reservations database&lt;br /&gt;
* Database class : should be able to process the query and transfer the results&lt;br /&gt;
* Display console : should be able to accept the booking reference no from the customer, query the reservations database, display the result.&lt;br /&gt;
* Baggage check in controller : count the maximum no of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage&lt;br /&gt;
* Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding pass have been dispensed&lt;br /&gt;
* Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Collaborations'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal each event step by step.&lt;br /&gt;
&lt;br /&gt;
'''Kiosk'''&lt;br /&gt;
* The whole airline check in system is called as Kiosk. This system consists of sub-parts scanner, display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.&lt;br /&gt;
Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe]&lt;br /&gt;
&lt;br /&gt;
'''Passport Scanner'''&lt;br /&gt;
* As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
&lt;br /&gt;
'''Display Console'''&lt;br /&gt;
* Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
&lt;br /&gt;
'''Baggage check in controller'''&lt;br /&gt;
* Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the db class.&lt;br /&gt;
Collaborators : [Database Controller, Card swipe, passport scanner, display console, Boarding pass dispenser]&lt;br /&gt;
&lt;br /&gt;
'''Boarding pass dispenser'''&lt;br /&gt;
* Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.&lt;br /&gt;
Collaborators : [Display console, Scanner, Kiosk]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[http://www.agilemodeling.com/artifacts/crcModel.htm]&lt;br /&gt;
&lt;br /&gt;
[Object oriented programming using Java by Simon Kendal]&lt;br /&gt;
&lt;br /&gt;
[Object Oriented Thought Process by Matt Weisfeld]&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=34356</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 CC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=34356"/>
		<updated>2010-09-09T01:28:31Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Usually most of the real world problems are large, complex and less well defined. Therefore the analysis and refinement of design would be a longer and complex process. As our problem becomes large and complicated, it is unlikely that our initial designs are perfect. Therefore it is a good practice to repeatedly check these initial designs and make necessary changes before we can convert these into final ones. One way of refining our initial designs is by using CRC cards. &lt;br /&gt;
 &lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''CRC''' stands for '''Class Responsibility Collaborator'''.CRC card modeling is one of the venerable Object Oriented Design Technique. This technique is used in determining the various classes, their functionalities and their collaborations in the software system.Class, Responsibilities and Collaborators are recorded on index cards to facilitate team-based role play.&lt;br /&gt;
&lt;br /&gt;
'''Class-Responsibility-Collaboration''' cards have been first introduced by Kent Beck and Ward Cunningham in their paper &amp;quot;A Laboratory for teaching Object-Oriented Thinking&amp;quot; as a way to help beginners learn object oriented design.More recently, the technique has become regarded useful beyond teaching because of the subtle way it supports critical characteristics of design.CRC cards are used to document all the classes and their collaboration with the other classes in the system. This helps us in the process of designing a flawless system. This is also a cheap way of designing a system. Not just one but multiple designers can work together in designing a system using CRC cards modeling technique.&lt;br /&gt;
&lt;br /&gt;
The CRC card technique has three basic strengths.The three strengths are:&lt;br /&gt;
&lt;br /&gt;
* CRC cards facilitate open discussion of static structure of system.&lt;br /&gt;
&lt;br /&gt;
* CRC cards have built-in heuristics that guide design, in the name of determining the Class name, the Responsibilities, and the Collaborators.&lt;br /&gt;
&lt;br /&gt;
* CRC cards facilitate open discussion of dynamic structure, the &amp;quot;what-if&amp;quot; exploration, by use of role play.&lt;br /&gt;
&lt;br /&gt;
== Structure of a CRC card ==&lt;br /&gt;
&lt;br /&gt;
CRC cards explicitly represent multiple objects simultaneously.CRC card components are explained as follows:&lt;br /&gt;
&lt;br /&gt;
'''Class Name'''&lt;br /&gt;
&lt;br /&gt;
The class name appears across the top of the card. The class represents a collection of similar objects. Objects are things of interest in the system being designed. They can be a person, place, thing or any other important concept information to the system at hand. &lt;br /&gt;
 &lt;br /&gt;
'''Class Responsibilities'''&lt;br /&gt;
&lt;br /&gt;
A Responsibility is anything that the class knows or does. These responsibilities are the things that the class has knowledge about itself, or the things the class can do with the knowledge it has. &lt;br /&gt;
&lt;br /&gt;
For example a person class might have knowledge for its name, address and phone number. In other example an automobile class might have knowledge of its size, the number of doors or it might be able to do things like stop and go. The responsibilities of the class appear on the left side of the card.&lt;br /&gt;
&lt;br /&gt;
'''Collaborators'''&lt;br /&gt;
&lt;br /&gt;
A Collaborator is another class that is used to get information from or perform actions for the class at hand. It often works with a particular class to complete a step in a scenario. All the collaborator classes appear on the right side of the card.&lt;br /&gt;
&lt;br /&gt;
[[Image:CRC.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:crc_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
A CRC card might also contain additional information such as Super and Sub classes, name of the author of the class etc. The back side of the card is generally used to give a detailed explanation of the class the card represents.&lt;br /&gt;
&lt;br /&gt;
== CRC Cards in Design Development ==&lt;br /&gt;
&lt;br /&gt;
1. Work using role play. Different individuals are different objects.&lt;br /&gt;
&lt;br /&gt;
2. Pick a use case to building a scenarioto hand simulate.&lt;br /&gt;
&lt;br /&gt;
3. Start with the person who has the card with the responsibility to initiate the use case.&lt;br /&gt;
&lt;br /&gt;
4. In discharging a responsibility card owner may only talk to collaborators for that responsibility.&lt;br /&gt;
&lt;br /&gt;
5. Gaps must be repaid and re-tested against the use case.&lt;br /&gt;
&lt;br /&gt;
== CRC Session ==&lt;br /&gt;
&lt;br /&gt;
The CRC session is conducted by different types of people involved in the project. The overall size of the CRC team should be limited to six. Because as the team size increases the number of conversations increase exponentially. Generally four types of people participate in the crc session. They are&lt;br /&gt;
&lt;br /&gt;
1 . '''Domain Users'''&lt;br /&gt;
&lt;br /&gt;
The Domain Users are the users of the system being designed. They should have good amount of business knowledge about the system which is being modeled.&lt;br /&gt;
&lt;br /&gt;
2 . '''OO Design Analyst'''&lt;br /&gt;
&lt;br /&gt;
Object oriented Analysts are the ones who are familiar with the OO methodologies and techniques. Their responsibilities on the project are well beyond the CRC modelling sessions.&lt;br /&gt;
&lt;br /&gt;
3 . '''Facilitator'''&lt;br /&gt;
&lt;br /&gt;
Facilitator is the one who is responsible to keep the crc session progress forward. This member is responsible to make sure that the team session conforms to the agenda.&lt;br /&gt;
&lt;br /&gt;
4 . '''Scribe'''&lt;br /&gt;
&lt;br /&gt;
Scribes are the members who are responsible for documenting any business logic and discussion that is not captured on the CRC cards. This documentation is often used to rollback the system into requirements and business case documents.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class names ==&lt;br /&gt;
&lt;br /&gt;
The initial work that is carried on in the CRC session is the discovery of classes and their responsibilities. For the sake of designing a better system, the problem statement has to be clearly stated. Discovery of classes is a non-trivial process. The names of the classes can be extracted from the nouns present in the problem summary statement. This may not be the final list. Some of the class names stated may not be required and other class names might not be listed.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class responsibilities ==&lt;br /&gt;
&lt;br /&gt;
Responsibilities are related to actions. They are generally identified by selecting the verbs from the summary of requirements. Although verbs relate to responsibilities, verbs are not the only way of discovering responsibilities. Multiple verbs can be combined for discovering new responsibilities. If two or more responsibilities are shared by multiple classes then each class will have the responsibility. As this is an iterative process, the summary statement and the set of responsibilities have to be revised regularly. The final set of responsibilities may not contain all the responsibilities in the initial draft. &lt;br /&gt;
&lt;br /&gt;
== Discovery of Class Collaborations ==&lt;br /&gt;
&lt;br /&gt;
To identify the Collaborations, it is necessary to study the responsibilities and the classes the object interacts with. We can also discover collaborations by making a note of classes the present object should interact with in order to complete the assigned set of responsibilities. At the time of collaborations we might even discover new classes that might be required for completing the set of responsibilities. In order to discover a collaboration, use cases are required. An use case is a sequence of events performed in response to the request or event.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Problem Statement :&lt;br /&gt;
&lt;br /&gt;
Our aim is to design an airline self check in system. &lt;br /&gt;
&lt;br /&gt;
* A self check-in Kiosk at the air port consists of passport scanner, display console, baggage check in controller, boarding pass dispenser and card swiper.&lt;br /&gt;
* Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session&lt;br /&gt;
* The passport scanner should be able to scan the bar-code on the passport and check if any record exist corresponding to the scanned passport by connecting to the database.&lt;br /&gt;
* The Display console should provide a touch based console to accept the entered airline pnr. It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.&lt;br /&gt;
* Baggage check in controller should provide a count for the maximum number of check in bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.&lt;br /&gt;
* Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Classes'''&lt;br /&gt;
&lt;br /&gt;
Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -&lt;br /&gt;
&lt;br /&gt;
* Kiosk&lt;br /&gt;
* Passport scanner&lt;br /&gt;
* Database class&lt;br /&gt;
* Display Console&lt;br /&gt;
* Baggage check in controller&lt;br /&gt;
* Boarding pass dispenser&lt;br /&gt;
* Card swipe &lt;br /&gt;
&lt;br /&gt;
If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of responsibilities'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to identify the responsibilities of each class listed above.&lt;br /&gt;
&lt;br /&gt;
For every class we should be able to identify a set of responsibilities from the given summary statement. The verbs present in the summary statement helps us in identifying the set of responsibilities for each class.&lt;br /&gt;
&lt;br /&gt;
* Kiosk : should be able to start a new session and provide access to component parts.&lt;br /&gt;
* Passport scanner : scan the bar code on the passport and should be able to query the reservations database&lt;br /&gt;
* Database class : should be able to process the query and transfer the results&lt;br /&gt;
* Display console : should be able to accept the booking reference no from the customer, query the reservations database, display the result.&lt;br /&gt;
* Baggage check in controller : count the maximum no of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage&lt;br /&gt;
* Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding pass have been dispensed&lt;br /&gt;
* Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Collaborations'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal each event step by step.&lt;br /&gt;
&lt;br /&gt;
'''Kiosk'''&lt;br /&gt;
* The whole airline check in system is called as Kiosk. This system consists of sub-parts scanner, display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.&lt;br /&gt;
Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe]&lt;br /&gt;
&lt;br /&gt;
'''Passport Scanner'''&lt;br /&gt;
* As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
&lt;br /&gt;
'''Display Console'''&lt;br /&gt;
* Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
&lt;br /&gt;
'''Baggage check in controller'''&lt;br /&gt;
* Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the db class.&lt;br /&gt;
Collaborators : [Database Controller, Card swipe, passport scanner, display console, Boarding pass dispenser]&lt;br /&gt;
&lt;br /&gt;
'''Boarding pass dispenser'''&lt;br /&gt;
* Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.&lt;br /&gt;
Collaborators : [Display console, Scanner, Kiosk]&lt;br /&gt;
&lt;br /&gt;
References :&lt;br /&gt;
{{refbegin|2}}&lt;br /&gt;
[http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
[http://www.agilemodeling.com/artifacts/crcModel.htm]&lt;br /&gt;
[Object oriented programming using Java by Simon Kendal]&lt;br /&gt;
[Object Oriented Thought Process by Matt Weisfeld]&lt;br /&gt;
{{refend}}&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=33724</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 CC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=33724"/>
		<updated>2010-09-08T14:18:51Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Usually most of the real world problems are large, complex and less well defined. Therefore the analysis and refinement of design would be a longer and complex process. As our problem becomes large and complicated, it is unlikely that our initial designs are perfect. Therefore it is a good practice to repeatedly check these initial designs and make necessary changes before we can convert these into final ones. One way of refining our initial designs is by using CRC cards. &lt;br /&gt;
 &lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''CRC''' stands for '''Class Responsibility Collaborator'''.CRC card modeling is one of the venerable Object Oriented Design Technique. This technique is used in determining the various classes, their functionalities and their collaborations in the software system.Class, Responsibilities and Collaborators are recorded on index cards to facilitate team-based role play.&lt;br /&gt;
&lt;br /&gt;
'''Class-Responsibility-Collaboration''' cards have been first introduced by Kent Beck and Ward Cunningham in their paper &amp;quot;A Laboratory for teaching Object-Oriented Thinking&amp;quot; as a way to help beginners learn object oriented design.More recently, the technique has become regarded useful beyond teaching because of the subtle way it supports critical characteristics of design.CRC cards are used to document all the classes and their collaboration with the other classes in the system. This helps us in the process of designing a flawless system. This is also a cheap way of designing a system. Not just one but multiple designers can work together in designing a system using CRC cards modeling technique.&lt;br /&gt;
&lt;br /&gt;
The CRC card technique has three basic strengths.The three strengths are:&lt;br /&gt;
&lt;br /&gt;
* CRC cards facilitate open discussion of static structure of system.&lt;br /&gt;
&lt;br /&gt;
* CRC cards have built-in heuristics that guide design, in the name of determining the Class name, the Responsibilities, and the Collaborators.&lt;br /&gt;
&lt;br /&gt;
* CRC cards facilitate open discussion of dynamic structure, the &amp;quot;what-if&amp;quot; exploration, by use of role play.&lt;br /&gt;
&lt;br /&gt;
== Structure of a CRC card ==&lt;br /&gt;
&lt;br /&gt;
CRC cards explicitly represent multiple objects simultaneously.CRC card components are explained as follows:&lt;br /&gt;
&lt;br /&gt;
'''Class Name'''&lt;br /&gt;
&lt;br /&gt;
The class name appears across the top of the card. The class represents a collection of similar objects. Objects are things of interest in the system being designed. They can be a person, place, thing or any other important concept information to the system at hand. &lt;br /&gt;
 &lt;br /&gt;
'''Class Responsibilities'''&lt;br /&gt;
&lt;br /&gt;
A Responsibility is anything that the class knows or does. These responsibilities are the things that the class has knowledge about itself, or the things the class can do with the knowledge it has. &lt;br /&gt;
&lt;br /&gt;
For example a person class might have knowledge for its name, address and phone number. In other example an automobile class might have knowledge of its size, the number of doors or it might be able to do things like stop and go. The responsibilities of the class appear on the left side of the card.&lt;br /&gt;
&lt;br /&gt;
'''Collaborators'''&lt;br /&gt;
&lt;br /&gt;
A Collaborator is another class that is used to get information from or perform actions for the class at hand. It often works with a particular class to complete a step in a scenario. All the collaborator classes appear on the right side of the card.&lt;br /&gt;
&lt;br /&gt;
[[Image:CRC.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:crc_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
A CRC card might also contain additional information such as Super and Sub classes, name of the author of the class etc. The back side of the card is generally used to give a detailed explanation of the class the card represents.&lt;br /&gt;
&lt;br /&gt;
== CRC Cards in Design Development ==&lt;br /&gt;
&lt;br /&gt;
1. Work using role play. Different individuals are different objects.&lt;br /&gt;
&lt;br /&gt;
2. Pick a use case to building a scenarioto hand simulate.&lt;br /&gt;
&lt;br /&gt;
3. Start with the person who has the card with the responsibility to initiate the use case.&lt;br /&gt;
&lt;br /&gt;
4. In discharging a responsibility card owner may only talk to collaborators for that responsibility.&lt;br /&gt;
&lt;br /&gt;
5. Gaps must be repaid and re-tested against the use case.&lt;br /&gt;
&lt;br /&gt;
== CRC Session ==&lt;br /&gt;
&lt;br /&gt;
The CRC session is conducted by different types of people involved in the project. The overall size of the CRC team should be limited to six. Because as the team size increases the number of conversations increase exponentially. Generally four types of people participate in the crc session. They are&lt;br /&gt;
&lt;br /&gt;
1 . '''Domain Users'''&lt;br /&gt;
&lt;br /&gt;
The Domain Users are the users of the system being designed. They should have good amount of business knowledge about the system which is being modeled.&lt;br /&gt;
&lt;br /&gt;
2 . '''OO Design Analyst'''&lt;br /&gt;
&lt;br /&gt;
Object oriented Analysts are the ones who are familiar with the OO methodologies and techniques. Their responsibilities on the project are well beyond the CRC modelling sessions.&lt;br /&gt;
&lt;br /&gt;
3 . '''Facilitator'''&lt;br /&gt;
&lt;br /&gt;
Facilitator is the one who is responsible to keep the crc session progress forward. This member is responsible to make sure that the team session conforms to the agenda.&lt;br /&gt;
&lt;br /&gt;
4 . '''Scribe'''&lt;br /&gt;
&lt;br /&gt;
Scribes are the members who are responsible for documenting any business logic and discussion that is not captured on the CRC cards. This documentation is often used to rollback the system into requirements and business case documents.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class names ==&lt;br /&gt;
&lt;br /&gt;
The initial work that is carried on in the CRC session is the discovery of classes and their responsibilities. For the sake of designing a better system, the problem statement has to be clearly stated. Discovery of classes is a non-trivial process. The names of the classes can be extracted from the nouns present in the problem summary statement. This may not be the final list. Some of the class names stated may not be required and other class names might not be listed.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class responsibilities ==&lt;br /&gt;
&lt;br /&gt;
Responsibilities are related to actions. They are generally identified by selecting the verbs from the summary of requirements. Although verbs relate to responsibilities, verbs are not the only way of discovering responsibilities. Multiple verbs can be combined for discovering new responsibilities. If two or more responsibilities are shared by multiple classes then each class will have the responsibility. As this is an iterative process, the summary statement and the set of responsibilities have to be revised regularly. The final set of responsibilities may not contain all the responsibilities in the initial draft. &lt;br /&gt;
&lt;br /&gt;
== Discovery of Class Collaborations ==&lt;br /&gt;
&lt;br /&gt;
To identify the Collaborations, it is necessary to study the responsibilities and the classes the object interacts with. We can also discover collaborations by making a note of classes the present object should interact with in order to complete the assigned set of responsibilities. At the time of collaborations we might even discover new classes that might be required for completing the set of responsibilities. In order to discover a collaboration, use cases are required. An use case is a sequence of events performed in response to the request or event.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Problem Statement :&lt;br /&gt;
&lt;br /&gt;
Our aim is to design an airline self check in system. &lt;br /&gt;
&lt;br /&gt;
* A self check-in Kiosk at the air port consists of passport scanner, display console, baggage check in controller, boarding pass dispenser and card swiper.&lt;br /&gt;
* Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session&lt;br /&gt;
* The passport scanner should be able to scan the bar-code on the passport and check if any record exist corresponding to the scanned passport by connecting to the database.&lt;br /&gt;
* The Display console should provide a touch based console to accept the entered airline pnr. It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.&lt;br /&gt;
* Baggage check in controller should provide a count for the maximum number of check in bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.&lt;br /&gt;
* Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Classes'''&lt;br /&gt;
&lt;br /&gt;
Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -&lt;br /&gt;
&lt;br /&gt;
* Kiosk&lt;br /&gt;
* Passport scanner&lt;br /&gt;
* Database class&lt;br /&gt;
* Display Console&lt;br /&gt;
* Baggage check in controller&lt;br /&gt;
* Boarding pass dispenser&lt;br /&gt;
* Card swipe &lt;br /&gt;
&lt;br /&gt;
If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of responsibilities'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to identify the responsibilities of each class listed above.&lt;br /&gt;
&lt;br /&gt;
For every class we should be able to identify a set of responsibilities from the given summary statement. The verbs present in the summary statement helps us in identifying the set of responsibilities for each class.&lt;br /&gt;
&lt;br /&gt;
* Kiosk : should be able to start a new session and provide access to component parts.&lt;br /&gt;
* Passport scanner : scan the bar code on the passport and should be able to query the reservations database&lt;br /&gt;
* Database class : should be able to process the query and transfer the results&lt;br /&gt;
* Display console : should be able to accept the booking reference no from the customer, query the reservations database, display the result.&lt;br /&gt;
* Baggage check in controller : count the maximum no of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage&lt;br /&gt;
* Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding pass have been dispensed&lt;br /&gt;
* Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Collaborations'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal each event step by step.&lt;br /&gt;
&lt;br /&gt;
* The whole airline check in system is called as Kiosk. This system consists of sub-parts scanner, display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.&lt;br /&gt;
Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe]&lt;br /&gt;
* As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
* Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
* Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the db class.&lt;br /&gt;
Collaborators : [Database Controller, Card swipe, passport scanner, display console, Boarding pass dispenser]&lt;br /&gt;
* Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.&lt;br /&gt;
Collaborators : [Display console, Scanner, Kiosk]&lt;br /&gt;
&lt;br /&gt;
Here is a set of crc cards for the above system.&lt;br /&gt;
&lt;br /&gt;
[[self check in airline.png]]&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=33423</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 CC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=33423"/>
		<updated>2010-09-08T02:43:56Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Usually most of the real world problems are large, complex and less well defined. Therefore the analysis and refinement of design would be a longer and complex process. As our problem becomes large and complicated, it is unlikely that our initial designs are perfect. Therefore it is a good practice to repeatedly check these initial designs and make necessary changes before we can convert these into final ones. One way of refining our initial designs is by using CRC cards. &lt;br /&gt;
 &lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''CRC''' stands for '''Class Responsibility Collaborator'''.'''CRC''' card modeling is one of the prominent Object Oriented Design Technique. This technique is used in determining the various classes, their functionalities and their collaborations in the software system.'''Class-Responsibility-Collaboration''' cards have been first introduced by Kent Beck and Ward Cunningham in their paper &amp;quot;A Laboratory for teaching Object-Oriented Thinking&amp;quot;. CRC cards are used to document all the classes and their collaboration with the other classes in the system. This helps us in the process of designing a flawless system. This is also a cheap way of designing a system. Not just one but multiple designers can work together in designing a system using CRC cards modeling technique.&lt;br /&gt;
&lt;br /&gt;
== Structure of a CRC card ==&lt;br /&gt;
&lt;br /&gt;
CRC card consists of three parts.&lt;br /&gt;
&lt;br /&gt;
'''Class Name'''&lt;br /&gt;
&lt;br /&gt;
The class represents a collection of similar objects. Objects are things of interest in the system being designed. They can be a person, place, thing or any other important concept information to the system at hand. The class name appears across the top of the card.&lt;br /&gt;
 &lt;br /&gt;
'''Class Responsibilities'''&lt;br /&gt;
&lt;br /&gt;
A Responsibility is anything that the class knows or does. These responsibilities are the things that the class has knowledge about itself, or the things the class can do with the knowledge it has. &lt;br /&gt;
&lt;br /&gt;
For example a person class might have knowledge for its name, address and phone number. In other example an automobile class might have knowledge of its size, the number of doors or it might be able to do things like stop and go. The responsibilities of the class appear on the left side of the card.&lt;br /&gt;
&lt;br /&gt;
'''Collaborators'''&lt;br /&gt;
&lt;br /&gt;
A Collaborator is another class that is used to get information from or perform actions for the class at hand. It often works with a particular class to complete a step in a scenario. All the collaborator classes appear on the right side of the card.&lt;br /&gt;
&lt;br /&gt;
[[Image:CRC.png]]&lt;br /&gt;
&lt;br /&gt;
A CRC card might also contain additional information such as Super and Sub classes, name of the author of the class etc. The back side of the card is generally used to give a detailed explanation of the class the card represents.&lt;br /&gt;
&lt;br /&gt;
== CRC Session ==&lt;br /&gt;
&lt;br /&gt;
The CRC session is conducted by different types of people involved in the project. The overall size of the CRC team should be limited to six. Because as the team size increases the number of conversations increase exponentially. Generally four types of people participate in the crc session. They are&lt;br /&gt;
&lt;br /&gt;
1 . '''Domain Users'''&lt;br /&gt;
&lt;br /&gt;
The Domain Users are the users of the system being designed.&lt;br /&gt;
&lt;br /&gt;
2 . '''OO Design Analyst'''&lt;br /&gt;
&lt;br /&gt;
Object oriented Analysts are the ones who are familiar with the OO methodologies and techniques.&lt;br /&gt;
&lt;br /&gt;
3 . '''Facilitator'''&lt;br /&gt;
&lt;br /&gt;
Facilitator is the one who is responsible to keep the crc session progress forward&lt;br /&gt;
&lt;br /&gt;
4 . '''Scribe'''&lt;br /&gt;
&lt;br /&gt;
Scribes are the members who are responsible for documenting any business logic and discussion that is not captured on the CRC cards.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class names ==&lt;br /&gt;
&lt;br /&gt;
The initial work that is carried on in the CRC session is the discovery of classes and their responsibilities. For the sake of designing a better system, the problem statement has to be clearly stated. Discovery of classes is a non-trivial process. The names of the classes can be extracted from the nouns present in the problem summary statement. This may not be the final list. Some of the class names stated may not be required and other class names might not be listed. &lt;br /&gt;
&lt;br /&gt;
== Discovery of Class responsibilities ==&lt;br /&gt;
&lt;br /&gt;
Responsibilities are related to actions. They are generally identified by selecting the verbs from the summary of requirements. Although verbs relate to responsibilities, verbs are not the only way of discovering responsibilities. Multiple verbs can be combined for discovering new responsibilities. If two or more responsibilities are shared by multiple classes then each class will have the responsibility. As this is an iterative process, the summary statement and the set of responsibilities have to be revised regularly. The final set of responsibilities may not contain all the responsibilities in the initial draft. &lt;br /&gt;
&lt;br /&gt;
== Discovery of Class Collaborations ==&lt;br /&gt;
&lt;br /&gt;
To identify the Collaborations, it is necessary to study the responsibilities and the classes the object interacts with. We can also discover collaborations by making a note of classes the present object should interact with in order to complete the assigned set of responsibilities. At the time of collaborations we might even discover new classes that might be required for completing the set of responsibilities. In order to discover a collaboration, use cases are required. An use case is a sequence of events performed in response to the request or event.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Problem Statement :&lt;br /&gt;
&lt;br /&gt;
Our aim is to design an airline self check in system. &lt;br /&gt;
&lt;br /&gt;
* A self check-in Kiosk at the air port consists of passport scanner, display console, baggage check in controller, boarding pass dispenser and card swiper.&lt;br /&gt;
* Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session&lt;br /&gt;
* The passport scanner should be able to scan the bar-code on the passport and check if any record exist corresponding to the scanned passport by connecting to the database.&lt;br /&gt;
* The Display console should provide a touch based console to accept the entered airline pnr. It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.&lt;br /&gt;
* Baggage check in controller should provide a count for the maximum number of check in bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.&lt;br /&gt;
* Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Classes'''&lt;br /&gt;
&lt;br /&gt;
Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -&lt;br /&gt;
&lt;br /&gt;
* Kiosk&lt;br /&gt;
* Passport scanner&lt;br /&gt;
* Database class&lt;br /&gt;
* Display Console&lt;br /&gt;
* Baggage check in controller&lt;br /&gt;
* Boarding pass dispenser&lt;br /&gt;
* Card swipe &lt;br /&gt;
&lt;br /&gt;
If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of responsibilities'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to identify the responsibilities of each class listed above.&lt;br /&gt;
&lt;br /&gt;
For every class we should be able to identify a set of responsibilities from the given summary statement. The verbs present in the summary statement helps us in identifying the set of responsibilities for each class.&lt;br /&gt;
&lt;br /&gt;
* Kiosk : should be able to start a new session and provide access to component parts.&lt;br /&gt;
* Passport scanner : scan the bar code on the passport and should be able to query the reservations database&lt;br /&gt;
* Database class : should be able to process the query and transfer the results&lt;br /&gt;
* Display console : should be able to accept the booking reference no from the customer, query the reservations database, display the result.&lt;br /&gt;
* Baggage check in controller : count the maximum no of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage&lt;br /&gt;
* Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding pass have been dispensed&lt;br /&gt;
* Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.&lt;br /&gt;
&lt;br /&gt;
'''Discovery of Collaborations'''&lt;br /&gt;
&lt;br /&gt;
Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal each event step by step.&lt;br /&gt;
&lt;br /&gt;
* The whole airline check in system is called as Kiosk. This system consists of sub-parts scanner, display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.&lt;br /&gt;
Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe]&lt;br /&gt;
* As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
* Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
* Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the db class.&lt;br /&gt;
Collaborators : [Database Controller, Card swipe, passport scanner, display console, Boarding pass dispenser]&lt;br /&gt;
* Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.&lt;br /&gt;
Collaborators : [Display console, Scanner, Kiosk]&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=33421</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 CC</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_CC&amp;diff=33421"/>
		<updated>2010-09-08T02:42:19Z</updated>

		<summary type="html">&lt;p&gt;Nikhil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Usually most of the real world problems are large, complex and less well defined. Therefore the analysis and refinement of design would be a longer and complex process. As our problem becomes large and complicated, it is unlikely that our initial designs are perfect. Therefore it is a good practice to repeatedly check these initial designs and make necessary changes before we can convert these into final ones. One way of refining our initial designs is by using CRC cards. &lt;br /&gt;
 &lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''CRC''' stands for '''Class Responsibility Collaborator'''.'''CRC''' card modeling is one of the prominent Object Oriented Design Technique. This technique is used in determining the various classes, their functionalities and their collaborations in the software system.'''Class-Responsibility-Collaboration''' cards have been first introduced by Kent Beck and Ward Cunningham in their paper &amp;quot;A Laboratory for teaching Object-Oriented Thinking&amp;quot;. CRC cards are used to document all the classes and their collaboration with the other classes in the system. This helps us in the process of designing a flawless system. This is also a cheap way of designing a system. Not just one but multiple designers can work together in designing a system using CRC cards modeling technique.&lt;br /&gt;
&lt;br /&gt;
== Structure of a CRC card ==&lt;br /&gt;
&lt;br /&gt;
CRC card consists of three parts.&lt;br /&gt;
&lt;br /&gt;
'''Class Name'''&lt;br /&gt;
&lt;br /&gt;
The class represents a collection of similar objects. Objects are things of interest in the system being designed. They can be a person, place, thing or any other important concept information to the system at hand. The class name appears across the top of the card.&lt;br /&gt;
 &lt;br /&gt;
'''Class Responsibilities'''&lt;br /&gt;
&lt;br /&gt;
A Responsibility is anything that the class knows or does. These responsibilities are the things that the class has knowledge about itself, or the things the class can do with the knowledge it has. &lt;br /&gt;
&lt;br /&gt;
For example a person class might have knowledge for its name, address and phone number. In other example an automobile class might have knowledge of its size, the number of doors or it might be able to do things like stop and go. The responsibilities of the class appear on the left side of the card.&lt;br /&gt;
&lt;br /&gt;
'''Collaborators'''&lt;br /&gt;
&lt;br /&gt;
A Collaborator is another class that is used to get information from or perform actions for the class at hand. It often works with a particular class to complete a step in a scenario. All the collaborator classes appear on the right side of the card.&lt;br /&gt;
&lt;br /&gt;
[[Image:CRC.png]]&lt;br /&gt;
&lt;br /&gt;
A CRC card might also contain additional information such as Super and Sub classes, name of the author of the class etc. The back side of the card is generally used to give a detailed explanation of the class the card represents.&lt;br /&gt;
&lt;br /&gt;
== CRC Session ==&lt;br /&gt;
&lt;br /&gt;
The CRC session is conducted by different types of people involved in the project. The overall size of the CRC team should be limited to six. Because as the team size increases the number of conversations increase exponentially. Generally four types of people participate in the crc session. They are&lt;br /&gt;
&lt;br /&gt;
1 . '''Domain Users'''&lt;br /&gt;
&lt;br /&gt;
The Domain Users are the users of the system being designed.&lt;br /&gt;
&lt;br /&gt;
2 . '''OO Design Analyst'''&lt;br /&gt;
&lt;br /&gt;
Object oriented Analysts are the ones who are familiar with the OO methodologies and techniques.&lt;br /&gt;
&lt;br /&gt;
3 . '''Facilitator'''&lt;br /&gt;
&lt;br /&gt;
Facilitator is the one who is responsible to keep the crc session progress forward&lt;br /&gt;
&lt;br /&gt;
4 . '''Scribe'''&lt;br /&gt;
&lt;br /&gt;
Scribes are the members who are responsible for documenting any business logic and discussion that is not captured on the CRC cards.&lt;br /&gt;
&lt;br /&gt;
== Discovery of Class names ==&lt;br /&gt;
&lt;br /&gt;
The initial work that is carried on in the CRC session is the discovery of classes and their responsibilities. For the sake of designing a better system, the problem statement has to be clearly stated. Discovery of classes is a non-trivial process. The names of the classes can be extracted from the nouns present in the problem summary statement. This may not be the final list. Some of the class names stated may not be required and other class names might not be listed. &lt;br /&gt;
&lt;br /&gt;
== Discovery of Class responsibilities ==&lt;br /&gt;
&lt;br /&gt;
Responsibilities are related to actions. They are generally identified by selecting the verbs from the summary of requirements. Although verbs relate to responsibilities, verbs are not the only way of discovering responsibilities. Multiple verbs can be combined for discovering new responsibilities. If two or more responsibilities are shared by multiple classes then each class will have the responsibility. As this is an iterative process, the summary statement and the set of responsibilities have to be revised regularly. The final set of responsibilities may not contain all the responsibilities in the initial draft. &lt;br /&gt;
&lt;br /&gt;
== Discovery of Class Collaborations ==&lt;br /&gt;
&lt;br /&gt;
To identify the Collaborations, it is necessary to study the responsibilities and the classes the object interacts with. We can also discover collaborations by making a note of classes the present object should interact with in order to complete the assigned set of responsibilities. At the time of collaborations we might even discover new classes that might be required for completing the set of responsibilities. In order to discover a collaboration, use cases are required. An use case is a sequence of events performed in response to the request or event.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Problem Statement :&lt;br /&gt;
&lt;br /&gt;
Our aim is to design an airline self check in system. &lt;br /&gt;
&lt;br /&gt;
* A self check-in Kiosk at the air port consists of passport scanner, display console, baggage check in controller, boarding pass dispenser and card swiper.&lt;br /&gt;
* Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session&lt;br /&gt;
* The passport scanner should be able to scan the bar-code on the passport and check if any record exist corresponding to the scanned passport by connecting to the database.&lt;br /&gt;
* The Display console should provide a touch based console to accept the entered airline pnr. It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.&lt;br /&gt;
* Baggage check in controller should provide a count for the maximum number of check in bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.&lt;br /&gt;
* Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session&lt;br /&gt;
&lt;br /&gt;
Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -&lt;br /&gt;
&lt;br /&gt;
* Kiosk&lt;br /&gt;
* Passport scanner&lt;br /&gt;
* Database class&lt;br /&gt;
* Display Console&lt;br /&gt;
* Baggage check in controller&lt;br /&gt;
* Boarding pass dispenser&lt;br /&gt;
* Card swipe &lt;br /&gt;
&lt;br /&gt;
If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.&lt;br /&gt;
&lt;br /&gt;
Our next step is to identify the responsibilities of each class listed above.&lt;br /&gt;
&lt;br /&gt;
For every class we should be able to identify a set of responsibilities from the given summary statement. The verbs present in the summary statement helps us in identifying the set of responsibilities for each class.&lt;br /&gt;
&lt;br /&gt;
* Kiosk : should be able to start a new session and provide access to component parts.&lt;br /&gt;
* Passport scanner : scan the bar code on the passport and should be able to query the reservations database&lt;br /&gt;
* Database class : should be able to process the query and transfer the results&lt;br /&gt;
* Display console : should be able to accept the booking reference no from the customer, query the reservations database, display the result.&lt;br /&gt;
* Baggage check in controller : count the maximum no of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage&lt;br /&gt;
* Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding pass have been dispensed&lt;br /&gt;
* Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.&lt;br /&gt;
&lt;br /&gt;
Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal each event step by step.&lt;br /&gt;
&lt;br /&gt;
* The whole airline check in system is called as Kiosk. This system consists of sub-parts scanner, display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.&lt;br /&gt;
Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe]&lt;br /&gt;
* As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
* Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.&lt;br /&gt;
Collaborators : [Database controller, Baggage check in controller]&lt;br /&gt;
* Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the db class.&lt;br /&gt;
Collaborators : [Database Controller, Card swipe, passport scanner, display console, Boarding pass dispenser]&lt;br /&gt;
* Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.&lt;br /&gt;
Collaborators : [Display console, Scanner, Kiosk]&lt;/div&gt;</summary>
		<author><name>Nikhil</name></author>
	</entry>
</feed>