MC600 - Segundo semestre de 2003 - LISTA 12 ------------------------------------------- 1. Crie um diagrama de herança de classes para o seguinte conjunto de classes: - classe "AnimalDeEstimacao" extende Object. - classe "Cachorro" extende "AnimalDeEstimacao", tem o atributo "vacinado" e os métodos late(), pula() e fingeDeMorto().* - classe "Gato" extende "AnimalDeEstimacao", tem o atributo "tipo" e os métodos arranhaSofa(), mia() e fogeDoDono(). - classe "Poodle" extende "Cachorro" e tem os métodos chateia() e destroiCorrepondencia(); - classe "PitBull" extende "Cachorro" e tem o atributo "vitimas" e os métodos persegueCiclista() e comePoodle(). - classe "ViraLata" extende "Cachorro" e tem os métodos persegueBicicleta(), persegueCarro() e reviraLixo(). - classe "CachorroDeMadame" extende "Cachorro" e tem os métodos chateia() e destroiCorrepondencia(); Resposta: Veja figura em link na página de Java 2. Com relação ao diagrama do exercício 1, supondo que eu tenha uma variável "c" do tipo Cachorro. Se "c" faz referência no momento a um objeto do tipo Poodle, é possível chamar c.chateia()? Por que? 3. Em relação ao mecanismo de herança em Java, responda: a. o que uma subclasse herda da superclasse b. como herança ajuda a reaproveitar código. Resposta: a. Uma subclasse herda de sua superclasse todos os métodos e atributos. Porém, só por meio de métodos não privadas podemos acessar os métodos e atributos privados. b. Com a herança diminuimos a necessidade de se copiar funções que serão usadas em vários lugares. Além disso, caso mudemos algo em uma função de uma superclasse, essa alteração é herdada pelas classes filhas. O exercício 1 exemplifica esse reaproveitamento de código. 4. O que significa ``herança múltipla'' em orientação a objetos? Existe algum mecanismo de herança múltipla em Java? Resposta: HERANÇA MÚTIPLA: É quando uma classe herda características de mais de uma classe. Existe em Java? Não, exceto que uma classe pode "implementar" uma ou mais interfaces. Obs: Mais abaixo encontra-se mais material sobre este assunto, coletado pela colega Silvia Petean. 5. Suponha que tenhamos uma classe Shape em Java com subclasses Rectangle e Circle, sendo que nenhuma destas duas últimas é subclasse da outra, e também uma subclasse Square de Rectangle. Suponha ainda que os objetos s, r, c e q sejam instâncias das classes Shape, Rectangle, Circle e Square, respectivamente. Quais atribuições abaixo são permitidas e quais não são: a. s = c; b. r = s; c. q = c; d. s = q; Resposta: +-------+ | Shape | (s) +-------+ / \ +--------+ +-----------+ (c)| Circle | | Rectangle | (r) +--------+ +-----------+ | +--------+ | Square | (q) +--------+ Shape s; Rectangle r; Circle c; Square q; a. s = c; //permitida, pois todo Circle também é um Shape b. r = s; //proibida, pois s nem sempre é Rectangle c. q = c; //proibida, pois c nunca é Square d. s = q; //permitida, pois todo Square também é um Shape MATERIAL EXTRA SOBRE HERANÇA MÚLTIPLA E INTERFACES EM JAVA: Java não suporta herança múltipla (como C++ suporta), mas suporta a noção de 'interfaces', um esquema mais simples que oferece algumas das principais vantagens da herança múltipla. Um benefício de utilizar as interfaces é que uma classe pode implementar quantas interfaces precisar, além de estender uma classe. Principais diferenças entre interfaces e classes: - uma classe 'interface' da mesma forna que uma classe abstrata, fornece os nomes dos métodos mas não a implementação. - qualquer classe poderá implementar várias classes de interface, vencendo arestriç!ao de herança múltipla em Java. - um programa não poderá instanciar uma classe 'interface'. - todos os métodos de umainterface são 'public' e 'abstract'. - todas as variáveis de umainterface são 'public', 'static' e 'final'. - todos os métodos devem ser implementados pela classe que utiliza a interface. - toda classe 'interface' não tem uma raiz progenitora final que conduza a 'Object'. As classes "interface se encontram numa hieraraquia independente, que voc6e poderá aplicar livremente a qualquer parte de sua árvore de classe. Também achei num livro de OO: Herança múltipla é quando uma classe pode herdar estruturas de dados e operações de mais de uma superclasse. Quando um subtipo herda mais de um supertipo imediato, a combinação de características de supertipod não é direta. Surge um conflito quando ítens de dados ou operações de diferentes supertipos têm o memso nome, mas diferentes significados. Quais são as ramificações quando um subtipo herda características nesta situação? Existem diversas estratégias para resolver conflitos de características não relacionadas. Numa delas um algoritmo é definido para escolher uma característica baseado na sua posição na hierarquia de supertipos. Embora isto oculte do usuário a resolução do conflito, nem sempre produz os resultados esperados. Outra estratégia proíbe tais conflitos e renomeia as características ofensoras - removendo o problema inteiramente.