Self type annotation is used for dependency injection for traits which basically what Cake
Pattern is.
Consider it as Tweeter needs an implementation of User instead of considering it as Tweeter has-a User. So, whenever you would like to use Tweeter, you'd have to provide an implementation of User.