Let's use the "shapes" example, to see what OOP's big mistakes are:
In Erlang:
-module(shapes). -export([area/1]). area({rectangle,X,Y}) -> X*Y; area({circle,R}) -> R*R*3.14.In Ruby:
class Rectangle def initialize(x,y) @x = x @y = y end def area @x*@y end end class Circle def initialize(r) @r = r end def area 3.14*(@r**2) end endLet's say I want to add perimiter/circumference to the shapes. In the Ruby example, I have to do this:
class Circle def perim 2*3.14*@r end end class Rectangle def perim 2*(@x+@y) end endIt would be worse in JavaLanguage because you would have to open up the code.
In Erlang:
-module(shapes2). -export([perim/1]). perim({circle,R}) -> 2*3.14*R; perim({rectangle,X,Y}) -> X+Y+X+Y.If Erlang did not require modules, it would be even better. Which changes more, Features or Shapes? In most domains the answer would be Features.
STATE IS THE ROOT OF ALL EVIL.
State is a bad thing for 3 reasons:
Note that I did NOT create this topic nor write any of the above. --top
LOL! Defensive much? Well, I can't say I don't understand why... I can sooo see you being accused of it, except that you're generally better at presenting your thoughts than whoever wrote the above. Your request is duly noted.
I think the author of this document has some sort of frustrations but hasn't a clue how to communicate them. Does he wish to KillMutableState? Or does he just object to the concept that 'circles' and 'squares' should be considered objects instead of geometric values. Personally, I agree on the latter, but I recognize that these circles and squares are useful for education. --db