====== Software Architecture ====== ===== Software Component ===== ===== Overview about software component ==== {{:other:componentbased.gif|}} === Overview === Sometimes called componentware, software designed to work **as a component of a larger application**. A good analogy is **the way personal computers are built up from a collection of standard components**: memory chips, CPUs, buses, keyboards, mice, disk drives, monitors, etc. Because** all of the interfaces between components are standardized**, it is possible to **mix components from different manufacturers in a single system**. Similarly, the goal of component software is **to standardize the interfaces between software components** so that they too can work together seamlessly. Two standards -- OLE and OpenDoc -- are designed to help programmers develop components that can work together. Many analysts believe that **component software is the natural extension of object-oriented programming** and that it will become the standard programming paradigm for years to come. === Communicate between software components === components communicate with each other via **interfaces**. **Objects which implement an interface** for another object type are called **adapters**.\\ **adapters** can use to say **"I implement this interface”** . Other objects may then **make requests** like **“Please give me an object which implements interface X for object type Y”** . ==== Software component in OOP ==== Understand about Components in OOP with **Interfaces and Adapters**: * Object oriented programming languages allow programmers to **reuse portions of existing code** by **creating new “classes” of objects which subclass another class**. When a class subclasses another, it is said to inherit all of its behaviour. The subclass can then “override” and “extend” the behavior provided to it by the superclass. * **Inheritance** is very useful in many situations, but because it is so convenient to use, **often becomes abused in large software systems, especially when multiple inheritance is involved**. One solution is to use **delegation instead of “inheritance” where appropriate**. Delegation is simply **the act of asking another object to perform a task for an object**. To support this design pattern, which is often referred to as the components pattern because it involves many small interacting components, **interfaces and adapters were created** ===== Midleware ===== Middleware is a piece of software lying **between the operating system and the application**. Middleware makes it **easier** for software developers to **perform communication and input/output**, so they can focus on the specific purpose of their application\\ refer: {{:other:middleware.pdf|}} {{:other:input-output_latency.svg.png|}}