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
Download

Projeto de Software2 - fa7-trabalhos