preemptive OOP?

Kent Johnson kent at kentsjohnson.com
Sat Sep 30 17:04:41 EDT 2006


John Salerno wrote:
> So my question in general is, is it a good idea to default to an OOP 
> design like my second example when you aren't even sure you will need 
> it? I know it won't hurt, and is probably smart to do sometimes, but 
> maybe it also just adds unnecessary code to the program.

In general, no. I'm a strong believer in You Aren't Going to Need It 
(YAGNI):
http://c2.com/xp/YouArentGonnaNeedIt.html

because it *does* hurt
- you have to write the code in the first place
- every time you see a reference to MyNotebook you have to remind 
yourself that it's just a wx.Notebook
- anyone else looking at the code has to figure out that MyNotebook is 
just wx.Notebook, and then wonder if they are missing something subtle 
because you must have had a reason to create a new class...

and so on...Putting in extra complexity because you think you will need 
it later leads to code bloat. It's usually a bad idea.

Possible exceptions are
- If you are really, really, really sure you are going to need it 
really, really soon and it would be much, much easier to add it now then 
after the next three features go in, then you might consider adding it 
now. But are you really that good at predicting the future?
- When you are working in a domain that you are very familiar with and 
the last six times you did this job, you needed this code, and you have 
no reason to think this time is any different.

You struck a nerve here, I have seen so clearly at work the difference 
between projects that practice YAGNI and those that are designed to meet 
any possible contingency. It's the difference between running with 
running shoes on or wet, muddy boots.

Kent



More information about the Python-list mailing list