PROGRAMAÇÃO (PRG34) Prof. Rafael Berti Schmitz 2017/1
Computação 1. Contar, fazer o cômputo de, : computar votos. 2. Calcular, orçar: Computou a despesa em centenas de reais. 3. Comparar, confrontar, cotejar: Dispôs-se a computar a receita com as despesas. 4. Incluir: Computou este delito entre os passíveis de pena de morte. 5. Processar em computador.
História da computação A ciência é cumulativa. As pesquisas normalmente evoluem com base em resultados do passado, constituindo os fundamentos para um desenvolvimento posterior.
Pré-história Ábaco Mesopotâmia, 5.500 a.c. Cálculo de colheitas e construção civil Operações de adição e subtração Babilônia Egito Grécia Roma -> "Calculus" Índia China Japão
Pré-história Régua de Cálculo William Oughtred, Inglaterra, 1630 Grandes navegações e projeto de máquinas a vapor Tabela baseada na teoria de logaritmos Multiplicação -> Adição Divisão -> Subtração
Pré-história Blaise Pascal, França, 1642 Pascalina Primeira calculadora mecânica Adição e subtração
Pré-história Charles Babbage, Inglaterra, 1821-1834 Máquina de diferenças Projetada para calcular tabelas trigonométricas e logarítmicas com elevada exatidão Fornecia os resultados perfurando um prato de cobre Não foi implementada completamente em função de limitações tecnológicas e financeiras (engrenagens não suportavam esforços elevados e se deformavam com o calor) Primeira réplica construída em 1991
Pré-história Charles Babbage, Inglaterra, 1821-1834 Máquina analítica Primeiro computador programável Funcionava a vapor Permitia alterar a sequência de operações Nunca foi totalmente implementada
Pré-história Máquina Analítica de Babbage - Anteviu os passos que são a base do funcionamento de um computador: Unidade de entrada (input section) entrada de dados via cartão perfurado; Unidade de saída (output section) saída de dados via cartão perfurado; Unidade de memória (store) capaz de armazenar variáveis e resultados; Unidade de computação (mill) recebe os operandos da memória, efetua as operações (soma, subtração, multiplicação e divisão) e envia o resultado para a memória;
Pré-história Ada Byron King, Inglaterra, 1842-1843 Condessa de Lovelace e companheira de Babbage Compreendeu o funcionamento da Máquina Analítica e escreveu os melhores relatos sobre o seu funcionamento Suas anotações descrevem o primeiro algoritmo especificamente criado para ser implementado em um computador (primeira programadora) Calcular os números de Bernoulli "Ele não tem pretensões de originar nada, mas pode processar qualquer coisa que nós soubermos programá-lo para realizar." - Ada, falando sobre o Engenho Analítico
Pré-história Hermann Hollerith, EUA, 1887 Máquina de Hollerith Entrada de dados por cartão perfurado Máquina capaz de interpretar, classificar e manipular as somas aritméticas representadas pelas perfurações Componentes eletromecânicos Usada no censo dos EUA (1/3 do tempo de processamento comum) Fundador da IBM
Berço da computação Alan Turing, Inglaterra, 1935 Formalizou o conceito de algoritmo Máquina de Turing Modelo abstrato do computador, que descreve os aspectos lógicos do seu funcionamento (memória, estados e transições) e não sua implementação física Fundamental para o desenvolvimento do computador moderno Bombe Decodificar a criptografia de mensagens nazistas Componentes eletromecânicos Filme: O jogo da imitação, 2014
Computadores eletrônicos 1ª Geração (1940-1952) Válvulas Projeto para uso dedicado e específico Programação manual
Colossus Inglaterra, 1939 Primeiro computador eletrônico, baseado no conceito de Turing Projetado para decifrar códigos nazistas Programação manual, através de chaves e conexões (configuração) 1ª Geração
ENIAC - Electronic Numerical Integrator and Computer EUA, 1943-1946 Entrada de dados via cartão perfurado Projetado para efetuar cálculos de balística Programação manual, através de chaves e conexões Executava desvios condicionais 1ª Geração
1ª Geração Poder computacional limitado pela tecnologia da época Configuração tediosa (limitava a versatilidade dos primeiros computadores)
Adolescência da computação John von Neumann, EUA, 1952 Observou que programar computadores manualmente era uma tarefa mecânica e tediosa, que poderia ser representada em forma digital, junto com os dados Introduziu o conceito de programa armazenado Emprego do sistema binário para cálculos aritméticos Estabeleceu o paradigma de projetos de computadores - arquitetura de von Neumann
2ª Geração (1952-1964) Transistores Não exigiam tempo de préaquecimento Menor consumo de energia Mais rápidos e confiáveis; Máquinas de uso universal Arquitetura de von Neumann Linguagem de programação (Assembly)
2ª Geração Mémorias: Núcleos de ferrite, fitas magnéticas Linguagem Assembly Utilização de mnemônicos para representar as instruções de máquina; Linguagens de alto nível (Fortran e Cobol) Armazenamento em disco, complementando os sistemas de fita magnética e possibilitando ao usuário acesso rápido aos dados desejados.
3ª Geração (1964-1977) Circuitos Integrados Integração de centenas de transistores Equipamentos menores e mais baratos Produção em massa Computador Pessoal (PC)
4ª Geração (1977-1991) Microprocessadores Sistemas operacionais: MS-DOS, Macintosh, UNIX Linguagens de programação orientadas a objeto (C++ e Smalltalk) Internet Mais confiáveis, mais rápidos, menores e com maior capacidade de armazenamento. Filme: Piratas do Vale do Silício, 1999
Tendências A cada ano ou dois seguintes aproximadamente o dobro: Quantidade de memória para executar programas Quantidade de armazenamento de dados secundário (tais como o armazenamento em disco) Usado para segurar os programas e os dados a longo prazo Velocidades de processador A velocidade a que os computadores executam seus programas
Hardware
O que é um computador? Computador Dispositivo capaz de executar cálculos e tomar decisões lógicas Hardware Parte física do sistema de computação Componentes eletrônicos Circuitos integrados e placas, que se comunicam através de barramentos) Software Parte lógica do sistema de computação. Conjunto de instruções, organizados em um ou mais arquivos, que ordenam o computador na execução de tarefas
Organização 1. Unidade de entrada de dados Obtém informações de dispositivos de entrada (teclado, mouse) 2. Unidade de Saída Informações de saída (monitor, impressora) 3. Unidade de memória Acesso rápido, baixa capacidade, armazena informações de entrada 4. Unidade aritmética e lógica (ALU) Executa cálculos aritméticos e lógica de decisões 5. Unidade central de processamento (CPU) Supervisiona e coordena as demais unidades do computador 6. Unidade de armazenamento secundário Barato e de longo prazo e de alta capacidade de armazenamento de dados Armazena os programas inativos
Arquitetura de von Neumann
Ciclo de execução Descreve como o hardware trabalha com as instruções que serão executadas Ciclo de execução de Von Neumann: 1) Busca uma instrução, 2) Decodifica 3) Executa Instrução de operação aritmética 1. A unidade de controle busca a próxima instrução do programa na memória principal; 2. O contador de programa é usado pela unidade de controle para determinar onde a instrução está localizada; 3. A instrução é decodificada para uma linguagem que a unidade lógica aritmética possa entender; 4. Os operandos de dados requeridos para executar a instrução são carregados da memória e colocados em registradores; 5. A unidade lógica aritmética executa a instrução e coloca os resultados em registradores ou na memória.
Software
Linguagens Três tipos de linguagens de programação Linguagem de máquina Linguagem natural do computador Dependente do hardware Não padronizada Cadeia de caracteres que fornece instruções específicas para a máquina Exemplo: +1300042774 +1400593419 +1200274027
Linguagens Três tipos de linguagens de programação Linguagem Assembly Humanamente compreensível Abreviaturas que representam as operações elementares de computador Muitas instruções para realizar tarefas simples Para ser executada, exige uma tradução, realizada pelos assemblers Exemplo: LOAD BASE ADD EXTRA STORE BRUTO
Linguagens Três tipos de linguagens de programação Linguagem de alto nível Uma linguagem é considerada de alto nível quando ela pode representar ideias abstratas de forma simples, diferente da linguagem de baixo nível que representa as próprias instruções de máquina. Códigos semelhantes ao inglês Permite notação matemática (traduzida pelos compiladores) Exemplo: Bruto = Base + Extra
Linguagens de alto nível FORTRAN (FORmula TRANslator) Desenvolvido pela IBM entre 1954 e 1957 Utilizado para aplicações científicas e de engenharia Ainda é usado COBOL (COmmon Business Oriented Language) Desenvolvido em 1959 por um consórcio entre indústrias, fabricantes de computadores e governo Usado para manipular grandes quantidades de dados Mais de um milhão de pessoas empregadas como programadores de COBOL Pascal Desenvolvido ao mesmo tempo que o C Destinava-se ao ensino da programação em ambientes acadêmicos Carecia de recursos para torná-la útil em aplicações comerciais, industriais e governamentais (pouco aceita) 32
Linguagem C Evoluiu a partir de duas linguagens anteriores (BCPL e B) Incluiu tipos de dados (número inteiro, ponto flutuante, etc) Usado para a gravação de sistemas operacionais modernos (Unix) Independente do hardware (portátil) Aplicações escritas em C podem ser executadas com pouca ou nenhuma modificação em uma grande variedade de sistemas computacionais Padronização Muitas pequenas variações de C existiam e eram incompatíveis ANSI/ISO 9899:1990 Fornecer à linguagem uma definição inequívoca e independente de equipamento 33
Labview Sintaxe de programação gráfica facilita a criação, a visualização e codificação de sistemas de engenharia Aplicações Aquisição de dados Controle e monitoramento Automação de testes e validação
Dicas Clareza e simplicidade Programas complicados são difíceis de ler, compreender e modificar Perda de tempo para testar e depurar erros Elevam a probabilidade de gerarem comportamentos imprevistos Software reutilizável Método dos blocos de construção Evite reinventar a roda. Use os elementos existentes Se uma função preexistente existe, geralmente é melhor usa-lá do que escrever uma própria