poo - aula 003

100
Professor Dal Prá Aula 003

Upload: jose-volmei-dal-pra-junior

Post on 26-Jun-2015

937 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: POO - Aula 003

Professor Dal Prá

Aula 003

Page 2: POO - Aula 003

Professor Dal Prá

Objetivos das próximas aulas

• Orientação a objetos

– Conceitos

– UML

• Como criar modelos (diagramas) que representem o que

iremos desenvolver em Java

– Como aplicar este conceitos no Java

Base para todo o restante do curso

Page 3: POO - Aula 003

Professor Dal Prá

Orientação a Objetos

• criada em 1967 (Simula)

• SmallTalk (Anos 70 / Xerox )

• C++ ( C com OO / AT&T)

• Atualmente

– Java

– Object Pascal (Delphi)

– .NET

– PHP

• Usar linguagem OO híbrida não garante que o sistema seja OO;

Page 4: POO - Aula 003

Professor Dal Prá

Orientação a Objetos

• Novo paradigma, ou seja, nova forma de

pensar

• Abstração mais próxima do mundo real

– Conta Bancária

• Atributos: saldo, limite;

• Funcionalidades: debitar, creditar, transferir;

– Não significa que será totalmente intuitivo;

• Desenvolver software não é fácil para todos;

Page 5: POO - Aula 003

Professor Dal Prá

Orientação a Objetos

• Padroniza o pensamento

– Análise orientada a objetos;

– Projeto orientado a objetos;

– Programação orientada a objetos (POO – OOP);

Page 6: POO - Aula 003

Professor Dal Prá

Orientação a Objetos

• Melhor organização do sistema

– cada objeto terá uma função específica:

• Conta Bancária: controla a movimentações do

correntista;

• Correntista: guardar informações do cliente do banco;

• Formulário: receber informações digitadas pelo usuário;

• Botão: Executar uma ação após o clique do usuário;

– Maior Produtividade (não precisa repetir uma

lógica que é de responsabilidade de outro objeto);

Page 7: POO - Aula 003

Professor Dal Prá

Orientação a Objetos

Alta coesão

• Objetos super especializados

– Maior reusabilidade dos objetos

– Menor impacto nas manutenções

– Maior velocidade nas manutenções

Não criar estruturas que “FAZEM TUDO”

Page 8: POO - Aula 003

Professor Dal Prá

Orientação a Objetos

• Um sistema orientado a objetos é um grande

diálogo entre objetos (cooperação);

Interface com o

Usuário Lógica de

Negócios da

Conta Bancaria

Acesso ao Banco

de Dados

1 - Você pode me passar o extrato do

Correntista Junior durante o período X?

2 - Você pode me

passar o meu histórico

de movimentações

durante o período X ?

3 - Ok. Ai está a lista de

movimentações.

4 – Segue o extrato do correntista.

Page 9: POO - Aula 003

Professor Dal Prá

Conceitos Básicos OO

• Abstração

• Classes

– Atributos

• Tipos

• Valores padrão

– Métodos

• Assinaturas

• Repostas

• Objetos

– Referência

Page 10: POO - Aula 003

Professor Dal Prá

Conceitos Avançados OO

• Relacionamentos

– Dependência

– Herança

• Conversões

– Associação

• Encapsulamento

– Modificadores de acessos

• Classes

• Atributos

• Métodos

– Padrão de codificação de classes no Java

Page 11: POO - Aula 003

Professor Dal Prá

Conceitos Avançados

• Polimorfismo

– Classes abstratas

– Interfaces

• Diminuir o acoplamento entre classes

Page 12: POO - Aula 003

Professor Dal Prá

Como representar estes

conceitos antes mesmo de

implementá-los?

Page 13: POO - Aula 003

Professor Dal Prá

Unified Modeling Language - UML

• Linguagem de Modelagem Unificada

– Linguagem: o que for “escrito” em UML deve ser entendido;

– Modelagem: imagens valem mais do que mil palavras;

– Unificada: melhores idéias entre várias técnicas (Booch, OOSE, OMT);

• Não é padrão, mas é muito utilizada;

• Pré-requisito em muitas oportunidades;

Page 14: POO - Aula 003

Professor Dal Prá

Unified Modeling Language - UML

• Modelos expressam

– Aspectos estáticos: informações a serem

manipuladas ou armazenadas;

– Aspectos dinâmicos: perguntas e

respostas entre objetos e mudança de

estados (mudança nos valores

armazenados nos objetos);

Page 15: POO - Aula 003

Professor Dal Prá

Mas para que vamos usar isso ?

• Modelar

– Compreender o que vamos fazer;

– Projetar antes de codificar;

– Documentar

– Facilitar a comunicação entre os membros da

equipe e também o cliente;

• $ em manutenção > $ desenvolvimento;

Page 16: POO - Aula 003

Para simplificar ...

Não vamos usar 100% da UML

Professor Dal Prá

Page 17: POO - Aula 003

Professor Dal Prá

Abstração

• Não é um conceito exclusivo da OO;

• Problemas do mundo real Conceitos de

programação linguagem de programação;

• Linguagem OO a torna mais fácil;

• Nomes dos objetos do mundo real serão

utilizados nos objetos que estarão dentro do

programa;

Page 18: POO - Aula 003

Professor Dal Prá

Abstração

• Nosso cliente pedirá:

“ Preciso controlar os saques, depósitos e

dados das contas bancárias dos meus

clientes. Preciso saber o número da

conta, o nome do cliente, qual o saldo e

o limite ”

Page 19: POO - Aula 003

Professor Dal Prá

Abstração

• O analista/arquiteto vai converter isso em um modelo

– UML, no caso de OO

• O Programador vai pegar o modelo definido e vai materializar ele nas linhas de códigos

– Linguagens de programação;

• Java, no nosso caso

– Ferramentas;

– Bancos de dados;

– Comunicação com periféricos;

Page 20: POO - Aula 003

Professor Dal Prá

Vamos abstrair o problema

de nosso cliente

Page 21: POO - Aula 003

Professor Dal Prá

Sistema OO é composto

por vários objetos

cooperantes, mas como

eu defino um objeto?

Page 22: POO - Aula 003

Professor Dal Prá

Classes

• Representa um novo tipo de dado

– Características de um objeto

UML

ContaBancaria

Page 23: POO - Aula 003

Podemos dizer que ...

• É o projeto que definirá como será um objeto

dentro do sistema

– Podemos fazer uma analogia ao projeto de uma casa

• Mostra como será a casa, porém não é a casa construída!

Professor Dal Prá

Page 24: POO - Aula 003

Professor Dal Prá

Assim se que se “declara” uma clase no Java

class NomeDaClasse {

// corpo da classe

} Arquivo: NomeDaClasse.java

Page 25: POO - Aula 003

Professor Dal Prá

Classes

class ContaBancaria {

}

Arquivo: ContaBancaria.java

Page 26: POO - Aula 003

Professor Dal Prá

Temos a classe, mas como

vamos guardar os dados

dentro desta classe?

Page 27: POO - Aula 003

Professor Dal Prá

Classes - Atributos

• Definem os possíveis estados do objeto

– Atributos

• Nome

• Tipo

– Valor padrão

– Valor inicial

Page 28: POO - Aula 003

Professor Dal Prá

Classes – Atributos

UML

ContaBancaria

numero: int

nomeCliente : String

saldo : double

limiteCredito : double = 100.0

Page 29: POO - Aula 003

Professor Dal Prá

Classes – Atributos

Java

// virá com o valor padrão TipoDoAtributo nomeDoAtributo; // definido um valor inicial TipoDoAtributo nomeDoAtributo = valorInicial;

Page 30: POO - Aula 003

Professor Dal Prá

Classes – Atributos

class ContaBancaria{

int numero;

String nomeCliente;

double saldo;

double limiteCredito = 100.0;

}

Page 31: POO - Aula 003

Professor Dal Prá

Classes – Atributos

• Valores default

–numéricos : 0

–boolean : false

Page 32: POO - Aula 003

Professor Dal Prá

Agora temos

• novo tipo de dado chamado ContaBancaria

– Poderá armazenar

• numero

• nomeCliente

• saldo

• limiteCredito

• Mas e o que ele irá fazer? Qual será a

contribuição dele para o sistema? Ele apenas

armazenará informações?

Page 33: POO - Aula 003

Professor Dal Prá

Classes – Métodos

• Define quais ações poderão ser executadas

– Habilidades que estarão definidas em uma classe

– Método

• Assinatura ( regra para formular uma pergunta )

– Argumentos

» Nome

» Tipo

• Retorno ( resposta à pergunta )

– Sem resposta

– Tipo

Page 34: POO - Aula 003

Professor Dal Prá

Classes – Métodos

ContaBancaria

numero: int

nomeCliente : String

saldo : double

limiteCredito : double = 100.0

saca ( valor : double ) : boolean;

deposita ( valor : double ) : void;

UML

Page 35: POO - Aula 003

Professor Dal Prá

Classes – Métodos

Java

retorno nomeMetodo(tipoArgumento nomeArgumento){

// corpo do método

}

retorno nomeMetodo(tipoArgumento1 nomeArgumento1,...,

tipoArgumentoN nomeArgumentoN){

// corpo do método

}

Page 36: POO - Aula 003

Professor Dal Prá

Classes – Métodos

Java

retorno nomeMetodo(tipoArgumento nomeArgumento){

// corpo do método

}

1. Sempre será necessário definir um retorno, mesmo

que seja NADA

2. O nome do método dos argumentos deverá ser

intuitivo, para facilitar a comunicação entre os

desenvolvedores

Page 37: POO - Aula 003

Professor Dal Prá

Classe – Métodos

class ContaBancaria { int numero;

String nomeCliente;

double saldo;

double limiteCredito = 100.0;

boolean saca(double valor) {

saldo -= valor;

return true;

}

void deposita(double valor){

saldo += valor; }

}

Page 38: POO - Aula 003

Professor Dal Prá

Classes – Métodos

boolean saca(double valor) {

saldo -= valor;

return true;

} 1. Tipo de retorno (resposta)

2. Nome do método (v. imperativo)

3. Argumento esperado (para formular a pergunta)

4. Executando a ação

5. Retornando o valor esperado (tipo do return tem que ser igual ao definido no método)

1 2 3

4

5

Page 39: POO - Aula 003

Professor Dal Prá

Classes – Métodos

void deposita(double valor){

saldo += valor;

}

1. void == sem nada ( não vai retornar

nenhum valor )

2. Nome do método

3. Argumentos

4. Executando a ação

5. Aonde está o return?

1 2 3

4

Page 40: POO - Aula 003

Professor Dal Prá

Classes

Definido um novo tipo de

dado, como faço para

executar ele, ou seja,

como faço para dar vida a

esta nova estrutura dentro

do sistema ?

Page 41: POO - Aula 003

Professor Dal Prá

Objeto

• É uma execução de uma determinada classe

– instância

Page 42: POO - Aula 003

Podemos dizer que ...

• É o projeto posto em prática

– É casa construída segundo o que foi definido no

projeto

Professor Dal Prá

Page 43: POO - Aula 003

Professor Dal Prá

Objeto

public class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

contaJunior.nomeCliente = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

System.out.println(contaJunior.saldo);

}

}

Page 44: POO - Aula 003

Professor Dal Prá

Objeto

contaJunior é uma variável

do tipo ContaBancaria, certo?

Page 45: POO - Aula 003

Professor Dal Prá

Objeto

• contaJunior é uma variável que guarda o ponto da

memória (um número) aonde um objeto do tipo

ContaBancaria foi criado

– Pense em um copo (variável) com um controle remoto

• Chamasse variável de referência para um objeto

– Objeto, para simplificar

Page 46: POO - Aula 003

Professor Dal Prá

Objeto

public class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

contaJunior.nomeCliente = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

System.out.println(contaJunior.saldo);

}

}

Pede para o Java reservar um

espaço na memória e criar um

novo objeto do tipo

ContaBancaria

Page 47: POO - Aula 003

Professor Dal Prá

Objeto

public class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

contaJunior.nomeCliente = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

System.out.println(contaJunior.saldo);

}

}

Guarda o endereço da memória

aonde está o OBJETO

Page 48: POO - Aula 003

public class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

contaJunior.nomeCliente = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

System.out.println(contaJunior.saldo);

}

}

Professor Dal Prá

Objeto

Navega pelo “endereço de

memória” aonde nosso objeto

está e joga valores para os

atributos dele

Page 49: POO - Aula 003

Professor Dal Prá

Objeto

public class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

contaJunior.nomeCliente = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

System.out.println(contaJunior.saldo);

}

}

Utiliza a variável que guarda

o endereço da memória aonde

está nosso objeto para poder

chamar um método, ou seja,

acionar uma habilidade do

nosso objeto

Page 50: POO - Aula 003

Professor Dal Prá

Objeto

public class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

ContaBancaria conta2 = contaJunior;

conta2.numero = 1143166;

conta2.nomeCliente = "José Dal Prá Junior";

conta2.saldo = 100.0;

conta2.limiteCredito = 10.0;

conta2.deposita(10);

System.out.println(contaJunior.saldo);

}

}

Se eu executar este código, o

que acontece ? Por quê?

Page 51: POO - Aula 003

public class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

ContaBancaria conta2 = contaJunior;

conta2.numero = 1143166;

conta2.nomeCliente = "José Dal Prá Junior";

conta2.saldo = 100.0;

conta2.limiteCredito = 10.0;

conta2.deposita(10);

System.out.println(contaJunior.saldo);

}

}

Professor Dal Prá

Objeto

Estão apontando para o mesmo

endereço de memória!

Page 52: POO - Aula 003

Professor Dal Prá

Objeto

public class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

ContaBancaria conta2 = contaJunior;

// ...

System.out.println(contaJunior == conta2);

}

}

O que irá imprimir ?

Por que imprimiu este valor ?

Page 53: POO - Aula 003

Professor Dal Prá

Objeto

class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

contaJunior.nomeCliente = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

ContaBancaria mesmaConta = new ContaBancaria();

mesmaConta.numero = 1143166;

mesmaConta.nomeCliente = "José Dal Prá Junior";

mesmaConta.saldo = 100.0;

mesmaConta.limiteCredito = 10.0;

mesmaConta.deposita(10);

System.out.println(contaJunior == mesmaConta);

}

}

O que será impresso na tela?

Por que?

Page 54: POO - Aula 003

Professor Dal Prá

Objeto

contaJunior == mesmaConta

Está comparando se as variáveis

estão apontando para o mesmo

lugar na memória!

Page 55: POO - Aula 003

Professor Dal Prá

Objeto

contaJunior.numero == mesmaConta.numero

Para comparar se os objetos são

iguais, eu preciso comparar os

valores que estão armazenados

nos atributos

Isso vai mudar de CLASSE para

CLASSE

Page 56: POO - Aula 003

Professor Dal Prá

Objeto

Imprima o valor da expressão:

contaJunior.numero == mesmaConta.numero

Qual o resultado ?

Page 57: POO - Aula 003

Professor Dal Prá

Abstração

• Nosso cliente pede:

“Preciso que seja possível fazer

transferência de valores entre contas”

Page 58: POO - Aula 003

Professor Dal Prá

O que temos que fazer ?

Page 59: POO - Aula 003

Professor Dal Prá

Como ficará nosso método ?

transfere( numeroOrigem : int,

numeroDestino : int,

valor : double ) : boolean

OU

transfere( contaOrigem : ContaBancaria,

contaDestino : ContaBancaria,

valor : double) : boolean ??????

Page 60: POO - Aula 003

Professor Dal Prá

Ficará

transfere( destino : ContaBancaria,

valor : double ) :

boolean;

Isso por que vamos transferir

valores da conta atual para a

conta destino.

Page 61: POO - Aula 003

Professor Dal Prá

Classes – Métodos

UML

ContaBancaria

numero: int

nomeCliente : String

saldo : double

limiteCredito : double = 100.0

saca ( valor : double ) : boolean;

deposita ( valor : double ) : void;

transfere( destino : ContaBancaria,

valor : double ) : boolean;

Page 62: POO - Aula 003

Professor Dal Prá

Classes – Métodos

Java

boolean transfere( ContaBancaria destino,

double valor)

{

this.saldo -= valor;

destino.saldo += valor;

return true;

}

Page 63: POO - Aula 003

Professor Dal Prá

Classes – Métodos

•O que é esse this ???

•Eu posso definir um objeto

como argumento ?

boolean transfere( ContaBancaria destino, double valor) { this.saldo -= valor; destino.saldo += valor; return true; }

Page 64: POO - Aula 003

Professor Dal Prá

Classes – Métodos

Mas Professor, parece que eu já vi esta lógica de

diminuir um valor do saldo.

Olha, posso estar enganado, mas eu fiz uma

lógica parecida para somar um valor no saldo!

Page 65: POO - Aula 003

Professor Dal Prá

Classes – Métodos

Aonde estão estas lógicas já

existentes ?

Page 66: POO - Aula 003

Professor Dal Prá

Classes – Métodos

ContaBancaria

numero: int

nomeCliente : String

saldo : double

limiteCredito : double = 100.0

saca ( valor : double ) : boolean;

deposita ( valor : double ) : void;

transfere( destino : ContaBancaria,

valor : double ) : boolean;

Page 67: POO - Aula 003

Professor Dal Prá

Classes – Métodos

boolean transfere( ContaBancaria destino,

double valor) {

this.saca(valor);

destino.deposita(valor);

return true;

}

Page 68: POO - Aula 003

Professor Dal Prá

Classes – Métodos

Podemos melhorar a lógica

implementada na nossa

classe ContaBancaria

?

Page 69: POO - Aula 003

Professor Dal Prá

Classes – Métodos

boolean saca(double valor) {

if (saldo < valor) {

return false;

}

saldo -= valor;

return true;

}

Page 70: POO - Aula 003

Professor Dal Prá

Classes – Métodos

boolean transfere( ContaBancaria destino, double valor) {

boolean sacou = this.saca(valor);

if (!sacou) {

return false;

}

destino.deposita(valor);

return true;

}

Page 71: POO - Aula 003

Professor Dal Prá

Utilizando o novo método

ContaBancaria contaJunior = new ContaBancaria();

// ...

ContaBancaria contaDestino = new ContaBancaria();

boolean transferiu = contaJunior.transfere(contaDestino, 100);

if (transferiu == true)

{

System.out.println("Transferiu");

}

else

{

System.out.println("Erro na transferência");

}

System.out.println(contaJunior.titular.nome);

System.out.println(contaJunior.saldo);

Page 72: POO - Aula 003

Professor Dal Prá

Abstração

• Nosso cliente pede:

“ Além do nome do cliente, preciso

guardar o CPF e o sexo dele”

Page 73: POO - Aula 003

Professor Dal Prá

Classes - Atributos

ContaBancaria

numero: int

nomeCliente : String

saldo : double

limiteCredito : double = 100.0

CPFCliente : String

sexoCliente : boolean

saca ( valor : double ) : boolean;

deposita ( valor : double ) : void;

transfere( destino : ContaBancaria,

valor : double ) : boolean;

Page 74: POO - Aula 003

Professor Dal Prá

Classes - Atributos

ContaBancaria

numero: int

nomeCliente : String

saldo : double

limiteCredito : double = 100.0

CPFCliente : String

sexoCliente : boolean

saca ( valor : double ) : boolean;

deposita ( valor : double ) : void;

transfere( destino : ContaBancaria,

valor : double ) : boolean;

Uma conta tem CPF ?

Tem sexo ?

Não é muita responsabilidade para

uma pobre ContaBancaria ?

O que fazer?

Page 75: POO - Aula 003

Professor Dal Prá

Usando a UML

Page 76: POO - Aula 003

Professor Dal Prá

e fazendo isso com Java

class Cliente {

String nome;

String CPF;

boolean sexo;

}

Page 77: POO - Aula 003

Professor Dal Prá

Aonde vou colocar as duas classes?

• Diagrama de classes

– Vai mostrar as classes que fazem parte do sistema

• Atributos

• Métodos

– Relacionamento entre elas

Page 78: POO - Aula 003

Professor Dal Prá

Classes - Relacionamentos

Como posso representar a ligação entre as classes

?

Page 79: POO - Aula 003

Professor Dal Prá

Classes - Associação

Este é um relacionamento de ASSOCIAÇÃO

Está IMPLÍCITO que existirá

um atributo do tipo Cliente

dentro de ContaBancaria e

também que terá um atributo

do tipo ContaBancaria dentro

de Cliente

Page 80: POO - Aula 003

Professor Dal Prá

Classes - Associação

Mas e se eu quiser mudar o nome

dos atributos ?

Page 81: POO - Aula 003

Professor Dal Prá

Classes – Associação

ContaBancaria terá um

atributo titular do tipo

Cliente. E Cliente terá um

atributo conta do tipo

ContaBancaria.

Page 82: POO - Aula 003

Professor Dal Prá

Classes – Associação

class ContaBancaria {

int numero;

double saldo;

double limiteCredito = 100;

Cliente titular;

}

Page 83: POO - Aula 003

Professor Dal Prá

Classes – Associação

class Cliente {

String nome;

String CPF;

boolean sexo;

ContaBancaria conta;

}

Page 84: POO - Aula 003

Professor Dal Prá

Mudando nosso código

class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

contaJunior.titular = new Cliente();

contaJunior.titular.nome = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

System.out.println(contaJunior.titular.nome);

System.out.println(contaJunior.saldo);

}

}

Page 85: POO - Aula 003

Professor Dal Prá

E se eu não criar um Cliente para a contaJunior?

class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

// contaJunior.titular = new Cliente();

contaJunior.titular.nome = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

System.out.println(contaJunior.titular.nome);

System.out.println(contaJunior.saldo);

}

}

Page 86: POO - Aula 003

Professor Dal Prá

Classes – Atributos

• Atributos do tipo “variável de referência” tem

como valor default null

– não está apontando para nenhum ponto da memória

Page 87: POO - Aula 003

Professor Dal Prá

Classes – Associação

class ContaBancaria {

int numero;

double saldo;

double limiteCredito = 100;

Cliente titular = new Cliente();

}

Page 88: POO - Aula 003

Professor Dal Prá

Mudando nosso código

class Programa {

public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();

contaJunior.numero = 1143166;

contaJunior.titular.nome = "José Dal Prá Junior";

contaJunior.saldo = 100.0;

contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

System.out.println(contaJunior.titular.nome);

System.out.println(contaJunior.saldo);

}

}

Page 89: POO - Aula 003

Comentários no código fonte

• Lembre-se: o melhor comentário é o seu

próprio código fonte

– Se você precisar de comentários em quantidade

exagerada, deve existir algum problema na

implementação (código confuso)

Professor Dal Prá

Page 90: POO - Aula 003

Comentários no código fonte

// cometário de linha

/*

comentário de bloco

*/

/**

Comentário de método, que pode gerar HTML com a documentação das classes

*/

Professor Dal Prá

Page 91: POO - Aula 003

Alguns exemplos de javadocs de frameworks

http://docs.oracle.com/javase/6/docs/api/

http://docs.jboss.org/hibernate/orm/3.5/api/

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/

http://joda-time.sourceforge.net/apidocs/index.html

http://hc.apache.org/httpclient-3.x/apidocs/

Professor Dal Prá

Page 92: POO - Aula 003

Vamos documentar nosso código

• Digitar documentação nos métodos feitos

• Ver que o Eclipse mostrar esta documentação

• Exportar documentação

Professor Dal Prá

Page 93: POO - Aula 003

Professor Dal Prá

Ferramente UML

• Jude Community

• Instalar

• Construir o Diagrama de Classes das classes

que já abstraímos

Page 94: POO - Aula 003

Professor Dal Prá

Exercícios

1. Modele um funcionário. Ele deve ter pelo menos o nome do funcionário, o departamento onde trabalha (String), seu salário (double), a data de entrada no banco (String), seu RG (String) e um valor booleano que indique se o funcionário está na empresa no momento ou se já foi embora. Você deve criar alguns métodos de acordo com sua necessidade. Além deles, crie um método bonifica que aumenta o salario do funcionário de acordo com o parâmetro passado como argumento. Crie, também, um método demite, que não recebe parâmetro algum, só modifica o valor booleano indicando que o funcionário não trabalha mais aqui. A idéia aqui é apenas modelar, isto é, só identifique que informações são importantes e o que um funcionário faz. Desenhe no Jude Community tudo o que um Funcionario tem e tudo que ele faz.

Page 95: POO - Aula 003

Professor Dal Prá

Exercícios

2. Implemente o que foi definido no diagrama

Dica:

– Crie a classe, compile

– Crie os atributos, compile

– Crie um método, compile

– Crie outro método, compile

Page 96: POO - Aula 003

Professor Dal Prá

Exercícios

3. Crie uma classe TestaFuncionario, com um

método main, para que possamos criar um

objeto do tipo funcionário e testa-lo;

Page 97: POO - Aula 003

Professor Dal Prá

Exercícios

4. Crie um método “mostra” para a classe

Funcionario. Este método deverá

imprimir uma mensagem de

apresentação do funcionário com todas

as informações que a classe armazena.

Não será passado nenhum parâmetro

para o método e não será necessário

retornar nenhum valor.

Page 98: POO - Aula 003

Professor Dal Prá

Exercícios

5. Dentro da classe para teste, crie pelo

menos 3 funcionários, atribua valores

para eles e execute pelo menos uma vez

cada método.

Page 99: POO - Aula 003

Professor Dal Prá

Bibliografia

• Apostila – Capitulo 2