Saturday, May 12, 2007

How to identify components in architecture - II

In my previous blog, I discussed briefly about the advantages of CBSE and ended with a question instead of an answer. To reiterate, the objective is to identify components and to achieve that first we need to define what a component is and then understand the classification of physical and logical.

First this first ! Scope check - It is constrained to the realm of Software Architecture, although i believe it applies in the general sense as well.

Of all the definitions that i know, the one that i find simplest yet most appealing is -
"A component is a reusable software entity that exposes a set of one or more interfaces"

Lets do a reality check ! Is that really how we perceive components ?

For some of us ( or rather most of us), a software component is a COM component, a Dynamic Link Library(DLL), a Shared Object(Unix/Linux), Frameworks ( MFC, ATL), Libraries(QT, RogueWave).. the list goes on and on and on ....Isn't it ?

If you look closely, there is a similarity between the items in the list above. All of them have a physical identity in the sense that they directly consume resources - time as well as space; and indeed match the preceding definition. Incidentally this solves one of the earlier problems of identifying "physical component".

That leaves us with the question - whats a "Logical Component" ?

A Logical Component is also a reusable entity(not necessarily software! could be a model as well ! ) that is representative of complete or a portion of functionality in the system. Does this mean physical component do not encapsulate functionality? Of course they do.. In fact, often, a physical component can packs more than one Logical component. The differentiating factor is a Logical Component may or may not consume resources of time and space.

The reason for this is Logical Component(s) transform into other "forms" that will consume resources of time and space. But why would they "transform" ? That's because Logical Components are one of the earliest conceptions in software architecture and are susceptible to be replaced by other complete forms in the subsequent architecture process.

Time is not with me.. So I will have to keep the concluding part for my next blog. If you have questions, comments or thoughts, drop a note. I would be glad to share ( & learn)...

2 comments:

Unknown said...

It would be helpful if you can provide more simplified description about the term "Logical Component". It's difficult to grasp the following (at least for me) It only means that Logical Component transform into other "forms" that will consume resources of time and space.

G. Sriram said...

Logical Components are difficult to understand as they are not as obvious as physical components. In fact thats why I decided on covering it up in my blog. My source(s) of knowledge includes 'Software Architecture in Practice'(by Len Bass,Paul Clements,Rick Kazman), http://www.bredmeyer.com, http://www.sei.cmu.edu/architecture. I could not find a nice definition for Logical Component from any of these, though all of these do refer to Logical Component. Basically, my definition of Logical Component comes from practice of applying the basic principles of architecture. I would be more than glad if someone can throw some more light on this by sharing, adding or opposing my views.

Finally, I think an example would be good. I wanted to include example (which i will in my next blog) but due to time constraints, i could not.