• Advertisement
Sign in to follow this  

Software that use Component Based Architecture

This topic is 723 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

What applications/software products use Component Based Architecture (or its *variants)? Obviously its very common in game engines and games and I'm aware of Javabeans, COM using it.

 

What other well known software products/applications use Component Based Architecture? What kinds of applications are best suited towards CB architectures? For example; maybe ATM software, etc.

 

*Event Driven Architecture, Service Oriented Architecture

 

Share this post


Link to post
Share on other sites
Advertisement

Object oriented design is based on components, and OO is applicable almost everywhere, so components are applicable almost everywhere.

 

Thanks for your answer. I have made a CBA API and I am looking for ideas of applications to create with it. Do you know of any companies or applications that predominantly use CBA in  its 'pure' form (ie not as a base for an OOP application)?

Edited by gretty

Share this post


Link to post
Share on other sites

Thanks for your answer. I have made a CBA API and I am looking for ideas of applications to create with it. Do you know of any companies or applications that predominantly use CBA in  its 'pure' form (ie not as a base for an OOP application)?


Which of the twenty different ""pure"" forms are you referring to?

Share this post


Link to post
Share on other sites

 

Thanks for your answer. I have made a CBA API and I am looking for ideas of applications to create with it. Do you know of any companies or applications that predominantly use CBA in  its 'pure' form (ie not as a base for an OOP application)?


Which of the twenty different ""pure"" forms are you referring to?

 

 

Leave it up to us C++ devs to overthink a simple question and veer off on a completely different tangent.

 

If I were to ask 'What well known software products/applications use OpenCV?'; an answer is 'Tesla's driving software heavily relies on it'. Cue the counter argument that the op question is not clear enough, thus, requires defining what someone means by 'pure', 'well-known', 'CBA', 'the', 'I' and etc. An then we find us.... on a tangent.

Edited by gretty

Share this post


Link to post
Share on other sites

I've worked both inside and outside the game industry.

Pretty much all well-designed software I've worked on has used composition, and hence components, to good effect.

Any time you want to swap out behavior or build things out of other things, composition is probably the right tool.

Probably the most boring work of all I've worked on, various ETL software I've worked with, uses components. ETL is Extract / Transform / Load. Basically boring software that selects values from one database, runs a simple transformation to rename fields or run some calculations, then loads it into another database, still uses composition and components. An ETL job can chose from bunches of pre-written transformation components to map from one type to another.

Most of the good AI libraries and machine learning tools I've worked on have used composition well. Compose a network from a collection of algorithm components taking input and giving output.

Most of the image processing tools I've worked with have been based on component models, adding in kernels of various types.

The family history processing tools I've worked with have used component-based designs for how each step of the process worked through their process from name extraction and indexing through searching and tree building. Even though each team had radically different software each of the many tools used a component design to allow for service discovery, for workflow across the various systems, for continuous deployment, and so on.

And well-written games use it all over the place. Composing game objects out of smaller blocks of logic and behavior and actions.

Composition is a core facet of good software design, but sadly one that many students fail to study and too few teachers teach well.

Share this post


Link to post
Share on other sites

Yes, it's not clear. OpenCV is a concrete thing, a particular library.
Component based is a nebulous adjective that can be used to describe an endless number of different software designs -- in fact, almost every modern software design!

 

Please don't use that tone with me (bold, exclamation marks). Yes, when used by a moderator towards a user its 'emphasis' but, ofcourse, when used by a user towards another moderator it certainly wouldn't be.

 

Given you've already taken us on the tangent, I'll continue along it.

 


OpenCV is a concrete thing

 

Component based architecture is a concrete architecture. Just like message-bus, 3-Tier, N-Tier, etc.

Edited by gretty

Share this post


Link to post
Share on other sites

 


[edit] From wikipedia:

A component model is a definition of standards for component implementation, documentation and deployment. Examples of component models are: Enterprise JavaBeans (EJB) model, Component Object Model (COM) model...

Maybe you're referring to these kinds of frameworks, which define a strict specification for component communication above and beyond the standard feature set of any one particular language?

 

Haha, yes, do you mean like I mention in the second sentence of my original post?

 


What applications/software products use Component Based Architecture (or its *variants)? Obviously its very common in game engines and games and I'm aware of Javabeans, COM using it.
Edited by gretty

Share this post


Link to post
Share on other sites

Please don't use that tone with me (bold, exclamation marks). Yes, when used by a moderator towards a user its 'emphasis' but, ofcourse, when used by a user towards another moderator it certainly wouldn't be.

No offense intended.
Mod title basically means I delete spam bots and move misplaced advertising into "Your announcements" -- not that my opinions carry more weight. The "staff" title is the one to watch out for. I hear that they're basically Hitler wink.png

Component based architecture is a concrete architecture

That's arguable. As Sean said above - this is more of "A solution in search of a problem" or the programming form of paint by numbers - "design by patterns". All software should be component based to a degree - as the attributes that make something "component based" are now standard design principles (but not so much in the 60's when the term "component based" was coined -- e.g. back then it wasn't assumed that everyone would generally follow SOLID principles, as they hadn't even been formalized yet).
Strict inter-language communication models (like COM) are used whenever an architecture must span multiple languages or processes. Even bulkier frameworks/models are used when an architecture must span multiple different computers. Going back to the 60's when this was invented, stuff like HTTP and HTML would've been really novel, groundbreaking ideas. Now we just take for granted that we can standardize a communications protocol to allow different code modules to come together to create a functional application.
If you're confined to one language and once process (like most games), there's no need for something like COM because "component based" design features are now built into our languages as standard. We write component based code daily without needing to even think about it.

[edit]

Maybe you're referring to these kinds of frameworks, which define a strict specification for component communication above and beyond the standard feature set of any one particular language?

Haha, yes, do you mean like I mention in the second sentence of my original post?

What applications/software products use Component Based Architecture (or its *variants)? Obviously its very common in game engines and games and I'm aware of Javabeans, COM using it.

What I was getting at is that there's a difference between asking about applications that are based on components (almost everything), and asking about applications that are built on top of specific frameworks like COM. In your first post you used COM as an example of something based on components (the former category), so I was asking if you were more interested in the latter category.

Edited by Hodgman

Share this post


Link to post
Share on other sites



Haha, yes, do you mean like I mention in the second sentence of my original post?

The point is that if you include things like Javabeans and COM, you've covered about 90% of commercial software written between 1998 and 2010.

 

Source?

Share this post


Link to post
Share on other sites


Source?

I don't have one. There probably isn't an official source on such things.

 

But it's hard to find an enterprise Java application from that period that doesn't use Javabeans in some capacity, and all the relevant features of Javabeans are now included in the Java standard library. COM is used by literally every Windows application of any note - for example, DirectX is a COM API, as is the Windows Shell (desktop environment), and ActiveX. The core concepts from COM are included in .NET these days.

Share this post


Link to post
Share on other sites

 

Yes, it's not clear. OpenCV is a concrete thing, a particular library.
Component based is a nebulous adjective that can be used to describe an endless number of different software designs -- in fact, almost every modern software design!

 
Please don't use that tone with me (bold, exclamation marks). Yes, when used by a moderator towards a user its 'emphasis' but, ofcourse, when used by a user towards another moderator it certainly wouldn't be.

The moderators here are decent people and legitimate members of the community, and users (including myself) argue with them all the time, bolding, underlining, italicizing, shebanging, and asterisking the crap out of them.

We have very very heated - but friendly - debates. As long as it doesn't devolve to personal attacks, intelligent discussions (even passionate ones) are encouraged.
 

 

Which of the twenty different ""pure"" forms are you referring to?

 
Leave it up to us C++ devs to overthink a simple question and veer off on a completely different tangent.

 

laugh.png fair enough. I'm not trying to veer off on any tangent, just pointing out (through implication) that your question is alot broader to interpretation than you might suspect (at least for me).

Perhaps that's just because, as a C++ dev, I like all my forward-declarations to be properly defined when it comes time to use them. tongue.png

 

If I were to ask 'What well known software products/applications use OpenCV?'; an answer is 'Tesla's driving software heavily relies on it'. Cue the counter argument that the op question is not clear enough, thus, requires defining what someone means by 'pure', 'well-known', 'CBA', 'the', 'I' and etc. An then we find us.... on a tangent.


Well, I want to know what you mean by "CBA" and "pure", because it's an overly-broad term that various people interpret differently.

I wasn't sure if you mistakenly meant ECS (which is a form of CBD, which inherits ideologically from CBA), which is the gamedev flavor of the past year or two, or whether you were referring to platforms like OpenDoc.

To some extent, you could even consider things like batch files and pipelining to be 'component based', if you consider the different bite-sized command-line tools to be components (both OpenDoc-style CBA and command-line pipelining are different ways to attempt to solve the software crisis by breaking code chunks into pluggable components). Even more abstract, applications themselves are "components" sitting on the OS platform that the user combines to get work done via saving files or transferring MIME data between two seperate programs via drag-and-drop or copy+paste.
 
For example, I'm not seeing why ATM software in-specific would be better suited to CBA than another project, so I must be missing what you are focusing on within CBA.
 
[Edit:] Crap, the wikipedia page for CBA mentions both OpenDoc and CL pipe-lining. I thought I was being clever by using those as examples. laugh.png

 

[b][Edit 2:][/b] Bleh, since we're all saying the same thing, I don't want to dogpile on, so I'll bow out of the discussion since the others have actual enterprise-software experience.

Edited by Servant of the Lord

Share this post


Link to post
Share on other sites

 


Source?

I don't have one. There probably isn't an official source on such things.

 

But it's hard to find an enterprise Java application from that period that doesn't use Javabeans in some capacity, and all the relevant features of Javabeans are now included in the Java standard library. COM is used by literally every Windows application of any note - for example, DirectX is a COM API, as is the Windows Shell (desktop environment), and ActiveX. The core concepts from COM are included in .NET these days.

 

 

I'd also give a very high ad-hoc estimate. I'd give much higher than 90%.

 

 

All Java-language business software I've seen or worked with makes extensive use of beans. Even very small projects based on toolkits like Spring rely heavily on beans because the toolkits rely on them.  Database engines similarly are modular components.

 

When it comes to Windows-based apps, I'm not aware of any window-management or form-management UI system that is not designed around modular components. Database access again is modular with components and standardized interfaces. Everything networked is based around component-ized modules and frameworks.

 

Every library I can think of off the top of my head uses component-based designs. Even things like language standard libraries rely heavily on components-based designs. 

 

Even the C++ language itself, the 'virtual' keyword and functionality was built to provide a common built-in way to provide common interfaces to modular objects.  Before that in the 1960s and 1970s nearly every program would use a structure with function pointers to accomplish exactly the same component-based swapping of parts.

 

 

 

About the only thing I've seen in the past few decades that DOESN'T follow component-based architectures are the tiny little 'hello world' learning programs, or quick-and-dirty five-line scripts that don't touch any major libraries.

Share this post


Link to post
Share on other sites

 



Haha, yes, do you mean like I mention in the second sentence of my original post?

The point is that if you include things like Javabeans and COM, you've covered about 90% of commercial software written between 1998 and 2010.

 

Source?

 

 

 

I can't provide a source but, I can speak from experience.   The majority of software written and the majority of development jobs do not produce "programs" that are used by joe public.  The majority of software written is in large on going systems that used internally and are usually in development for the lifetime of the company  (think banking software, insurance software, oil exploration software, stock trading software, air traffic software).  I have worked on banking and finance software and can tell you that they absolutely use component based architecture in some modules.
Further almost any large piece of software that has been written in Java in the last 15 years is likely to have at least a little CBA simply because composition was embraced very early within the Java community and a lot of beginner Java programming books teach composition over inheritence.

Now that being said your original post asked for "well known" examples.  The problem is without access to the source code we can only make assumptions about how this software was designed.  So we are left with open sourced software.  I use a lot of open source software but, I very rarely crack open the source code. I do however recall reading a white paper a long time ago about GIMP using a component based architecture.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement