Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leandro Rocha-IFMT

Herança de classes.

Recommended Posts

Oi, comecei o curso de Tecnologia em Análise e Desenvolvimento de Sistemas a pouco tempo, e estou aprendendo as premícias da programaão em Java, estou com duvidas sobre herança de classes, se alguém puder deixar uma dica de material para estudo, desde já agradeço.

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

E mais uma dica, "Evite a herança pois ela gera muito acoplamento entre as classes, use composição."

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que significa composição no Java?

(desculpe a pergunta boba, mas estou iniciando na linguagem)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não há problema algum em utilizar herança uma vez que seja realmente necessário. Você utiliza herança pra definir uma classe de objetos. Por exemplo: gato, cachorro e rato são objetos que pertencem a uma classe de mamíferos que por sua vez pertence à classe animal. Todavia uma classe carro não pode herdar de animal ou mamífero, pois pertence a um outro tipo de classificação.

 

Às vezes as pessoas utilizam herança para aproveitar alguns poucos métodos da classe pai sem o menor critério. Isso é que é um problema. Herança é que nem bebida: deve ser apreciada com moderação.

 

O que significa composição no Java?

(desculpe a pergunta boba, mas estou iniciando na linguagem)

Composição pode ser aplicada a uma classe da seguinte maneira:

Imagine uma classe entidade Faculdade. Dentro da classe Faculdade você terá um atributo / variável do tipo List contendo todos os Cursos. Uma faculdade/universidade contém um ou mais cursos. Assim a classe Faculdade terá uma lista de objetos da classe Curso compondo-a.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite a todos.

 

E mais uma dica, "Evite a herança pois ela gera muito acoplamento entre as classes, use composição."

Giovanny. Sinceramente não entendi o que você quis dizer, pois o que seria das Interfaces se não fosse a Herança ???

 

A GUI (Graphical User Interface - Interface Gráfica do Usuário) do java o que mais utiliza é a Herança, já imaginou se não utilizasse !!!

 

Como voce criaria um Form (JFrame) se não herdasse não só a interface gráfica, como também os recursos de seus métodos.

 

O que seria da Interface de Eventos dos componentes das bibliotecas AWT e SWING da GUI, tal qual a "ActionPerformed" se não fosse a Herança !!!

 

Já imaginou voce ter que construir todo o código de Interface Gráphica e de Eventos no seu Objeto.

 

É claro que a sua dica de fazer composição de classes é uma idéia válida, porém o recurso da Herança é e sempre foi um dos recursos poderosíssimo dentro de uma linguagem orientada a Objetos.

 

Não há como fugir da Herança no Java é voce vai perceber isto quando fazer programação em Desktops e também Web.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite a todos.

 

E mais uma dica, "Evite a herança pois ela gera muito acoplamento entre as classes, use composição."

Giovanny. Sinceramente não entendi o que você quis dizer, pois o que seria das Interfaces se não fosse a Herança ???

 

A GUI (Graphical User Interface - Interface Gráfica do Usuário) do java o que mais utiliza é a Herança, já imaginou se não utilizasse !!!

 

Como voce criaria um Form (JFrame) se não herdasse não só a interface gráfica, como também os recursos de seus métodos.

 

O que seria da Interface de Eventos dos componentes das bibliotecas AWT e SWING da GUI, tal qual a "ActionPerformed" se não fosse a Herança !!!

 

Já imaginou voce ter que construir todo o código de Interface Gráphica e de Eventos no seu Objeto.

 

É claro que a sua dica de fazer composição de classes é uma idéia válida, porém o recurso da Herança é e sempre foi um dos recursos poderosíssimo dentro de uma linguagem orientada a Objetos.

 

Não há como fugir da Herança no Java é voce vai perceber isto quando fazer programação em Desktops e também Web.

 

Herança é sim um perigo. Seu uso indiscriminado pode trazer grandes problemas. Veja: http://blog.caelum.com.br/2006/10/14/como-...bjetos-heranca/

Cuidado pra não confundir herança com implementação. ActionPerformed é uma interface, ou seja, você implementa, não herda. Você utiliza herança pra criar uma família de objetos. E você pode utilizar implementação de interfaces para definir comportamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos.

 

Vergil, concordo com voce no que diz respeito a criar herança indiscriminada, pois este conceito faz parte do que eu costumo chamar de "Congestionamento de Lógica".

 

No tocante a Herdar e implementar, eu gostaria de lhe fazer uma pergunta, pois agora fiquei com a pulga atrás da orelha. Uma Interface não deixa de ser uma Classe totalmente Abstrata que serve para definir comportamentos padrão de várias Classes, e assim sendo totalmente abstrato, a Interface não pode ser Instanciada, apenas sub-classeada até mesmo por outra classe parcialmente abstrata, ora isto não é Herança ???

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos.

 

Vergil, concordo com voce no que diz respeito a criar herança indiscriminada, pois este conceito faz parte do que eu costumo chamar de "Congestionamento de Lógica".

 

No tocante a Herdar e implementar, eu gostaria de lhe fazer uma pergunta, pois agora fiquei com a pulga atrás da orelha. Uma Interface não deixa de ser uma Classe totalmente Abstrata que serve para definir comportamentos padrão de várias Classes, e assim sendo totalmente abstrato, a Interface não pode ser Instanciada, apenas sub-classeada até mesmo por outra classe parcialmente abstrata, ora isto não é Herança ???

 

Um abraço.

Quando você utiliza herança, você diz que a classe filha "é uma". Imagine a classe Cliente herdando de Pessoa. Cliente é uma Pessoa (independente de ser Física ou Jurídica). As interfaces são uma forma de fechar um contrato, obrigar que uma classe tenha um determinado mecanismo ou comportamento. Dá uma olhada neste link: http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto

A classe Cliente pode implementar a interface Samambaia e nem por isso Cliente será uma samambaia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,

 

Acho que todo mundo interpretou mal o que eu disse. EU NÃO DISSE que é errado usar herança, mas sim que evitemos usa-la em certos casos quando podemos usar composição.

 

Herança cria muita dependência entre as classes e mais o termo herança confunde a maioria dos programadores JAVA, pois muitos deixam-se levar pelo reaporveitamento de de código.... como disse Paulo SIlveira "o facto de um Cao ter raca e nome não é o suficiente para fazer Gato extends Cao ". Quebrando assim o paradigma OO.

 

James Gosling fala a respeito http://www.artima.com/intv/gosling3P.html

 

Para quem não entende inglês, Paulo Silveira tem um artigo excelente http://blog.caelum.com.br/2006/10/14/como-...bjetos-heranca/ e vai esclarecer o porque da "minha" afirmação no meu tópico anterior.

 

Abrçs pessoal... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos.

 

Vergil, concordo com voce no que diz respeito a criar herança indiscriminada, pois este conceito faz parte do que eu costumo chamar de "Congestionamento de Lógica".

 

No tocante a Herdar e implementar, eu gostaria de lhe fazer uma pergunta, pois agora fiquei com a pulga atrás da orelha. Uma Interface não deixa de ser uma Classe totalmente Abstrata que serve para definir comportamentos padrão de várias Classes, e assim sendo totalmente abstrato, a Interface não pode ser Instanciada, apenas sub-classeada até mesmo por outra classe parcialmente abstrata, ora isto não é Herança ???

 

Um abraço.

Deixa-me tentar esclarecer alguns pontos...

 

Interface implements

Herança extends

 

Interfaces é como se fossem contratos, ou seja todo mundo que implementar aquele contrato pode ser referenciado apartir da mesma( é claro que isso tbm temos em herança de classes abstractas ), mas n para por aí, Quando uma classe assina esse contrato( implements ) não significa que apartir daquele momento ela é uma subclasse da interface, ela apenas se responbiilizou em implementar todos os requisitos( metodos ) exigido pelo contrato( interface ).

 

Intenda uma coisa, fazendo herança nós estamos buscando reaproveitamento de código e polimorfismo de referencia, fazendo composição estamos buscando apenas reaproveitamento de código e usando interfaces nós estamos buscando apenas o polimorfismo de referencias... Esses são pontos importantissimos...

 

JAVA não é OO, mas sim uma linguagem na podemos utilizar muito bem o poder desse paradigma, o facto de tudo em java acontecer dentro de uma class nçao quer dizer que tudo que façamos esteja dentro dos padrões OO.

 

Abrçs http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que significa composição no Java?

(desculpe a pergunta boba, mas estou iniciando na linguagem)

 

Olá Avatar, deixa-me tentar explicar o conceito por fora: Imagine uma class Carro e uma class Roda; 1 Carro tem uma Roda ou é uma Roda ??? Essa é a pergunta chave para poder entender bem o conceito... Quando estamos a herdar dizemos "é uma" e quando estamos perante composição dizemos "tem uma", é como eu disse no tópico acima, composição nós estamos deixando de lado o polimorfismo e tbm estamos fazendo algo além disso "evitar o grande acoplamento entre as nossas classes( pouco relevante o exemplo k usei )".

 

nesse caso em vez de Carro extedens Roda { } seria:

 

class Carro {
	  Roda roda;  // estamos perante uma composição
}

Espero ter ajudado, Abrçs http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.