Campus Arapiraca
Engenharia de Software 1
09 - Codifica¸c˜ao
Alexandre de Andrade Barbosa
Codifica¸c˜ao
Objetivos
Objetivos
Descrever a rela¸c˜ao entre os diagramas criados nas fases anteriores e o c´odigo que deve ser obtido na codifica¸c˜ao
Codifica¸c˜
ao
Introdu¸c˜ao
A fase de codifica¸c˜ao corresponde a execu¸c˜ao do planejamento criado nas fases anteriores
Diagramas criados s˜ao transformados em c´odigo execut´avel Algumas metodologias defendem que o projeto deve ser criado, e refinado, nesta etapa
Codifica¸c˜ao
Codifica¸c˜
ao
Reuso
N˜ao ´e necess´ario desenvolver tudo internamente, algumas alternativas:
componentes; frameworks;
ferramentas de gera¸c˜ao de c´odigo
De UML para c´
odigo
Os diagramas UML podem auxiliar na cria¸c˜ao de partes de um c´odigo execut´avel
Diagrama de caso de uso ... guiam o desenvolvimento Diagrama de classes ... estrutura do sistema
Diagramas de intera¸c˜ao ... m´etodos necess´arios para realizar as funcionalidades
...
Ferramentas podem executar tradu¸c˜ao autom´atica (algumas com qualidade duvidosa)
Codifica¸c˜ao
De UML para c´
odigo
Classe: Nome
public class Conta { public class ContaCorrente {
} }
De UML para c´
odigo
Classe: Nome
public class Conta { public class ContaCorrente {
Codifica¸c˜ao
De UML para c´
odigo
Classe: Atributo
public class Conta { private String codigo; private float saldo; }
De UML para c´
odigo
Classe: Atributo
public class Conta { private String codigo; private float saldo; }
Codifica¸c˜ao
De UML para c´
odigo
Classe: Opera¸c˜ao
De UML para c´
odigo
Classe: Opera¸c˜ao
public class Conta { private String codigo; private float saldo; public boolean saque() { //...
}
public boolean deposito() { //...
}
public float saldo(Date data) { //...
} }
Codifica¸c˜ao
De UML para c´
odigo
Classe abstrata
public abstract class Conta { public abstract void atualizar() { //...
} }
De UML para c´
odigo
Interface
public interface RepositorioDeContas { }
Codifica¸c˜ao
De UML para c´
odigo
Relacionamentos: Heran¸ca
De UML para c´
odigo
Relacionamentos: Heran¸ca
public class Conta { // ...
}
public class ContaCorrente extends Conta { // ...
}
public class ContaPoupanca extends Conta { // ...
Codifica¸c˜ao
De UML para c´
odigo
Relacionamentos: Realiza¸c˜ao
De UML para c´
odigo
Relacionamentos: Realiza¸c˜ao
public interface RepositorioContas { // ...
}
public class RepositorioContasBDR implements RepositorioContas { // ...
}
public class RepositorioContasOO implements RepositorioContas { // ...
Codifica¸c˜ao
De UML para c´
odigo
Relacionamentos: Associa¸c˜ao
public class Cliente { private Agencia agencia; // ...
}
public class Agencia { private Cliente cliente; // ...
}
De UML para c´
odigo
Relacionamentos: Associa¸c˜ao
public class Cliente { private Agencia agencia; // ...
}
public class Agencia { private Cliente cliente; // ...
Codifica¸c˜ao
De UML para c´
odigo
Relacionamento: Agrega¸c˜ao
public class Agencia { private Conta conta; // ...
}
public class Conta { private Agencia agencia; // ...
} Distintos somente pelo significado associado.
Codifica¸c˜ao
De UML para c´
odigo
Relacionamento: Agrega¸c˜ao
public class Agencia { private Conta conta; // ...
}
public class Conta { private Agencia agencia; // ...
Codifica¸c˜ao
De UML para c´
odigo
Relacionamento: Agrega¸c˜ao
public class Agencia { private Conta conta; // ...
}
public class Conta { private Agencia agencia; // ...
} Distintos somente pelo significado associado.
De UML para c´
odigo
Relacionamento: Composi¸c˜ao
public class Conta {
private Historico historico; // ...
public void destroy() { historico.destroy(); // ...
} }
public class Historico { private Conta conta;
Codifica¸c˜ao
De UML para c´
odigo
Relacionamentos: Dependˆencia
public class LeitoraDeCartao {
public boolean lerCartao(Cartao cartao) { String senha = // ... if (senha.equals(cartao.getSenha())) { // ... } } }
public class Cartao { private String senha; // ...
}
De UML para c´
odigo
Codifica¸c˜ao
De UML para c´
odigo
Relacionamento: Visibilidade
public class Conta { private String codigo; private float saldo; protected Date data; public boolean saque() { // ...
}
public boolean deposito() { // ...
}
public boolean saldo(Date data) { // ...
} }
Codifica¸c˜ao
De UML para c´
odigo
Classe: Multiplicidade
// ... }
public class Conta { private Cliente cliente; // ...
Codifica¸c˜ao
De UML para c´
odigo
Classe: Multiplicidade
public class Cliente {
private Vector<Conta> contas; // ...
}
public class Conta { private Cliente cliente; // ...
}
Codifica¸c˜ao
De UML para c´
odigo
Classe: Multiplicidade
public Time() {
jogadores = new Jogador[11]; }
// ... }
public class Jogador { private Time time; // ...
Codifica¸c˜ao
De UML para c´
odigo
Classe: Multiplicidade
public class Time {
private Jogador[] jogadores; public Time() {
jogadores = new Jogador[11]; }
// ... }
public class Jogador { private Time time; // ...
}
Codifica¸c˜ao
De UML para c´
odigo
Classe: Navegabilidade
}
public class Agencia { private Cliente cliente; // ...
Codifica¸c˜ao
De UML para c´
odigo
Classe: Navegabilidade
public class Cliente { // ...
}
public class Agencia { private Cliente cliente; // ...
}
Codifica¸c˜ao
De UML para c´
odigo
Classe: P´apeis
// ... }
public class Empregado { private Empregado supervisor; private Empregado supervisionado; // ...
Codifica¸c˜ao
De UML para c´
odigo
Classe: P´apeis
public class Pessoa { private Pessoa pessoa; // ...
}
public class Empregado { private Empregado supervisor; private Empregado supervisionado; // ...
}
De UML para c´
odigo
Codifica¸c˜ao
De UML para c´
odigo
Diagrama de objetos
De UML para c´
odigo
Diagrama de objetos
// ...
Conta ccc = new ContaCorrente(); ccc.setSaldo(810.55);
ccc.setCodigo("4566-2"); Cliente c = new Cliente(); c.setNome("Pedro");
c.setConta(ccc); // ...
Codifica¸c˜ao
De UML para c´
odigo
Diagrama de estados
De UML para c´
odigo
Diagrama de estados
public class Elevador { private byte andar; public Elevador() { andar = 0;
}
public void selecionaAndar() { // ... if ( //... ) { sobe(andar); } else { desce(andar); } }
Codifica¸c˜ao
De UML para c´
odigo
Diagrama de estados
// ...
public void sobe(byte andar) { // ...
if ( // ... ) { parar();
} }
public void desce(byte andar) { // ... if ( // ... ) { parar() } } }
De UML para c´
odigo
Codifica¸c˜ao
De UML para c´
odigo
Diagrama de comunica¸c˜ao
De UML para c´
odigo
Diagrama de comunica¸c˜ao ou seq¨uˆencia
public class Agencia { // ...
public Conta selecionaConta(String codigo) { // ...
Conta c = buscaConta(codigo);
... cliente.solicitaIdentificacao() ... }
public boolean doLogin() { // ...
... checaUsuario() ... }
public boolean checaUsuario() { // ...
Codifica¸c˜ao
De UML para c´
odigo
Diagrama de comunica¸c˜ao ou sequˆencia
public class Cliente {
public void solicitaIdentificacao() { // ...
agencia.doLogin(login, senha); }
}
public class Conta {
public boolean saque(float valor) { // ...
... verificaSaldo() ... }
public void verificaSaldo() { // ...
} }
Codifica¸c˜
ao
Codifica¸c˜ao
Codifica¸c˜
ao
Prioriza¸c˜ao e acompanhamento de atividades
1 Sempre ´e interessante manter um status do andamento das
atividades
Codifica¸c˜
ao
Prioriza¸c˜ao e acompanhamento de atividades
Status do andamento das atividades Finalizada
Em andamento
Codifica¸c˜ao
Codifica¸c˜
ao
Boas pr´aticas
Alguns cuidados:
padr˜ao de codifica¸c˜ao (ex. forma de identa¸c˜ao); sistema de controle de vers˜oes;
documenta¸c˜ao aliada ao c´odigo (obs. alguns dizem que um bom c´odigo n˜ao precisaria de coment´arios)
Exerc´ıcio
Exerc´ıcio
1 Crie um site do projeto, este site deve conter o planejamento das atividades de codifica¸c˜ao
Quem vai executar
Qual o andamento da atividade (conclu´ıda, em andamento, n˜ao iniciada)
...
Codifica¸c˜ao
Resumo
A cria¸c˜ao de diagramas do sistema deve ser guiado por informa¸c˜oes relacionadas ao sistema
Um tipo de diagrama pode ser utilizado para criar ou refinar outro tipo de diagrama S˜ao exemplos de t´ecnicas para identificar classes:
An´alise textual de Abbott; An´alise dos casos de uso;
An´alise de robustez (categoriza¸c˜ao BCE)
Resumo
Intera¸c˜oes ocorrem entre objetos para executar as funcionalidades descritas em um caso de uso
Mensagens correspondem a execu¸c˜ao de opera¸c˜oes de um objeto
Na UML dois tipos de diagramas isomorfos s˜ao utilizados para descrever intera¸c˜oes: Diagrama de sequˆencia
Codifica¸c˜ao
Resumo
Diagramas de estado exibem os estados poss´ıveis que um objeto pode ter Diagramas de estado cont´em: estados e transi¸c˜oes
Estado de um objeto pode ser determinado pelo valor de seus atributos ou atrav´es de seus v´ınculos
Uma transi¸c˜ao cont´em: evento e a¸c˜ao (ou atividade)
Diagramas de atividade exibem os estados poss´ıveis de uma atividade
Leituras recomendadas
Gilleanes T. A. Guedes
UML - Uma abordagem pr´atica, 2a ed. Cap´ıtulo 4 - Diagrama de Classes Cap´ıtulo 5 - Diagrama de Seq¨uˆencia Cap´ıtulo 6 - Diagrama de Colabora¸c˜ao Cap´ıtulo 7 - Diagrama de Gr´afico de Estados Cap´ıtulo 8 - Diagrama de Atividade
Codifica¸c˜ao
Leituras recomendadas
Eduardo Bezerra
Princ´ıpios de an´alise e projeto de sistema com UML. Campus, 2a edi¸c˜ao, 2007.
Cap´ıtulo 5 - Modelagem de classes de an´alise Cap´ıtulo 6 - Passando da an´alise ao projeto Cap´ıtulo 7 - Modelagem de intera¸c˜oes Cap´ıtulo 9 - Modelagem de estados Cap´ıtulo 10 - Modelagem de atividades
Perguntas?
Alexandre de Andrade Barbosa [email protected]