Prévia do material em texto
28/02/2025 1 Fundamentos de Projeto 2 Objetivos • Princípios de Projeto: – abstração; – refinamento; – ocultamento da informação; – independência funcional; – modularidade; – coesão e – acoplamento. • Projeto Detalhado. • Critérios. • Implementação. 3 Princípios de Projeto de SW • Projeto: processo em que se aplicam várias técnicas e princípios a fim de definir um dispositivo, um processo ou um sistema com detalhes suficientes para permitir sua implementação. • Core do processo de desenvolvimento de software. 1 2 3 28/02/2025 2 4 Princípios de Projeto de SW (cont.) • Processo Iterativo: Inicialmente representado em nível alto de abstração, levado a maior detalhe com iterações e refinamentos. • Segmentado: – vários (sub-)projetos dentro de um único; – várias especialidades; – diversidade de conhecimento. 5 • Projeto de Arquitetura: definição de grandes componentes estruturais e relacionamentos; • Projeto de Dados: estruturação dos dados necessária à implementação; • Projeto de Interfaces: – internas - comunicação interna; – externas - entre sistemas; – usuário - com pessoas. • Projeto Procedimental: refinar e detalhar os procedimentos de relacionamento estrutural. Princípios de Projeto de SW (cont.) 6 Fluxo da Informação 4 5 6 28/02/2025 3 7 Conceitos • Abstração: início em nível próximo a análise, sendo reduzido a medida que se avança; • processo pelo qual identificamos os aspectos importantes de um fenômeno ignorando seus detalhes. • Refinamento: processo de elaboração, o projeto vai de níveis de abstração mais altos para menores; 8 Conceitos (cont.) • Ocultação de Informação: dados e procedimentos de um módulo / componente inacessível a outro; • Modularidade: deve estruturar o sistema como módulos/componentes coesos e fracamente acoplados; 9 • Independência Funcional: interações entre módulos minimizada; • o quanto o sistema é independente de particularidades de linguagens, das características do S.O. e domínio. • Critérios de qualidade: – coesão e – acoplamento. Conceitos (cont.) 7 8 9 28/02/2025 4 10 Fundamentos • Abstração – apresentação em diferentes níveis de detalhes: • procedimental. • dados. • Refinamento – processo de elaboração: • projeto top-down (passo a passo). 11 Fundamentos (cont.) • Modularidade – divisão em componentes nomeáveis e endereçáveis: • viabiliza administração; • conceitua tipos abstratos de dados. • Arquitetura – Referência a: • estrutura hierárquica de componentes (módulos); • estrutura de dados. 12 • Arquitetura (cont.) Fundamentos (cont.) 10 11 12 28/02/2025 5 13 • Arquitetura: diferentes estruturações Fundamentos (cont.) 14 • Hierarquia Fundamentos (cont.) 15 • Estrutura de Dados – representação do relacionamento lógico entre elementos de dados individuais. – tão importante quanto a arquitetura pois afeta o projeto procedimental final. Fundamentos (cont.) 13 14 15 28/02/2025 6 16 • Procedimento de Software – detalhes de processamento de cada módulo; – especifica: • processamento. • sequência de eventos. • pontos de decisão exatos. • operações representativas. • estrutura e / ou organização de dados. Fundamentos (cont.) 17 • Ocultamento de Informação – aspecto fundamental da modularidade; – critério que melhora a fase de teste; – facilita a manutenção do software; – módulos devem ter responsabilidades bem definidas e ser soberanos sobre as decisões de projeto que ensejam. Fundamentos (cont.) 18 Acoplamento • o quão "amarrado" uma parte do sistema é às outras partes. • o quão dependente uma parte do sistema é das estruturas internas das outras partes do sistema. • uma medida do quanto uma classe conhece do mundo à sua volta (O.O.). 16 17 18 28/02/2025 7 19 Acoplamento (cont.) • Baixo acoplamento: – facilita o entendimento do código; – facilita a manutenção do código; – minimiza efeitos colaterais, que um dano em um dado / módulo se propague; – facilita o teste / debug isolado. 20 Coesão • é uma medida da diversidade dos "tópicos" abordados por um módulo. • quanto menor, maior a sua coesão. • um módulo focado em um aspecto do sistema, é coeso. • sistemas onde os aspectos são difusos, são pouco flexíveis e dificultam extensões, modificações e reutilizações. • exemplos: classes, métodos, funções, etc. 21 Coesão (cont.) • Facilita o reuso: – simples utilização se necessário; – sem “extras” associados; • Facilita a manutenção: – sem duplicação de código; • Facilita o entendimento do código: – responsabilidades bem definidas; 19 20 21 28/02/2025 8 22 Encapsulamento • reforça a alta coesão e baixo acoplamento; • consiste em ocultar detalhes de implementação; • Interação por interfaces; • evitar o acesso público a atributos, baixando o acoplamento; • na prática, garante-se encapsulamento por: – atributos privados (private); – interface de métodos não-privado. 23 Modularidade • módulo: componente de sistema que fornece um ou mais serviços para outros módulos. • normalmente utiliza os serviços de outros módulos, não sendo portanto considerado um sistema independente. 24 Modularidade (cont.) • conceito fundamental para o projeto de sistemas complexos • em um desenvolvido de forma monolítica, o número de caminhos de controle, variáveis e a complexidade global tornariam sua compreensão praticamente impossível. 22 23 24 28/02/2025 9 25 • tomemos as funções C(x), complexidade de um problema, e E(x), esforço associado para resolver o problema. • dado dois problemas P1 e P2, observa-se: • se C(P1) > C(P2) então E(P1) > E(P2) Modularidade (cont.) 26 • simplificando: demora mais para se resolver um problema mais difícil. • Também temos que: • C(P1 + P2) > C(P1) + C(P2) – a complexidade de um problema que combine P1 e P2 é maior do que a complexidade percebida quando cada problema é considerado separadamente. • E(P1 + P2) > E(P1) + E(P2) – é mais fácil resolver um problema complexo quando ele é dividido em partes Modularidade (cont.) 27 Modularidade (cont.) 25 26 27 28/02/2025 10 28 Projeto Detalhado • Etapas: – checar pré-requisitos e pós-requisitos; – definir informação a ser ocultada, entradas, saídas e tratamento de erros; – projetar testes para os módulos; – analisar aspectos de eficiência; – pesquisar algoritmos e estruturas de dados; – escrever script em pseudolinguagem, através de refinamentos sucessivos; – analisar e projetar estruturas de dados; – fazer inspeção final. 29 Projeto Detalhado (cont.) • Revisão: – correção da tradução do projeto para a linguagem de programação; • por exemplo, relacionamentos, heranças e interfaces (UML) implementados da maneira correta. – correção das interfaces dos módulos projetados; • as operações estão corretas e documentadas corretamente. 30 • Revisão (cont.): – correção das máquinas de estado; • não possuem estados inatingíveis nem deadlocks (ciclos de estados sem saída). • estados e transições são completos e ortogonais (contemplam todas as situações possíveis sem intersecção). – correção da lógica do pseudocódigo; • condições são logicamente corretas e otimizadas Projeto Detalhado (cont.) 28 29 30 28/02/2025 11 31 Critérios de Projeto • exibir organização hierárquica que faça uso inteligente do controle entre os componentes de software. • modularidade, deve ser logicamente dividido em componentes que executem funções e subfunções específicas. • conter uma representação distinta e separável de dados e procedimentos. • módulos que apresentem características funcionais independentes 32 Critérios de Projeto (cont.) • interfaces que reduzam a complexidade de conexões entre os módulos e com o ambiente externo. • deve ser derivado usando-se um método capaz de permitir repetições e que seja orientado pelas informações obtidas durante a análise de requisitos de software. 33 Implementação • Codificação – transformar script em comentários de altonível; – preencher código abaixo de cada comentário derivado do pseudocódigo; – checar código quanto à correção lógica; – checar código quanto às regras de codificação; – fazer inspeção final. 31 32 33 28/02/2025 12 34 Implementação (cont.) • Revisão – correção da digitação; – correção sintática; – correção lógica; – inclui consistência com desenho detalhado; – obediência ao padrão de codificação; – qualidade e consistência dos comentários. 35 Implementação (cont.) • Finalização – checagem formal do desenho detalhado e código do módulo; – compilação dos componentes do módulo; – testes de unidade necessários. 36 Pontos Chave • abstração: ignore detalhes, foco no core. • refinamento: detalhamento. • ocultamento: módulos soberanos. • independência: não dependente de particularidades. • coesão: foco dos módulos. • acoplamento: dependência. 34 35 36 28/02/2025 13 37 Pontos Chave (cont.) • modularidade: divisão em componentes. Otimização de custos. • Projeto Detalhado: – verificação de requisitos; – projetar testes; – analisar eficiência; – estrutura de dados. 38 • Critérios: – modularidade; – independência de dados; – independência de funcionalidades; – simplicidade; – cumprir com requisitos. • Implementação: – regras de codificação; – comentários; – consistência, correção e qualidade. Pontos Chave (cont.) FIM 37 38 39