SEMINÁRIOS INTEGRADOS EM SISTEMAS DE INFORMAÇÃO Luiz Leão luizleao@gmail.com http://www.luizleao.com
Conteúdo Programático 4.1. Aplicações utilizando Programação Estruturada e Programação Orientada a Objeto. 4.2. Programação Web e para Dispositivos Móveis. 4.3. Integração computacional: arquitetura, sistema operacional e redes
Programação Estruturada Imagine que tenha que processar as vendas feitas por cada vendedor de cada filial de uma empresa. Filial 1 Empresa Filial 2 Filial 3
Programação Estruturada Se você vai programar em um ambiente procedural, como C, então vai criar algo assim: Um módulo de controle, que invocará os procedimentos de inicialização e o loop principal. Um módulo que é invocado para ler e processar cada filial. Uma sub-rotina que é invocada do módulo das filiais para poder tratar cada funcionário de cada filial.
Programação Estruturada Problemas decorrentes: 1) Falta de isolamento entre os módulos: Alteração em um módulo pode resultar em danos nos outros. 2) Dificuldade de manutenção: Imagine o problema que seria se alguns tipos de vendedores tivessem regras diferentes... se algumas filiais tivessem o mesmo problema? 3) Dificuldade de reaproveitamento de código: Se outro programa quisesse utilizar a mesma estrutura haveria copy/paste
Programação Estruturada A unidade de um programa procedural é a subrotina em C. Para cada coisa é criada uma sub-rotina que processará os dados. Modularizar um programa é criar uma rotina para cada função.
Modularização É a decomposição de um conjunto de componentes de software em sub-partes, denominadas módulos. Espera-se que os módulos tenham uma forte coesão interna e um pequeno acoplamento exterior.
Modularização Alta Coesão: todas as partes de um processo (ou módulo) são fortemente relacionadas. Baixo Acoplamento: o número de interfaces entre os processos (ou módulos) é mantido ao mínimo, visando facilitar modificações futuras.
Modularização Um bom módulo deve cumprir uma única função, e todos os seus arquivos devem ser suficientes para cumprir esta função. Além disso, ele também deve possuir uma interface simples e bem especificada.
Sub-rotinas É uma rotina de código que é chamada pelo programa principal para realizar uma tarefa. Normalmente chama-se de procedimento (procedure) a rotina que não retorna valores, e função (function) a que retorna.
Escopo de Variáveis É a sua área de atuação, normalmente o lugar onde foi definida. Para que não existam ambiguidades na utilização dos identificadores, não pode existir nenhum caso onde existam dois identificadores com o mesmo nome dentro do mesmo escopo. Deve ser respeitada a unicidade de nomes. O mesmo vale para parâmetros passados para uma subrotina.
Escopo de Variáveis Escopo global: São declaradas fora de todas as sub-rotinas, normalmente no início de módulos. Todo o módulo e as subrotinas declaradas em seu corpo possuem acesso a estas variáveis. Escopo local: São declaradas dentro de uma sub-rotina. Apenas a função possui acesso ao seu conteúdo, o que aumenta o reuso do subprograma e evita efeitos colaterais (maior controle).
Tipos de dados De forma geral, podemos classificar as linguagens de programação quanto ao modelo de tipagem da seguinte maneira: tipagem forte e tipagem fraca. Essa questão manifesta-se principalmente em atribuições. No caso de linguagens orientadas a objetos, também ocorre em invocações de métodos.
Tipos de dados Tipagem forte: o compilador garante que em tempo de execução ocorra a compatibilidade entre os elementos de uma atribuição, e também a existência do método para uma dada referência. Garante maior robustez aos sistemas desenvolvidos, minimizando erros em tempo de execução. Tipagem fraca: neste caso, o compilador não existe essa garantia durante a verificação de tipos, sendo responsabilidade do programador. Possibilita maior velocidade e facilidade no desenvolvimento.
Programação Orientada a Objetos
O que são objetos? Características Cor Combustível Num_Portas Potencia Comportamentos Acelerar Feiar Acender farol Dar seta Buzinar Características Cor Combustível Num_Portas Potencia Capacidade Carga Comportamentos Acelerar Feiar Acender farol Dar seta Buzinar Acionar Freio-Motor Características Peso Cor Tamanho tela Processador Memória Comportamentos Ligar Desligar Ligar Wireless Desligar Wireless
Por que OO? Surgiu da necessidade de simular a realidade, criando abstrações na tentativa de representar as características relevantes dos objetos envolvidos no sistema que se deseja desenvolver.
Por que OO? Com o uso da OO, a engenharia de software conseguiu avançar na habilidade de modelar e projetar softwares que representam os problemas do mundo real no mundo computacional.
Linguagens de Programação
Vantagens Forte suporte para o encapsulamento dos dados e da lógica dentro de um componente que chamamos de objeto. Essas propriedades tornam-se mais importantes quando os programas se tornam grandes, pois com a orientação a objetos fica mais fácil de dar manutenção no código.
Conceitos de Orientação a Objetos Classes Objetos Abstração Encapsulamento Herança Polimorfismo
Classe É o molde para a criação de objetos. Define o comportamento e os atributos dos seus objetos. Exemplo: Planta de uma casa
Objeto É a instâncias da classe em memória. Possui todas as características definidas previamente na classe. Se comunicam através da troca de mensagens. Exemplo: A casa construída
Abstração Identificar todas as informações que atendem a aplicação e ignorar as informações irrelevantes. Objeto Pessoa Dados abstraidos
Encapsulamento Permite que os atributos e os métodos sejam empacotados dentro de uma classe. Mecanismo para proteger os atributos. Atributos são manipulados apenas pelos métodos públicos.
Herança Permite reutilizar a definição de um tipo de objeto para definir outro tipo de objeto.
Polimorfismo Capacidade de objetos de diferentes tipos responder a métodos com o mesmo nome, cada um de acordo com seu próprio comportamento.
Resumindo Classe: modelo para descrever objetos. Objeto: entidade que possui atributos e métodos. Abstração: selecionar informações importantes para a aplicação. Encapsulamento: empacotar atributos e métodos dentro da classe. Instância: objeto instanciado na memória.
Resumindo Método: procedimento ou função que implementa uma operação. Mensagem: requisição para executar um método do objeto. Herança: definir nova classe a partir de uma classe previamente definida.
Integração Computacional Arquitetura Sistema operacional Redes
Arquitetura
Arquitetura de Software Consiste na organização dos seus componentes e suas relações internas, assim como as relações externas, através das suas interfaces. Entende-se por relações externas: softwares, serviços etc.
Arquitetura de Software: Visões É comumente organizada em visões, dependendo do tipo de aspecto a ser analisado no projeto. Visão funcional/lógica (Requisitos) Visão de projeto. Visão de desenvolvimento/estrutural Visão de concorrência/processo/thread Visão de Implantação Visão do Usuário
Arquitetura de Software: MVC É um modelo arquitetural que tem como objetivo separar a apresentação da interface (View), das regras de negócio (Control), assim como a persistência dos dados (Model)
Arquitetura de Software: MVC Digrama de Robustez
Arquitetura de Software: MVC Estudo de caso Framework GOT