Ir ao conteúdo
  • Cadastre-se

Aprendendo teoria de orientação a objetos


Posts recomendados

Pessoal, estou estudando JAVA/ORIENTAÇÃO A OBJETOS na faculdade, porém estou com algumas dúvidas e não entendo muito bem o que meu professor fala. Gostaria de ver se alguém conseguiria me ajudar a saná-las. O restante to entendendo bem no que eu tenho lido pela internet. Mas minhas maiores dúvidas até o momento é isso. E peço desculpas pelo título. Não sabia o que colocar.

 

1 - O que é Polimorfismo e para que que serve?

 

2 - Pra que serve uma classe abstrata e qual a diferença dela para concreta?

 

3 - Quais os atributos e métodos que podem ser usadas na classe abstrata? Poderia me mostrar um exemplo?

 

4 - Qual a diferença dos métodos da classe abstrata pros métodos da classe concreta?

 

5 - Qual seria a diferença de uso entre "implements" e "extends"?

ex: 

class ContaPoupanca extends Conta

class ContaPoupanca implements Conta

 

6 - O que são interfaces? Alguém conseguiria me dar um exemplo?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@rsm_rlb Olá, não são todas as perguntas que conseguirei lhe responder, aconselho que busque mais respostas na internet, a sua duvida numero 1, sobre o Polimorfismo, é que existem varias formas de usar o polimorfismo em java, somente programando para aprender de forma eficaz como cada uma funciona, um exemplo de polimorfismo que posso lhe dar é você criar varias métodos com o mesmo nome, mas com parâmetros diferentes, sem ter nenhum problema com isso,  o próprio java saberá qual  método usar. Veja este simples exemplo:

public class teste{ //EXEMPLO DE POLIMORFISMO
	public void imprime(int a){ //ao invocar o método imprime, você poderá passar como parâmetros um ou dois inteiros,
		System.out.println(a); //sendo que com dois ele imprime a soma
	}
	public void imprime(int a, int b){
		System.out.println(a+b);
	}
}

As suas outras duvidas espero que outros respondam :)

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Bom dia.

 

Polimorfismo é a capacidade de algo assumir diversas formas (como o nome indica). Por exemplo: Pessoa física e pessoa jurídica. Ambas possuem atributos iguais. Ambas são pessoas.

A classe abstrata serve para guardar informações comuns entre essas entidades.

 

ex1: 

Pessoa física possui endereço, telefone e CPF.

Pessoa jurídica possui endereço, telefone e CNPJ.

Ambas são pessoas.

Uma classe abstrata (que chamarei de Pessoa) será criada para armazenar esses atributos comuns (endereço e telefone).

Porém essa classe não será acessada diretamente. As classes Pessoa física e Pessoa jurídica herdarão todos os atributos da classe Pessoa (endereço e telefone), além de seus atributos exclusivos (CPF para Pessoa física e CNPJ para Pessoa jurídica).

 

Então eu entendo como classe abstrata a classe de origem (pai) das classes herdadas e que não é instanciada diretamente. E como classe concreta as classes que são instanciadas diretamente.

 

Até aí são 3 perguntas respondidas.

 

Sobre a quarta pergunta, funciona da mesma forma que os atributos comuns entre as duas classes filhas.

Você tem um método que funciona diferentemente nas duas classes. Pode pode inicializar o método na classe pai e usá-las nas classes filhas de formas diferentes.

 

Ex2:

classe Empregado{
 public double calculaAbono();
}

classe Funcionário{
 public double calculaAbono(){
   return salario * 1.02
 }
}

classe Diretor{

public double calculaAbono(){
   return salario * 1.05
 }
}

 

No exemplo acima eu uso um método que calcula o abono do diretor e dos funcionários. Ambos os empregados ganham abono, porém o diretor ganha um percentual diferente dos demais funcionários. Então eu posso fazer o cálculo separado em cada classe, porém inicializando-as na classe pai.

 

mais ou menos isso aí :D

 

A questão 5 eu tenho que relembrar...

A questão 6 é mais difícil...

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@rsm_rlb Olá, como os outros se dedicaram às questões 1 a 4, vou responder a 5 e 6, invertendo a ordem (porque implements tem a ver com interface).

 

Mas, antes de responder, quero ressaltar que conceitos de orientação a objeto não entram na cabeça imediatamente, eles levam um tempo para serem absorvidos e entendidos mesmo.

 

Em teoria, poderíamos fazer tudo sem orientação a objeto mesmo (e acho que daí vêm as questões e dúvidas sobre os conceitos, porque, em alguns casos, podem nos parecer desnecessários e até uma "chatice" a mais), mas ela é uma ferramenta potente por vários motivos, como reusabilidade de código, legibilidade, organização, evita repetição, entre outros.

 

Respondendo à pergunta 6, interface é um conceito de orientação a objeto. É um conceito poderoso, que permite a abstração de comportamentos que devem ser implementados (fica aí a dica sobre a palavra "implements").

A interface define MÉTODOS a serem implementados pelas classes que decidirem a implementar; a palavra-chave aqui é contrato.

 

Por exemplo, se tivermos a interface:

 

public interface Maquina{
	String fazerBarulho();
}

Essa interface define um comportamento: estou querendo dizer que Maquina possui o comportamento de fazer barulho. Entretanto, atente ao seguinte fato: na interface. eu não implemento o método. A interface só diz qual comportamento será apresentado, mas não como.

 

É importante entender que, quando uma classe implementa uma interface, ela também pode se passar por interface. Se uma classe Carro implementa a interface Maquina, significa que a classe Carro também é uma Maquina.

 

Agora, seguindo nossa abstração, imagine que eu tenho as classes Carro e Avião.

 

Apesar de podermos considerar os dois como máquinas, temos que concordar que os dois fazem barulhos diferentes, certo? Haha.

 

Podemos usar a interface Maquina para construir nosso modelo, ou seja, Carro e Avião implementam a interface Maquina, ou seja, devem implementar o método fazerBarulho. 

 

Concordamos antes que eles fazem barulhos diferentes, ou seja, cada um vai implementar o método de uma forma diferente.

 

public class Carro implements Maquina{
	...
	public String fazerBarulho(){
		return "Vruum!";
	}
}

public class Avião implements Maquina{
	...
	public String fazerBarulho(){
		return "Fooom!";
	}
}

 

E, voilà! Cada classe implementa o método da interface de uma forma diferente, o que faz todo sentido, uma vez que os dois são máquinas, mas fazem barulhos diferentes.

 

Ou seja, a interface cria uma abstração, no nosso caso, a abstração de uma Maquina e o contrato é que, se eu quero ser uma Maquina (ou seja, se eu a implemento; palavra-chave: implements), eu DEVO obrigatoriamente implementar seu ou seus métodos, como no exemplo dado.

 

Agora, existe a questão do porque usar uma interface, dado que tudo poderia ser feito sem ela. Essa questão vou deixar para você pesquisar ; ). Sugiro estudar o princípio Liskov Substitution Principle (aliás, já fica a dica pra estudar os princípios SOLID de software, muito úteis pra fazer código de qualidade).

 

Agora, respondendo à pergunta 5: você usa implements quando você quer que uma classe implemente os métodos de uma interface; e você usa extends quando quer que uma classe estenda uma classe ou uma classe abstrata.

 

No seu exemplo:

 

class ContaPoupanca extends Conta
class ContaPoupanca implements Conta

 

No primeiro, ContaPoupança tá estendendo uma classe, seja ela abstrata ou não (ou seja, CountaPoupança herda de conta); no segundo, ContaPoupança implementa a interface Conta.

 

Ufa! Espero ter ajudado; se ficou qualquer questão, posta que a gente discute de novo.

 

De novo, essas questões podem ser um pouco difíceis de entender e absorver, demora um tempo mesmo, o importante é continuar pesquisando.

 

Enfim, se tiver mais dúvidas, poste!

 

Abraço!

 

 

 

 

 

 

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!