What’s Wrong with OOP and FP

Chris wendlec at tcd.ie
Thu Nov 14 04:39:10 PST 2013


On Thursday, 14 November 2013 at 10:51:31 UTC, Paulo Pinto wrote:
> On Thursday, 14 November 2013 at 10:01:34 UTC, Jacob Carlborg 
> wrote:
>> On 2013-11-14 10:37, Don wrote:
>>
>>> I just can't escape the feeling that class-based runtime 
>>> polyphorphism
>>> is almost never an ideal solution, and that most of the 
>>> benefits and
>>> success of OOP languages comes from things other than OOP 
>>> itself. And I
>>> think it's because OOP is philosophically nonsense -- in the 
>>> real world,
>>> similarities between things are everywhere, but almost none 
>>> of them are
>>> is-A relationships.
>>
>> I think the most useful parts of OOP is encapsulation and have 
>> the data and methods in the same place.
>
> Actually no different than using ADT (Abstract Data Types) 
> popularized by modular languages like Modula-2, with the added 
> benefit of type extension and polymorphism.
>
> Just because OOP has objects in the name, it doesn't need to be 
> real objects, but concepts actually.
>
> The main problem was that OOP productivity was oversold hype, 
> in the same vein as web 2.0, cloud computing, agile and 
> whatever might come next. People need to sell books and 
> certifications.
>
> And that the early OO design approaches focused too much in 
> implementation inheritance instead of interfaces and delegation.
>
> --
> Paulo

I agree that encapsulation and having logic and data in the same 
place is a nice feature of OOP. Also, OOP is a tool that helps to 
create an architecture or an infrastructure like 
Data-Controller-Components, which is quite useful. However, it 
happens again and again that a program gets tangled with 
inter-dependencies. No matter how careful the planning is, as in 
"this component (class) doesn't need to know anything about 
XYZ.". Sooner or later there will be a case where this is no 
longer doable. There are valid solutions like proxies etc. but 
still it somehow doesn't feel right.

At the moment I'm using a mixture where I use structs and ranges 
for tasks that can be performed independently, like for example a 
filter that removes comments from a text file. There is no need 
to put that behavior into a class. In other words it's a "blind" 
component, that doesn't need to see anything else but the 
incoming text. Being "blind", it can be reused out of the box. 
OOP is still useful for having a central data pool (resources) 
that can be accessed from anywhere by any component - if needs be 
- delegating tasks etc.

This said, I sometimes have to implement an initially "blind" 
component (struct, range) as an internal class to get the 
references that exist within the class that uses it. This, or 
pass the data to the component (bah!). Either way, it creates 
dependencies. I tend to blame myself (bad planning, insufficient 
understanding of the matter), but I wonder whether it is possible 
at all to have a reasonably complex program without 
inter-dependencies of some sort, FP or OOP. Is there, in reality, 
only a certain amount of really independent components, whereas 
the bulk of the program is invariably inter-dependent to varying 
degrees?




More information about the Digitalmars-d mailing list