Loosely Coupled Verses Tightly Coupled
(Component level abstraction Verses Object level abstraction)
 
Most components are built by assembling subcomponents. Again these components are assembled to build larger and larger components and finally the product. For example, many parts are assembled to build the components for the car, such as engine and transmission etc. Then these parts are assembled to build the automobile. Likewise, many chips and electronic components are assembled to build computer-parts such as, graphics-card and hard-drive.
 
It is desirable to build most components by loosely coupling its subcomponents. Some cases, it is possible to use loosely coupled subcomponents to build the larger component. But, in other cases, the subcomponents must be tightly coupled to build the larger component.
 
For a great product design, it is very useful to build and use mostly loosely coupled components or parts. This allows specialists (who have core competence in the part making technologies) to independently build the components, such that, they offer plug-in interface to quickly assembled into the product. This substantially cut the complexity and costs. For example, this allows the product to be quickly adaptable to changing user needs or incorporate latest technological advancements, by updating each component independently.
 
To identify loosely coupled components, it may be helpful to understand the differences between the characteristics of the loosely coupled and tightly coupled parts. Tightly coupled parts are very hard to separate and often use irreversible manufacturing process. For example, the IC chips are manufactured by fusing metal-oxide and silicon. It is a complex chemical process and not meant to be reversible. Likewise, the alloys made by mixing metals, or steel-radial tires are built by infusing steel wires and rubber. Usually tight coupling processes are complex and require very high degree of skill and knowledge.
 
Loosely coupled components are easy to assemble and easy to remove or replace. For example, battery in the car is a loosely coupled component. Also, automobile tire is a loosely coupled component, which can be replaced when it is used out, by a new tire. However, the battery’s manufacturing process tightly couples its subcomponents (e.g. lead plates, casing and Acid etc.). Computer chips (e.g. CPU, DRAM) are usually loosely coupled to the board (e.g. mother-board or graphics-cards) and they can be quickly replaced.
 
However, many components for the computers (e.g. CMOS process to make the IC chips) and for the cars (e.g. mixing metals to make alloys for the parts or casting-molds to shape the metal parts) are manufactured by tightly coupling their ingredients (or parts). Many cases, this tight coupling cannot be avoided. But, may be possible to put the component (that is created using tightly coupling its subcomponents) in to a casing, so that, the component can support loosely coupled interface to use as a subcomponent to make a larger component.
 
According to these examples, none of the existing software classes (e.g. Java/Swing or Windows GUI-API & DB or EJB-Objects) could be loosely coupled components. For example, the GUI-objects (or presentation logic) and data-objects (application logic) are tightly fused to build the parts of the application. Detailed explanation is provided later pages, to show, why the OOP cannot be used to build loosely coupled systems.
 
To build software applications using loosely coupled components, we invented a new process and plug-in components: CF/AC, where CF encapsulates the manufacturing process that tightly couples the OOP Objects, and support loosely coupled interface for the resultant AC to easily plug-in (or plug-our to independently update or even to replace it).
 
Where does our technologies fit in the overall software landscape?
 
The Objectives of the technologies are to help developers to build superior next generation online-GUI applications than ever possible at far less cost. Before the advent of the Internet, developers used VC++ or VisualBasic to build the information technology applications (e.g. information systems, data where housing, data analysis, visual simulation data entry and processing etc.).
 
These applications usually require us to write several hundred thousand lines of code or even millions of lines of code. They used Windows GUI-API (or UNIX/X11/Motif) to build the front end user interface.
 
Many of these applications are built using Object Oriented Paradigm. If you map the relationships or interactions between the Objects, it might look like the figures #3, #5 and #7 (please note: The CBSDF preserves the AC seperation as in fig#6). Where, fig#3 shows, how one can use OOP to build a part or component (i.e. an AC) of the application by tightly coupling the Objects. Then fig#5 shows, how two components (or ACs) are tightly coupled to add the second component to the application. Then fig#7 shows three components … I hope you get the picture.
 
Please recall how you write the OOP. Also recall that the concept of AC doesn’t exist in the OOP; but applications must have them in some form. How one incorporates a new AC that needs many Objects to build, as shown in Fig#3?
 
One may create all the needed Classes or one Class at a time. Then usually instantiate or add each Object to the application and write integration code to set data or get data as shown in the Fig#3. There is no ideal place or standard process to include this code, so one may add each of the Object instantiation and initialization code in one of the existing files (i.e. files for the first AC). Usually all the GUI-components are grouped (See Fig#5). If two Objects exchange data, when the two ACs communicate, those objects may be placed in the same file. Usually upon the user action on one AC, its callback may call other AC’s methods. The code for the callback may be added in a different file.
 
If one builds the Cars in this way, to incorporate each part such as the battery: he should add each ingredient (e.g. lead plates and Acid etc.) at a time and manually adjust to meet the needs. It is ugly and hard to even imagine, but please imagine about it. Fortunately, the battery maker encapsulates the tight coupling in a casing that offers much simpler Component-level abstraction.
 
Large application may contain thousands of such ACs or components (or parts). In OOP process, we used to end up with millions of lines of tangled code and numerous Object level dependencies (Fig#7), where the Objects are tightly coupled with each other. The OOP can provide only Object level abstraction. This code (in all the files) is compiled to build the application’s executable.
 
Therefore, maintenance of large applications becomes problematic because, it’s difficult or nearly impossible to predict what sort of effect a simple change might have on other parts of such tightly coupled system (especially a year or two after its release; or to a new recruit, even he is talented and has 10 years experience). If small change is difficult, just imagine the complexity, if one needs to replace a large AC (e.g. AC15 in Fig#2, if it includes many sub-ACs & Objects).
 
Furthermore, developers are usually confronted with other challenges, such as, poor design, documentation and time pressure to adapt to the evolving needs. Large ACs almost never removed, but tried to add additional code to update many of its Objects to get the desired results, while keeping old code and Object-dependencies, to reduce the uncertainty. However, our loosely coupled AC can be removed (or replaced, if a new AC/CF is ready) in few minutes.
 
It is the main objective of the researchers for decades to invent ideal plug-in components that can avoid this tangled mess (Fig#7) and create a loosely coupled system, such as, the one shown in the Fig#8 & Fig#10. The Fig#7 shows traditional Object-level abstraction and their complex interactions, while Fig#8 shows Component-level abstraction and their simpler plug-in interfaces. Both have three ACs and can accomplish the same. Both may be compiled to build the same application. But, the Fig#8 encapsulated each AC in a single cohesive code-block (the AC is built using the same old Objects as shown in the Fig#3) and uses simple mechanism such as, service-oriented interfaces to integrate the ACs.
 
Success of the Web in the mid 90s & Emerging Online Applications
 
Today businesses are building increasingly complex J2EE or .NET online-applications that generally use the HTML, DHTML & Jscript as front end. These applications are no smaller or less complex than those VC++ applications a decade ago (even though we ended up having inferior text-based or primitive HTML GUI elements). The software developers using the same tightly coupled Object integration in the Servlets (or ASPX) files to build the online-applications.
 
Users are increasingly demanding better visualization or online graphics. Today’s information driven economy, the graphics intensive or “rich” online-applications are essential to improve the productivity and to reduce the mistakes of the knowledge workers. A picture is worth thousand words, to cope up with the information overload. Today, we do not have a viable online-GUI to build rich online applications such as, visual-analysis, visual-simulations, decision-support, location-based or GIS, command & control systems.
 
Despite worldwide effort by leading organizations (e.g. Microsoft’s XAML, Macromedia’s MXML/Flash and W3C’s X3D, SVG) they cannot create a viable online-GUI technology any time in the near future. They readily admit that these technologies can never match even 50% of the functionality of the traditional GUI-API (e.g. Java/Swing, UNIX/X11 or Windows-XP).
 
Please forgive me for the rude unsubstantiated assertion, but, based on my years of research and competitive analysis of their future plans and projected directions, with out our technology, world may never see a viable online-GUI-API (or at least in the next few years). Using our GUI-API technology, today we can create far superior online-GUI applications than ever thought possible on the traditional GUI-platforms (e.g. Java/Swing) at fraction of the cost.
 
If you have seen the sample components in my Zipped folder, you would notice complex component hierarchies. Those components use Zero coupling between the components, therefore can be created in matter of minutes (once all the CF for the ACs are independently created). The couplings would be created only when one component communicate with other component. The components in the most of the example do not exchange data with other components therefore they have Zero coupling.
 
Please understand that, one of the main objectives of our component technology (i.e. CBSDF) is to build such million lines future graphics intensive applications, using loosely coupled components to eliminate nearly 70% of the development costs. Today US businesses alone spend nearly US$70 billion a year to build such information technologies and enterprise applications.
 
Causes for the complexity explosion & Our Solutions
 
1.
Software today is a technology in crisis, where its complexity has far outrun our ability to comprehend it. It’s next to impossible to understand what is going on in software whenever a program runs longer than a few hundred lines of code—and today’s software applications contains millions of lines. What we don’t understand, we can’t fix or maintain (e.g. to adapt to evolving need): 25 percent of commercial software projects are canceled, which meant $60 billion in losses in 2000 in the U.S. economy alone.
   
 
Most software modules may be built using good Objects that usually have good abstraction and hides internal complexity. However, the OOP-Object oriented paradigm forces us to write tangled code that tightly integrates the Objects (Fig#3). The code structure of these modules, even containing few Objects, would degrade and the modules loose their abstraction and modularity. The modules further integrated to build larger and larger modules by writing more tangled code (Fig#7). Larger systems contain thousands of tightly coupled modules. Therefore, maintenance becomes problematic because, it’s difficult or impossible to predict what sort of effect a simple change might have on other parts of the system.
   
 
The CBSDF introduced a new kind of modules: “AC”, that are custom build using “CF”, which separates the manufacturing and AC’s service-interfaces. This overcomes the problems, since each CF is an independent module and each of the AC is “loosely coupled” to the rest of the software system by service oriented plug-in interface (a simple link); and further can offer CASE tools to automatically validate these links. Therefore, the custom application may be noting but a collection of loosely coupled plug-in and easily replaceable parts (Fig#8, #9, #10).
   
2.
Unfortunately, the OOP technologies suffer from several problems. During evolution and customization for reuse, components are affected by changes arising from new functional and nonfunctional requirements, new variation points, new software architectures and component deployment strategies, new versions of a computing environment that effect component communication, etc. Due to those changes, class/object code structure erodes quickly (as we add patches), resulting in complexity explosion, performance degradation and redundant implementations of similar features, thereby reducing the modules’ or components’ reusability and system maintainability.
   
 
The Generative process offers an innovative approach to alleviating the above problems, as changes affecting AC can now be more effectively managed during the generation (Fig#2) rather than at the component level. Using generative programming, we can produce custom components (i.e. AC) from small or fine-grained highly flexible and independent elements (e.g. CF and GUI-API) that can be considerably simpler than executable components themselves, keeping the complexity of an evolving component system under control.
 
Miscellaneous Documents Privacy Policy | Site Map | Services
Designed By SINDHU SYNERGY
Copy Right © 2006 Pioneer Soft, LLC. All Rights Reserved.