Análise e Projeto no RUP Tópicos abordado Visão geral do RUP Introdução à disciplina de Análise & Projeto Atividades Papéis Artefatos Análise & Projeto Análise & Projeto Os objetivos do fluxo: Transformar os requisitos em um projeto do sistema do que o sistema será Derivar uma arquitetura robusta do sistema Adaptar o projeto Análise versus Projeto Foco no entendimento do problema Projeto idealizado Comportamento Estrutura do sistema Requisitos funcionais Modelos simples Foco no entendimento da solução Operações e atributos Performance Pensamento no código Ciclo de vida de objetos Requisitos nãofuncionais Modelo complexo Visão geral dos artefatos Modelo de análise e projeto Modelo de caso de uso Análise e projeto Documento da arquitetura Modelo de dados Glossário Documento requisitos Modelo de Analise e Projeto A construção do modelo de análise e projeto é o principal objetivo desta disciplina O modelo de análise e projeto contém as realizações de casos de uso Pode ser particionado em dois modelos Modelo de Analise Modelo de Projeto Realização de Caso de Uso Caso de Uso Descreve como o caso de uso é realizado, associando o caso de uso com classes e outros elementos de projeto Requisitos Realização de Caso de Uso Diagramas de Sequência Diagramas de Colaboração Diagramas de Classe Analise e projeto Fluxo de Análise e Projeto Diagrama de Atividades Realizar síntese da arquitetura Objetivo Construir e avaliar uma prova de conceito arquitetural Mostrar que existe uma solução possível de satisfazer os requisitos do sistema relevantes à arquitetura Definir a arquitetura candidata Objetivo Criar o esqueleto inicial da arquitetura do sistema Identificar classes de análise dos casos de uso arquiteturalmente relevantes Atualizar a realização de caso de uso com as interações entre classes de análise Analisar comportamento Objetivo Transformar as descrições sobre o comportamento providas pelos caso de uso em um conjunto de elementos nos quais o modelo de projeto vai se basear Projetar componentes Objetivo Refinar as definições dos elementos acrescentado detalhes sobre como estes elementos implementam o comportamento requerido Refinar e atualizar as realizações de casos de uso com os novos elementos identificados Projetar Banco de Dados Objetivo Identificar classes persistentes no modelo de projeto Projetar as estruturas de banco de dados (Modelo de dados) Definir mecanismos e estratégias para armazenar e recuperar dados Refinar Arquitetura Objetivo Permitir uma transição entre os elementos e mecanismos de análise para os de projeto Manter a consistência e integração da arquitetura Descrever a arquitetura de execução e produção da aplicação Fluxo de Análise e Projeto Light Simplificando/Instanciando o processo para um contexto específico Motivação O RUP é um Framework Genérico e complexo demais, pois visa atender todos os tipos de projetos de desenvolvimento de software Toda disciplina do RUP deve ser analisada e customizada de acordo com as necessidades específicas do projeto antes de sua implantação Fluxo de atividades simplificado 1. Analisar Arquitetura 2. Analisar Caso de Uso 3. Projetar Classes 4. Projetar Banco de Dados Analisar Arquitetura Analisar Arquitetura Esforço inicial em definir as partes do sistema e seus relacionamentos (Arquitetura Inicial) Definir as convenções de modelagem Identificar os mecanismos de análise Identificação das abstrações-chave Arquitetura Inicial Quais as principais partes do sistema? Como elas interagem entre si? Que padrões arquiteturais utilizar (no todo ou internamente nas partes) ? MVC Baseado em camadas Canais e filtros Centrado em repositório Exemplo de arquitetura inicial Módulo de Vendas Módulo de Estoque Interface Gráfica Negócio Dados Socket Convenções de modelagem O que são? Que diagramas e elementos de modelagem utilizar Definir as regras para utilização desses componentes Convenções de nome Exemplos Casos de uso devem ser nomeados como ações (Cadastrar usuário) Cada realização de caso de uso deve conter: Um diagrama de classes No mínimo um diagrama de seqüência representando o fluxo principal de ações Mecanismos de análise O que são? Focam nos requisitos não-funcionais do sistema Decisão estratégica sobre padrões, politicas e práticas a serem utilizadas no projeto Exemplos Persistência Comunicação Gerenciamento de transações Segurança Identificar Abstrações-chave Definir classes de análise preliminares Conhecimento do domínio Requisitos Outros artefatos (Glossário e modelo de negócio) Exercício Analisar Caso de Uso Objetivos Identificar as classes que executam o fluxo de eventos do caso de uso Distribuir o comportamento do caso de uso nestas classes Identificar atributos, responsabilidades e associações das classes Passos para Analisar Caso de Uso Para cada caso de uso: 1. 2. Encontrar classes de análise Distribuir comportamento entre as classes Para cada classe: 3. 4. 5. Descrever responsabilidades Descrever atributos e associações Qualificar mecanismos de análise Passo 1: Encontrar classes de análise O comportamento do caso de uso é distribuído em classes de análise O que são classes de análise? Representam o conceito mais abstrato dos elementos do sistema Primeiro passo concreto até chegar em um sistema executável Categorização temporária São convertidas para classes de projeto Servem para diminuir o gap entre os requisitos e projeto Podem ser dos seguintes tipos Fronteira (<<boundary>>) Controle (<<control>>) Entidade (<<entity>>) Classes de Fronteira Itermediam a interface para qualquer coisa externa ao sistema <<boundary>> Exemplos de classes fronteira GUI Interface com outros sistemas Interface com dispositivos Uma classe de Fronteira por interação ator X caso de uso Notação em UML O Papel de uma Classe de Fronteira <<boundary>> <<control>> <<boundary>> Usuário <<boundary>> <<entity>> <<entity>> Modela interação entre o sistema e seu ambiente Exemplo de classes de fronteira Estudante <<boundary>> FormRegistroCursos Matricular-se Em disciplina Sistema Academico <<boundary>> SistemaAcademico Classes de Entidade Abstrações chave dos casos de uso <<entity>> Glossário <<entity>> <<entity>> Descrição do Caso de uso O Papel de uma Classe de Entidade <<boundary>> <<control>> <<boundary>> Usuário <<boundary>> <<entity>> <<entity>> Armazenam e gerenciam informação no sistema Exemplo de classes de entidade <<entity>> Estudante <<entity>> Curso <<entity>> Horario Classes de Controle Coordenam o comportamento (lógica de controle) do caso de uso Interface entre fronteira e entidade <<control>> O Papel de uma Classe de Controle <<boundary>> <<control>> <<boundary>> Usuário <<boundary>> <<entity>> <<entity>> Coordenam o comportamento do caso de uso Exemplo de Classe de Controle Estudante Matricular-se Em disciplina <<control>> ControladorMatricula matricurlarAluno() Sistema Academico Exercício Passo 2: Distribuir comportamento Para cada fluxo de eventos Identificar classes de análise participantes Alocar responsabilidades do caso de uso às classes de análise Modelar interações entre as classes através dos diagramas de interação Distribuindo comportamento entre as classes Classes de análise Diagrama de seqüência Caso de uso Diagrama de colaboração Classes de análise com responsabilidades Alocando responsabilidades Use estereótipos de análise como guia Classes de fronteira Comportamento que envolve comunicação com um ator Classes de entidade Comportamento que envolve informação encapsulada na abstração Classes de controle Comportamento específico ao (lógica de controle do) caso de uso Guia: Alocando responsabilidades Quem tem a informação necessária para realizar a responsabilidade isso pode envolver apenas uma classe, mas pode ser preciso criar novas classes ou relacionamentos entre classes Modelando interações Diagramas de interação (colaboração e seqüência) modelam interações do sistema com seus atores A interação é iniciada por um ator e envolve instâncias (objetos) das classes Diagramas de interação capturam a semântica do fluxo de eventos do caso de uso Auxiliam a identificar classes, responsabilidades e relacionamentos Mecanismo de validação da arquitetura Vários diagramas podem ser necessários Anatomia de um Diagrama de Seqüência Objetos :Fornecedor :Cliente Linha da vida 1: Solicita serviço Mensagem Foco do controle Mensagem reflexiva 1.1: Solicita outro serviço Numeração hierárquica Exemplo de diagrama de Seqüência janela de matrícula : Aluno controle de matrícula mat 101 mat 101 section 1 1: preenche info 2: submete 3: ad curso(Jose, mat 101) 4: ad(Jose) 5: curso aberto? 6: ad(Jose) Diagrama de Colaboração Objetos :Cliente Ligação 1: Solicita serviço :Fornecedor Mensagem Exemplo de diagrama de colaboração janela de curso : 1: informação do curso 2: processa JanelaCurso 3: adiciona curso : Secretaria gerenciador : curso : GerenciadorCurriculo Curso 4: novo curso Colaboração X Sequência Colaboração Mostra os relacionamentos, além das interações Melhor para visualizar a colaboração Melhor de ser usado em reuniões Sequência Mostra a sequência explicíta de mensagens Melhor para visualizar o fluxo Melhor para cenários complexos Exercício Passo 3: Descrever Responsabilidades Atualizar os diagramas de classes com as responsabilidades identificadas no de iteração Mensagens nestes diagramas resultam em responsabilidades nas classes receptoras Como fazer? diagrama de interação diagrama de classe :Fornecedor :Cliente // Executar responsabilidade Fornecedor // Executar responsabilidade Gerenciando a consistência Classes com responsabilidades similares são candidatas a serem combinadas Uma classe com responsabilidades disjuntas é candidata a ser dividida Classes sem (ou com apenas uma responsabilidade) e classes que interagem com muitas classes são candidatas a serem reexaminadas Passo 4: Descrever atributos e associações Definir atributos Estabelecer agregações e associações Encontrando Atributos Possíveis fontes: conhecimento do negócio, requisitos, glossário, modelo do negócio, etc. São propriedades/características das classes identificadas informação de propriedade exclusiva do objeto informação que pode ser lida ou escrita por operações, mas sem outro comportamento a não ser fornecer um valor Se a informação tem comportamento complexo ou é compartilhada, deve gerar uma classe Encontrando Relacionamentos Interações entre objetos nos diagrama de interação pode indicar a necessidade de definir um relacionamento entre as classes Adicionar os elementos de um relacionamento Tipo e nome Navegabilidade Multiplicidade Papéis Encontrando Relacionamentos 1: PerformResponsibility Diagrama de Colaboração :Client :Supplier Link Client Diagrama de classe Supplier Client 0..* 0..* Prime suppliers Association Supplier PerformResponsibility() Exercício Passo 5: Qualificar mecanismos de análise Mapear classes de análise em mecanismos de análise Classes de análise Mecanismos de análise Estudante Persistente ControladorMatricula Distribuição, Segurança Curso Persistente, Interface Legado Passo 6: Unificar classes de análise Realização de Caso de Uso Diagramas de Classe … Realização de Caso de Uso Diagramas de Classe … Diagramas de Classe Realização de Caso de Uso Diagramas de Classe … Projetar classes Objetivo Detalhar as partes do sistema Concretização dos conceitos definidos até o momento Detalhes de implementação e ambiente de produção Produtos utilizados Linguagem de programação Distribuição Performance Restrições físicas Passos do projeto de classes Para cada classe: 1. 2. 3. 4. 5. 6. 7. Criar classes de projeto Identificar classes persistentes Definir métodos Definir atributos Definir estados Definir relacionamentos Contemplar os requisitos não-funcionais Passo 1: Criar classes de projeto Converter classes de análise (Fronteira, Controle e Entidade) em classes de projeto Padrões de projeto podem ser incorporados As classes são refinadas para incorporar os mecanismos arquiteturais Projetando classes de fronteira GUI (Graphical User Interface) Que ferramenta de desenvolvimento de interface gráfica será utilizada? Quant pode ser criada pela ferramenta? Que padrões serão utilizados? Sistemas Externos Que tecnologias/mecanismos de integração? Que padrões? Projetar como um subsistema… Projetando classes de entidade Classes de Entidade são Transitórias Persistentes São detalhadas no passo “Identificar classes persistentes” Projetando classes de controle Decisões que deve ser tomadas: Elas são realmente necessárias? Elas podem/devem ser agrupadas? Como decidir? Complexidade Operações relacionadas Probabilidade de mudar Performance e distribuição Passo 2: Identificando classes persistentes Instancias da classe precisam preservar o seu estado Estratégia de persistencia é definida para cada classe persistente Curso Candidato JDBC Serialização BD Relacional Arquivo Exercício Passo 3: Definir Métodos Tem como propósito mapear responsabilidades identificada na análise para métodos na classe Deve-se considerar Nome, assinatura e visibilidade dos métodos Mapeando operações :Cliente - concreto :Fornecedor // Realizar alguma operação Análise Projeto :Cliente :Fornecedor fazerAlgo() + concreto Passo 4: Definir Atributos Tem como propósito formalizar a definição dos atributos Deve-se considerar Persistência Visibidade, nome, tipo e valor inicial Passo 5: Definir estado Tem como objetivo definir como o objeto se comporta Relevante apenas para objetos com ciclo de vida complexo Pode ser especificado em UML Diagrama de estados Diagrama de atividades Diagrama de Estados Um diagrama de estados mostra o ciclo de vida de um objeto Nome do estado Estado Variavel: Tipo = valor Ação de entrada Ação de saída Atividade Evento(args) [condição] / Operacao(args) ^obj.enviarMensagem(args) Ações Atividades Transição Exemplo de diagrama de estado Adiciona Aluno[ contador < 10 ] Inicializado Adiciona Aluno / contador = 0 do: Incializa Curso Aberto Cancela Cancela [ contador = 10 ] Cancelado do: Notifica Alunos Cancela Fechado do: Finaliza curso Exercício Passo 6: Definir Relacionamentos Dependências Associações Simples Agregação Composição Generalização Passo 7: Contemplar os requisitos não-funcionais Concretização dos mecanismos de análise Incorporar responsabilidades em algumas classes Criar novas classes Exemplos: Segurança Como armazenar as senhas? Que algoritmo usar para criptografar uma mensagem? Distribuição Que tecnologia utilizar? Qual o impacto da tecnologia nos objetos já definidos? Tratamento de logs Que tipo de operações deve ter log (Acesso a dados, execução de negócio, …) Exercício Projetar Banco de Dados Mapear as classes persistentes em conceitos do Banco de Dados Definir os tipos de dados mais adequados para o BD Normalizar se necessário Será visto com mais detalhes em outra disciplina… FIM!!!