Prof. Jorge Dias
www.jorgediasjr.com
jorge@dce.ufpb.br
Engenharia de Software
Análise e Projeto
Universidade Federal da Paraíba – Campus IV Centro de Ciências Aplicadas e Educação
Análise e Projeto
Onde estamos? Requisitos Modelage m de Negócio Análise e Projeto • DDR • Regras de Negócio • Regras de Validação • Casos de uso • Matriz de rastreabilidade • Missão, ambiente, estratégias, metas • Diagrama de Processos de Negócio • GlossárioAnálise e Projeto
Algumas atividades
Analisar casos de uso
Projetar e Validar arquitetura
Projetar casos de uso
Analisar Casos de Uso
Investiga o comportamento do sistema dentro
do escopo de um caso de uso
Proporciona um aprofundamento no
funcionamento do caso de uso e resulta em uma modelagem superficial (Realização do Caso de Uso de Análise)
O objetivo desta atividade consiste em
identificar as classes iniciais do sistema (classes de análise) e distribuir o
comportamento do caso de uso entre elas
Cada classe identificada deve ter seus
atributos, responsabilidades (métodos) e relacionamentos descritos
Analisar Casos de Uso
Artefatos de Entrada
Obrigatórios
Diagrama de Caso de Uso
Documento de Descrição de Requisitos (DDR) Especificação de Caso de Uso
Opcionais
Documento de Arquitetura de Software Glossário
Regras de Negócio Regras de Validação
Analisar Casos de Uso
Identificar classes de análise
Consiste na primeira iniciativa para modelar como o
sistema irá realizar o caso de uso
Não serão implementadas (codificadas) neste ponto Nas atividades seguintes, as classes de análise de um
caso de uso serão mapeadas em elementos de projetos e estas irão compor o projeto do caso de uso o qual guiará codificação do próprio
As classes de análise são associadas aos seguintes
estereótipos: Fronteira (Boundary), Controle (Control) e Entidade (Entity)
Classes de Fronteira: estão entre os atores e os casos de uso; Classes de Controle: controlam a lógica do caso de uso;
Classe de Entidade
Representa uma entidade, contendo
informações recebidas ou geradas pelo sistema;
Diferente de persistente
Uma entidade armazena dados que podem
ser persistidos ou não.
Classe de Entidade
DOC <<entity>> Conta <<entity>> Cliente <<entity>> BancoDestino<<entity>> Favorecido<<entity>> Comprovante<<entity>>Classe de Entidade (com Persistência)
DOC <<entity>> Conta <<entity>> Cliente <<entity>> BancoDestino<<entity>> Favorecido<<entity>> Comprovante<<entity>>CadastroBancoDestino<<entity collection>> <<entity collection>>CadastroDOC <<entity collection>>CadastroConta <<entity collection>>CadastroCliente CadastroFavorecido<<entity collection>>
Classe de Fronteira
Representa uma interação do sistema com
o ambiente no qual ele está inserido;
Os atores devem interagir com sistema por
meio destas classes;
Regra: uma classe de fronteira para cada
caso de uso;
Exemplos: GUI, interfaces com dispositivos
periféricos, interfaces com outros sistemas
etc.
Classe de Fronteira
Cliente Banco Destino
Realizar DOC
Classe de Controle
Representa a interface entre fronteira e entidade, coordenando o comportamento do caso de uso;
Provê uma separação nítida entre os seguintes itens:
1. Comunicação do sistema com o ambiente (classes
de fronteira);
2. Comportamento do sistema (classes de controle); 3. Comportamento das entidades do sistema (classes
de entidade).
Regra: usualmente, uma classe de controle por caso de uso (depende da complexidade do fluxo de eventos).
Classe de Controle
Cliente Banco Destino
Realizar DOC
Classes de Análise
TelaRealizarDOC<<boundary>> ControladorRealizarDOC<<control>> DOC <<entity>> Conta <<entity>> Cliente <<entity>> BancoDestino<<entity>> Favorecido<<entity>> Comprovante<<entity>>CadastroBancoDestino<<entity collection>> <<entity collection>>CadastroDOC <<entity collection>>CadastroConta <<entity collection>>CadastroCliente ComunicacaoBancoDestino<<boundary>>
Diagrama de Classes -
Análise
TelaRealizarDOC<<boundary>> ControladorRealizarDOC<<control>> DOC <<entity>> Conta <<entity>> Cliente <<entity>> BancoDestino<<entity>> Favorecido<<entity>> Comprovante<<entity>>CadastroBancoDestino<<entity collection>> <<entity collection>>CadastroDOC <<entity collection>>CadastroConta <<entity collection>>CadastroCliente ComunicacaoBancoDestino<<boundary>> 1 1 1 1 1 1 1 1 1 1 CadastroFavorecido<<entity collection>>
1 0..* 1 1 0..* 1 1 1 0..* 1 0..* 1 1 1 1 0..* 0..* 1 0..* 1 1 1 1 1
Analisar Casos de Uso
Resumo
1) Identificar classes de entidade e seus
relacionamentos
2) Identificar classes persistentes, criando uma
classe Entity Collection para cada uma
3) Identificar classes de fronteiras, criando uma
classe Boundary para cada uma
4) Identificar classes de Controle, criando
classe Control para cada uma (geralmente uma por caso de uso)
Analisar Casos de Uso
Distribuir comportamento entre as
classes
Deve ser executado durante a confecção do
Diagrama de Seqüência do caso de uso
Esta interação sempre é iniciada por um ator e,
do lado do sistema, envolve troca de mensagens entre as instâncias (objetos) das classes, cada qual com suas responsabilidades
Deve-se ter em mente que o objetivo é modelar
as interações das instâncias das classes para atender a semântica do fluxo de eventos do caso de uso
As responsabilidades de uma classe
caracterizam os serviços que os objetos da classe devem prover para os outros objetos
Analisar Casos de Uso
Mas o que é mesmo um diagrama de
sequência, hein?
Diagrama de Sequência
Mostrar classes/objetos/conceitos e as
mensagens trocadas entre eles, no decorrer do tempo
Ênfase no conjunto de passos e na seqüência na qual
Analisar Casos de Uso
Analisar Casos de Uso
Para criar o diagrama de sequência, considere
os estereótipos das classes criadas anteriormente
O ator acessará o sistema através da fronteira
(boundary)
A fronteira chama o controlador responsável
pelo caso de uso (control)
O controlador realiza as atividades, chamando
classes de entidade e coleções de entidade, outras classes de fronteira (como banco de dados), etc.
Arquitetura de Software
Em pequenos projetos, a equipe de desenvolvimento consegue criar uma representação mental sobre a estrutura do produto a ser desenvolvido
Estrutura de dados e algoritmos são os mais importantes
Na medida em que o tamanho do software aumenta, fica mais difícil de entender este produto
Temos mais partes para gerenciar É mais complexo de se entender Mais riscos envolvidos
Engenheiros de software buscam abstrações para melhor
entender o software em construção
Arquitetura de Software
Diante de tal complexidade, é preciso pensar
melhor no sistema Criar componentes
Modularizarmos as nossas estruturas
O objetivo é organizar a estrutura do nosso
Arquitetura de Software
“Arquitetura de Software de um programa ou
sistema computacional consiste na estrutura ou conjunto de estruturas do sistema, que compreendem (i) elementos de software, (ii) propriedades externamente visíveis destes elementos e (iii) os relacionamentos entre eles.” Bass et al., 2003
Arquitetura de Software
Algumas atividades
Definir infraestrutura de desenvolvimento e
plataforma de produção
Selecionar meio de armazenamento que será
utilizado
Definir ferramentas de desenvolvimento Definir tecnologias a serem utilizadas
Definir ambiente de produção
Definir o estilo arquitetura do sistema
(camadas?)
Definir padrões de projeto Documentar a arquitetura
Padrões de Projeto
Um padrão de projeto é uma estrutura
recorrente no projeto de software orientado a objetos. Pelo fato de ser recorrente, vale a
pena que seja documentada e estudada..
Exemplos Façade
DAO (Data Access Object) Factory
Padrões de Projeto
Padrões de Projeto
DAO (Data Access Object)
é um padrão de projetos desenvolvido para
melhorar a forma como trabalhamos com abstração de banco de dados
Separa internamente seu código, fazendo com
que a parte lógica e as regras de negócio fiquem isoladas de toda persistência com o banco de
Padrões de Projeto
Exemplo DAO
public class Cliente { String nome;
String codigo; }
public interface ClienteDAO {
public void inserir(); public void remover(); //e o resto do CRUD }
public class ClienteDAOMySQL implements ClienteDAO { public void inserir() {
//código JDBC }
public void remover() { //código JDBC
} }
Padrões de Projeto
Factory
Quando estamos trabalhando com uma interface
e temos mais de uma implementação para esta interface, podemos utilizar uma fábrica para
criar um objeto que implementa a interface; a fábrica pode selecionar a implementação que ela retorna
Padrões de Projeto
Singleton
Ele é usado quando for necessária a existência de
apenas uma instância de uma classe
public class ClasseSingleton {
private static ClasseSingleton instance; private ClasseSingleton() { }
public static ClasseSingleton getInstance() {
if (instance == null) instance=new Singleton();
return instance;
} }
Arquitetura em Camadas
Divisão da aplicação em camadas:
Alto grau de escalabilidade, flexibilidade, alta
coesão, baixo acoplamento, ...
Dois tipos de camadas: Camada Física (Tier)
Camada Física
Representado pela parte física ou estrutural
dos componentes de infra-estrutura da arquitetura que vão desde o hardware, o sistema operacional, os serviços, até os servidores
Tipos de arquiteturas com camadas físicas: 2 camadas
3 camadas N camadas
2 Camadas
Também conhecido como cliente-servidor
Cliente com executável e regras de negócio e
3 Camadas
Entre o lado cliente e o lado servidor entrou um
servidor de aplicação onde ficam todas as regras de negócio compartilhadas para os clientes
N Camadas
Utilizada para aplicações que exigem um alto
grau de distribuição de seus componentes internos
Camadas Lógicas (Layer)
Padrão arquitetural que serve para organizar e
separar as responsabilidades dos componentes internos de uma aplicação
A arquitetura em camadas prevê que cada
camada deve prover serviços para a camada diretamente superior
Provê independência entre as camadas que as
compõe
Apresentação
Responsável por conter as interfaces dos usuários e
as regras inerentes a qualquer componente visual, regras de validação de entrada de dados
A camada de apresentação deve fazer uso dos
serviços oferecidos pela camada imediatamente inferior a ele.
Caso esta camada seja a camada de negócio, a
camada GUI deve conter uma referência para a Fachada do sistema que é o ponto de acesso para os serviços
oferecidos pelo sistema. Portanto, neste exemplo, a Fachada é responsável por fazer a integração entre as camadas de apresentação e a camada de negócio.
Negócio
A camada de negócio contempla a implementação da lógica do negócio que do sistema.
É núcleo do sistema e contém todas as classes inerentes ao domínio da aplicação:
as classes básicas do negócio, as classes coleções de negócio e a Fachada do sistema.
A Fachada também centraliza as instâncias das classes controladoras.
Por este motivo, as classes controladoras também podem
ser chamadas de sub-fachadas, já que representam uma Fachada para um determinado caso de uso.
Acesso a Dados (Infra-Estrutura)
Responsável por conter toda a lógica para
acesso aos dados, seja via banco de dados, arquivos texto ou XML.
Os serviços providos pela camada de dados
são utilizados pelas classes coleções de
negócio, que são pertencentes à camada de negócio
As coleções de negócios realizam operações
de inserção, edição, exclusão e consulta das instâncias das classes básicas de negócio
Acesso a Dados
(Infra-Estrutura)
Visões Arquiteturais
Janela para o sistema em uma perspectiva
particular que serve como comunicação entre os envolvidos no sistema, expressa em texto e diagramas UML
No RUP, as visões arquiteturais são conhecidas
por Modelo de Visão Arquitetural 4+1, sendo
todas elas dirigidas pela visão de caso de uso
Ficam documentados no artefato Documento de Arquitetura de Software
Visão Lógica
Responsável pela organização conceitual do software
em termos de camadas, subsistemas, pacotes,
Visão de Deployment
Responsável pela instalação física dos processos e
componentes nos nós de processamento e a configuração física da rede entre os nós
Visão de Implementação
Neste modelo todo o sistema é organizado para
identificarmos sua estrutura, por exemplo: pacotes java, componentes, arquivos JAR e EAR, etc.
Visão de Processo
Responsável por mapear os processos e as threads,
suas responsabilidades, colaborações e a alocação dos elementos da visão lógica
Visão de Caso de Uso
Responsável por dirigir
as quatro visões
Projetar Casos de Uso
Após a definição da arquitetura, os casos de
uso que foram analisados durante a atividade
Analisar Caso de Uso, devem ter seus modelos
atualizados para que fiquem em conformidade com a arquitetura estabelecida
Artefatos de entrada
Documento de Arquitetura
Diagrama e Especificação de casos de uso DDR (opcional)
Projetar casos de uso
Projetar casos de Uso
Projetar Banco de Dados
Vocês verão esta atividade na disciplina de