Architecture-centered Software Project Planning [ACSPP]

“A software architecture design document is the primary input to the top-down and bottom-up planning processes, and a software development plan is the primary output. The software development plan is used by each member of the development team to generate their personal schedules. “

Abstract Interface

An abstract interface is an abstraction that represents more than one interface; it consists of the assumptions that are included in all of the interfaces that it represents. An abstract interface for a given type of device reveals some, but not all, properties of the actual device: it describes the common aspects of devices of that type, omitting the aspects that distinguish them from each other.

Abstract interfaces are used to improve the changeability of software. Programs are written using the abstract interface, keeping details about the underlying implementation secret. The fundamental goal is to be able to swap different implementations of the abstract interface without needing to change modules that interact with the abstract interface.

From a programming language’s perspective, an abstract language is a set of public procedures that are defined for an abstraction but are not implemented. For example, a pure virtual base class in C++ is an example of an abstract interface. The base class defines the interface, and derived classes implement the functions.

Recommended Reading

For information on designing abstract interfaces for device drivers, see the paper "A Procedure for Designing Abstract Interfaces for Device Interface Modules". This paper is provides a procedure for creating abstract interfaces, discuses common design challenges with creating abstract interfaces for device drivers, and provides examples from a real-world avionics program.