4.1 Minimize the number of classes of collaboration, that is, reduce the number of users and users.
Collaboration implies a degree of coupling, but classes that are completely non-cooperative are meaningless and can be used at most as a library.
By abstracting, relying on interfaces, you can minimize the dependency of the implementation class, for the consumer, only see the interface dependencies, and the specific implementation of the dependency can be post-late binding to configure the dependency.
e.g. Menu----beef
----Lamb
----) chicken can be abstracted as
Menu----> Meat <=== Beef
<=== Lamb
<=== Chicken
where----> representative use, <==== represents the implementation
4.2 Minimize the number of messages that are passed between classes and collaborators.
4.3 Minimizing the amount of collaboration between classes and collaborators
That is, reduce the number of different messages that are passed between classes and collaborators.
4.4 Minimize fan-out of the class.
The number of messages (methods) of the class X messages sent (methods that call other classes) = The fanout of the class.
Ood---The relationship between class and object---use relationship principle