Opinião sobre a implementação

1 resposta
D

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

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;
	}
}
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());
	}
}

1 Resposta

A

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 .

Criado 20 de janeiro de 2014
Ultima resposta 21 de jan. de 2014
Respostas 1
Participantes 2