Your summary substantially restates what they told you.
That's what a summary is, isn't it?
I have to say, i've been following this thread, and i've realised i don't
have a very good grasp of what coarseness of grain means when applied to
objects. I can tell you what it means for locks - row vs table vs database
locks, for example, or device vs subsystem vs kernel - or access control,
but not really for objects.
I have a gut feeling for how it applies to distributed object systems,
which roughly boils down to whether you end up making lots of little
calls, or a few big ones. For example, a mortgage application processor
that looked like:
interface MortgageApplication {
void setProperty(Property house);
void addApplication(Applicant app);
void apply();
boolean hasBeenProcessed();
boolean accepted();
}
interface Property {
void setPostcode(Postcode pc);
void setValuation(int valuation);
}
// etc
Would be fine-grained. Whereas one which looked like:
interface MortgageApplicationProcessor {
boolean apply(Property house, List<Application> apps);
}
class Property implements Serializable [
}
// etc
Would be coarse-grained. But really, that's more about a sliding scale
between classical early-90s distributed-object style and a good old
fashioned RPC. I don't think the *objects* involved in either mode are
more fine-grained; after all, i have exactly the same set of types!
The problem with objects is that big ones are made of smaller ones. How
can you have anything other than fine-grained objects?
Perhaps coarseness of grain isn't about what the objects are, but what you
*do* with them - whether you lock one at a time, or hundreds; whether you
allow access to one at a time, or hundreds; whether you send one at a time
over the network, or hundreds. Maybe the objects are the ruler with which
you measure the grain.
tom