Oop Is Fluff

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
  end
Let'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
  end
It 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:

  1. state makes concurrency difficult
  2. it makes reasoning about code difficult
  3. it increases coupling.
Hidden State is doubly bad. It makes code that looks fine act strangely when you are mutating state, and you can't figure it out because you can't access the variable(s).


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


EditText of this page (last edited March 12, 2007) or FindPage with title or text search