The following code illustrates a pattern I sometimes see, whereby an object is transformed implicitly as it is passed as a parameter across a number of method calls.
var o = new MyReferenceType();
DoSomeWorkAndPossiblyModifyO(o);
DoYetMoreWorkAndPossiblyFurtherModifyO(o);
//now use o...
This feels wrong to me (it hardly feels object oriented). Is it acceptable?
It is acceptable but usually bad style.
The usual “good” approach is:
The approach you presented makes sense when o is huge, and making a copy of it in memory is out of question, or if it’s a function you (and nobody else = private) use very frequently and don’t want to bother with the & syntax. Otherwise it’s laziness that results in some really difficult to detect bugs.