For most of my OO career (C++ for a long time, and then C#) I believed 
in the OCP very strongly.  It's supposedly the cornerstone of OOP, 
right?  I came across this article today which brought it mind again: 
http://www.ddj.com/blog/architectblog/archives/2006/05/open_closed_pri_1.html?cid=GS_blog_arnon

But I remember my mind getting warped for a few hours when I was first 
learning Ruby last year and came across Rails code that extended 
existing classes so you could do this:

20.minutes.ago

which I thought was just awesome.  Ruby lets me change anything I want 
about any class, it seemed, and it was a strange thing to me.

Of course, I'm not worried about breaking existing code when it's just 
my own code, but I'm still violating the open closed principle by 
changing the Time class, right?  But I think this ability is one of the 
things that makes Ruby so great!

So what gives?  Of course the idea of not changing behavior that clients 
depend on still holds - but that's something different, the concept of 
invariant intefaces.

So maybe I've misunderstood the OCP all along?

Or is just that we've come a long way since then?

Jeff

-- 
Posted via http://www.ruby-forum.com/.