Please enable JavaScript.
Coggle requires JavaScript to display documents.
Projeto e Implementação (Desenvolvimento Open Source (Sistemas Open Source…
Projeto e Implementação
O que é
Estagio em que o sistema é desenvolvido
Atividades invariavelmente intercaladas
É uma atividade criativa
Identificação de componentes e relacionamentos de acordo com os requisitos do cliente
Implementação: processo de realização do projeto em um programa
Construir ou Comprar?
Software de prateleira (COTS)
Já existem para várias áreas
Podem ser adaptados aos requisitos dos usuários
Processo do projeto passa a se preocupar com COMO usar os recursos de configuração do sistema para cumprir os requisitos
Nível de detalhamento depende se a abordagem é orientada a planos ou ágil
Processo de Projeto Orientado a Objetos
Envolvem o desenvolvimento de vários modelos diferentes de sistema
Muito esforço em desenvolvimento e manutenção
Pode não ser interessante para sistemas pequenos
Para grandes sistemas, são um mecanismo de comunicação importante
Estágios do Processo
Exite uma grande variedade de diferentes processos de projeto OO
A escolha dos estágios depende de quem usa o processo
Atividades comuns
Definição de contexto e interações do sistema
Entender os relacionamentos entre o software e o ambiente externo
Ajuda a entender como
Prover funcionalidade requerida
Estruturar o sistema para se comunicar com seu ambiente
Estabelecer limites do sistema
O que será implementado no sistema sendo desenvolvido?
O que será implementado em outros sistemas associados?
Modelos de Contexto e Interação
Modelo de contexto
Mostra outros sistemas no ambiente
Modelo estrutural
Modelo de interação
Modelo dinâmico
Mostra como o sistema interage com seu ambiente no uso
Projeto de arquitetura do sistema
Feito com as informações de interações entre sistema e ambiente
Identificação e organização dos componentes principais do sistema
Pode usar um padrão de arquitetura
Identificação dos principais objetos de classe do sistema
Parte difícil do projeto orientado a objetos
Não existe fórmula mágica para identificação
Depende da experiência e habilidade dos projetistas
É um processo iterativo. Praticamente impossível de acertar de primeira
Abordagens de Identificação
Gramatical - baseada em uma descrição em linguagem natural do sistema
Baseada em entidades tangíveis no domínio da aplicação
Comportamental - identificar objetos baseado em qual participa de qual comportamento
Análise Baseada em Cenário
Para cada cenário são identificados
Objetos
Atributos
Métodos
Desenvolvimento dos modelos de projeto
O que são Modelos de Projeto
Mostram objetos e classes de objetos, e os relacionamentos entre essas entidades
Estáticos - Descrevem a estrutura estática do sistema em termos de classes de objetos e relações
Dinâmicos - Descrevem interações dinâmicas entre objetos
Alguns Modelos de Projeto
Modelo de Subsistemas
Mostra Agrupamentos lógicos de objetos em subsistemas coerentes
Organização real dos objetos no sistema pode ser diferente
Modelos de Sequência
Mostram a sequência em que as interações dos objetos ocorrem
Formatação
Objetos - organizados horizontalmente no topo
Tempo - representado verticalmente
Interações - setas com rótulos
Setas diferentes = Interações diferentes
Retângulo fino na linha de vida do objeto indica quando este está sendo o controlador do sistema
Modelos de Caso de Uso
Modelos de Agregação
Modelos de Generalização
Máquinas/Diagramas de Estado
Mostra como os objetos respondem a diferentes pedidos e as transições acionadas pelos pedidos
Modelos úteis de sistema ou comportamento de objeto em execução
Alto nível
Nem todo objeto precisa de um
Especificação de interface de objetos
Evitar projetar a representação/Escondê-la dentro do objeto
Objetos podem ter várias interfaces
UML - Usa diagramas de classe para especificá-las
Interface
Deve ser definida com exatidão para que outros objetos possam usá-la
Pontos de vista dos métodos oferecidos pelos objetos
Devem ser especificadas para que o projeto paralelo de objetos e componentes possa ser feito
Padrões de Projeto
O que é
Forma de reusar conhecimento abstrato sobre um problema e sua solução
Descrição de um problema e da essência de sua solução
Deve ser abstrato o suficiente para ser reusado em diferentes configurações
Geralmente usa características da OO
Herança
Polimorfismo
Elementos de um Padrão
Nome - Identificador significativo
Descrição do problema
Descrição da solução
Não é um projeto concreto
É um template
Pode ser instanciada de diferentes maneiras
Consequências da aplicação
Resultados
Compromissos
Exemplo
Observer
Nome: Observer
Separa o estado do display do objeto do próprio objeto
Usado quando vários displays de estado são necessários
Solução
Descrição
Usa dois objetos abstratos e dois concretos
Objetos abstratos
Subject
Observer
Cada Observer corresponde a um display
Possui interface atualizar()
Incluem operações gerais aplicáveis em todas as situações
Objetos concretos
ConcreteSubject
Mantém o estado a ser exibido
Herda operações de subject
Permite adicionar ou remover observers
ConcreteObserver
Mantém uma cópia do estado do ConcreteSubject
Implementa a interface atualizar() do Observer
Permite manter as cópias de ConcreteSubject
Exibe estado atualizado e reflete mudanças automaticamente
Herdam os atributos dos objetos abstratos relacionados
Consequências
Subject só conhece o Observer abstrato
Não sabe detalhes da classe concreta
Acoplamento entre os objetos é mínimo
Melhorias de desempenho são impraticáveis
Alterar o Subject pode causar uma série de alterações desnecessárias aos Observers
Problemas de Projeto
Reconhecer que qualquer problema de projeto pode ter um padrão associados
Exemplos Problema - Padrão
Informar a vários objetos que o estado de outro mudou - Padrão Observer
Ligar interfaces a um número de objetos relacionados - Padrão Façade
Prover forma de acesso padrão aos elementos em uma coleção - Padrão Iterator
Questões de Implementação
Foco não é na implementação
Questões de implementação que não são cobertas em textos sobre programação
Reuso
Maioria dos softwares modernos são construídos com reuso
Deve-se fazer o maior uso possível de códigos existentes
Antigamente: reúso de funções e objetos em bibliotecas
Devido a pressão por redução de custos e prazo
Atualmente: usada em softwares científicos e de negócios
Níveis de reuso
Nível de Abstração
Não se reusa software diretamente
Usa-se o conhecimento de abstrações bem sucedidas
Nível de Objeto
Reusa-se diretamente os objetos de uma biblioteca
Menos escrita de código
Nível de Componentes
Componente: coleção de objetos e classes de objetos reusados
Nível de Sistema
Reusa-se sistemas de aplicação inteiros
Custos de reuso
Tempo gasto na busca
Custo de aquisição do software reusável
Custo de adaptação e configuração de componentes
Custo de integração entre o software reusável e o novo código
Gerenciamento de Configuração
Registros devem ser mantidos em um sistema de gerenciamento de configuração
Registrar versões diferentes de cada componente do software
Gerenciamento de um software em mudança
Objetivo
Dar suporte a integração do sistema
Desenvolvedores devem poder acessar o código e a documentação de forma controlada
Atividades
Gerenciamento de Versões
Registro de diferentes versões dos componentes
Sistemas incluem recursos para coordenar desenvolvimento de diversos programadores
Integração de Sistemas
Suporte para definição de qual versão de qual componente será usada para criar cada versão do sistema
Construção automatizada do sistema
Rastreamento de Problemas
Suporte para report de bugs e outros problemas
Permitir que se saiba qual versão da falha e que alterações foram feitas nesta
Permitir saber qual desenvolvedor está trabalhando no reparo
Desenvolvimento Host-Target
Geralmente o software de produção não é executado no mesmo computador em que foi desenvolvido
Host - Computador em que o software foi desenvolvido
Target - Computador em que o software é executado
Genericamente temos duas plataformas
Plataforma de desenvolvimento
Ferramentas
Compilador integrado
Sistema de edição orientado a sintaxe
Criação, edição e compilação de códigos
Sistema de depuração de linguagem
Ferramentas de edição gráfica
Ferramentas de teste
Ferramentas de apoio a projetos
Plataforma de execução
Plataforma
Hardware
Sistema Operacional
Softwares de suporte
Etc.
Podem ter softwares e arquiteturas diferentes
IDE - Ambiente de Desenvolvimento Integrado
Ferramentas de desenvolvimento agrupadas
Conjunto de ferramentas dá apoio a diferentes aspectos do desenvolvimento
Framework comum com interface de usuário
Criadas para dar apoio ao desenvolvimento em linguagens específicas
Fatores de Implantação de um Componente/Sistema
A plataforma em que o software será implantado deve dar suporte a seus requisitos de hardware e software
Sistemas de alta disponibilidade
Componentes devem ser implementados em mais de uma máquina
Redundância dos componentes
Alto nível de tráfego implica implementar plataformas fisicamente próximas para reduzir atrasos na comunicação
Desenvolvimento Open Source
Publicação do código-fonte de um sistema
Voluntários convidados a participar do desenvolvimento
Sistemas Open Source
Linux é o mais conhecido
Java
Apache
mySQL
Questões Open Source
Produto em desenvolvimento deve usar componentes Open Source?
A abordagem Open Source deve ser usada?
Negócios de Open Source
Cada vez mais empresas fazem uso do modelo
Não é bom para venda de um produto de software
Bons para fornecimento de suporte
Envolvimento da comunidade implica em desenvolvimento mais barato e rápido
Licenciamento Open Source
Licenciamento Open Source