BT

Is OOP Better for Structuring your Code?

by Sadek Drobi on Nov 30, 2008 |

Programming languages that offer more power and flexibility have been lately gaining momentum. Johnatan Tang highlights, however, the flexibility vs. productivity tradeoff due, amongst other things, to the fact that traditional object orientation makes organizing programs easier and more straightforward.

He argues that in languages with single dispatch, “given a parameter or other value, you know exactly what you can do with it”. Whereas in statically typed languages code is more revealing about values involved, in structurally typed languages it is more general, but still gives an immediate idea what operations are available on a given value. And for both, statically and structurally typed languages, it is pretty clear what to do if you want to perform an operation that is not supported by a given object:

You write a method that performs that operation. This is problematic if you don't control that class, which is why Ruby and C# have moved to open classes. […]

And it's usually obvious where this method should go: on the class that you need to manipulate.

In multi-dispatch languages, it is much less obvious where a method should be written and “which parameter of the new method might take [a given] value”. This provides more flexibility in arranging code but this implies that more decisions should be taken about it and more efforts should be provided to keep these decisions in mind:

And then every time someone uses the method, they need to remember where it was defined and add the appropriate import statement. If they forget, they might get behavior they don't expect, as the appropriate method for the given generic function won't even have been loaded.

Establishing conventions can be considered a solution to this issue. However, Tang believes that “conventions that aren't enforced by the language tend not to be followed”. Moreover, having tried to define some patterns for modules arrangements, he also asserts that “this is inherently problem-domain-specific: there's no one right organizing principle that applies to everyone's programs.”

Hence, according to Johnatan Tang there is no obvious solution to this tradeoff of flexibility vs. productivity in organizing programs. What about your favorite languages? What solutions could you find? And, given your experience, is there any convenient compromise between the two? 

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

I thought this was about functional programming. by Ricky Clarkson

The first line mentioned functional programming and the rest of the article talks about multiple dispatch versus single dispatch. Multiple dispatch has absolutely nothing to do with functional programming.

Was the article generated by a Markov chain?

Re: I thought this was about functional programming. by Sadek Drobi

@Ricky
You are right. Actually the word "functional" slipped out of my head as I was thinking that functional programming languages might have the same problem.

I guess the problem is more general than multiple dispatch. Yet I think conventional OOP languages provide a good way of organizing and discovering code.
Thanks, fixed!

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

2 Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT