Desenvolvimento de Programas Aplicando Orientação por Objetos, Linguagem de Modelagem e Processo de Engenharia de Software Cláudio Alessandro de Carvalho Silva Orientador: Marco Lúcio Bittencourt DPM-FEM-UNICAMP Conteúdo Introdução Desafios do Desenvolvimento de Software Breve Histórico Características do Conjunto de Software Anterior Novos Requerimentos Design e Programação Orientados por Objetos, UML e Rational Unified Process. Descrição do Desenvolvimento Atual Desafios do Desenvolvimento de Software Demanda por: automação de processos, manipulação de grande volume dados, atualização freqüente e novas funcionalidades. Softwares científicos e de engenharia: aumento da complexidade dos problemas concorre com o aumento da potência computacional. Demandas por eficiência, confiabilidade, visualização de dados complexos e interfaces com padrões industriais. Ambiente de pesquisa: inclusão e modificação de métodos e algoritmos é necessidade constante. Condições necessárias: eficiência na coordenação de grupos de trabalho, arquitetura flexível de software e gerenciamento de mudanças. Histórico LNCC Mestrado e doutorado: Marco Lúcio Trabalhos de iniciação científica Mestrado e doutorado: Cláudio Características do Conjunto de Software Anterior Programação orientada por objetos em C++. Separação entre interface gráfica e núcleo de solução numérica. ACDP: tratamento e notificação de erros e exceções, leitura de dados, manipulação de bancos de dados. DS: estruturas de dados básicas (matrizes, vetor, arrays, string). Métodos de solução de sistemas lineares. SOLVER: versão h do método de elementos finitos 2D e 3D para problemas estruturais lineares. Implementação baseada na generalização de elementos, funções de forma, regras de integração e materiais. OPT: análise de sensibilidade e otimização de problemas estruturais lineares. Sensibilidade à variação de parâmetros discretos e à variação da forma do domínio. Implementação baseada na generalização de variáveis de projeto, funcionais de performance e campos de velocidades. SAT 2D: geração de geometrias, interface para geração de malhas e definição de parâmetros do problema, visualização de resultados. ADAPT: estimador de erros e refinamento de malhas em problemas estruturais lineares 2D. Geradores de malha: FRONTAL (2D e refinamento), GID (2D/3D e visualização de resultados). Novos Requerimentos Tratar novos tipos de problemas e implementar novos métodos de solução: não-linearidades estruturais, Navier-Stokes, difusãoconvecção, versão p do método de elementos finitos, soluções multi-nível de sistema de sistemas lineares, otimização de parâmetros discretos, forma e topologia em problemas nãolineares. Estabelecer uma arquitetura flexível de programas para pesquisa e desenvolvimento. Conjunto de aplicativos: manipulação de geometrias (incluindo interfaces com padrões de trocas de dados), definição do problema e geração de malhas, solução e otimização, visualização. Resultado: aumento da complexidade do conjunto de software leva à necessidade de procedimentos de projeto, implementação e gerenciamento. Design e Programação Orientados por Objetos, UML e Rational Unified Process Orientação por objetos: técnica de modelagem de conhecimento baseada na definição de entidades, responsabilidades e relacionamentos. Como a programação orientada por procedimentos se compara à programação orientada por objetos? A POO permite construir sistemas mais robustos. Por que é necessário modelar? Um modelo é uma simplificação da realidade. Portanto, construímos modelos para melhor entender o sistema em desenvolvimento pois há limites na habilidade humana em compreender sistemas complexos. UML: linguagem de modelagem de sistemas orientados por objetos e intensivos em software fusão de três técnicas estabelecidas de design (Booch, Jacobson e Rumbaugh) tem como objetivo permitir a visualização, especificação, documentação (e construção) de sistemas intensivos em software em diversos domínios (negócios, telecomunicações, pesquisa científica, transporte, serviços baseados na Web) composta por entidades, relações e diagramas usados em modelagem estática (estrutural) e dinâmica (comportamento) da arquitetura de um sistema Arquitetura: conjunto de decisões sobre organização do sistema de software; seleção dos elementos estruturais e interfaces; comportamento, ou seja, a colaboração entre componentes; subsistemas; estilo. A arquitetura não é apenas relacionada como estrutura e comportamento. Mas também com uso, funcionalidade, performance, resiliência, reutilização, restrições econômicas e tecnológicas, etc. A UML é apenas uma linguagem de modelagem e portanto é apenas uma parte de um método (processo) de desenvolvimento de software. Rational Unified Process Processo de engenharia de software. Fornece uma abordagem disciplinada para atribuição de tarefas e responsabilidades dentro de uma organização de desenvolvimento de software. Iterativo: repetição de ciclos de requerimentos, análise/design, implementação e testes: Sistemas de software complexos: é impossível desenvolver corretamente todas as etapas de uma só vez. Permite maior flexibilidade em acomodar novos requerimentos, identificar e atacar riscos o mais cedo possível. Controle: gerenciamento dos requerimentos (captura, execução, mudança) e controle de alterações, de modo a garantir uma compreensão comum das funcionalidades esperadas. Focado no desenvolvimento da arquitetura do sistema de software. Dirigido por use cases. O processo é suportado, automatizado, por um conjunto de ferramentas: Requisite Pro, Rose, Soda, etc. Sincronização das Etapas Desenvolvimento Atual Requerimentos: necessidades e visão. Use cases: seqüência de ações que o sistema executa levando a um resultado de valor para o usuário. Use case realizations: definição de objetos e responsabilidades que implementem o respectivo use case. Análise e Design Sincronização com componentes e geração automática de código. Primeira iteração: definição de uma arquitetura inicial, revisão do design e da documentação dos pacotes Ds, Solver e Opt, sincronização com código, implementação piloto (solução de problemas estruturais lineares). Definição de formatos de entrada e saída de dados. Use Cases Arquitetura Inicial Use case Realizations Design Sincronização com Código