views:

78

answers:

2

Are there any tools that will expand object oriented code so there is no sharing of any kind? For example if I have two classes A and B which inherit C then the tool would adjust classes A and B to no longer use C. It would also be nice if the tool did this and it still compiled and produced the same results. I think the main difficulty would be adjusting any conditional logic if class type is checked dynamically.

I know this is totally pointless from a machine perspective, but it would be a fun academic exercise.

+2  A: 

While there are various refactoring tools out there, I doubt your question has practical application as it would require substantial contextual knowledge and human intervention to perform that kind of automatic manipulation.

In your example, it's not just enough that A and B obtain C's methods and properties, but the fact that in many cases, there are places where you want to hand A (or B) to a method and have it treated like a C. Or, you might want to hand it to something that takes a C, but have A's (or B's) specific behavior invoked --- imagine a collection that invokes .DoThing() on whatever object is inside of it.

You'd have to not only bust apart the classes, but have all kind of other overloaded functions with lots of redundant looking code (especially for the types, not just the behaviors).

I'd say while an interesting thought experiment, perhaps we should place it in the bad idea pile. I doubt it would help for readability, extensibility, or performance.

Walt Stoneburner
It might make for an interesting and good (or bad, if you're the student implementing it) academic exercise for upper-year courses.
FrustratedWithFormsDesigner
Good point. I had assumed commercial application. Cheers!
Walt Stoneburner
Yes, this has zero practical applications, but as I said it might be a fun project.
Patrick
+1  A: 

The problem with this is that code which uses C rather than A or B is hard to deal with:

public void workWithSomeC( C useThis ) {  ... }

in our OO code we can pass either an A or a B to that function. Can't do that if A and B no longer have anything in common.

I would think by duplicating such code something could be made to work, but good grief what a horrible idea ;-)

djna
David Thornley
@David yes, in C++, not in Java - in Java all objects are passed by reference.
djna