Quero saber como faz o método resultIMC , pois não sei como retornar uma instância da classe String
Crie a classe Pessoa com os campos, nome e dataNascimento. A classe Pessoa deve conter:
O método toString, que não recebe parâmetros e retorna um objeto da classe String na
seguinte forma:
Nome:
Data de Nascimento:
Crie a classe abstrata PessoaIMC que herde da classe Pessoa e contenha tenha os campos
peso e altura, ambos do tipo double. A classe PessoaIMC deve conter os seguintes métodos:
calculaIMC() que recebe como parâmetros dois valores do tipo double que são a altura e o peso
e retorna um valor do tipo double correspondente ao IMC (Índice de Massa Corporal = peso /
altura ao quadrado) calculado.
o método abstrato resultIMC() que não recebe parâmetros e retorna uma instância da classe
String.
O método toString() desta classe deve retornar uma string da seguinte forma:
Nome:
Data de Nascimento:
Peso:
Altura:
Crie as classes Homem e Mulher, herdeiras de PessoaIMC. Cada uma deve implementar o método
abstrato resultIMC() para realiza o calculo do IMC e exibe uma mensagem de resultado acordo
com o valor obtido.
Para Homem:
IMC < 20.7 : Abaixo do peso ideal
20.7 < IMC < 26.4: Peso ideal
IMC > 26.4 : Acima do peso ideal
Para Mulher:
IMC < 19 : Abaixo do peso ideal
19 < IMC < 25.8: Peso ideal
IMC > 25.8 : Acima do peso ideal
Crie uma classe teste que apresenta as seguintes opções:
Esse é tipo de exercício que me decepciona, um IMC não é uma Pessoa, mas segundo o exercício, é sim.
E o pior, o exercício vai adiante estruturando que Homem e Mulher são IMCs.
Por isso que tem tanto estudante com raiva de POO, os caras ensinam absurdos…
IMC deveria ser uma classe independente, capaz de calcular o IMC de qualquer Pessoa e avaliar o IMC de Homems e Mulheres, simples assim:
public class IMC {
public double calcular(Pessoa pessoa) {
double peso = pessoa. getPeso();
double altura = pessoa.getALtura();
return peso / (altura * altura);
}
public String avaliar(Homem homem) {
double imc = calcular(homem);
if (imc > 26.4) {
return "Acima do peso ideal";
}
if (imc > 20.7) {
return "Peso ideal";
}
return "Abaixo do peso ideal"
}
public String avaliar(Mulher mulher) {
double imc = calcular(mulher);
if (imc > 25.8) {
return "Acima do peso ideal";
}
if (imc > 19) {
return "Peso ideal";
}
return "Abaixo do peso ideal"
}
}
Segundo o seu enunciado, na classe Homem vai ser assim:
public String resultIMC() {
double imc = calculaIMC(getPeso(), getAltura());
if (imc > 26.4) {
return "Acima do peso ideal";
}
if (imc > 20.7) {
return "Peso ideal";
}
return "Abaixo do peso ideal"
}
E na classe Mulher vai ser assim:
public String resultIMC() {
double imc = calculaIMC(getPeso(), getAltura());
if (imc > 25.8) {
return "Acima do peso ideal";
}
if (imc > 19) {
return "Peso ideal";
}
return "Abaixo do peso ideal"
}
Tenho perguntas acerca de sua implementação de PessoaIMC:
Você declarou os atributos peso e altura como sendo do tipo double.
No construtor da classe você está recebendo eles como Double ao invés de double.
Nos métodos getPeso e getAltura também está retornando Double ao invés de double.
No método CalculaIMC (em maiúsculo?) você recebe eles como sendo novamente do tipo double.
A pergunta é: Tem algum motivo para misturar Double e double?
Você sabe que são tipos de dados diferentes né?
[/quote]
Estava duvidando da minha implementação , achava que tinha que fazer uma instância da classe String na classe abstrata. Mas fiz igualzinho ao seu. Obrigado , amigo.
Não, o enunciado diz que sua classe abstrata vai ter um método abstrato que retorna uma String.
Se o método é abstrato, quem vai fornecer a implementação concreta e retornar a instância de String será uma subclasse.
Nesse caso a subclasse Homem e a subclasse Mulher.
Quando você faz cálculos com os wrappers (Double, Integer, etc), é feito o autoboxing e unboxing , ou seja, há conversões implícitas de/para os respectivos tipos primitivos.
Claro que para programas pequenos como este exercício, a diferença será imperceptível, mas dependendo da aplicação, isso pode causar sim problemas de desempenho.
No caso deste exercício, não tem motivo - e nem ganho - nenhum em usar Double. Pode ser tudo double mesmo.