Classes - TheRedLady/nemetschek_internship GitHub Wiki

Classes

Abstraction

  • Does the class have a central purpose?
  • Is the class well named, and does its name describe its central purpose?
  • Does the class's interface present a consistent abstraction?
  • Does the class's interface make obvious how you should use the class?
  • Is the class's interface abstract enough that you don't have to think about how its services are implemented? Can you treat the class as a black box?
  • Are the class's services complete enough that other classes don't have to meddle with its internal data?
  • Has unrelated information been moved out of the class?
  • Have you thought about subdividing the class into component classes, and have you subdivided it as much as you can?

Encapsulation

  • Does the class avoid making assumptions about its users, including its derived classes?
  • Is the class independent of other classes? Is it loosely coupled?

Inheritance

  • Is inheritance used only to model "is a" relationships—that is, do derived classes adhere to the Liskov Substitution Principle?
  • Does the class documentation describe the inheritance strategy?
  • Do derived classes avoid "overriding" non-overridable routines?
  • Are common interfaces, data, and behavior as high as possible in the inheritance tree?
  • Are inheritance trees fairly shallow?

Other Implementation Issues

  • Does the class contain about seven data members or fewer?
  • Does the class minimize direct and indirect routine calls to other classes?
  • Does the class collaborate with other classes only to the extent absolutely necessary?
  • Is all member data initialized in the constructor?