Você está na página 1de 12

Modelando o mundo real

■ Como incluir informação de pessoa


vinculada a uma conta?
■ Alternativa 1:

Modelando o mundo real

■ Como incluir informação de pessoa


vinculada a uma conta?
■ Alternativa 1:
» Será que uma conta tem cpf?
» Será que uma conta tem nome?
» Faz sentido fazer desta forma?

1
Modelando o mundo real

■ Como incluir informação de pessoa


vinculada a uma conta?
■ Alternativa 2:

Modelando o mundo real

■ Como incluir informação de pessoa


vinculada a uma conta?
■ Alternativa 2:
» Maior reflexão sobre o mundo real
» Criação de uma entidade adicional com
potencial de reuso.

2
Classe de Bancos: Assinatura

class Banco {
void cadastro(Conta c) {}
void deposito(int num, double val) {}
void saque(int num, double val) {}
double saldo(int num) {}
void transfere(int d, int p, double v) {}
Banco () {}
}

Classe de Bancos: Descrição

class Banco {
private Conta[] contas;
private int indice = 0;

void cadastro(Conta c) {
contas[indice] = c;
indice = indice + 1;
}

3
Classe de Bancos: Descrição

■ Algo estranho?
» Repetição da busca.
» Como resolver?

Classe de Bancos: Descrição


■ Refatoração
» é o processo de modificar um sistema
de software para melhorar a estrutura
interna do código sem alterar seu
comportamento externo.
» No Eclipse existe um menu para ajudar
em refatorações.
» No caso de Banco, devemos extrair um
método de pesquisa para contas!

4
Classe de Bancos: Descrição

Classe de Bancos: Descrição

5
Classe de Bancos: Construtor

■ Banco( ) ?
» Construtor da Classe
» Inicialização de um objeto da classe
» Caso não sejam declarados construtores,
utiliza-se o construtor default

Banco( ) {
contas=new Conta[50];
}

Mais Sobre Construtores

■ Múltiplos Construtores
» Overloading (Sobrecarga)

public class Circulo {


double x, y, r;
Circulo(double x, double y, double r) {
this.x=x; this.y=y; this.r=r; }
Circulo(double r) {x=0.0; y=0.0; this.r=r;}
Circulo(Circulo c) {x=c.x; y=c.y; this.r=c.r;}
Circulo() {x=0.0; y=0.0; r=0.0;}
}

6
Exercício em Sala

■ Completar a implementação da
classe Banco com o construtor e os
métodos transfere e saldo.
■ Implementar um programa principal
que crie objetos das classes
definidas, testando sua utilização.

Testes Automatizados

■ Como automatizar a geração de


programas que verifiquem se outros
programas estão corretos?
» Conceito de Testes Automatizados.

7
Testes Automatizados

■ No Eclipse pode-se criar um JUnit


Test Case.
» Nesse caso será criada uma classe
vazia com um método de teste,
caracterizado pela anotação @Test

Testes Automatizados

■ Um teste é caracterizado pela


execução de algo e uma verificação
do resultado
■ Essa verificação pode ser feito por
asserções (asserts) ou por indicação
de falhas (fail).

8
Testes Automatizados

Testes Automatizados

■ Um teste deve ser autocontido


» Todos os dados para sua execução
devem ser criados dentro do próprio
testes, para não depender de outros!
■ Um teste deve ser focado
» O teste deve focar em um aspecto
específico da regra de negócio.
» Devem ser criados outros testes para
demais aspectos.

9
Testes Automatizados

■ Um teste deve ter um nome


representativo
» Os nomes dos métodos de testes
devem representar o que está sendo
testado.
■ Uma classe de teste pode ter vários
testes
» Cada método com a anotação @Test
indica um caso de teste

Testes Automatizados

■ Teste o caminho “feliz”


» Deve haver testes para o uso planejado
de um método. O caminho normal e
para o qual foi pensado.
■ Teste os caminhos alternativos
» Teste as demais opções consideradas
excepcionais, como tentativa de
depósito em conta inexistente, saque
em conta sem saldo, etc.

10
Testes Automatizados

■ Um auxílio à criação de testes.

Testes Automatizados

■ Um auxílio à criação de testes.


» Indica linhas de código não exercitadas
nos testes ou exercitadas parcialmente.

11
Testes Automatizados

12

Você também pode gostar