Software Engineering; System Analysis
Functional design is a paradigm of computer programming. Following functional design principles, computer programs are created using discrete modules that interact with one another only in very specific, limited ways. An individual module can be modified extensively with only minor impacts on other parts of the program.
Functional design is a concept most commonly associated with computer programming. However, it is also relevant to other fields, such as manufacturing and business management. At its core, the concepts underlying functional design are simple. Instead of designing a program in which the individual parts perform many different functions and are highly interconnected, modules should have low coupling. Modules—the individual parts of the program—should be designed to have the simplest possible inputs and outputs. When possible, each module should only perform a single function. Low coupling ensures that each module has a high degree of independence from other parts of the program. This makes the overall program easier to debug and maintain. Most of the labor that goes into programming is related to these two activities. Therefore, it makes sense to use a design approach that makes both of these tasks easier.
Functional design is preferable because when a program has a bug, if the modules perform many different functions and are highly coupled, it is difficult to make adjustments to the malfunctioning part without causing unintended consequences in other parts of the program. Some parts of a program do not easily lend themselves to functional design because their very nature requires that they be connected to multiple parts of the overall program. One example of this is the main loop of the program. By necessity, the main loop interacts with and modifies different modules, variables, and functions. Similarly, the interrupt vector table acts as a directory for interrupt handlers used throughout the program. Still, many other functions of a typical program can be designed in ways that minimize interdependencies.
Functional design tries to avoid these issues in two ways. First, programmers specifically consider interrelations as they design a program and try to make design choices that will minimize complications. Second, once a program has been written, programmers will proofread the code to find any elements that have unnecessary complications. Some clues are the presence of language such as “and” or “or” in the descriptions of variables, classes, and types. This can suggest that multiple functions are being combined into one module. The programmer may then separate these functions into separate, less dependent modules if possible.
Functional design also has applications in physical manufacturing. This has been facilitated by the advent of 3-D printing. 3-D printing can make it easier to produce parts, components, and even whole pieces of machinery that would be expensive or impossible to manufacture using traditional methods. In this context, functional design conceptually separates a complex machine into simple sections that can be individually produced and then assembled.
Designers who approach a problem from the standpoint of functional design often observe that functional design is not simply an outcome but also a process. Functional design is a way of thinking about problems before any code is written. It asks how a design can be broken down into simpler steps and include only essential processes.
—Scott Zimmer, JD
Bessière, Pierre, et al. Bayesian Programming. Boca Raton: CRC, 2014. Print.
Clarke, Dave, James Noble, and Tobias Wrigstad, eds. Aliasing in Object-Oriented Programming: Types, Analysis and Verification. Berlin: Springer, 2013. Print.
Lee, Kent D. Foundations of Programming Languages. Cham: Springer, 2014. Print.
Neapolitan, Richard E. Foundations of Algorithms. 5th ed. Burlington: Jones, 2015. Print.
Streib, James T., and Takako Soma. Guide to Java: A Concise Introduction to Programming. New York: Springer, 2014. Print.
Wang, John, ed. Optimizing, Innovating, and Capitalizing on Information Systems for Operations. Hershey: Business Science Reference, 2013. Print.