A class shall handle one topic, that's its single responsibility. A class Car
could contain methods like startEngine()
or attributes like weight
:
class Car{ int weight; void startEngine(); void stopEngine();}
Of course you can break up this class more. For example by defining a class for the engine:
class Engine{ start(); stop();}class Car{ Engine engine; int weight;}
But you shall not define seperate classes for starting and stopping the engine like:
class EngineStop{ stop();}class EngineStart{ start();}class Car{ EngineStart engineStart; EngineStop engineStop; int weight;}
The principle says to break up classes as reasonable as possible to achieve abstractness. Abstracting too deep violates this principle.