Abstract, Fiz Correto?

5 respostas
ClaudioDEV

Olá, estou estudando Java, gostaria de saber na opinião dos amigos, se o código que eu desenvolvir esta correto ou não!

[color=red]Calculadora.java[/color]
package Conta;

public abstract class Calculadora {
    
    abstract double somar(double x, double y);
    abstract double subtrair(double x, double y);
    abstract double dividir(double x, double y);
    abstract double mutiplicar(double x, double y);
    
}
[color=red]CalculadoraTeste.java[/color]
package Conta;

public class CalculadoraTeste extends Calculadora {

    @Override
    double somar(double x, double y) {
       return (x + y);
    }

    @Override
    double subtrair(double x, double y) {
        return (x - y);
    }

    @Override
    double dividir(double x, double y) {
        return (x / y);
    }

    @Override
    double mutiplicar(double x, double y) {
        return (x * y);
    }
    

}
[color=red] Principal.java[/color]
package Conta;

public class Principal extends CalculadoraTeste
{
    public static void exibir(double valor)
    {
       System.out.println(valor);
    }
    
    public static void main(String args[])
    {
         CalculadoraTeste cxx = new CalculadoraTeste();
         double retorno = cxx.mutiplicar(5, 2);
         exibir(retorno);
         
    }
}

Gostaria de saber, se é correto fazer dessa maneira, ou estou fazendo tudo errado! Obrigado.

5 Respostas

rafaelvalerini

De uma maneira geral, está correto seu exemplo… o conceito está sendo aplicado… mas eu não usaria dessa forma neste exemplo de calculadora…

Eu explico pq…

O Intuito de criar uma classe abstrata, é mascarar a implementação de alguns métodos. Sendo assim, quando você cria uma classe abstrata, ela pode ser implementada por mais de uma classe concreta, correto?

Isso acontece pois para cada classe concreta que implementa Calculadora.java, haverá uma especialização, ou seja, os métodos teoricamente deverão ser implementados de uma forma diferente…

E isso não tem motivos para ocorrer no seu exemplo acima, pois a soma de dois números, sempre será (x + y)…

Não sei se era nesse ponto que você queria chegar… mas qualquer coisa da um toque que a gente te ajuda…

Flw

sergiotaborda

ClaudioDEV:
Olá, estou estudando Java, gostaria de saber na opinião dos amigos, se o código que eu desenvolvir esta correto ou não!

Está em jogo um conceito que à priori não se vê no código. A diferença entre É-UM e SE-COMPORTA-COMO-UM.

Se a calculadora é uma classe abstrata então todos os objetos que são calculadora não são nada mais.
Se a calculadora é uma interface, então qualquer objeto pode ser, também, uma calculadora.

Ao escolher que Calculadora seja uma classe abstrata, vc está indo para o primeiro conceito de É-UM

Dito isto, vamos falar sobre a sua classe principal.

package Conta;

public class Principal extends CalculadoraTeste
{
    public static void exibir(double valor)
    {
       System.out.println(valor);
    }
    
    public static void main(String args[])
    {
         CalculadoraTeste cxx = new CalculadoraTeste();
         double retorno = cxx.mutiplicar(5, 2);
         exibir(retorno);
         
    }
}

Esta classe não É-UMa calculadora. É simplesmente uma classe que tem um main.
Portanto, o fato de vc extende de CalculadoraTeste está errado.
A classe principal não precisa herdar de nada.

ClaudioDEV

A Certo, Entendi.

Muito Obrigado pela a Ajuda! :smiley:

jrmelo

Oi. Boa noite!

Mais um pouco de conceito.

  1. Uma classe com o modificador abstract nunca é instanciada. Ela é usada quando quer que a subclasse forneça uma implementação específica;
  2. Um método com o modificador abstract força a implementação pela primeira classe concreta. É usado quando deseja que a subclasse forneça um tipo próprio da sua implementação.

Vamos alinhar o conceito ao código fornecido por você.

A classe abstract Calculadora é estendida por sua classe específica (chamada de classe concreta) a CalculadoraTeste, que implementa um comportamento próprio a cada método. Ou seja, atendem os conceitos acima.

Já a classe Principal, como dita por sergiotaborda, ela não É-UMA Calculadora e sim um meio de iniciar a execução da classe concreta. Então, ela não pode ser uma subclasse de CalculadoraTeste.

Abraço.

W

Amigo é melhor que usa uma Inteface para a Calculadora, Interface é um conjunto de assinaturas, assim dessa forma você pode implementar ela para sua CalculadoraTeste

Criado 1 de agosto de 2012
Ultima resposta 2 de ago. de 2012
Respostas 5
Participantes 5