Introdução ao Design João Arthur e Guilherme Germoglio Coordenação de Pós-graduação em Informática - COPIN 16/10/2008 João Arthur e Guilherme Germoglio 1/ 33
Roteiro 1 Introdução Objetivos 2 Definições Design como Processo Design como Produto Benefícios Observações 3 O Processo Técnicas de design Design de baixo nível X Design de alto nível 4 João Arthur e Guilherme Germoglio 2/ 33
Objetivos Objetivos Introduzir os conceitos de design Apresentar design como processo e como produto Diferenciar design de baixo nível de design de alto nível Apresentar as principais técnicas de design João Arthur e Guilherme Germoglio 3/ 33
Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Duas visões (Taylor e Van der Hoek [5]): Nome Verbo Stroustrup [4]: Design is the end product of the design process. João Arthur e Guilherme Germoglio 4/ 33
Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Design surge de uma necessidade: ministrar uma aula sobre design Problema: Guiga está sobrecarregado Solução: Terceirizar O que o cliente (Guiga) quer: Uma aula bem dada sobre o que é design e o que é design de software. João Arthur e Guilherme Germoglio 5/ 33
Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Design surge de uma necessidade: ministrar uma aula sobre design Problema: Guiga está sobrecarregado Solução: Terceirizar O que o cliente (Guiga) quer: Uma aula bem dada sobre o que é design e o que é design de software. João Arthur e Guilherme Germoglio 5/ 33
Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Design surge de uma necessidade: ministrar uma aula sobre design Problema: Guiga está sobrecarregado Solução: Terceirizar O que o cliente (Guiga) quer: Uma aula bem dada sobre o que é design e o que é design de software. João Arthur e Guilherme Germoglio 5/ 33
Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Design surge de uma necessidade: ministrar uma aula sobre design Problema: Guiga está sobrecarregado Solução: Terceirizar O que o cliente (Guiga) quer: Uma aula bem dada sobre o que é design e o que é design de software. João Arthur e Guilherme Germoglio 5/ 33
Por que projetar? Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Por que não fazer a aula diretamente? Risco Temos que projetar! Temos que avaliar o projeto! João Arthur e Guilherme Germoglio 6/ 33
Por que projetar? Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Por que não fazer a aula diretamente? Risco Temos que projetar! Temos que avaliar o projeto! João Arthur e Guilherme Germoglio 6/ 33
Por que projetar? Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Por que não fazer a aula diretamente? Risco Temos que projetar! Temos que avaliar o projeto! João Arthur e Guilherme Germoglio 6/ 33
Requisitos Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações 40 alunos Mensagens a serem transmitidas (conteúdo) Duração de no máximo 2 horas João Arthur e Guilherme Germoglio 7/ 33
Requisitos Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações 40 alunos Mensagens a serem transmitidas (conteúdo) Duração de no máximo 2 horas João Arthur e Guilherme Germoglio 7/ 33
Requisitos Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações 40 alunos Mensagens a serem transmitidas (conteúdo) Duração de no máximo 2 horas João Arthur e Guilherme Germoglio 7/ 33
Requisitos Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações 40 alunos Mensagens a serem transmitidas (conteúdo) Duração de no máximo 2 horas João Arthur e Guilherme Germoglio 7/ 33
Possíveis Soluções Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Alternativas para resolução do problema: Aula ao ar livre Aula prática Aula virtual Aula tradicional João Arthur e Guilherme Germoglio 8/ 33
Análise das possíveis soluções Definições Design como Processo Design como Produto Por que Projetar? Observações Analisar restrições CD-105 ou Hattori Tempo Conhecimento interno sobre o assunto (viabilidade) Custo Nível dos alunos Escolher solução Escolher representação João Arthur e Guilherme Germoglio 9/ 33
Resultado Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Template Slides: Seções Relação entre as Seções Fontes Figuras Mensagens Exemplos Metodologia a ser utilizada João Arthur e Guilherme Germoglio 10/ 33
Benefícios Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Avaliação prévia Facilita comunicação Facilita implementação João Arthur e Guilherme Germoglio 11/ 33
Observações Introdução Definições Design como Processo Design como Produto Por que Projetar? Observações Embora seja mais barato que fazer o artefato, planejar não é barato. O resultado final não é a aula, mas a sua descrição (plano de aula)! João Arthur e Guilherme Germoglio 12/ 33
O Processo Técnicas de design Baixo nível X Alto nível Software Design O foco é software Geração de modelos Diretrizes para implementação João Arthur e Guilherme Germoglio 13/ 33
O Processo Técnicas de design Baixo nível X Alto nível Caraterísticas de Software Brooks [1] identifica quatro propriedades: Complexidade: muitos estados durante a execução Conformidade: estar em conformidade com padrões, hardware, software e outros componentes Changeability: sofrer constantes mudanças Invisibilidade: não há representação visual João Arthur e Guilherme Germoglio 14/ 33
O Processo Técnicas de design Baixo nível X Alto nível Como um nome Aspectos de representação do sistema [2]: Estrutura do software (hierarquia, subprogramas etc) Algoritmos Estrutura de pacotes (organização das unidades de compilação) Interação entre os módulos João Arthur e Guilherme Germoglio 15/ 33
O Processo Técnicas de design Baixo nível X Alto nível Como uma atividade João Arthur e Guilherme Germoglio 16/ 33
O Processo Técnicas de design Baixo nível X Alto nível Como uma atividade Belady [3]: Diversificação: Geração das alternativas Convergência: Seleção das alternativas que satisfazem objetivos e restrições João Arthur e Guilherme Germoglio 17/ 33
O Processo Técnicas de design Baixo nível X Alto nível Fases Objetivos Restrições Alternativas Representações Soluções João Arthur e Guilherme Germoglio 18/ 33
O Processo Técnicas de design Baixo nível X Alto nível Técnicas Diretrizes Guias Noções de boas práticas que podem resultar em um bom design Design Patterns João Arthur e Guilherme Germoglio 19/ 33
O Processo Técnicas de design Baixo nível X Alto nível Abstração Eliminar complexidade Focar no que realmente importa Interfaces e camadas Requer habilidade e experiência. Quanto abstrair? Benefícios: facilita comunicação, análise e entedimento João Arthur e Guilherme Germoglio 20/ 33
O Processo Técnicas de design Baixo nível X Alto nível Ocultação de Informação Encapsulamento Esconder detalhes de implementação Benefícios: redução de acoplamento João Arthur e Guilherme Germoglio 21/ 33
O Processo Técnicas de design Baixo nível X Alto nível Modularização Decompor em módulos o sistema Packaging Benefícios: facilita implementação, entendimento, diminui acoplamento etc João Arthur e Guilherme Germoglio 22/ 33
O Processo Técnicas de design Baixo nível X Alto nível Separação de interesses Modularizar interesses Exemplo clássico: Log João Arthur e Guilherme Germoglio 23/ 33
O Processo Técnicas de design Baixo nível X Alto nível Acoplamento e Coesão Acoplamento: entre módulos Evitar Difícil de entender Difícil de mudar Indício para melhorar a modularização Coesão: Quão relacionada está a classe com sua responsabilidade? João Arthur e Guilherme Germoglio 24/ 33
O Processo Técnicas de design Baixo nível X Alto nível Coincidental João Arthur e Guilherme Germoglio 25/ 33
O Processo Técnicas de design Baixo nível X Alto nível Lógica João Arthur e Guilherme Germoglio 26/ 33
O Processo Técnicas de design Baixo nível X Alto nível Temporal João Arthur e Guilherme Germoglio 27/ 33
O Processo Técnicas de design Baixo nível X Alto nível Outros tipos Procedural: Tarefas que ocorrem em ordem (sozinhas não fazem sentido) Comunicação: Compartilhamento de dados Sequencial: compartilham dados de entrada e saída (pipe) Funcional: A melhor! Objetos representam um único conceito João Arthur e Guilherme Germoglio 28/ 33
O Processo Técnicas de design Baixo nível X Alto nível Separação entre política e implementação Um módulo deve lidar com política ou implementação Módulos de implementação somente devem ser responsáveis por executar algoritmos Benefícios: Facilita reuso e manutenção dos módulos de implementação Qual o padrão para esta técnica? João Arthur e Guilherme Germoglio 29/ 33
O Processo Técnicas de design Baixo nível X Alto nível Separação de interface e Implementação Contratos O Que? X Como? Benefícios: redução de acoplamento entre clientes e módulos João Arthur e Guilherme Germoglio 30/ 33
O Processo Técnicas de design Baixo nível X Alto nível Comparação Alto nível: Fase de refinamento da arquitetura Definição de módulos Interação entre os módulos Bibliotecas a serem utilizadas Paradigma de persistência Atendimento a requisitos de qualidade Baixo nível Definição dos objetos e suas responsibilidades Questões de implementação: concorrência, tratamento de falhas, definição de esquema de BD etc João Arthur e Guilherme Germoglio 31/ 33
O Processo Técnicas de design Baixo nível X Alto nível Quando acontece? David Budgen João Arthur e Guilherme Germoglio 32/ 33
Design é processo Design é descrição Projetar não é barato Exige experiência (boas e ruins) Reduz riscos João Arthur e Guilherme Germoglio 33/ 33
F. Brooks. No Silver Bullet: Essence and Accidents of Software Engineering. IEEE Computer, 20(4):10 19, 1987. D. Budgen. Software Design. Addison Wesley, 2003. L. Peters. In Forward to Software Design: Methods and Techniques, 1981. B. Stroustrup and A. Publishing. The C+ Programming Language. IBM SYSTEMS JOURNAL, 31(4), 1992. R. Taylor and A. van der Hoek. Software design and architecture: The once and future focus of software engineering. João Arthur e Guilherme Germoglio 33/ 33
Future of Software Engineering, 2007. João Arthur e Guilherme Germoglio 33/ 33