I'm in doubt about what would be the best way to represent a client name entity that may have sub-layers of the same entity.
Customer may own another Customer who is actually a carrier, and that Transporter may have another Customer who is a broker.
I thought of creating extended classes Cliente < Transportador < Corretor
, since all have basically the same attributes.
I've done a lot of this in Java but a Rubista friend once told me that he hated this kind of practice.
Below is the structure and diagram of classes I thought of creating.