OOP vs. FP(medium.com) |
OOP vs. FP(medium.com) |
> Is there really so much difference between f(o), o.f(), and (f o)?
Yes, there is!
In the case of o.f(), o needs to know about f.
In the case of f(o), f needs to know about o.
Bar(Foo * foo); // how Foo::Bar() is implemented
So while Bar(Foo) could be passed as several ways: Bar(Foo foo);
Bar(Foo &foo);
Bar(Foo *foo);
....
there isn't really a huge distinction between the two except for syntax and locality within the source file. (That is, class methods are all defined in the class and can't be spread across multiple header files).Alice extends class C with class A, which implements function a.
Bob extends class C with class B, which implements function b.
I have both Alice’s and Bob’s code, and I want to use both a and b. How can I do it?
Of course, there are ways to do it – notably multiple inheritance, if your language supports it – but the point is, in a functional language, this question never even arises. You just import the function definitions and use them, without ever having to think about the mechanics of it.
By the way, I’m not saying that this necessarily makes functional languages better (although I do tend to prefer them). I’m just pointing out that the difference is real.
'o' gives you capabilities to perform 'f'. 'o' can hide its data and only expose functions that it wishes.
With f(o), 'f' needs to be given permission to access 'o' internals.
OO languages _support_ hidden inputs and outputs as well as programming by mutation. They _allow_ programming in a functional style, but you will have to be inventive for it.
FP languages _support_ immutable values, referential transparency and all that. They _allow_ programming by mutation and hidden inputs and outputs, but you will have to be (sometimes very) inventive for it.
[To me,]
FP is more about nobody owning the data. Everything operating on all the data. (Mostly) All data exposed and accessible.
OOP is about certain classes owning data and limiting exposure to that data.
Maybe my point is better articulated by saying [to me,] functional programming is more data oriented than OOP.
https://medium.com/@richardeng/domo-arigato-mr-smalltalk-aa8...
He's also the subject of this article: https://thenewstack.io/can-man-spark-renaissance-smalltalk-p..., which made the front page of HN a while back (https://news.ycombinator.com/item?id=13642947)
???
OO is different because you have things like private variables. Meaning that only methods of an object's class can access the variable. So you now have a special group of functions that can access the variable. FP is not like that.
Inheritance is there if you need it. It's an available option.
I'm not sure I see that.
If class A and B wrap a C by composition and expose, respectively, `a` and `b`, then I still very much have the choice of which I'm building. Perhaps less so if they wrap a C by reference, so the C can be reused (it's too late at night to be sure I've thought it all the way through).
Anyone can bring it up, but "education" isn't relevant here. It's not what was discussed in the article, or the comments.