One of the big problems with object-oriented programming is that you need to write a lot of code to explain simple things. Automatic code generation dilutes the meaning of your program. In the long term, you get hundreds of lines of code which are just boilerplate.
Objects don’t mean anything to a computer. With object-oriented programming, you consider that your problem is mainly about the world representation. All this does is simplify the design of your application. Once created, objects serve no purpose in the code. And this is even worse when it comes to re-usability, because whenever you solve a problem with a world representation, it won’t apply to another problem.
Functional programming solves most of these problems. The object-oriented paradigm can still be used, but only at the design stage. The source code is efficient because it focuses exclusively on solving your problem without wasting lines of code explaining how you get this solution to your computer.