Objected-oriented versus functional programming
If you are working as a programmer in the finance industry, chances are that your program will be built for handling thousands or millions of dollars' worth in transactions. It is crucial that your programs are absolutely free of errors. More often than not, bugs arise due to unforeseen circumstances. As financial software systems and models become larger and more complex, practicing good software design is crucial. While writing the Python code, you may want to consider the object-oriented approach or the functional approach to structure your code for better readability.
The object-oriented approach
As the demand for clarity, speed, and flexibility in your program increases, it is important to keep your code readable, manageable, and lean. One popular technical approach to building software systems is by applying the object-oriented paradigm. Consider the following example of displaying a greeting message as a class:
class Greeting(object): def __init__(self, my_greeting): self.my_greeting = my_greeting def say_hello(self, name): print "%s %s" % (self.my_greeting, name)
Tip
Downloading the example code
You can download the example code files for all Packt books you have purchased from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/ support and register to have the files e-mailed directly to you.
We created a class called Greeting
that is capable of accepting an input argument in its constructor. For this example, we will define our greeting as "Hello"
. The say_hello
function is invoked with an input name and prints our greeting messages as follows:
>>> greeting = Greeting("Hello") >>> greeting.say_hello("World") >>> greeting.say_hello("Dog") >>> greeting.say_hello("Cat") Hello World Hello Dog Hello Cat
The functional approach
We can achieve the same Greeting
functionality using the functional approach. Functional programming is a programming paradigm, where computer programs are structured and styled in such a way that they can be evaluated as mathematical functions. These pseudo mathematical functions avoid changing state data, while increasing reusability and brevity.
In Python, a function object can be assigned to a variable and, like any other variables, can be passed into functions as an argument as well as return its value.
Let's take a look at the following code that gives us the same output:
from functools import partial def greeting(my_greeting, name): print "%s %s" % (my_greeting, name)
Here, we defined a function named greeting
that takes in two arguments. Using the partial
function of the functools
module, we treated the function, greeting
, as an input variable, along with our variable greeting message as Hello
.
>>> say_hello_to = partial(greeting, "Hello") >>> say_hello_to("World") >>> say_hello_to("Dog") >>> say_hello_to("Cat")
We assigned the say_hello_to
variable as its return value, and reused this variable in printing our greetings with three different names by executing it as a function that accepts input arguments.
Which approach should I use?
There is no clear answer to this question. We have just demonstrated that Python supports both the object-oriented approach and the functional approach. We can see that in certain circumstances the functional approach in software development is brevity to a large extent. Using the say_hello_to
function provides better readability over greeting.say_hello()
. It boils down to the programmer's decision as to what works best in making the code more readable and having ease of maintenance during the software life cycle while collaborating with fellow developers.
As a general rule of thumb, in large and complex software systems representing objects as classes helps in code management between team members. By working with classes, the scope of work can be more easily defined, and system requirements can be easily scaled using object-oriented design. When working with financial mathematical models, using functional programing helps to keep the code working in the same fashion as its accompanying mathematical concepts.