Component based software engineering

I have a dream...

I have a dream...

Definition

CBSE emphasizes the separation of concerns with respect to the wide-ranging functionality available throughout a given software system. It is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems.

What is a component?

A piece of software that is connected to other only through its interfaces

An "interface" is an element that exposes a communication channel with a known contract

Development roles

  • System architect (defines the requirements)

  • Component designer (implements components)

  • System integrator (composes components)

Communication Pattern: request-reply

  • A server port provides an interface.
  • 0-to-N clients send requests to server.
  • The only purpose of the server is to provide answers (replies) as quickly as possible.
  • Request can be either synchronous (wait for an answer) or asynchronous (don't wait, poll).
  • Server must NOT make any assumption about clients. 

Communication Pattern: publish-subscribe

  • A publisher exposes data (the topic).
  • 0-to-N subscribers notifies that they want to receive the data.
  • Publisher must NOT make any assumption about subscribers. 
  • The interface is always asynchronous for the publisher and might be either SYNC or ASYNC for the subscriber.

Good components have:

  • Strongly typed interfaces
  • Explicitly documented contracts
  • As little state as possible
  • A well defined functionality
  • An implementation that allow deployment to be configured by the integrator.

ROS doesn't enforce any of this

Coming next...

"Separation of concerns"

Component based software engineering

By Davide Faconti

Component based software engineering

  • 605