PublicouDavi Porto Alterado mais de 4 anos atrás
2 Algoritmo – conceito fundamental na ciência da computação
1. Introdução O que é ciência da computação? Conceitos da disciplina "Ciência da computação é – e sempre será – o interesse entre a manipulação mecanizada e humana de símbolos [algoritmos], usualmente referidos como 'computação' e 'programação', respectivamente." Edsger W. Dijkstra, 1989 "Ciência (engenharia) da computação é o estudo sistemático de processos algorítmicos — teoria, análise, projeto, eficiência, implementação e aplicação — que descrevem e transformam informação." ACM/IEEE-CS , 1989 Algoritmo – conceito fundamental na ciência da computação (C) 2008 Gustavo Motta
3 1. Introdução – O estudo dos algoritmos
Conceito de algoritmo Conjunto de passos que definem a forma como uma tarefa é executada Passos ordenados, não ambíguos e executáveis Atividade finita Exemplos Instruções para utilização de caixas bancários Regras para cálculo do imposto de renda Procedimentos para cálculo com a operações fundamentais da aritmética Instruções para matrícula na universidade ... (C) 2008 Gustavo Motta
4 1. Introdução – O estudo dos algoritmos
Exemplo – algoritmo de divisão euclidiana Condição de entrada – pré-condição Dois números naturais a – dividendo b – divisor, sendo b diferente de zero Condição de saída – pós-condição Dois números naturais únicos q – quociente r – resto, onde r maior ou igual a zero e menor que b Tal que: a = b  q + r (C) 2008 Gustavo Motta
5 1. Introdução – O estudo dos algoritmos
Exemplo – algoritmo de divisão euclidiana Passos para execução Atribuir, inicialmente, o valor de zero para q e o valor de a para r Caso b seja maior que r, o algoritmo pára e o resultado é do quociente é q e do resto é r Subtrair b de r e atribuir o resultado para r Somar um ao valor de q Executar o passo 2. (C) 2008 Gustavo Motta
6 1. Introdução – O estudo dos algoritmos
Principais características dos algoritmos Concebidos por seres humanos Representados por programas (software) escritos em linguagens de programação Alto nível JAVA, C, PASCAL, C++, ADA, ALGOL, FORTRAN Baixo nível – linguagens de máquina e assembler (montagem) Executados por máquinas Físicas - hardware Computadores (analógicos ou digitais), mecânicos, eletromecânicos, eletrônicos, ... Abstratas Engendradas na mente humana, formalismo matemático, máquinas virtuais implementadas em programas de computador (C) 2008 Gustavo Motta
7 1. Introdução – O estudo dos algoritmos
Origens na matemática Objetivava encontrar um conjunto de comandos suficiente para descrever, unificadamente, a resolução de um problema qualquer de um determinado tipo Mecanização do cálculo aritmético, por exemplo Idéia de reduzir todo raciocínio a um processo mecânico (automatizado), baseado em algum tipo de cálculo formal Alguns personagens Euclides (c. 330 a.C. a 277 a.C.) – matemático grego Axiomatização e método dedutivo para demonstração de teoremas – primórdios da busca pela automatização do raciocínio Leibniz ( ) – matemático alemão Vislumbrou a estrutura de um sistema onde "processos mentais" de uma inferência poderiam ser reduzidos a um procedimento simples – mecânico – regras para manipulação de símbolos (C) 2008 Gustavo Motta
8 1. Introdução – O estudo dos algoritmos
Exemplo de "automatização do raciocínio" Premissas Todos os cães são mamíferos Todos os mamíferos são animais Conclusão – "insight, inspiração" Todos os cães são animais Silogismo categórico de Aristóteles Raciocínio dedutivo estruturado formalmente a partir de duas proposições, ditas premissas, das quais, por inferência, se obtém necessariamente uma terceira, chamada conclusão (C) 2008 Gustavo Motta
9 1. Introdução – O estudo dos algoritmos
Exemplo de "automatização do raciocínio" Premissas Todos os As são B  tanto A quanto B são A (A = AB) Todos aqueles que são cães e que são mamíferos, são os cães Todos os Bs são C  tanto B quanto C são B (B = BC) Todos aqueles que são mamíferos e que são animais, são os mamíferos Conclusão Todos As são C  tanto A quanto C são A (A = AC) Todos aqueles que são cães e que são animais, são os cães A representação algébrica (simbólica) do silogismo facilita implementar a inferência por meio de um algoritmo (C) 2008 Gustavo Motta
10 1. Introdução – O estudo dos algoritmos
Exemplo de "automatização do raciocínio" Algoritmo Pré-condição Duas premissas A=AB (premissa 1) B=BC (premissa 2) Pós-condição A=AC (conclusão) Passos para execução – regra de inferência Substitua B na premissa 1 pelo valor correspondente a B da premissa 2, obtendo a equação resultante A=ABC Na equação resultante do passo anterior, substitua AB pelo valor correspondente a AB na premissa 1, obtendo a equação final A=AC (pós-condição) e o algoritmo pára (C) 2008 Gustavo Motta
11 1. Introdução – O estudo dos algoritmos
O que se pode concluir? A regra de inferência anterior prescinde da semântica expressa nas premissas Todos os cães são mansos Todos os mansos não mordem Todos os cães não mordem Um argumento é avaliado pela validade de sua inferência e não pela verdade de suas premissas Caso as premissas sejam verdadeiras, a conclusão é verdadeira (C) 2008 Gustavo Motta
12 1. Introdução – O estudo dos algoritmos
O que se pode concluir? Uma vez concebido (descoberto) um algoritmo, sua execução não dependerá do conhecimento dos princípios em que se baseia Uma calculadora digital "sabe" dividir números inteiros (algoritmo de divisão euclidiana), mas não sabe o que significa números inteiros, divisão, algoritmos, etc. Algoritmos codificam conhecimento (raciocínio) necessário a resolução de um problema A semântica dos algoritmos, das pré e pós condições "dependem" do observador humano A seqüência de passos de um algoritmo corresponde a prova (demonstração) de um teorema, onde a pré-condição é a hipótese e a pós-condição é a tese (C) 2008 Gustavo Motta
13 1. Introdução – O estudo dos algoritmos
Quais as limitações dos algoritmos? Não são capazes de calcular funções não-computáveis Função para provar teoremas em geral Na aritmética Teorema da incompletude de Gödel – Kurt Gödel ( ) matemático austro-húngaro Impossibilidade de se construir uma máquina que, de modo consistente, resolva todos os problemas da matemática, apenas com os recursos do próprio sistema Função para decidir se um programa qualquer pára, ou não, sendo conhecido os dados de entrada deste Problema da parada – formulado por Alan M. Turing (matemático inglês, ) em 1936 Etc. Não são auto-organizáveis - depende do ser humano A capacidade ("inteligência") das máquinas limita-se ao conhecimento embutido no algoritmo (C) 2008 Gustavo Motta
14 1. Introdução – O estudo dos algoritmos
Questões no desenvolvimento de algoritmos Perspectiva em pequena escala Como projetar novos algoritmos? Como representá-los em linguagens de programação? Qual paradigma de programação? Orientado a funções - Orientado a objetos Perspectiva em grande escala – Engenharia de Software Como estruturar/lidar com programas com milhões de linhas de código? Como compreender os problemas do mundo real para implementar soluções em programas de computador? Como lidar com os fatores humanos? desenvolvedores e clientes Qual processo de construção de software a adotar? (C) 2008 Gustavo Motta
15 1. Introdução – O desenvolvimento das máquinas algorítmicas
Máquinas algorítmicas (computacionais) Objetivam executar mecanicamente (automaticamente) as tarefas (computáveis) especificadas nos algoritmos Tipos de máquinas Abstratas Existentes na mente humana Máquinas virtuais Máquinas formalizadas matematicamente - Máquinas de Turing (1936) Define um sistema formal para computação universal Máquinas de Post (1943) (C) 2008 Gustavo Motta
16 1. Introdução – O desenvolvimento das máquinas algorítmicas
Máquinas algorítmicas (computacionais) Tipos de máquinas - Físicas Mecânicas Ábaco (c a. C. na Babilônia) Régua de cálculo (Willian Oughtred, 1632) – analógico Dispositivos para cálculos astronômicos – analógicos Quadrantes Compasso de setor "Antikythera" – dispositivo cálculo de calendário lunar (79 a. C.) Etc. (C) 2008 Gustavo Motta
17 1. Introdução – O desenvolvimento das máquinas algorítmicas
Máquinas algorítmicas (computacionais) Tipos de máquinas - Físicas Mecânicas – baseadas em engrenagens Máquinas de calcular - digitais Blaise Pascal (1642) máquina para somar ( , matemático francês) G. W. Leibniz (1673) – máquina com as 4 operações Máquina de Jacquard ( ) Programa expressos em cartões perfurados especificando o padrão de desenho de tecidos em teares (1801) Operários com menor qualificação poderiam fazer desenhos elaborados O conhecimento de desenhar foi transferido para os cartões perfurados (programas) processados em teares (máquinas) Os operários forneciam basicamente a energia mecânica (C) 2008 Gustavo Motta
18 1. Introdução – O desenvolvimento das máquinas algorítmicas
Máquinas algorítmicas (computacionais) Tipos de máquinas - Físicas Mecânicas – baseadas em engrenagens – digital Máquina diferencial de Babbage (1822) – matemático Inglês (1792- 1871) Produção de tabelas logarítmicas Projeto iniciado nunca foi concluído Máquina analítica de Babbage (1933) Primeiro modelo teórico de computador universal Não foi implementado – totalmente mecânico – movido à vapor Os algoritmos não eram "amarrados" à máquina, que poderia ser programada livremente 1842 – Primeiro programa escrito por Lady Ada Augusta Byron (C) 2008 Gustavo Motta
19 1. Introdução – O desenvolvimento das máquinas algorítmicas
Máquinas algorítmicas (computacionais) Tipos de máquinas - Físicas Eletromecânicas – baseadas em engrenagens – digital Tabulador de Hollerith (1890) Tabular o resultado do censo nos EUA Cartões perfurados Representavam números que eram interpretados e somados em acumuladores Fundou a Hollerith Tabulating Machines, compondo uma das empresas que resultou na International Business Machine – IBM em 1924 (C) 2008 Gustavo Motta
20 1. Introdução – O desenvolvimento das máquinas algorítmicas
Máquinas algorítmicas (computacionais) Tipos de máquinas - Físicas 1o Computador eletromecânico (relé) universal Z1 (1936) – Konrad Zuze ( ) engenheiro civil alemão Computadores eletrônicos Mark I (1944) – Howard Aiken – Harvard University – relés comandados eletronicamente ENIAC (1946) – Universidade da Pensilvânia – válvulas EDVAC (1949) – John von Neumann Concebeu a moderna arquitetura de computadores Programa armazenado (C) 2008 Gustavo Motta
21 1. Introdução – Histórico das linguagens de programação
As primeiras linguagens Frutos da busca de um "procedimento efetivo (mecânico)" para verificar a validade de uma proposição matemática Busca frustrada, mas que resultou no desenvolvimento da teoria da computação Usadas para representar algoritmos, possuindo Sintaxe para determinar a forma com que as entidades de um programa são estruturadas Semântica para determinar o significado de um programa, isto é, o que provoca quando executado por uma máquina algorítmica e como é entendido por um programador (C) 2008 Gustavo Motta
22 1. Introdução – Histórico das linguagens de programação
As primeiras linguagens Subconjunto não ambíguo de linguagens naturais Português, inglês, francês, etc. Linguagens artificiais Universais – capaz de expressar qualquer algoritmo Formal e matematicamente bem definidas O -cálculo (lambda-cáclulo) proposto por Alonzo Church ( – matemático norte-americano) em 1936 Cálculo para expressar todas as funções computáveis Base teórica das linguagens de programação Lógica combinatorial proposta em 1924 por Moses Shönfinkel Equivalente ao -cálculo Linguagem de máquina Instruções diretamente interpretada por computadores Difíceis para programar e para entender (C) 2008 Gustavo Motta
23 1. Introdução – Histórico das linguagens de programação
As primeiras linguagens Linguagens artificiais Linguagens de montagem (assembler) - fins dos anos 40 início dos anos 50 Notação simbólica para instruções em linguagem de máquina Uso de mnemônicos Primeiros tradutores – assembler  linguagem de máquina Dependente de máquinas específicas Instruções muito primitivas Linguagens de baixo nível LOAD R X ADD R LOAD X R LOAD R, X ADD R, 1 LOAD X, R tradução (C) 2008 Gustavo Motta
24 1. Introdução – Histórico das linguagens de programação
As primeiras linguagens Linguagens artificiais Linguagens de alto nível Meados dos anos 50 Objetivos Expressar algoritmos independente de uma máquina particular Linguagem mais próxima da linguagem natural Facilitar a programação e o entendimento de programas Compiladores para traduzir automaticamente programas em linguagens de alto nível para programas em linguagem de máquina código objeto intermediário código objeto linguagem de máquina código fonte alto nível LOAD R, X ADD R, 1 LOAD X, R tradução tradução X = X + 1 (C) 2008 Gustavo Motta Processo de compilação
25 1. Introdução – Histórico das linguagens de programação
1950 1960 1970 1980 1990 2000 Fortran Lisp Algol-60 Cobol Simula Algol-68 PL/1 Pascal Prolog Smalltalk C ML Ada Miranda C++ Java Haskell Linguagens orientadas a objetos Linguagens concorrentes e imperativas Linguagens funcionais Linguagens lógicas (C) 2008 Gustavo Motta Fonte: adaptação da fig. 1.1 do livro Programming Language Concepts and Paradigms de David A. Watt. Prentice Hall, 1991
26 1. Introdução – Evolução da ciência da computação
Inicialmente – anos 40, 50 e meados de 60 Computadores Custo elevado Primeiro HD criado pela IBM em 1956, com 5Mbytes de capacidade, custava mais de US$ ,00 PDP-1 – primeiro minicomputador – fabricado pela DEC nos anos 60, custava aproximadamente US$ ,00, e possuía 4 Kbytes de memória principal Grandes em tamanho Pequena capacidade de memória e processamento Programas Usados para resolver "problemas simples" Baixo custo de desenvolvimento Aplicações militares, científicas e em organizações de grande porte Lei de Moore (1965) – co-fundador da Intel O número de transistores por polegada quadrada nos circuitos integrados dobrará a cada ano (revisto nos anos 70 para a cada 18 meses) (C) 2008 Gustavo Motta
27 1. Introdução – Evolução da ciência da computação
Hoje Computadores Baixo custo Simples de usar e de dimensões reduzidas Grande capacidade de memória e processamento Interconectados em rede Programas Usados para resolver "problemas complexos" Elevados custos de desenvolvimento Processo de desenvolvimento complexo Importância do fator humano Crise de software permanente Aplicações de software permeiam toda a sociedade Exemplos: lazer, entretenimento, cultura e informação Sociedade da informação (C) 2008 Gustavo Motta
28 1. Introdução – A construção de modelo para resolução de problemas
Waterfall (1961), litogravura - M. C. Escher Belvedere (1958), litogravura - M. C. Escher 1. Introdução – A construção de modelo para resolução de problemas René Magritte, O que são modelos? "Representação simplificada e abstrata de fenômeno ou situação concreta, e que serve de referência para a observação, estudo ou análise" (dicionário Aurélio) Os fenômenos existentes no mundo real são muitos complexos para serem modelados em todos os seus detalhes Adota-se um processo para construção de modelos que Considera a realidade sendo formada por diferentes entidades que exibem um certo comportamento exterior e uma certa organização interior Permite pensar como entidades interagem para compor novas entidades Abstrai as propriedades externas (observáveis, essenciais) de uma entidade para distingui-las das propriedades internas (não observáveis, acidentais), considerando o problema que o observador que resolver (C) 2008 Gustavo Motta
29 1. Introdução – A construção de modelo para resolução de problemas
Exemplos Problema 1: Controlar o acendimento-apagamento de uma lâmpada A construção de uma solução (modelo) visa identificar Propriedades essenciais – observáveis externamente A lâmpada está acesa ou apagada – estado da lâmpada Os comandos (procedimentos, operações, controles) para acender e apagar a lâmpada e visa desprezar Propriedades acidentais – não essenciais O fabricante da lâmpada O tipo da lâmpada – incandescente ou fluorescente O preço da lâmpada O acabamento do interruptor A cor dos fios de conexão A última pessoa que instalou a lâmpada Etc. (C) 2008 Gustavo Motta
30 1. Introdução – A construção de modelo para resolução de problemas
Exemplos Problema 1: Controlar o acendimento-apagamento de uma lâmpada Como representar as propriedades essenciais? Identificar um conjunto de variáveis para representar o estado da entidade modelada Especificar um conjunto de operações que determinam o comportamento observável da entidade com base em seu estado, podendo modificá-lo Lâmpada acende() Operações que permitem interagir com o modelo da entidade (fenômeno) observada (estudado) estadoDaLampada apaga() mostraEstado() (C) 2008 Gustavo Motta
31 1. Introdução – A construção de modelo para resolução de problemas
modelo Lampada inicio do modelo variavel estadoDaLampada = apagada; operacao acende() inicio estadoDaLampada = aceso; fim operacao apaga() inicio estadoDaLampada = apagado; fim operacao mostraEstado() inicio se (estadoDaLampada == aceso) exiba "A lâmpada está acesa"; senão exiba "A lâmpada está apagada"; fim fim do modelo Declaração do estado entidade representada Exemplos Problema 1: Controlar o acendimento-apagamento de uma lâmpada Representação do modelo numa pseudo-linguagem de programação Cabe ressaltar que este modelo considerou os aspectos essenciais na perspectiva do problema enunciando Caso fosse para representar as lâmpadas à venda num supermercado, as propriedade essenciais seriam diferentes Declaração das operações da entidade representada Símbolo para operador que atribui um valor (à direita) a uma variável (à esquerda) Símbolo para operador de igualdade que determina se dois valores são iguais (C) 2008 Gustavo Motta
32 1. Introdução – Aspectos éticos
Que impacto a ciência da computação e a programação, em particular, trazem para a sociedade e para os indivíduos? Implicações nos direitos autorais Uso militar Redução de empregos Privacidade dos indivíduos Conhecimento das capacidades, limitações e ramificações das tecnologias da informação Antagonismos, ambivalências, dilemas Afinal, o que é ética? (C) 2008 Gustavo Motta