Baixe o app para aproveitar ainda mais
Prévia do material em texto
Projeto e Arquitetura de Software Prof. Alexandre Krohn Projeto e Arquitetura de Software 2 Projeto e Arquitetura de Software Projeto e Arquitetura de Software 3 “Tu te tornas eternamente responsável por aquilo que cativas” Antoine de Saint-Exupéry Projeto e Arquitetura de Software Projeto e Arquitetura de Software 4 “Tu te tornas eternamente responsável por aquilo que cativas” Antoine de Saint-Exupéry No nosso caso... Projeto e Arquitetura de Software Projeto e Arquitetura de Software 5 Projeto e Arquitetura de Software “Tu te tornas eternamente responsável por aquilo que cativas” Antoine de Saint-Exupéry “Tu te tornas eternamente responsável por aquilo que programas” Ricardo Vargas Dorneles No nosso caso... Projeto e Arquitetura de Software 6 Eternamente responsável? ● Espera-se que todo software desenvolvido dure. ● Em média, a vida de um software pode ser resumida assim Tempo Desenvolvimento Manutenção Manutenção Manutenção Manutenção Projeto e Arquitetura de Software 7 ● Se o software for bem construído, isso não é um problema. 80% da vida útil é manutenção Projeto e Arquitetura de Software 8 80% da vida útil é manutenção ● Mas e se não for? Projeto e Arquitetura de Software 9 Dê manutenção nisso:Dê manutenção nisso: Projeto e Arquitetura de Software 10 A gambiarra é a principal inimiga ● Produtos bem construídos são mais simples de manter ● Boa construção significa planejamento e atenção aos detalhes ● Em software, PROJETO e ARQUITETURA! Projeto e Arquitetura de Software 11 Projeto e Arquitetura ● Projeto de Software ● Arquitetura de Software Projeto e Arquitetura de Software 12 Projeto de Software ● Projeto de Software (do inglês Software design) é a parte da engenharia de software que se encarrega de fazer todo o planejamento anterior ao desenvolvimento, incluindo a definição da arquitetura do software, e transformar tudo em um documento ou conjunto de documentos capazes de serem interpretados diretamente pelo programador. Projeto e Arquitetura de Software 13 Arquitetura de Software ● O projeto forma o plano geral de desenvolvimento do software ● A arquitetura concentra-se nos aspectos técnicos da programação do software Projeto e Arquitetura de Software 14 Arquitetura de Software ● Deixaremos o máximo possível do projeto de software para as disciplinas de Engenharia de Software ● Essa é uma disciplina de programação! Projeto e Arquitetura de Software 15 Função : Arquiteto de Software ● Geralmente um programador Sênior ● É o intermediário entre o pessoal de Análise de Sistemas e os Desenvolvedores ● Precisa equilibrar uma série de fatores Projeto e Arquitetura de Software 16 Arquiteto de Software Projeto e Arquitetura de Software 17 Arquiteto de Software ● Preocupa-se com – Requisitos – Qualidade – Tecnologia – Boas práticas – Padrões – Performance... Projeto e Arquitetura de Software 18 Mas como? ● Começa-se dominando bem programação. Especialmente a linguagem e o paradigma com o qual se irá trabalhar. ● Estudo, estudo, estudo… ● Programar, programar, programar... Projeto e Arquitetura de Software 19 Sobre os Ombros de Gigantes ● em latim: nanos gigantum humeris insidentes expressa o significado de "descobrir a verdade a partir das descobertas anteriores" ● Ou seja, aproveitar as experiências daqueles que nos antecederam! ● Muitos exemplos e literatura disponíveis Projeto e Arquitetura de Software 20 Sobre os Ombros de Gigantes Projeto e Arquitetura de Software 21 Arquitetura de Software (voltando...) ● A arquitetura de um software definirá o futuro do mesmo. ● Organização é a palavra-chave. ● O resto são escolhas adequadas. Projeto e Arquitetura de Software 22 Organização de Software ● Primeiro tópico em organização de um programa qualquer, em qualquer paradigma: Modularização Projeto e Arquitetura de Software 23 O que Modularização evita? Projeto e Arquitetura de Software 24 O que Modularização evita? Projeto e Arquitetura de Software 25 Monólitos de Software ● Blocos de código gigantescos, difíceis de entender e de depurar, com muita repetição de código Projeto e Arquitetura de Software 26 Monólitos de Software ● Blocos de código gigantescos, difíceis de entender e de depurar, com muita repetição de código ● E que ninguém quer mexer! Projeto e Arquitetura de Software 27 Modularização de Programas Um problema complexo é melhor abordado se for dividido primeiramente em vários subproblemas MODULARIZAÇÃO Projeto e Arquitetura de Software 28 Modularização de Programas Um problema complexo é melhor abordado se for dividido primeiramente em vários subproblemas MODULARIZAÇÃO MÓDULOS Projeto e Arquitetura de Software 29 Modularização de Programas A implementação desses Módulos é feita através de SUBPROGRAMAS MÓDULOS Projeto e Arquitetura de Software 30 Modularização de Programas A implementação desses Módulos é feita através de SUBPROGRAMAS MÓDULOS Os SUBPROGRAMAS podem ser FUNÇÕES e PROCEDIMENTOS Projeto e Arquitetura de Software 31 Subprogramas ● SUBPROGRAMAS devem realizar uma única funcionalidade no programa. – possuem “código independente” e devem ser definidos separadamente no programa – na linguagem C, a definição do subprograma (função) deve ocorrer antes da função que irá utilizá-lo. – SUBPROGRAMAS são declarados no início do programa – Prototipação de funções (pragmas) ● Se for em Java, um subprograma é um método de uma classe Projeto e Arquitetura de Software 32 Estrutura de uma função tipodafunção nomedafunção(tipo var1, ..., tipo varn) inicio declaração de variáveis locais corpo da função retorne(variável de retorno); fim Projeto e Arquitetura de Software 33 Estrutura de uma função (C) int soma(int a, int b) { int resposta; resposta = a + b; return resposta; } Projeto e Arquitetura de Software 34 Estrutura de um método (Java) public int soma(int a, int b) { int resposta; resposta = a + b; return resposta; } Projeto e Arquitetura de Software 35 Funções e Métodos ● Retornam um único valor – Na definição da função devem ser declarados: ● o tipo de todos os parâmetros (argumentos) ● o tipo do valor que a função retorna ● todas as variáveis utilizadas internamente no subprograma (variáveis locais) ● Para utilizar a função no programa principal, basta colocar seu nome (identificador) e os valores para os parâmetros. Projeto e Arquitetura de Software 36 Exemplo Dados dois números N e K, calcular a Combinação C N,K = Com a definição de uma função fat (X) que calcula o fatorial de um dado X, o cálculo da combinação fica: CNK ← fat (N) / (fat (K) * fat (N-K)) )!(! ! KNK N − Projeto e Arquitetura de Software 37 Exemplo Projeto e Arquitetura de Software 38 Escopo de Variáveis ● Significa a visibilidade de uma variável perante os diversos subprogramas integrantes do programa (ou algoritmo) – Variável global: declarada no início do algoritmo ou programa (fora dos subprogramas e programa principal) e é visível por todos. – Variável local: declarada dentro de um subprograma e somente visível dentro do mesmo. Projeto e Arquitetura de Software 39 Escopo de Variáveis ● A variável global existe durante toda a execução do programa – Interessante quando a mesma é utilizada por várias funções – Muitas variáveis globais podem prejudicar a execução do programa (overflow) – Os parâmetros enviados para as funções ajudam no entendimento da finalidade da função ● O uso de variável global deve ser analisado cuidadosamente. Projeto e Arquitetura de Software 40 Subprogramas ● Como se transforma um programa em um programa com subprogramas? Projeto e Arquitetura de Software 41 Programa que testa números primos (Java): Conta os divisores, se tiver só dois, é primo Projeto e Arquitetura de Software42 Programa que testa números primos (Java): Conta os divisores, se tiver só dois, é primo Esse é o código que verifica se o número é primo Projeto e Arquitetura de Software 43 Programa que testa números primos (Java): Saída do método Corpo do método c c numero numero c numero Parâmetro de entrada Projeto e Arquitetura de Software 44 Programa que testa números primos (Java): A leitura do número é feita no programa principal As mensagens de saída também ficam no programa principal Projeto e Arquitetura de Software 45 Programa que testa números primos (Java): Extraindo o método obtemos chamada Projeto e Arquitetura de Software 46 Benefícios da Modularização ● Organiza o código ● Distribui a complexidade do programa ● Favorece o reuso ● Evita a duplicação de código : Princípio DRY (Don’t Repeat Yourself) ● Facilita a manutenção ● Diminui o impacto de erros Projeto e Arquitetura de Software 47 Resultado da Modularização Programa Grande Monolítico Principal Subprograma A Subprograma B Subprograma C Subprograma D Projeto e Arquitetura de Software 48 Dúvidas? Projeto e Arquitetura de Software 49 Referências ● Len Bass e outros, Software Architecture In Practice ● Robert C. Martin e Micah Martin, Agile Principle, Patterns, and Practices in C# ● Eric Gamma e outros, Padrões de Projeto – Soluções Reutilizáveis de Software Orientado a Objetos ● Antoine de Saint-Exupéry, O Pequeno Príncipe Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47 Slide 48 Slide 49
Compartilhar