if669 - Introdução à Programação
Aula 2
Igor Ebrahim (ies)
Monitoria de IP
Agenda
•
•
•
•
Estruturas de Repetição
Recursão
Exceção
Encapsulamento
Estruturas de Repetição
• Estruturas de repetição permitem executar um
trecho de código várias vezes;
• Loops;
• Assim como as estruturas condicionais, estruturas
de repetição também são controladas por
expressões booleanas;
• Três tipos de estruturas de repetição:
– while;
– do... while;
– for;
• Cada situação pede um tipo de loop diferente!
Instrução while
• Sintaxe:
while ( condicao ) {
instrucao;
}
• Se condicao for true então instrucao é
executada;
• Após a execução ter sido realizada, se condicao
continuar true, instrucao é realizada
novamente;
• A execução se repete indefinidamente até a
condicao tornar-se false.
Lógica do while
avalia
condição
true
instrução
false
Instrução while
• Exemplo:
MiniJavaSystem console;
console = new MiniJavaSystem();
int count = 1;
while (count <= 5){
console.println (count);
count = count + 1;
}
• Caso a condição já fosse false na primeira
avaliada, então a instrução não seria executada, e
o bloco seria pulado;
• Valor Sentinela;
• Robustez;
Loop Infinito
• Caso a condição do loop nunca seja false, então
aquele laço será executado “para sempre”;
• Erro de lógica muito comum;
• Exemplo:
MiniJavaSystem console;
console = new MiniJavaSystem();
int count = 1;
while (count <= 25){
console.println (count);
count = count - 1;
}
Loop Aninhado
• Um loop pode conter uma outra estrutura de
repetição dentro do seu corpo;
• Para cada iteração externa, deve-se completar a
interna.
MiniJavaSystem console;
console = new MiniJavaSystem();
count1 = 1;
while (count1 <= 10){
count2 = 1;
while (count2 <= 20){
console.println ("Aqui");
count2 = count2 + 1;
}
count1 = count1 + 1;
}
Instrução do...while
• Sintaxe:
do {
instrucao;
} while ( condicao )
• A instrucao é executada uma primeira vez;
• A condicao é avaliada e caso seja true, a
instrucao é executada novamente;
• A instrucao se repete indefinidamente até a
condicao tornar-se false.
Lógica do do...while
instrução
true
avalia
condição
false
Instrução do...while
• Exemplo:
MiniJavaSystem console;
console = new MiniJavaSystem();
int count = 0;
do {
count = count + 1;
console.println (count);
} while (count < 5);
• O corpo de um do...while executa pelo menos
uma vez;
Instrução for
• Sintaxe:
A inicializacao
é executada uma vez
antes do loop começar
A instrucao é
executada até a
condicao tornar-se false
for ( inicializacao ; condicao ; incremento )
instrucao;
O incremento é executado ao final
de cada iteração
Lógica do for
inicialização
avalia
condição
true
intrução
incremento
false
Instrução for
• Exemplo:
MiniJavaSystem console;
console = new MiniJavaSystem()
for (int count=1; count <= 5; count++)
System.out.println (count);
• O campo de inicialização pode ser usado para
declarar uma variável;
• O campo de incremento pode ser calculado da
forma que o programador quiser;
• Usa-se o for quando sabemos o número de
iterações ou quando ele é facilmente calculado.
Recursão
• Toda definição recursiva deve ter uma parte não
recursiva;
• Caso ela não tivesse, a recursão não teria fim;
• A parte não recursiva também é chamada de caso
base;
• Exemplo:
– !n  É o fatorial de n, ou seja, o produto de todos os
inteiros entre 1 e n;
– O fatorial pode ser definido de forma recursiva:
1! = 1
n! = n * (n-1)!
– O caso base desta recursão é o 1!;
Recursão
5!
120
5 * 4!
24
4 * 3!
6
3 * 2!
2
2 * 1!
1
Recursão
• Um método que chama a ele mesmo em seu
corpo é dito recursivo;
• Métodos recursivos tem que ser implementados
para trabalhar com o caso base e os casos
recursivos;
// Este método retorna a soma de 1 a n
public int soma (int num){
int resultado;
if (num == 1)
resultado = 1;
else
resultado = num + soma (n-1);
return resultado;
}
Exceção
• Objeto que descreve um erro;
• São lançadas (thrown) por um programa e podem
ser capturadas (caught) e tratadas (handled) por
uma outra parte do programa;
• Java tem predefinida uma série de exceções que
podem ser lançadas em um programa;
• Um programa Java pode lidar de três maneiras
com as exceções:
– Ignorando;
– Tratando onde ela ocorre;
– Tratando em outra parte do programa.
Exceção
• Java possui uma série de exceções predefinidas
que podem ser lançadas;
• Um programa Java pode lidar com exceções de
três maneiras diferentes:
– Ignorando;
– Tratando onde a exceção ocorre;
– Tratando em outra parte do programa;
• Caso seja ignorada, o programa terminará sua
execução de uma forma anormal, produzindo uma
mensagem apropriada  Stack Trace:
– Linha onde ocorreu a exceção;
– O caminho pelo qual o método que levantou a exceção
foi chamado.
Exceção
public class Zero {
public static void main (String[] args){
MiniJavaSystem console;
console = new MiniJavaSystem();
int numerator =
int denominator
console.println
console.println
printed.");
}
}
10;
= 0;
(numerator / denominator);
("This text will not be
try...catch
• Para tratar uma exceção, a linha que a lança é
colocada dentro de um bloco try;
• Um bloco try é seguido por uma ou mais
cláusulas catch.
• Quando uma exceção ocorre, a execução do
programa pula para o primeiro catch e procura
qual é o que possui a mesma exceção;
finally
• finally é uma cláusula opcional que pode vir depois
do catch.
• As instruções dento do bloco finally são
executadas sempre;
• Se nenhuma exceção for levantada pelo bloco try,
mesmo assim as instruções do bloco finally são
executadas;
• Se uma exceção for lançada, o bloco finally é
executado após a cláusula catch apropriada;
throws / throw
• A exceção pode se propagar através do caminho
pelo qual o método que o levantou foi chamado;
• Todos os tipos de exceção que podem ser
levantados pelo método, devem ser declarados
em sua assinatura usando o throws;
• Exceções são lançadas usando o throw ;
public double dividir(double d, double f)
throws DividirPorZeroException {
double retorno = 0;
if(f != 0) retorno = d/f;
else throw new DividirPorZeroException();
}
Encapsulamento
• Visões de objetos:
– Interna - atributos e métodos da classe que o define;
– Externa - os serviços que um objeto proporciona e como
ele interage com o resto do sistema;
• Externamente, um objeto é uma entidade
encapsulada;
• Um objeto pode usar os serviços providos por
outro – mas não deve saber como estes serviços
são implementados;
• Qualquer mudança no estado de algum atributo do
objeto usado deve ser feito através de seus
métodos – dificultar (tornar impossível) a mudança
direta de atributos fora da própria classe;
Encapsulamento
• Pode-se pensar no objeto encapsulamento como
sendo uma caixa preta;
Cliente
Métodos
Atributos
Modificadores de Acesso
• Java torna possível o encapsulamento através dos
modificadores de acesso;
• Um modificador é uma palavra reservada que
especifica uma característica particular de um
método ou atributo;
• Java possui três modificadores de acesso:
public, protected e private;
Modificadores de Acesso
• Membros que são declarados como:
– public podem ser referenciados em qualquer parte;
– private só podem ser referenciados dentro da própria
classe;
• Membros que são declarados sem modificadores
de acesso têm visibilidade default e podem ser
referenciados por qualquer classe do mesmo
pacote;
Modificadores de Acesso
Variables
Methods
public
private
Violate
encapsulation
Enforce
encapsulation
Provide services
to clients
Support other
methods in the
class
Download

do... while