Functional Programming
In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that each return a value, rather than a sequence of imperative statements which change the state of the program.
Wikipedia
Functional programming is very popular for creating portable code. Because every function receives all the inputs required to run, it is not dependent on anything else and likewise, its output does not directly act on any object. Functions can be written to receive an object, modify it and return it.
FP encourages the creation of portable methods.
Object Oriented Programming
Object-oriented programming (OOP) is a programming paradigm based on the concept of “objects”, which can contain data and code: data in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods).
Wikipedia
OOP is especially popular among those working on complex domain-driven programs, e.g. Medical Reporting Software. Here detailed objects are designed and inheritance is used.
OOP encourages the creation of portable object types or interfaces.
Separation of Concerns
In computer science, separation of concerns (SoC) is a design principle for separating a computer program into distinct sections such that each section addresses a separate concern. A concern is a set of information that affects the code of a computer program
Wikipedia
The most common example of this principle is practice is the separation of web development into Front-end and Back-end. CBD (below) further develops on this principle by encouraging communication between components thrugh signals, events and messages among other things.
Components-based Development
Component-based software engineering (CBSE), also called components-based development (CBD), is a branch of software engineering that emphasizes the separation of concerns with respect to the wide-ranging functionality available throughout a given software system.
Wikipedia
The CBSE process involves the creation of independent code blocks or components that communicate with each other. The idea is that the communication between components overrides how they are individually designed, written and implemented.
Here’s a simplified example: Component A emits a message of integer “10”. Component B listens for any integer emitted by Component A. When it receives “10”, it follows through with its methods. However if Component A emits a string message “SOS”, Component B ignores it or registers an error.
CBD encourages the creation of strict rules of comunication between components.