Olá a todos
criei este tópico para tirar uma dúvida sobre uma implementação que acabei de fazer. O código funciona perfeitamente e de acordo com o exercício, que foi tirado do Deitel 9, exercício 3.16.
Fiz mais para treinar, mesmo porque é um problema muuuuito fácil, mas a dúvida não é “o que” mas o “como” eu implementei. Fui digitanto e não pensei muito nas implicações do “como” implementei, daí no final que percebi o que havia acontecido, então gostaria da opinião de quem é mais experiente para me dar uma luz. Vou postar o código abaixo mas pra simplificar para aqueles que não querem ler o código pra entender o que quero dizer, basicamente minha dúvida se resume no seguinte: Ao final da implementação vi que por exemplo para eu conseguir o valor de person.getAverageHeartRateLowest() eu faço o seguinte caminho:
getAverageHeartRateLowest() = return calculatePersonTargetHeartRateLowest() = return getMaxHeartRate() = return calculatePersonMaxHeartRate() = return getAge() = return calculatePersonAgeInYears() = return getYear()
É óbvio que parece no mínimo muito estranho, portanto a pergunta é: Qual a medida que eu posso usar para não começar a me aprofundar demais nas chamadas dos métodos? É normal que isso aconteça em alguns casos? Claro que neste caso eu poderia ter colocado umas variáveis na classe HeartRate e pronto, mas não fiz… ou seja. estou totalmente errado em usar tantos métodos ou não?
Vai ai as classes
[code]public class HeartRates {
private static int currentYear = 2013;
private static int constant = 220;
private String firstName;
private String lastName;
private int day, month, year;
public HeartRates() {
super();
}
public HeartRates(String firstName, String lastName, int day, int month,
int year) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.day = day;
this.month = month;
this.year = year;
}
// GETTERS
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getDay() {
return day;
}
public int getMonth() {
return month;
}
public int getYear() {
return year;
}
public double getAverageHeartRateLowest() {
return calculatePersonTargetHeartRateLowest();
}
public double getAverageHeartRateHighest() {
return calculatePersonTargetHeartRateHighest();
}
public int getAge() {
return calculatePersonAgeInYears();
}
public double getMaxHeartRate() {
return calculatePersonMaxHeartRate();
}
// SETTERS
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setMonth(int month) {
this.month = month;
}
public void setYear(int year) {
this.year = year;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setDay(int day) {
this.day = day;
}
// CALCULOS
private int calculatePersonAgeInYears() {
return HeartRates.currentYear - getYear();
}
private double calculatePersonMaxHeartRate() {
return HeartRates.constant - getAge();
}
private double calculatePersonTargetHeartRateHighest() {
return this.getMaxHeartRate() * .85;
}
private double calculatePersonTargetHeartRateLowest() {
return this.getMaxHeartRate() * .5;
}
}[/code]
[code]import java.util.Scanner;
public class UseHeartRate {
public static Scanner input;
public static String firstName;
public static String lastName;
public static int day, month, year;
public static void main(String[] args) {
input = new Scanner(System.in);
HeartRates person = new HeartRates();
System.out.println("Digite o nome: ");
firstName = input.nextLine();
person.setFirstName(firstName);
System.out.println("Digite o sobrenome: ");
lastName = input.nextLine();
person.setLastName(lastName);
System.out.println("Digite o dia do nascimento: ");
day = input.nextInt();
person.setDay(day);
System.out.println("Digite o mes do nascimento: ");
month = input.nextInt();
person.setMonth(month);
System.out.println("Digite o ano do nascimento: ");
year = input.nextInt();
person.setYear(year);
String completeName = String.format("%s %s", person.getFirstName(), person.getLastName());
System.out.printf("Nome: %s\n", completeName);
String dateOfBirth = String.format("%d/%d/%d", person.getDay(), person.getMonth(), person.getYear());
System.out.printf("Nascimento: %s\n", dateOfBirth);
System.out.printf("Idade: %d\n", person.getAge());
System.out.printf("Max Heart Rate: %f\n", person.getMaxHeartRate());
System.out.printf("Average Heart Rate\n");
System.out.printf("Average Min Heart Rate: %f\n", person.getAverageHeartRateLowest());
System.out.printf("Average Max Heart Rate: %f\n", person.getAverageHeartRateHighest());
}
}[/code]