Engenharia de Software II

Documentos relacionados
GRASP: PADRÕES PARA ATRIBUIÇÃO DE RESPONSABILIDADES. SSC 124 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

Diagrama de Comunicação. SSC 526 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

DIAGRAMA DE COMUNICAÇÃO

15/03/2018. Professor Ariel da Silva Dias Modelos de Processo de Software

Engenharia de Software: Uma Visão Geral. SSC Engenharia de Software I Profa. Dra. Elisa Yumi Nakagawa 2 o semestre de 2012

Engenharia de Software: Uma Visão Geral. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1 o semestre de 2017

Engenharia de Software: Uma Visão Geral. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1 o semestre de 2015

Engenharia de Software

Disciplina que reúne metodologias, métodos e ferramentas a serem utilizados, desde a percepção do problema até o momento em que o sistema

Padrões de Projeto de Software

Paradigmas da Engenharia de Software AULA PROF. ABRAHAO LOPES

Engenharia de Software Introdução

Introdução a Padrões, GRASP. Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Definições e ciclo de vida

ANÁLISE E PROJETO ORIENTADO A OBJETO (Parte 3)

PROJETO ARQUITETURAL PARTE II: PADRÕES DE PROJETO. Projeto de Programas PPR0001

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA ENGENHARIA DE SOFTWARE

Modelos de Processo de Software

Engenharia de Software I

Engenharia de Software

Processos de Desenvolvimento de Software. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 2

Modelos de Processo de Software. SSC Engenharia de Software 1 Profa. Dra. Elisa Yumi Nakagawa 2 o semestre de 2012

Processos de Software

Modelos de Processo de Software

GRASP. Nazareno Andrade (baseado em Hyggo Almeida e Jacques Sauvé)

Engenharia de Software II

INTRODUÇÃO A ENGENHARIA DE SOFTWARE

15/04/2013. Pensar Orientado a Objetos. Projeto Orientado a Objetos. Características de Objetos. Classe de Objetos. Comunicação entre Objetos

Creational Patterns Factory method

Introdução à Análise e Projeto de Sistemas

Ainda que muitos modelos sejam semelhantes entre os modelos de ciclo de vida, existem alguns aspectos que os diferenciam:

PDS. Aula 1.4 Modelos de Processo. Prof. Dr. Bruno Moreno


Desenvolvimento de Projetos

Bibliografia. Quais são os problemas? capacidade de construção. acompanha a demanda por novos programas. ameaçada por projetos ruins.

Princípios da Engenharia de Software aula 03

Engenharia de Software II

ENGENHARIA DE SOFTWARE. Aula 03 Processos de Software

Projeto Orientado a Objetos

INF1013 MODELAGEM DE SOFTWARE

CONCEITOS BÁSICOS E MODELO DE PROJETO

MODELOS DE PROCESSOS (PARTE 2)

Diagramas de Colaboração e Padrões GRASP

Fábricas de Software. Processos de Software. Fábricas de Software. Fábricas de Software 17/08/2010. Jorge Dias

MANUAL PARA DESENVOLVIMENTO DE SOFTWARE TRABALHO DE CONCLUSAO DE CURSO EM SISTEMAS DE INFORMAÇÃO

Padrões GRASP. Leonardo Gresta Paulino Murta

Engenharia de Software Simulado para a 1ª Avaliação Bimestral Professor: Danilo Giacobo - RESPOSTAS

Paradigmas de Software

Desenvolvimento de Software. Testes de Software. Tópicos da Aula. Onde estamos... Verificação x Validação. Testes de Software

Engenharia de Software

Engenharia de Software Processo de Desenvolvimento de Software

Processos de software

PROJETO DE ARQUITETURA (PARTE 2)

PDS. Aula 1.6 Modelos de Processo. Prof. Dr. Bruno Moreno

Engenharia de Software: Visão Geral

FORMULÁRIO DE REGISTRO DE PLANO DE CURSO 2013.I

Análise de Sistemas CONTEXTUALIZAÇÃO

INF014 Análise e Projeto de Sistemas Ciclos de vida e Processos de Software

Análise e Projeto Orientados por Objetos

Processos de Software

Engenharia de Domínio e Desenvolvimento Baseado em Componentes. Processo DBC-Arch-DE Apoio do Ambiente Odyssey no Processo Considerações Finais

Projeto de software Estrutura do software e arquitetura SWEBOK

Escolhendo um Modelo de Ciclo de Vida

Engenharia Software. Ení Berbert Camilo Contaiffer

Padrões de Projeto. Conteúdo. Objetivos

PROCESSO DE SOFTWARE

UNIVERSIDADE FEDERAL DO PARANÁ UFPR BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

Engenharia de Software. Prof. Me. Clodoaldo Brasilino

2

Verificação e Validação. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 22 Slide 1

Introdução à Engenharia de Software

Agenda TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ANÁLISE E PROJETO DE SISTEMAS. Aula 2 19/08/2012

Análise e Projeto Orientados a Objetos: Visibilidade Diagrama de Classe de Projeto

Prof. Ms. Ronaldo Martins da Costa

Introdução Diagrama de Classes Diagrama de Seqüência Diagrama de Atividades. Diagramas UML. Classe, Seqüência e Atividades. Marcio E. F.

Reuso de Software Aula Maio 2012

PCS3413 Engenharia de Software e Banco de Dados

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

Processos de Software

Processo de Desenvolvimento. Edjandir Corrêa Costa

INF011 Padrões de Projeto. 05 Factory Method

PROCESSOS DE SOFTWARE

DESENVOLVIMENTO BASEADO EM COMPONENTES

PROJETO DE ARQUITETURA

Engenharia de Software I Processos de desenvolvimento de SW. profa. Denise Neves

Análise de sistemas. Engenharia de Requisitos

FUNDAMENTOS DE ENGENHARIA DE SOFTWARE. Professor: Paulo Vencio

Introdução à Ciência da Computação

Engenharia de Software

Manutenção de Software. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1º semestre de 2015

UML 2.0 Método, Linguagem e Ferramenta. Prof. Cesar Augusto Tacla

CAPÍTULO 1 O AMBIENTE DE DESENVOLVIMENTO DE SISTEMAS. Tereza Gonçalves Kirner

RUP Unified Process. Profª Jocelma Rios

Processos de Software by Pearson Education Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 4 Slide 1

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

Transcrição:

Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Engenharia de Software II Aula 01 (rogerio@fct.unesp.br) Bibliografia Básica PRESSMAN, R. S. Engenharia de Software: uma abordagem profissional, 7ª Edição, McGraw-Hill- Bookman, Porto Alegre, 2011. SOMMERVILLE, I. Engenharia de software, 9ª Edição, Ed. Pearson Prentice Hall, São Paulo, 2011. PETERS, J.F., PEDRYCZ, W. Engenharia de software: teoria e prática, Editora Campus, Rio de Janeiro, 2001. PFLEEGER, S. L., Engenharia de Software, Teoria e Prática. Pearson Brasil, 2004. 2 1

Avaliação As notas de todas as atividades entre 0 (zero) e 10,0 (dez) serão atribuídas individualmente, mesmo em atividades em grupo; A média final será calculada da seguinte maneira: MA = (NP1 + 2*NP2)/3 Mt = (NT1 + NT2 +...+ NTn) / n MT = (8 * NPJ + 2 * Mt) Média Final: MF = (8*MA + 2*MT)/10 SE E SOMENTE SE (MA>=5 E MT>=5) Caso contrário (MA<5 OU MT<5) MF = Menor Nota (MA ou MT) Onde: MF = Média Final. MA = Média de Provas Mt = Média de Trabalho (exercícios e atividades ao longo da disciplina) NPJ = Nota Projeto MT = Média final dos trabalhos (parte prática) Caso o aluno não obtenha a nota mínima para aprovação, será aplicado o Regime Especial de Recuperação 4 3 Tópicos da Disciplina Gerenciamento de projetos de software Gerenciamento de riscos Gerenciamento de times Qualidade de software 2

Metodologia Aulas expositivas teórico-práticas; Exercícios práticos; Projetos individuais e/ou em grupo; Trabalhos teóricos sobre tópicos abordados e relacionados 7 5 Abordagem Prática Vantagens Mão na massa Prática Fixação Problemas potenciais Falta de comprometimento dos alunos Dependência inter-grupos Importante a responsabilidade e consideração dos grupos com os colegas O sucesso depende de vocês! 3

Engenharia de Software PROCESSO DE SOFTWARE A aplicação de uma abordagem sistemática, disciplinada e possível de ser medida para o desenvolvimento, operação e manutenção do software (IEEE) 8 Qualidade de Software Usuário Definição Desenvolvedor Organização requisitos de software produto Avaliação requisitos atendidos PROCESSO DE SOFTWARE Processo de Desenvolvimento SOFTWARE PRODUTO 9 SOFTWARE COM QUALIDADE 4

O Processo de Software Abrange um conjunto de três elementos fundamentais: Métodos, Ferramentas e Procedimentos para projetar, construir e manter grandes sistemas de software de forma profissional 10 O Processo de Software MÉTODOS: proporcionam os detalhes de como fazer para construir o software Planejamento e estimativa de projeto Análise de requisitos de software e de sistemas Projeto da estrutura de dados Algoritmo de processamento Codificação Teste Manutenção 11 5

O Processo de Software FERRAMENTAS: dão suporte automatizado aos métodos. Existem atualmente ferramentas para sustentar cada um dos métodos Quando as ferramentas são integradas, é estabelecido um sistema de suporte ao desenvolvimento de software chamado CASE - Computer Aided Software Engineering 12 O Processo de Software PROCEDIMENTOS: constituem o elo de ligação entre os métodos e ferramentas Seqüência em que os métodos devem ser aplicados Produtos que se exige que sejam entregues Controles que ajudam assegurar a qualidade e coordenar as alterações Marcos de referência que possibilitam administrar o progresso do software. 13 6

Fases Genéricas dos Modelos de Processo de SOFTWARE Independentemente da natureza do projeto e aplicação os modelos de processo de software possuem: fase de definição fase de desenvolvimento fase de manutenção atividades de apoio 14 15 Fase de Definição do Processo de Software focaliza "o que" será desenvolvido que informação vai ser processada que função e desempenho são desejados que comportamento pode ser esperado do sistema que interfaces vão ser estabelecidas que restrições de projeto existem que critérios de validação são exigidos para definir um sistema bem sucedido que tarefas serão realizadas 7

Fase de Definição do Processo de Software focaliza "o que" será desenvolvido que informação vai ser processada três tarefas principais ocorrem de alguma forma: que função e desempenho são desejados que comportamento pode ser esperado do sistema engenharia de sistemas que interfaces vão ser estabelecidas planejamento do projeto de software que restrições de projeto existem que critérios de análise validação de requisitos são exigidos para definir um sistema bem sucedido 16 Fase de Desenvolvimento do Processo de Software Focaliza "como" o software será desenvolvido como os dados vão ser estruturados como a função vai ser implementada como uma arquitetura de software como os detalhes procedimentais vão ser implementados como as interfaces vão ser caracterizadas como o projeto será traduzido em uma linguagem de programação como os testes serão efetuados 17 8

Fase de Desenvolvimento do Processo de Software Focaliza "como" o software será desenvolvido como os dados vão ser estruturados três tarefas técnicas específicas deverão como a função vai ser implementada como uma arquitetura de software ocorrer sempre: projeto de software como os detalhes procedimentais vão ser implementados geração de código como as interfaces vão ser caracterizadas Inspeção e teste de software como o projeto será traduzido em uma linguagem de programação como os testes serão efetuados 18 Fase de Manutenção do Processo de Software focaliza as "mudanças" que ocorrerão depois que o software for liberado para uso operacional A fase de manutenção reaplica os passos das fases de definição e desenvolvimento, mas faz isso no contexto de um software existente. 19 9

Fase de Manutenção do Processo de Software focaliza as "mudanças" que ocorrerão depois que o software for liberado para uso operacional As mudanças estão associadas com correção de erros/defeitos adaptações exigidas conforme o ambiente do software evolui mudanças devido a melhoramentos ocorridos por alterações nos requisitos dos clientes A fase de manutenção reaplica os passos das fases de definição e desenvolvimento, mas faz isso no contexto de um software existente 20 Atividades de Apoio ao Processo de Software As três fases genéricas do processo de software são complementadas por uma série de atividades de apoio. As atividades de apoio são aplicadas durante toda a engenharia do software 21 10

Atividades de Apoio ao Processo de Software As três fases genéricas do processo de software são complementadas por uma série de atividades de Atividades apoio. típicas nessa categoria são: Controle As atividades e Acompanhamento de apoio são do aplicadas Projeto durante de Software toda a Revisões engenharia Técnicas do software Formais Garantia de Qualidade de Software Gerenciamento de Configuração de Software Preparação e Produção de Documentos Gerenciamento de Reusabilidade Medidas 22 Modelos de Processo de Software Existem vários modelos de processo de software (ou paradigmas de engenharia de software) Cada um representa uma tentativa de colocar ordem em uma atividade inerentemente caótica Pode-se citar os seguintes modelos de processo de software 23 11

Modelos de Processo de Software O Modelo Seqüencial Linear também chamado Modelo Cascata O Modelo de Prototipação O Modelo RAD (Rapid Application Development) Modelos Evolutivos de Processo de Software O Modelo Incremental O Modelo Espiral O Modelo de Montagem de Componentes O Modelo de Desenvolvimento Concorrente Modelo de Métodos Formais Técnicas de Quarta Geração 24 Modelos de Processo de Software O Modelo Seqüencial Linear também chamado Modelo Cascata O Paradigma de Prototipação O Modelo RAD (Rapid Application Development) Modelos Evolutivos de Processo de Software O Modelo Incremental O Modelo Espiral O Modelo de Montagem de Componentes O Modelo de Desenvolvimento Concorrente Modelos de Métodos Formais Técnicas de Quarta Geração 25 12

O Modelo Cascata modelo mais antigo e o mais amplamente usado da engenharia de software modelado em função do ciclo da engenharia convencional requer uma abordagem sistemática, seqüencial ao desenvolvimento de software o resultado de uma fase se constitui na entrada da outra 26 O Modelo Cascata Engenharia de Sistemas Análise de Requisitos Projeto Codificação Testes Manutenção 27 13

Método Larman: Planejar e Elaborar Planejar e Elaborar Construir Implantar 1. Definir Plano Inicial 2. Criar Relatório de Investigação Preliminar 3. Definir Requisitos a ongoing b opcional c adiável d ordem variada 4. Registrar Termos no Glossário a 7. Definir Modelo Conceitual Inicial c 5. Implementar Protótipo bd 8. Definir Arquitetura Inicial do Sistema acd 6. Definir Casos de Uso (Alto Nível e Essenciais) 9. Aperfeiçoar (Refinar) Plano 28 Método Larman Planejar e Elaborar Construir Implantar 1. Definir Plano Inicial 2. Criar Relatório de Investigação Preliminar Engenharia de Requisitos 3. Definir Requisitos 4. Registrar Termos no Glossário 5. Implementar Protótipo 6. Definir Casos de Uso (Alto Nível e Essenciais) 29 7. Definir Modelo Conceitual Inicial 8. Definir Arquitetura Inicial do Sistema 9. Aperfeiçoar (Refinar) Plano 14

Desenvolvimento Iterativo Planejar e elaborar Construir Instalar Ciclo de Desenvolvimento 1 Ciclo de Desenvolvimento 2 Refinar Plano Sincronizar Artefatos Analisar Projetar Construir Testar 30 Método Larman Refinar Plano Sincronizar artefatos Analisar Projetar Construir Testar 1. Definir Casos de Uso Essenciais 4. Refinar Glossário 2. Refinar Diagramas de Casos de Uso 3. Refinar o Modelo Conceitual 5. Definir Diagramas de Seqüência do Sistema 31 6. Definir Contratos de Operação 7. Definir Diagramas de Estado 15

Método Larman Refinar Plano Sincronizar artefatos Analisar Projetar Construir Testar 1. Definir Casos de Uso Essenciais 4. Refinar Glossário 2. Refinar Diagramas de Casos de Uso 3. Refinar o Modelo Conceitual 5. Definir Diagramas de Seqüência do Sistema 32 6. Definir Contratos de Operação 7. Definir Diagramas de Estado Método Larman Refinar Plano Sincronizar artefatos Analisar Projetar Construir Testar 1. Definir Casos de Uso Essenciais 4. Refinar Glossário 2. Refinar Diagramas de Casos de Uso 3. Refinar o Modelo Conceitual 5. Definir Diagramas de Seqüência do Sistema 33 6. Definir Contratos de Operação 7. Definir Diagramas de Estado 16

Desenvolvimento Iterativo Planejar e elaborar Construir Instalar Refinar Plano Ciclo de Desenvolvimento 1 Sincronizar Artefatos Ciclo de Desenvolvimento 2 Analisar Projetar Construir Testar Próximo passo... 34 Atividades da Fase Projetar Refinar Plano Sincronizar artefatos Analisar Projetar Construir Testar 35 1. Definir Casos de Uso Reais 3. Refinar a arquitetura do sistema 5. Definir Diagramas de Classes de Projeto 2. Definir Relatórios, IU e Storyboards 4. Definir Diagramas de Interação 6. Definir o Esquema Do Banco de Dados 17

Refinar Plano Atividades da Fase Projetar Sincronizar artefatos Analisar Projetar Construir Testar 1. Definir Casos de Uso Reais 3. Refinar a arquitetura do sistema 5. Definir Diagramas de Classes de Projeto 2. Definir Relatórios, IU e Storyboards 4. Definir Diagramas de Interação 6. Definir o Esquema Do Banco de Dados 36 Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Padrões de Projeto (revisão) Uma breve introdução e GRASP 18

Padrões Desenvolvedores de software experientes criaram um repertório de princípios gerais e boas soluções para guiar a construção de softwares Essas soluções foram descritas em um formato padronizado (nome, problema, solução) e podem ser usadas em outros contextos 38 Padrões Padrões usualmente não contêm novas idéias organizam conhecimentos e princípios existentes, testados e consagrados Padrão é uma descrição nomeada de um problema e uma solução, que pode ser aplicado em novos contextos 39 19

Padrões GRASP GRASP = General Responsibility Assignment Software Patterns Descrevem princípios fundamentais de atribuição de responsabilidade a objetos Alguns padrões GRASP principais: Especialista (Expert) Criador (Creator) Coesão alta (High Cohesion) Acoplamento fraco (Low Coupling) Controlador (Controller) 40 Controlador Problema: Quem deve ser responsável por tratar um evento do sistema? Solução: A responsabilidade de receber ou tratar as mensagens de eventos (operações) do sistema pode ser atribuída uma classe que: represente todo o sistema, um dispositivo ou um subsistema chamado de controlador fachada - OU represente um cenário de um caso de uso dentro do qual ocorra o evento TratadorDe<NomeDoCasoDeUso>, ControladorDe<NomeDoCasoDeUso> 41 20

Controlador Exemplo: quem vai tratar os eventos do sistema TPV? Comprar Itens :Sistema :Caixa iniciarnovavenda( ) entraritem(cup, quantidade) descrição item, total *[mais itens] terminarvenda() fazerpagamento(quantia) troco, recibo 42 Exemplo ID Item Quantidade :Caixa Entrar Item açãoexecutada(eventodaação) Camada de Interface Camada do Domínio :CWindow :???? entraritem(itemid, quantidade) 43 21

Exemplo: Opções de Controlador todo o sistema (controlador fachada): TPV entraritem( ) :TPV um tratador artificial do caso de uso: ControladorDeComprarItem entraritem( ) :ControladorDe ComprarItem 44 Discussão: Controladores Fachada Um controlador fachada deve ser um objeto (do domínio) que sugira uma cobertura sobre outras camadas e que seja o ponto principal para as chamadas provenientes da interface com o usuário ou de outros sistemas pode ser uma abstração de uma entidade física ex: TPV pode ser um conceito que represente o sistema ex: sistematpv São adequados quando não há uma quantidade muito grande de eventos de sistema Não é possível redirecionar mensagens do sistema para controladores alternativos (ex: outros subsistemas ) 45 22

Discussão :Controladores de Casos de Uso Deve existir um controlador diferente para cada caso de uso Não é um objeto do domínio, e sim uma construção artificial para dar suporte ao sistema. Ex: ControladorDeComprarItem, ControladorDeDevolução Pode ser uma alternativa se a escolha de controladores fachada deixar a classe controladora com alto acoplamento e/ou baixa coesão (controlador inchado por excesso de responsabilidade) É uma boa alternativa quando existem muitos eventos envolvendo diferentes processos. 46 Controladores inchados Classe controladora mal projetada - inchada coesão baixa falta de foco e tratamentos de muitas responsabilidades Sinais de inchaço: uma única classe controladora tratando todos os eventos, que são muitos. Comum com controladores fachada o próprio controlador executa as tarefas necessárias para atender o evento, sem delegar para outras classes (coesão alta, não especialista) controlador tem muitos atributos e mantém informação significativa sobre o domínio, ou duplica informações existentes em outros lugares 47 23

Controlador Curas para controladores inchados acrescentar mais controladores misturar controladores fachada e de casos de uso delegar responsabilidades Corolário: objetos de interface (como objetos janela ) e da camada de apresentação não devem ter a responsabilidade de tratar eventos do sistema 48 Controlador Benefícios: aumento das possibilidades de reutilização de classes e do uso de interfaces plugáveis. conhecimento do estado do caso de uso controlador pode armazenar estado do caso de uso, garantindo a seqüência correta de execução de operações 49 24

Exemplo ID Item Quantidade :Caixa Camada de Interface Entrar Item açãoexecutada(eventodaação) :CWindow entraritem(itemid, quantidade) Camada do Domínio :TPV :Venda 50 criaritemlinhavenda (itemid, quantidade) Especialista Problema: qual é o princípio mais básico de atribuição de responsabilidades a objetos? Solução: Atribuir responsabilidade ao especialista da informação. Exemplo: no sistema TPV, alguma classe precisa conhecer o total geral de uma venda 51 25

Exemplo Venda conhece o total da venda ItemLinhaVenda conhece o subtotal da linha EspecificaçãoProduto conhece o preço do produto. 52 t:=obtertotal( ) :Venda 1*: st:=obtersubtotal( ) * :LinhadeItemdeVenda 1.1: p:=obterpreço( ) 53 :Especificaçãode Produto 26

Especialista Discussão É o padrão mais utilizado Fazê-lo eu mesmo objetos fazem coisas relacionadas à informação que têm Lembrar que existem especialistas parciais que colaboram numa tarefa informação espalhada comunicação via mensagens Tem uma analogia no mundo real 54 Especialista 55 Benefícios: Mantém encapsulamento favorece o acoplamento fraco O comportamento fica distribuído entre as classes que têm a informação necessária (classes leves ) favorece alta coesão Contra-indicações contra indicado quando aumenta acoplamento e reduz coesão Ex: quem é responsável por salvar uma Venda no banco de dados? 27

Criador Problema: Quem deveria ser responsável pela criação de uma nova instância de alguma classe? Solução: atribua à classe B a responsabilidade de criar uma nova instância da classe A se uma das seguintes condições for verdadeira: B agrega objetos de A B contém objetos de A B registra objetos de A B usa objetos de A B tem os valores iniciais que serão passados para objetos de A, quando de sua criação 56 Criador Exemplo: No sistema TPV, quem é responsável pela criação de uma instância de ItemLinhaVenda? criaritemlinha (quantidade) Venda contém vários itens de linha de venda :Venda 1:criar(quantidade) :ItemLinhaVenda 57 28

Criador Discussão objetivo do padrão: definir como criador o objeto que precise ser conectado ao objeto criado em algum evento escolha adequada favorece acoplamento fraco objetos agregados, contêineres e registradores são bons candidatos à responsabilidade de criar outros objetos algumas vezes o candidato a criador é o objeto que conhece os dados iniciais do objeto a ser criado Ex: Venda e Pagamento 58 Exemplo fazerpagamento(quantia) :Venda Venda possui dados iniciais do pagamento 1:criar(quantia) :Pagamento 59 29

Criador Benefícios favorece o acoplamento fraco provavelmente o acoplamento não é aumentado porque o objeto criado provavelmente já é visível para o objeto criador, devido às associações existentes que motivaram sua escolha como criador 60 Acoplamento Acoplamento: dependência entre elementos (classes, subsistemas, ), normalmente resultante de colaboração para atender a uma responsabilidade O acoplamento mede o quanto um objeto está conectado a, tem conhecimento de ou depende de outros objetos acoplamento fraco (ou baixo) um objeto não depende de muitos outros acoplamento forte (ou alto) um objeto depende de muitos outros 61 30

Acoplamento Problemas do acoplamento alto: mudanças em classes interdependentes forçam mudanças locais dificulta a compreensão do objetivo de cada classe dificulta reutilização 62 Acoplamento Fraco Problema: como favorecer a baixa dependência e aumentar a reutilização? Solução: Atribuir responsabilidade de maneira que o acoplamento permaneça baixo. Exemplo: No sistema TPV, suponha que queremos criar uma instância de pagamento e associá-la à venda. Qual classe deve ser responsável por essa tarefa? 63 31

Qual? Projeto 1: segundo padrão Criador, responsabilidade atribuída ao TPV fazerpagamento( ) 1: criar( ) :TPV p:pagamento 2 : adicionarpagamento(p) Projeto 2: alternativa responsabilidade atribuída à Venda fazerpagamento( ) :TPV 1: fazer Pagamento( ) :Venda :Venda 1.1: criar( ) 64 :Pagamento Qual projeto é melhor? Qual dos projetos anteriores favorece o acoplamento fraco? em ambos os casos, Venda será acoplada a (terá conhecimento de) Pagamento projeto 1 acoplamento entre Pagamento e TPV projeto 2 não aumenta acoplamento PREFERÍVEL 65 32

Formas de Acoplamento Um objeto tem um atributo que referencia um objeto de outra classe Um objeto tem um método que referencia um objeto de outra classe parâmetro, variável local ou retorno Um objeto invoca os serviços de um objeto de outra classe Uma classe é subclasse de outra, direta ou indiretamente 66 Acoplamento Fraco Discussão: Acoplamento fraco classes mais independentes reduz impacto de mudanças favorece reuso de classes Considerado em conjunto com outros padrões Extremo de acoplamento fraco não é desejável fere princípios da tecnologia de objetos comunicação por mensagens projeto pobre: objetos inchados e complexos, responsáveis por muito trabalho baixa coesão 67 33

Acoplamento Fraco Discussão: dica: concentre-se em reduzir o acoplamento em pontos de evolução ou de alta instabilidade do sistema ex: cálculo de impostos terceirizados no sistema TPV Benefícios: classe são pouco afetadas por mudanças em outras partes classes são simples de entender isoladamente conveniente para reutilização 68 Coesão Coesão mede o quanto as responsabilidades de um elemento (classe, objeto, subsistema, ) são fortemente focalizadas e relacionadas Objeto com Coesão Alta objeto cujas responsabilidades são altamente relacionadas e que não executa um volume muito grande de trabalho Objeto com Coesão Baixa objeto que faz muitas coisas não relacionadas ou executa muitas tarefas difícil de compreender, reutilizar e manter constantemente afetadas por mudanças 69 34

Coesão Alta Problema: Como manter a complexidade sob controle? Solução: Atribuir responsabilidade de tal forma que a coesão permaneça alta. Exemplo (o mesmo para o acoplamento fraco): No sistema TPV, suponha que queremos criar uma instância de pagamento e associá-la à venda. Qual classe deve ser responsável por essa tarefa? 70 Exemplo Projeto 1: segundo padrão Criador, responsabilidade atribuída ao TPV fazerpagamento( ) :TPV 1: criar( ) 2 : adicionarpagamento(p) p:pagamento :Venda O TPV toma parte na responsabilidade de fazer pagamento. Neste exemplo, isso seria aceitável, mas o que aconteceria se houvessem 50 mensagens recebidas por TPV? 71 35

Exemplo Projeto 2: alternativa responsabilidade atribuída à Venda fazerpagamento( ) :TPV 1: fazer Pagamento( ) 1.1: criar( ) :Venda :Pagamento Esta solução favorece uma coesão mais alta em TPV e também um acoplamento mais fraco. Portanto, projeto 2 é preferível. 72 Coesão Alta Discussão: Coesão alta, assim como Acoplamento Fraco, são princípios que devem ser considerados no projeto de objetos má coesão traz acoplamento ruim e vice-versa regra prática: classe com coesão alta tem um número relativamente pequeno de métodos, com funcionalidades relacionadas, e não executa muito trabalho analogia com mundo real ex: pessoas que assume muitas responsabilidades não associadas podem tornar-se (e normalmente tornam-se) ineficientes 73 36

Coesão Alta Benefícios mais clareza e facilidade de compreensão no projeto simplificação de manutenção e acréscimo de funcionalidade/melhorias favorecimento do acoplamento fraco aumento no potencial de reutilização classe altamente coesa pode ser usada para uma finalidade bastante específica 74 Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Próximos Passos... 37

Tipos de Padrões 76 Factory Method Classificação: Criacional. Conhecido como: Virtual Constructor Propósito: Definir uma interface ou classe abstrata para a criação de um objeto, permitindo decidir qual das implementações ou subclasses devem ser instanciadas; deixa uma classe deferir instanciação para subclasses [Gamma et al, 1994]. Retornar uma instância dentre muitas possíveis classes, dependendo dos dados providos a ele [Destro, 2004]. (dependendo do parâmetro passado na sua invocação) 77 38

Factory Method Motivação: Útil para se construir objetos individuais, para um propósito específico, sem que a construção requeira conhecimento das classes específicas sendo instanciadas. Uma classe de abstração é criada, contendo um método em que decide qual das opções de classe retornar. Então, apenas este método é invocado, sem conhecer a classe que será retornada por ele [Destro, 2004]. Por isso, este padrão é chamado de Factory Method ( método-fábrica ): um método é responsável pela fabricação de um objeto [Gamma et al, 1994]. 78 Factory Method Aplicabilidade: Quando uma classe não pode antecipar ou conhecer a classe dos objetos que deve criar; Quando uma classe quer suas subclasses para especificar os objetos que cria; Quando classes delegam responsabilidade à alguma das várias subclasses ajudantes, e deseja-se localizar qual é a subclasse ajudante acessada. [Gamma et al, 1994] 79 39

Factory Method Estrutura: Onde: Super : é a classe abstrata (ou superclasse) dos objetos que o método-fábrica cria. Sub [n]: classes que vão herdar (ou implementar) a classe abstrata (ou interface) Super. Representam as diferentes classes sobre as quais se deve decidir instanciar. Factory : nesta classe reside o método-fábrica, que avalia o parâmetro passado na sua invocação, para retornar um determinado objeto do tipo Super. 80 Factory Method Conseqüências Vantagens: Dá maior flexibilidade para as classes. Factory Methods eliminam a necessidade de colocar classes específicas da aplicação no código: Sendo um exemplo de aplicação: 81 O código só lida com a interface Produto O código pode portanto funcionar com qualquer classe ProdutoConcreto 40

Factory Method Conseqüências Desvantagens: Em alguns casos, pode ser criada uma relação superclasse-subclasse para a criação de classes que suportam o método-fábrica, e de acordo com a classe a ser criada, uma das várias subclasses podem sobrescrever o método-fábrica, a fim de conectar hierarquias de classes paralelas e fornecer maior portabilidade [Gamma et al, 1994]. 82 Factory Method Implementação 1: Onde: Main: é a classe Java que inicializa a execução do aplicativo. O "método-fábrica" de CarroFactory é invocado (é um método estático, o que dispensa a instanciação da classe à qual pertence). A opção escolhida em CarroFactory é passada como parâmetro na invocação do "método-fábrica", o que lhe permite identificar qual subclasse de Carro deve ser instanciada (Gol, Golf, Vectra ou Ômega), contendo as informações a serem consultadas (por exemplo, preço). 83 41

Factory Method Usos Conhecidos Factory Methods são comumente usados em toolkits e frameworks 84 Factory Method Resumo Factory Method é apenas um apelido para um método que instancia objetos. Como uma fábrica, o trabalho do Factory Method é criar objetos. Factory Method é útil quando você não está certo de que implementação concreta da classe instanciar. Você pode deixar esses detalhes com o Factory Method. 85 42

Contextualizando ISO 12207: Estrutura Processos Fundamentais Aquisição Processos de Apoio Documentação Fornecimento Garantia de Qualidade Desenvolvimento Operação Manutenção Verificação Validação Revisão Conjunta Auditoria Resolução de Problemas Adaptação Processos Organizacionais 86 Gerência Melhoria Infra-estrutura Treinamento 87 Abordagem Prática Separação em equipes Mesma equipe assume papéis distintos em atividades do desenvolvimento Exemplo: Equipes E1, E2, E3 e E4 Projetos P1 E1 gerencia as atividades, planejando as tarefas e controlando seus resultados. E2 é responsável por atividades de SQA. E3 é responsável pela Análise e Projeto. E E4 é responsável pela implementação. 43

88 Conteúdo: Parte 1: Gerenciamento & Qualidade Plano de Projeto - aspectos gerais Parte 2: Plano de Projeto - Métricas e Estimativas Parte 3: Plano de Projeto - Cronograma e Controle Parte 4: Exercícios de Fixação 1 2 3 4 5 Atividade Definir os Grupos/Equipes 89 44

Distribuição de atividades Projetos Grupos Equipes Identificação P1 P2 P3 P4 1 11 Gerência SQA An&Prj Codifica 1 2 12 Codifica Gerência SQA An&Prj 8 13 An&Prj Codifica Gerência SQA 4 14 SQA An&Prj Codifica Gerência 13 21 Gerência SQA An&Prj Codifica 2 14 22 Codifica Gerência SQA An&Prj 10 23 An&Prj Codifica Gerência SQA 7 24 SQA An&Prj Codifica Gerência 12 31 Gerência SQA An&Prj Codifica 3 11 32 Codifica Gerência SQA An&Prj 6 33 An&Prj Codifica Gerência SQA 3 34 SQA An&Prj Codifica Gerência 90 45