title: Techniques For Identifying Classes And Their Responsibilites
body: <p>I am looking for ways (techniques) that can help me to identify classes (and probably their responsibilities) in a software system (project). I know there are many software design books but am looking specifically for how to know that this should be a class in a system and these are its responsibilities.</p>
  
  <p>I want to improve my skills in how to come up with a list of classes for software projects.
  Are there techniques that will help me to know the list of classes after reading the specification and requirements documents?</p>
  
  <p>Please am not looking for design pattern books. I am rather looking for the techniques i can employ to come up with classes for software projects.</p>
  
  <p>I welcome all your contributions, books suggestions, pointers to articles, tutorials etc.</p>
  
  <p>I have googled but couldn't find any meaningful thing.</p>
  
  <p>Thanks for helping.</p>
  
  <p><strong>Addition::</strong></p>
  
  <p>Another area that is also important is how to determine the collaboration between classes. How to determine which class needs the other.</p>