Até agora vimos como fazer cálculos, comunicar com o utilizador imprimindo informação no ecrã, guardar valores em memória e ler esses valores. Embora muito limitadas, estas ações já nos permitem construir programas bastante extensos.
O seguinte programa calcula notas finais de alguns alunos numa determinada disciplina. A nota é calculada a partir da nota do exame (com peso 75%) e da média das notas das três fases do projeto (com peso 25%).
A nota final é o valor arredondado do resultado anterior – para isso usamos cast para inteiro do valor, depois de lhe adicionar 0.5 (lembre-se que o cast para inteiro ignora a parte decimal). Exemplos:
(int) (12.4 + 0.5)
dá 12;(int) (18.6 + 0.5)
dá 19.xpublic class NotasFinais {
public static void main (String [] args) {
// Nota final do aluno 12345
double notaCalculada = 0.75 * 16.2 + 0.25 * ((12.3 + 14.4 + 15.1) / 3) ;
int nota = (int)(notaCalculada + 0.5);
System.out.println("O aluno 12345 teve " + nota + " valores");
System.out.println("++++++++++++++++++++++++++++");
// Nota final do aluno 54321
notaCalculada = 0.75 * 12.0 + 0.25 * ((14.2 + 10.0 + 10.5) / 3) ;
nota = (int)(notaCalculada + 0.5);
System.out.println("O aluno 54321 teve " + nota + " valores");
System.out.println("++++++++++++++++++++++++++++");
// Nota final do aluno 50000
notaCalculada = 0.75 * 18.0 + 0.25 * ((15.6 + 10.2 + 16.2) / 3) ;
nota = (int)(notaCalculada + 0.5);
System.out.println("O aluno 50000 teve " + nota + " valores");
System.out.println("++++++++++++++++++++++++++++");
}
}
Se compilarmos e executarmos este programa, o seguinte texto será escrito no standard output (o ecrã, por defeito):
xxxxxxxxxx
O aluno 12345 teve 16 valores
++++++++++++++++++++++++++++
O aluno 54321 teve 12 valores
++++++++++++++++++++++++++++
O aluno 50000 teve 17 valores
++++++++++++++++++++++++++++
Repare que no programa há uma série de (blocos) de ações que se repetem, tanto integralmente como com ligeiras variações. Se conseguíssemos abstrair essas ações que se repetem – dando-lhes um nome sugestivo, por exemplo – e usar esse nome em vez do conjunto de instruções, então o nosso programa poderia ficar mais compacto e legível.
Se comparar o método main
anterior com o que se segue (mesmo ainda não entendendo algumas das suas instruções) verifica que este é mesmo mais compacto e legível. Pois bem, o efeito que tem a execução dos dois programas é exatamente o mesmo!
xxxxxxxxxx
public class NotasFinaisLegivel {
public static void main (String [] args) {
// Nota final do aluno 12345
int nota = notaFinal(16.2, 12.3, 14.4, 15.1);
imprimeInformacao(12345, nota);
// Nota final do aluno 54321
nota = notaFinal(12.0, 14.2, 10.0, 10.5);
imprimeInformacao(54321, nota);
// Nota final do aluno 50000
nota = notaFinal(18.0, 15.6, 10.2, 16.2);
imprimeInformacao(50000, nota);
} // fim do metodo main
/***********************************************************
/************************** METODOS ***********************
/***********************************************************
/*
* Nota final arredondada ahs unidades
*/
static int notaFinal(double exame, double proj1, double proj2, double proj3) {
double notaCalculada = 0.75 * exame + 0.25 * ((proj1 + proj2 + proj3) / 3) ;
return (int)(notaCalculada + 0.5);
}
/*
* Imprimir nota de aluno no standard output
*/
static void imprimeInformacao(int nrAluno, int notaAluno) {
System.out.println("O aluno " + nrAluno + " teve " + notaAluno + " valores");
System.out.println("++++++++++++++++++++++++++++");
}
}
Usámos abstração, uma técnica fundamental na construção de programas, pois promove uma série de fatores de qualidade, como aprenderá mais tarde.
Abstração – ignorar certos pormenores acerca de um assunto, focando-nos somente no que é importante num dado contexto.
A abstração deve ser aplicada aos vários níveis do desenvolvimento dos programas, como irá aprender durante o seu curso.
Para já vamos estudar a
abstração procedimental – dar um nome a um conjunto de ações, abstraindo assim as instruções concretas que o implementam.
No programa, sempre que se quer executar esse conjunto de instruções refere-se o nome que o representa.
Obtemos um mecanismo muito poderoso para construção de programas quando lhe juntamos a
abstração de parâmetro – identificação de pontos de variação no conjunto de instruções, juntamente com a capacidade de indicar valores específicos para esses pontos aquando de cada execução
Como exemplos, no programa acima, temos notaFinal(...)
e imprimeInformacao(...)
.
No Java chamamos métodos aos blocos de instruções que têm um nome. Podemos ainda distinguir os métodos que são procedimentos dos que são funções.
Mais adiante veremos como complementar a informação dos métodos para mais fácil compreensão e utilização.
Anterior: 3.6. Comentários, indentação e outros promotores da legibilidade
Seguinte: 4.1. Alguns métodos já nossos conhecidos