[quote=alandiniz]imagine o cenário de exemplo:
uma assistência técnica de computadores… onde o técnico (que herda de pessoa) pode adicionar em um pedido/ordem/ou-qlqr-outro-nome um produto e/ou serviço. na verdade ele pode adicionar vários produtos e vários serviços na ordem/pedido…
então eu tenho uma entidade produto, uma entidade serviço… e minha duvida é… as duas iriam herdar de “item” por exemplo? eu até sei fazer de várias formas, mais não sei qual seria a mais correta!!.. minha duvida aqui é esta… qual seria a mais correta…
ai no pedido eu teria uma lista de itens e cada item tem um enum falando se aquele item é um produto ou um serviço…
to meio perdido de como seria a melhor forma…[/quote]
Herança é algo muito perigoso. Isto é um conceito que precisa estar presente. Para usar herança vc tem que ter certeza absoluta do que está querendo.
Para isso vc precisa dominar o conceito de identidade.
Tecnico pode herdar de pessoa, mas precisa ? mesmo ? Não pode simplesmente conter um objeto pessoa ?
Ordem contém itens. Produto é um item ? Ou item contém um produto ? Normalmente o item tem a quantidade do produto que o cara está comprando. produto não tem isso, logo item não é um produto. Item contém um produto.
Ordem contém items e item contém produto.
Mas e serviço ? é um produto ? como fazer o item conter produtos mas também serviços ?
Se produto e serviço tivesse uma classificação maior comum poderiamos usar essa.
Agora entra um pouco de conceito. A palavra “produto” é genérica e se divide em “bem” e “serviço”. Portanto a empresa só vende produtos, mas eles podem ser bens ou serviços. ( básicamente coisas que se consomem e coisas que se usam). Então concluimos que serviço é filho de produto e que precisamos do conceito de bem
então : Ordem contém items e item contém produto. Produto pode ser um Bem ou um Serviço.
Vc não precisa de enum no item. Se precisar destinguir use a classe produto e métodos booleanos .isService fazer coisas como
if (produto.isService() ){
Servico servico = produto.asService();
}
Em geral vc deve sempre pensar que A contém B. Apenas quando A precisa conter dois tipos de B é que a herança é usada em B para criar B1 e B2 que herdam de B e ambos podem ser colocados em A. Mas a maioria das vezes isso não é necessário porque a composição é mais flexivel que a herança.