Cursos / Informática para Internet / Programação Orientada a Objetos / Aula
Vejamos agora como os conceitos de herança, composição e polimorfismo podem co-existir numa mesma solução. Vamos partir do seguinte ponto de vista: existem objetos que possuem um fim em si mesmo, como um lápis, chave de fenda, mouse. No entanto, existem objetos que são usados para complementar outros, como um apontador, um mousepad; há outros que servem apenas como repositório: bolsas, organizadores, gavetas etc.
Para exemplificar, considere um objeto que funciona como repositório: um guarda-roupas! Como o próprio nome diz, ele serve para guardar outros objetos do tipo Roupa. Vamos imaginar os objetos que estão envolvidos nessa perspectiva, desde os objetos mais abstratos até os mais detalhados (ou concretos), conforme desejamos. Por exemplo, uma roupa possui características, como cor, tecido, manequim, preço, estampa etc. Uma roupa pode ser de vários tipos, como esportiva, social, casual, de banho, fardamento etc.
Logo, surge a questão: iremos definir os tipos existentes de roupa como subclasses da classe Roupa? Assim como no mundo real, no mundo OO não existe uma resposta certa para todas as situações. Isso irá variar dependendo do nível de detalhamento que você desejar implementar sua solução. Uma alternativa é definir um atributo, chamado tipo, na classe Roupa.
Outra forma é definir uma subclasse para cada tipo de roupa que existir. Uma solução intermediária é definir subclasses para os tipos de roupas mais comuns e reservar um atributo para descrevê-la quando não houver uma classificação pré-definida. Devido a restrições de espaço, ilustraremos apenas essa última solução. A seguir, são apresentadas as classes de tal solução. A Listagem 6 ilustra a classe Roupa.
Listagem 6 - Classe RoupaVamos agora definir os tipos principais de roupas existentes, são eles: esportivas, sociais e fardamentos. Logo, precisamos gerar mais três classes derivadas de roupa. A Listagem 7, Listagem 8 e a Listagem 9 ilustram o código de tais classes.
Listagem 7 - Classe EsporteVamos agora criar uma classe que serve para armazenar objetos do tipo Roupa e suas derivadas. A classe GuardaRoupas, apresentada na Listagem 10, é responsável por armazenar as roupas em compartimentos distintos por categoria.
Observe que os métodos da classe GuardaRoupa adicionam e retiram roupas independentemente de serem social, esportiva ou fardamento. No método confereRoupas(), será mandado uma mensagem para que cada objeto roupa exiba seus dados, através do polimorfismo. Observe que cada objeto irá executar o método como sua classe definiu e as mensagens serão enviadas de forma transparente a todos eles.
Vejamos, na Listagem 11, agora, uma classe que define um método main() para criação de objetos Roupa e GuardaRoupa.
Listagem 11 - Classe VestuarioMainVersão 5.3 - Todos os Direitos reservados