The advent of programming began somewhere in the 1940's with differential engines, punched cards etc. Programmers then used to write assembly codes which was difficult, required a lot of brain work and also prone to errors. This factor eventually paved the way for high level programming languages. A high level programming language involved breaking a program into functions. A program was thus composed of a set of functions to give it a meaning. Structural programming includes - ALGOL, FORTRAN, C, PASCAL etc. Gradually we came up with object-oriented programming which has the concept of classes. Object oriented programming can thus be classified as something in which we break a program into different class, with each class having its own functionality.
Hence we have functions.Functional decomposition can thus be referred to as the process of breaking down the functions into smaller sections. Functions basically represent the logic flow of a program. Decomposing the functions into sub functions help us to modularise the whole structure of our program which provides a simplified approach of handling the program.
This flowchart describes the systematic flow of a library system. Library is the major component which is broken down into sub components. Let's understand the steps as follows :
The major idea behind decomposing is to check , as to what extent are the functions dependant on each other. This brings into focus the terms very common in the context of software - cohesion and coupling.
Cohesion - It is a technique of monitoring how far are the processes intra dependant. That is, how strongly are they associated with each other within a function. Highly cohesive functions are efficient and good because they accomplish one well-defined task as a whole.
Coupling - It is a measure to identify the interdependency among two functions. Lesser the dependency better it is. Loosely coupled functions are good because changes made in one function will have less impact on the other function. When coupling is high it may sometimes become difficult to assess the results.
Everything needs a planning. Planning involves correct analysis of a situation under purview. Therefore in the case of functional decomposition an analysts job is to absorb the information correctly and decompose the components effectively for a clear understanding.