Opinião sobre a implementação

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]

Olá acho que esses métodos vc não precisava ter criado:

public double getAverageHeartRateLowest() {
return calculatePersonTargetHeartRateLowest();
}

public double getAverageHeartRateHighest() {
return calculatePersonTargetHeartRateHighest();
}

public int getAge() {
return calculatePersonAgeInYears();
}

public double getMaxHeartRate() {  
    return calculatePersonMaxHeartRate();  
}  

AO invés disso crie os próprios métodos que estão retornando e pronto afinal qual é a diferença entre chamar o getAverageHearasdjapisjd e o calculatePersontargetHearasdaknsdkansd ???

Ah as constantes tem que ter a palavra-chave final .