Engenharia de Software Projeto Orientado a Objetos Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos • Um projeto orientado a objetos é representado pelos projetistas em termos de “coisas”, em vez de operações ou funções. • O sistema em funcionamento é constituído de objetos que interagem entre si, que mantêm seu próprio estado local e fornecem operações com base nessas informações de estado. • Os objetos ocultam informações e estados, limitam o acesso e se comunicam entre si. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos • A Análise Orientada a Objetos se dedica a desenvolver um modelo orientado a objetos do domínio de aplicação. • O Projeto Orientado a Objetos se dedica a desenvolver um modelo orientado a objetos de um sistema de software para implementar os requisitos identificados. • A Programação Orientada a Objetos se ocupa de realizar um projeto de software utilizando uma linguagem orientada a objetos. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos • Os sistemas orientados devem possui as seguintes características: – Fácil manutenção – Pouco impacto em modificações – “Objetos–componentes” de fácil reutilização • Reutilizar componentes de projetos antecedentes • Reduz custo, validação, desenvolvimento. • Diminui o risco do projeto Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos • Um objeto é uma entidade que possui um estado e um conjunto definido de operações que operam nesse estado. – O estado é representado por um conjunto de atributos de objeto. – As operações associadas com o objeto fornecem serviços para outros objetos (cliente), que requisitam esses serviços quando alguma computação é necessária. • Os objetos são criados de acordo com uma definição de classe de objetos, que serve como um template para criar objetos. Esta classe apresenta declarações de todos os atributos e operações que devem ser associados a um objeto dessa classe. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos • Notação UML para Classe de Objetos Funcionário Atributos Nome da Classe nome: string endereco: string matricula: integer departamento: baterPonto(); retirarSalario(); mudarDados(); Operações Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos • A comunicação entre os objetos de um sistema de software orientado a objetos pode ser: – Síncrona: O objeto que chama espera que a requisição de serviço seja concluída. – Assíncrona: o objeto que chama pode continuar em operação enquanto o serviço requisitado está sendo executado. Neste caso os objetos foram implementados como processos simultâneos ou threads. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos • O processo geral para o projeto orientado a objetos engloba os seguintes estágios: – Compreender e definir o contexto e os modos de utilização dos sistema. – Projetar a arquitetura do sistema. – Identificar os principais objetos do sistema – Desenvolver os modelos de projeto – Especificar as interfaces dos objetos. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos (compreender e definir contexto) • O primeiro estágio do processo de software é desenvolver a compreensão das relações entre o software que está sendo projetado e seu ambiente externo. - O contexto do sistema é o modelo estático, que descreve os outros sistemas naquele ambiente. - O modelo de uso do sistema é um modelos dinâmico, que descreve como o sistema realmente interage com seu ambiente. É recomendado utilizar os diagramas de contexto e caso de uso da UML. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos (Projetar a Arquitetura) • Uma vez as interações entre o sistema de software que está sendo projetado e o ambiente do sistema tenham sido definidas, é possível utilizar essas informações como base para projetar a arquitetura do sistema • O sistema deve ser decomposto de modo que as arquiteturas sejam o mais simples possível. A boa prática indica no máximo 7 entidades fundamentais para um modelo de arquitetura. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos (Identificar os objetos ) • Nesta fase do projeto já deve haver uma idéia dos objetos essenciais do sistema. Embora a fase seja ‘identificar objetos’, na verdade esse processo se ocupa em identificar as classes de objetos. • Algumas dicas para identificação de objetos: • Utilizar o vocabulário usual do sistema, onde atributos são nomes e operações são verbos. • Utilizar entidades tangíveis (exemplos do mundo real) como: aeronave, gerente, cliente, pedido. • Utilizar uma abordagem comportamental, onde primeiro deve ser compreendido o comportamento geral do sistema. • Realizar uma abordagem baseada em cenários, onde vários cenários de utilização do sistema são identificados e analisados de cada vez. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos (Modelos de projeto) • Há dois modelos de projetos que podem ser produzidos para descrever um projeto orientado a objetos. – Os modelos estáticos, que descrevem a estrutura estática do sistema em termos das classes de objetos de sistema e de seus relacionamentos. Ex. diagrama de Classe na UML. – Os modelos dinâmicos,que descrevem a estrutura dinâmica do sistema e mostram as interações entre os objetos do sistema (e não as classes de objetos).Ex. diagrama de seqüência, atividades e estado na UML. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto Orientado a objetos (Especificação de interface entre objetos) • É necessário especificar as interfaces para que os objetos e outros componentes possam ser projetados em paralelo, considerando a interface já oferecida. • Deve ser evitado informações de representação de interface nos projetos de interface. As representações devem ser ocultas e as operações de objeto devem ser fornecidas para modificar e atualizar dados. • Não existe necessariamente a relação 1:1 entre objeto e interface. Um objeto pode ter mais de uma interface de serviço que o mesmo implemente. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Engenharia de Software Projeto de Softwares de Tempo Real Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto de Software em Tempo Real • Um sistema em tempo real é um sistema de software que precisa responder a eventos em tempo real. Sua precisão não depende apenas dos resultados que ele produz, mas também do momento em que esses resultados são produzidos. • Os sistemas de tempo real são diferentes de outros tipos de sistemas de software seu funcionamento correto depende da resposta do sistema aos eventos dentro de um determinado intervalo de tempo (geralmente curto). Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto de Software em Tempo Real • Um sistema em tempo real é como um sistema de estímulo/resposta. Considerando um determinado estímulo fornecido, o sistema deve produzir uma resposta correspondente. • Os estímulos são de duas classes: – Estímulo Periódico: Eles ocorrem em intervalos de tempo previsíveis. Ex. examinar um sensor a cada 50 milisegundos e reagir (responder) de acordo com valor (estímulo) deste sensor. – Estímulo Aperiódico: ocorrem irregularmente, em geral são assinalados utilizando-se o mecanismo de interrupção do computador. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto de Software em Tempo Real • Modelo Geral de um sistema de tempo real Sensor Sensor Sensor Sensor Sensores associados ao sistema que fornecem informações sobre o estado do ambiente do sistema. Sistema de Controle De Tempo Real Controlam alguma unidade de hardware que influencia o ambiente. Atuador Atuador Atuador Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Atuador Projeto de Software em Tempo Real • Um sistema em tempo real tem de responder a estímulos que ocorrem em diferentes momentos. Sua arquitetura deve ser organizada de modo que o controle seja transferido ao manipulador apropriado para aquele estímulo, assim que ele for recebido. • Sistemas em tempo real são normalmente projetados como um conjunto de processos concorrentes e cooperantes e parte do sistema é dedicado a gerenciar estes processos. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto de Software em Tempo Real • O processo de projeto para sistemas de tempo real difere de outros processos de projeto de software, porque os tempos de resposta do sistema devem ser considerados logo no início do processo. Os eventos (estímulos), em vez dos objetos ou das funções, devem ser a parte central do processo de projeto. • Os estágios deste processo são: – Identificar os estímulos que o sistema deve processar e as repostas associadas. – Para cada estímulo e cada resposta associada, identificar as restrições de tempo que se aplicam ao processamento de estímulo e resposta. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto de Software em Tempo Real – Agregar o processamento de estímulo e de resposta em uma série de processos simultâneos. – Para cada estímulo e resposta, projetar algoritmos para realizar os cálculos requeridos. – Projetar um sistema de escalonamento que assegura que os processos sejam iniciados a tempo de atender seus prazos. – Integrar o sistema sob o controle de um executivo tempo real. Um executivo em tepo real é responsável pelo gerenciamento de processos e recursos. Ele sempre inclui um escalonador, que é o componente responsável por decidir qual processo devem ser escalonado para ser executado. As decisões de escalonamento são tomadas utilizando-se prioridades de processo. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Engenharia de Software Projeto de Software com Reuso Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto com Reuso • A engenharia baseada em reuso é uma abordagem para o desenvolvimento que tenta maximizar o reuso do software já existente. • Reuso de sistemas de aplicações:Todo sistema de aplicação pode ser reutilizado pela sua incorporação, sem mudança, em outros sistemas. • Reuso de Componentes: Os componentes de uma aplicação, que variam em tamanho incluindo desde subsistemas até objetos isolados. • Reuso de Funções: Os componentes de software que implementam uma única função, como uma função matemática, podem ser reutilizados. Esse tipo de reuso tem como base bibliotecas. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto com Reuso • Requisitos fundamentais para projetos baseado em reuso: • Deve ser possível encontrar componentes reutilizáveis apropriados. As organizações necessitam de uma base de componentes reutilizáveis adequadamente catalogados e documentados. Deve ser fácil encontrar componentes nesse catálogo, se ele existir. • O responsável pelo reuso dos componentes precisa ter certeza de que os componentes se comportarão como especificado e de que serão confiáveis. • Os componentes devem ter uma documentação associada para ajudar o usuário a compreendê-los e adaptá-los a uma nova aplicação. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto com Reuso • Benefícios fundamentais do reuso de software • Maior Confiabilidade: Os componentes reutilizados que são empregados nos sistemas em operação devem ser mais confiáveis do que os componentes novos, pois os mesmos já foram experimentados e testados em diferentes ambientes. • Redução de Riscos de Processo: recorrendo a componentes já existentes diminui-se a incerteza sobre os custos relacionados aos reuso desse componente do que sobre custos de desenvolvimento. Fator importante para o Gerenciamento de projetos para controle das estimativas de custo de software. • Uso efetivo de especialistas: em vez de especialistas em aplicações fazerem o mesmo trabalho em diferentes projetos, eles podem desenvolver componentes reutilizáveis, que englobam seu conhecimento. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto com Reuso • Benefícios fundamentais do reuso de software • Conformidade em padrões: Alguns padrões como os de interface com o usuário, podem ser implementados como um conjunto de componentes-padrão. • Desenvolvimento acelerado: De modo geral, é mais importante fornecer um sistema para o mercado o mais rápido possível do que se prender aos custos gerais de desenvolvimento. O reuso de componentes acelera a produção, porque o tempo de desenvolvimento e o de validação devem ser reduzidos. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto com Reuso – Desenvolvimento baseado em componentes • O desenvolvimento baseado em componentes leva em conta a utilização de componentes “caixa-preta”, que oferecem serviços através de uma interface bem definida. • Visualizar um componente como um provedor de serviços enfatiza duas importantes características de um componente reutilizável: – O componente é uma entidade executável independente. O códigofonte não está disponível, de modo que o componente não é compilado com outros componentes do sistema. – Os componentes publicam sua interface e todas as interações são feitas por meio dessa interface. A interface de um componente é expressa em termos de operações parametrizadas e seu estado interno nunca é exposto. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto com Reuso – Desenvolvimento baseado em componentes • Os componentes são definidos por suas interfaces (modelo mais genérico): • Interface Provides: a interface que fornece, que define os serviços oferecidos pelo componente. • Interface Requires: a interface que requer, que especifica os serviços que devem estar disponíveis a partir do sistema que está utilizando o componente. • Se estas interfaces não forem definidas, o componente não funcionará. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto com Reuso – Desenvolvimento baseado em componentes • O termo COTS (produtos de prateleira) pode se aplicar a qualquer componente oferecido por um terceiro (fabricante). • Problemas relacionados com sistemas COTS: – Falta de controle sobre a funcionalidade e o desempenho. – Problemas com interoperabilidade entre sistemas COTS – Nenhum controle sobre a evolução do sistema. – Suporte técnico dos fabricantes. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Projeto com Reuso – Desenvolvimento baseado em componentes • Características de componentes reutilizáveis: – O componente deve refletir abstrações estáveis de domínio, que são conceitos fundamentais no domínio de aplicações, as quais se modificam pouco. – O componente deve ocultar a maneira como seu estado é representado e deve fornecer operações que permitam que o estado seja acessado e atualizado. – O componente deve ser tão independente como possível. – Todas as exceções devem ser parte da interface do componente. Os componentes não devem manipular as próprias exceções uma vez que diferentes aplicações terão diferentes requisitos para manipulação de exceções. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Engenharia de Software Projeto de Sistemas Distribuídos Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos • Em uma arquitetura de sistemas distribuídos o processamento das informações é distribuído entre vários servidores. • Atualmente há três tipos de sistema: – Sistemas Pessoais: projetados para executar em computadores pessoais. Ex. Editor de texto, planilhas de cálculo, sistemas gráficos. – Sistemas Embutidos: são projetados em um único processador ou em um grupo de processadores integrados. Ex. sistemas de controle de dispositivos domésticos. – Sistemas Distribuídos: o software é executado em um grupo de processadores fracamente integrados, que cooperam entre si conectados por uma rede. Ex. caixa eletrônico, site de compras. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos • Importantes características de um sistema distribuído: – Compartilhamento de recursos de hardware, software, impressora, arquivo, porém tudo gerenciado por um computador central. – Abertura de sistema, que diz até que ponto ele pode ser ampliado, adicionando-se novos recursos não proprietários a ele. Os sistemas distribuídos normalmente incluem hardware e software de diferentes fabricantes. – Controle de Concorrência: em um sistema distribuído vários processos podem operar ao mesmo tempo em computadores diferentes. – Escalabilidade : a capacidade do sistema de aumentar com o aumento de recursos. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos • Importantes características de um sistema distribuído: – Transparência: o usuário não necessita saber da natureza distribuída do sistema. • Os diferentes componentes de um sistema Distribuído podem ser implementados em diferentes linguagens de programação e serem executados em processadores diferentes. • Modelo de dados e protocolo de comunicação podem ser inteiramente diferentes. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos • Para possibilitar a comunicação dos vários componentes distribuídos no sistema é necessário um software para gerenciar a comunicação entre os diferentes ambientes, chamado Middleware. • Middlewares são softwares para gerenciamento de comunicação com banco de dados, gerentes de transações, conversores de dados e controladores de comunicação. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos • Arquitetura Cliente – Servidor – Em uma arquitetura Cliente-Servidor um conjunto de serviços é fornecido por servidores a um conjunto de clientes que utilizam este serviço. – Os clientes devem estar cientes que os servidores estão disponíveis, porém não sabem da existências dos demais clientes. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos (Cliente-Servidor) • Aspectos de um cliente sistema distribuído ClienteServidor – Clientes e Servidores são diferentes – Clientes recebem serviços dos servidores e não de outros clientes. – Servidores podem atuar como clientes solicitando serviço de outro servidor, porém nunca de outro cliente. – Os clientes devem saber dos serviços oferecidos pelos servidores. – Os clientes devem saber como contatar os servidores. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos (Cliente-Servidor) • Não necessariamente existe a proporção 1 processo – 1 processador, pois a arquitetura se refere a estrutura lógica e não física da execução do sistema. Cada parte pode estar sendo executada em servidores distintos. Sistema em 3 camadas Camada de Apresentação Camada de processamento da aplicação Camada Gerenciamento de Dados Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Responsável pela interface com o usuário Implementa a lógica Operações com o banco de dados. Arquitetura de Sistemas Distribuídos (Cliente-Servidor) • A arquitetura Cliente – Servidor mais simples é a de 2 camadas: – Modelo Cliente Magro: o processamento da aplicação fica todo no servidor, o cliente só é responsável por executar o software de apresentação. Apresentação Cliente Servidor Gerenciamento de dados e processamento da aplicação Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos (Cliente-Servidor) – Modelo Cliente Gordo: o servidor é responsável apenas pelo gerenciamento dos dados. O cliente impolementa a lógica da aplicação e as interações com o usuário. Apresentação e processamento de aplicações Cliente Servidor Gerenciamento de Dados Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos (Cliente-Servidor) • Desvantagens dos Modelos 2 camadas Cliente Magro Cliente Gordo Escalabilidade e Desempenho Precisa reinstalar o cliente a cada versão Atribui grande carga a rede. Problema de gerenciamento do sistema Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Arquitetura de Sistemas Distribuídos (Cliente-Servidor) • Modelo 3 camadas Cliente Cliente Cliente Cliente Cliente Não necessariamente em máquinas distintas Servidor Servidor Gerenciamento de Dados Processamento de Aplicações Interação HTTP Servidor de Banco de Dados Servidor Web Provisão de Serviço de Conta Consulta SQL Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho SQL Banco de Dados Da conta cliente Arquitetura de Sistemas Distribuídos • Arquitetura de Objetos Distribuídos • Nesta arquitetura os componentes fundamentais são objetos que fornecem em uma interface um conjunto de serviços. • Não há distinção entre cliente e servidor pois os objetos realizam requisições e dão retorno de operações entre si. • Os objetos podem ser distribuídos na rede em uma série de computadores que se comunicam entre si através de um Middleware. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho