title: How to name my classes?
body: <p>I have a base user class which is responsible for manipulating the basic user information: name, age, location, etc. I want to extend my system with the groups functionality and later with projects and meetings. For example:</p>
  
  <pre><code>class User
  {
      public function getName() {
          ...
      }
  
      public function getAge() {
          ...
      }
  }
  </code></pre>
  
  <p>And then extend it with groups functionality:</p>
  
  <pre><code>class GroupableUser extends User
  {
      public function join($groupId) {
          ...
      }
  
      public function leave($groupId) {
  
      }
  
      public function requestGroupInvitation($groupId) {
          ...
      }
  
      public function acceptGroupInvitation($groupId) {
          ...
      }
  }
  </code></pre>
  
  <p>The name GroupableUser seems weird to me, however it does't make sense to add join and leave methods to Group class, because its user that joins and leaves a group, not the other way around. </p>
  
  <p>And later I would have classes like <b>UserThatCanHaveProjects</b> and <b>UserThatCanParticipateInMeetings</b>. 
  How to name these classes? </p>
  
  <p>And how do you typically deal with these situations?</p>