COMO ACHAR CLASSES E DISTRIBUIR
RESPONSABILIDADES?
PRATIQUE AS TÉCNICAS APRESENTADAS NESTE CAPÍTULO
COM O EXEMPLO SEGUINTE:
O EXEMPLO
Last Federal Virtual Bank wants its entire banking
software redone in Java, so it can shut down its branch
offices and perform all its business via the WWW.
Customer records include the customers name, address,
personal information, passwords, etc. and accounts.
The bank offers various types of accounts: checking,
savings, CD, Junior savings accounts.
Bank officers will introduce new types of accounts
from time to time.
Checking account charge 12 cents/check unless the
average account balance for the month is greater than
$1,000. The first three ATM transactions per month are
free. Additional ATM transactions cost 50 cents.
All transactions over $1,000 dollars must be reported
to the federal government.
Junior savings accounts are for children under the
age of 13. Children can deposit any amount into the
account. Deposits of over $100 are reported to their
parents. Children can withdrawal up to $10 from the
account. Individual withdrawals over $10 must be verified
by a parent. Total withdrawals over $100 per month are
reported to the parents.
Transactions include time & date, amount,
location, type of transaction, account number and teller.
REGRAS PARA ACHAR CLASSES
PROJETAR PARA REUTILIZAÇÃO
O OBJETIVO É DE PROJETAR UM SISTEMAS
FLEXÍVEL, ESTENSÍVEL E FACILMENTE MUDADO
TRANSFORME COISAS EM OBJETOS SE ELAS TIVEREM
QUE SER MUDADAS OU MANIPULADAS
UMA CLASSE DEVE CAPTURAR UMA ÚNICA ABSTRAÇÃO
UMA FORMA DE COMEÇAR: NUMA DESCRIÇÃO DO PROBLEMA,
SUBSTANTIVOS SÃO CANDIDATOS A CLASSES
TENTE ISSO NO PROBLEMA ACIMA
QUE TIPO DE COISA ACABA VIRANDO OBJETO NA FASE DE
PROJETO?
COISAS TANGÍVEIS NO DOMÍNIO DO PROBLEMA
OBJETOS FÍSICOS (DISCOS,
IMPRESSORAS, AVIÕES, DADOS DE
TELEMETRIA, BILHETE DE AVIÃO)
ENTIDADES CONCEITUAIS QUE FORMAM UMA
ABSTRAÇÃO COESA (JANELA, ARQUIVO, CONTA
BANCÁRIA, RESERVA DE AVIÃO)
PORÉM, LEMBRE QUE MUITOS OBJETOS DE
UM BOM PROJETO NÃO SÃO COISAS
TANGÍVEIS DO DOMÍNIO DO PROBLEMA
OPERAÇÕES, PROCESSOS,
ESTADOS, RESTRIÇÕES,
RELACIONAMENTOS, ...
SISTEMAS EXTERNOS COM OS QUAIS O SISTEMA
INTERAGE
DISPOSITIVOS EXTERNOS COM OS QUAIS O SISTEMA
INTERAGE
INTERFACES COM O MUNDO EXTERNO
INTERFACE COM USUÁRIO
INTERFACES COM OUTROS SISTEMAS
USUÁRIOS
PAPEIS ASSUMIDOS POR USUÁRIOS AO INTERAGIREM
COM O SISTEMA
PESSOAS DO DOMÍNIO DO PROBLEMA
HUMANOS QUE DESEMPENHO ALGUMA
FUNÇÃO
PAPEIS ASSUMIDOS POR ESSAS PESSOAS
MÃE, PROFESSOR, GERENTE, PILOTO
LUGARES FÍSICOS
LUGARES IMPORTANTES PARA A
APLICAÇÃO
ÁREAS ONDE PESSOAS OU COISAS FICAM
UNIDADES ORGANIZACIONAIS
COLEÇÕES DE PESSOAS, RECURSOS, ETC.
SINDICATO, ...
EVENTOS GERADOS PELOS OBJETOS CANDIDATOS
EVENTOS HISTÓRICOS QUE DEVEM SER
ARMAZENADOS, LEMBRADOS
TAMBÉM CHAMADOS "TRANSAÇÕES"
EMPRÉSTIMO, REUNIÃO, PAGAMENTO
CONTAINERS
TAMBÉM CHAMADOS "COLEÇÕES",
"AGREGADOS", "DATA
MANAGERS"
PILHAS, TABELAS HASH, LISTAS, ...
VIEWS OU CLASSES DE OBSERVAÇÃO
EXEMPLO: CLASSES GUI
CLASSES LISTENER EM GERAL
CLASSES DE APOIO
MANTÊM POUCO OU NENHUM ESTADO
AJUDAM A ENCAPSULAR ALGORITMOS OU
TRANSFORMAÇÕES
ATRIBUTOS COMPLEXOS
HEURÍSTICA: ATRIBUTOS SERÃO OBJETOS
SE NÃO PUDEREM SER REPRESENTADOS POR UM
TIPO NATIVO
AGENTES
EXEMPLO: A OPERAÇÃO DE CALCULAR
QUEBRAS DE PÁGINAS PODE SER TRANSFORMADA
NUM OBJETO "PAGINADOR"
DESTA FORMA, PODERÁ HAVER
PARALELISMO ENTRE A PAGINAÇÃO E OUTRAS
TAREFAS
CLASSES BÁSICAS (FOUNDATION CLASSES)
OPERAÇÕES PODEM VIRAR OBJETOS SE FOREM
COMPLEXAS, TIVEREM ESTADO/ATRIBUTOS OU FOREM
MANIPULADAS
EXEMPLO: UMA CHAMADA NUM SISTEMA
TELEFÔNICO TEM ATRIBUTOS TAIS COMO DATA,
NÚMERO CHAMADO, ETC. E DEVE SER
ARMAZENADA PARA QUE SEJA IMPRESSA NA
CONTA TELEFÔNICA MENSAL
CLASSES ABSTRATAS
SURGEM DE UM CONJUNTO DE CLASSES QUE
COMPARTILHAM ATRIBUTOS ÚTEIS (E,
CONSEQUENTEMENTE, OPERAÇÕES)
PROCURE ATRIBUTOS COMUNS NAS CLASSES
CATEGORIAS DE CLASSES
PODERÃO VIRAR CLASSES ABSTRATAS
NO INÍCIO, MANTÊ-LAS CLASSES
INDIVIDUAIS ATÉ VERIFICAR SEUS
RELACIONAMENTOS
CERTOS CUIDADOS AO USAR AS REGRAS ACIMA
CUIDADO COM ADJETIVOS
FRASES COM ADJETIVOS PODEM OU NÃO
INDICAR OBJETOS DIFERENTES
FREQUENTEMENTE GERAM SUB-CLASSES
(ESPECIALIZAÇÃO)
UMA "FERRAMENTA DE
SELEÇÃO" É DIFERENTE DE UMA
"FERRAMENTA DE CRIAÇÃO"?
UM "PONTO INICIAL" É
DIFERENTE DE UM "PONTO FINAL"?
REGRAS PARA ACHAR RESPONSABILIDADES
RESPONSABILIDADES SÃO:
O CONHECIMENTO QUE UM OBJETO MANTÉM (O
ESTADO, OS ATRIBUTOS)
AS AÇÕES QUE UM OBJETO FAZ (OPERAÇÕES,
MÉTODOS)
REGRAS GERAIS
MANTENHA COESÃO
AO DETERMINAR, ATRAVÉS DAS
RESPONBILIDADES, QUE UMA CLASSE
REPRESENTA MAIS DO QUE UMA ÚNICA
ABSTRAÇÃO, DIVIDA A CLASSE
CONSIDERE RESPONSABILIDADES PÚBLICAS, NÃO
PRIVADAS
ESPECIFIQUE O QUE É FEITO, NÃO COMO
É FEITO
MANTENHA AS RESPONSABILIDADES EM TERMOS
GERAIS
DEFINA AS RESPONSABILIDADES DE FORMA
INDEPENDENTE DE IMPLEMENTAÇÃO
MANTENHA TODAS AS RESPONSABILIDADES DE UMA
CLASSE NO MESMO NÍVEL CONCEITUAL
MINIMIZE O NÚMERO DE RESPONSABILIDADES NUMA
CLASSE
IDENTIFICAÇÃO DE RESPONSABILIDADES
A PARTIR DOS REQUISITOS E USE CASES
VERBOS INDICAM POSSÍVEIS AÇÕES
INFORMAÇÃO INDICA RESPONSABILIDADE
PARA UM OBJETO
A PARTIR DAS CLASSES
QUE PAPEL A CLASSE ASSUME NO SISTEMA?
UMA DESCRIÇÃO DE OBJETIVOS IMPLICA
EM RESPONSABILIDADE DE CUMPRI-LOS
ATRIBUINDO RESPONSABILIDADES A CLASSES
DISTRIBUIA A INTELIGÊNCIA DO SISTEMA
UNIFORMEMENTE
A INTELIGÊNCIA (O QUE DEVE SER
DISTRIBUIDO) É O SEGUINTE:
O QUE O SISTEMA SABE
AÇÕES QUE O SISTEMA PODE
FAZER
O IMPACTO NAS OUTRAS PARTES
DO SISTEMA E USUÁRIOS
NÃO CRIE "GOD CLASSES"
(CLASSES GORDAS QUE FAZEM TUDO)
EXTREMOS:
DITADOR (GOD CLASS) COM
ESCRAVOS
UMA ESTRUTURA DE
DADOS BURRA COM TODA A
INTELIGÊNCIA EM main E
EM ALGUNS PROCEDIMENTOS
CLASSE SEM MÉTODOS
CLASSE SEM ATRIBUTOS
UTOPIA "OBJETAL"
:-)
TODOS OS OBJETOS TÊM
O MESMO NÍVEL DE
INTELIGÊNCIA
REALIDADE
MAIS PERTO DA UTOPIA
DO QUE DA DITADURA
DESCONFIÔMETRO
UMA CLASSE COM UMA
LONGA LISTA DE
RESPONSABILIDADES PODE
ESTAR NO CAMINHO DA
DITADURA
DEFINA RESPONSABILIDADES NOS TERMOS MAIS
GERAIS POSSÍVEIS
É MELHOR DIZER: "ELEMENTOS
GRÁFICOS SABEM SE DESENHAR" DO QUE
"UMA LINHA SABE SE DESENHAR",
"UM CÍRCULO SABE SE DESENHAR",
...
AJUDA A FATORAR O QUE É COMUM, ACHAR
BOAS HIERARQUIAS, INTRODUZIR POLIMORFISMO
PALAVRAS FINAIS:
MANTENHA O COMPORTAMENTO PERTO DA
INFORMAÇÃO RELACIONADA COM ESTE COMPORTAMENTO
O CONCEITO DE ABSTRAÇÃO
IMPLICA QUE ISSO DEVE SER FEITO
DESCONFIÔMETRO:
UMA CLASSE COM MUITOS
MÉTODOS GET/SET PODE ESTAR COM
COMPORTAMENTO FORA DA CLASSE
(DAÍ A NECESSIDADE DE TER OS
MÉTODOS DE ACESSO)
MANTENHA A INFORMAÇÃO NUM ÚNICO LUGAR
SE 2 OU MAIS OBJETOS PRECISAM DA
MESMA INFORMAÇÃO
CRIE UM NOVO OBJETO PARA
MANTER A INFORMAÇÃO
JUNTE OS OBJETOS NUM ÚNICO
OBJETO
COLOQUE A INFORMAÇÃO NO
OBJETO MAIS NATURAL
COMPARTILHE RESPONSABILIDADES
NA FIGURA, QUEM É RESPONSÁVEL PELA
ATUALIZAÇÃO DA TELA QUANDO A JANELA É
MOVIDA?

REGRAS PARA ACHAR COLABORAÇÕES
UMA COLABORAÇÃO REPRESENTA UM PEDIDO DE UM CLIENTE
PARA UM SERVIDOR NO SENTIDO DE CUMPRIR UMA
RESPONSABILIDADE DO CLIENTE
IMPLICA PORTANTO NUMA INTERAÇÃO ENTRE
OBJETOS
DESCOBRINDO COLABORAÇÕES
EXAMINE AS RESPONSABILIDADES PARA LOCALIZAR
DEPENDÊNCIAS
PARA CADA RESPONSABILIDADE:
A CLASSE É CAPAZ DE CUMPRIR A
RESPONSABILIDADE?
SE NÃO, O QUE ESTÁ FALTANDO?
DE QUE OUTRA CLASSE PODE OBTER O QUE
FALTA?
PARA CADA CLASSE
O QUE ESSA CLASSE FAZ OU CONHECE?
QUE OUTRAS CLASSES PRECISAM DO
RESULTADO OU DA INFORMAÇÃO?
SE UMA CLASSE NÃO TEM INTERAÇÕES,
JOGUE-A FORA
EXAMINE CENÁRIOS
INTERAÇÕES EM CENÁRIOS INDICAM
COLABORAÇÃO
ALGUMAS REGRAS GERAIS
ELIMINE CICLOS DE DEPENDÊNCIA ENTRE CLASSES
CRIAM UM ACOPLAMENTO FORTE DEMAIS
MINIMIZE A QUANTIDADE DE COLABORAÇÃO ENTRE
UMA CLASSE E SEU COLABORADOR
EQUIVALENTE A DIZER: MINIMIZE O
TAMANHO DAS INTERFACES
MINIMIZE O NÚMERO DE CLASSES COM AS QUAIS
UMA CLASSE COLABORA


REGRAS PARA ACHAR RELACIONAMENTOS DE HERANÇA
UM RELACIONAMENTO DE HERANÇA SIGNIFICA QUE HÁ
GENERALIZAÇÃO/ESPECIALIZAÇÃO ENTRE CLASSES
TIPO BÁSICO DE RELACIONAMENTO: IS-A, IS-A-KIND-OF,
IS-A-TYPE-OF
SEJAM A E B CLASSES
PARA DETERMINAR SE A DEVERIA SER PAI DE B,
PERGUNTE:
B É UM A? (OU "B É UM TIPO DE
A"?)
PERGUNTA MELHOR: "TODA
INSTÂNCIA DE B É UMA INSTÂNCIA
DE A?)
SE A RESPOSTA FOR NÃO, A NÃO É PAI
DE B
SE A RESPOSTA FOR SIM, A SERÁ
POSSIVELMENTE PAI DE B
EXEMPLO: UM JuniorSavingsAccount É UM TIPO
DE SavingsAccount?
SIM! PORTANTO, CONSIDERE FAZER
JuniorSavingsAccount UMA SUBCLASSE DE
SavingsAccount
EXEMPLO: CONSIDERE Empregado E Gerente,
Engenheiro e OfficeBoy
UM Gerente É UM TIPO DE Empregado?
(IDEM PARA Engenheiro, OfficeBoy)
NÃO! É UM PAPEL QUE UM EMPREGADO
ASSUME
VER DISCUSSÃO MAIS APROFUNDADA NA
SEÇÃO "COMPOSIÇÃO VERSUS
HERANÇA"
OUTRO TIPO DE RELACIONAMENTO: IS-ANALOGOUS-TO
SE X IS-ANALOGOUS-TO Y, PROCURE UMA
SUPERCLASSE
EXEMPLO: UMA CONTA CORRENTE IS-ANALOGOUS-TO
UMA CONTA POUPANÇA
DEVE HAVER UMA SUPERCLASSE
"CONTA" QUE CAPTURE O QUE É
COMUM
AS DIFERENÇAS SERÃO TRATADAS VIA OVERRIDE
DE OPERAÇÕES,PERMITINDO POLIMORFISMO E UM
ACOPLAMENTO MAIS FRACO ENTRE CLIENTES E ESSAS
CLASSES
OUTRO TIPO DE RELACIONAMENTO: IS-A-PART-OF, HAS-A
NÃO HÁ HERANÇA ENVOLVIDA
TEMOS AGREGAÇÃO (OU COMPOSIÇÃO, OU
CONTAINMENT)
TEM QUE CUIDAR BEM DA DIVISÃO DE
RESPONSABILIDADES ENTRE O CONTAINER E OS OBJETOS
CONTIDOS
EXEMPLO: UM DOCUMENTO É COMPOSTO DE PÁGINAS
QUE SÃO COMPOSTAS DE PARÁGRAFOS, ETC.

EXEMPLO: UMA PILHA PODE USAR UMA LISTA NA SUA
IMPLEMENTAÇÃO
PILHA E LISTA SÃO CLASSES SEPARADAS SEM
HERANÇA
É UM ERRO MUITO COMUM FAZER
MAS MUITAS OPERAÇÕES DE UMA LISTA NÃO
FAZEM SENTIDO NUMA PILHA!
O ERRO GENÉRICO É USAR HERANÇA QUANDO SE
TEM UM RELACIONAMENTO IS-A-PART-OF
CINCO FORMAS DE IMPLEMENTAR O RELACIONAMENTO "USA"
COMO O CLIENTE ACESSA O SERVIDOR?
PRIMEIRA FORMA: COMPOSIÇÃO
O SERVIDOR É UM CAMPO NO CLIENTE
class Cliente {
Servidor dest;
public void metodo() {
dest.mandeMensagem();
}
}
SEGUNDA FORMA: PARÂMETRO DE UM MÉTODO
O SERVIDOR É UM PARÂMETRO EM UM DOS
MÉTODOS DO CLIENTE
class Cliente {
public void metodo(Servidor dest) {
dest.mandeMensagem();
}
}
TERCEIRA FORMA: PERGUNTA A ALGUÉM
O CLIENTE PERGUNTA A ALGUÉM PARA QUE
FORNEÇA O SERVIDOR
class Cliente {
public void metodo() {
servidor dest = outroObjeto.getServidor();
dest.mandeMensagem();
}
}
QUARTA FORMA: O SERVIDOR É GLOBAL
QUINTA FORMA: O SERVIDOR É CRIADO PELO CLIENTE
class Cliente {
public void metodo() {
Servidor dest = new Servidor();
dest.mandeMensagem();
}
}
tecnicas3.htm programa anterior próxima