Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB 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.” Algoritmo – conceito fundamental Edsger W. Dijkstra, 1989 na ciência da computação ► “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 (C) 2008 Gustavo Motta 2 1. Introdução – ► Conceito O estudo dos algoritmos 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 ► Regras para utilização de caixas bancários 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 3 1. Introdução – ► Exemplo O estudo dos algoritmos – 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 4 1. Introdução – ► O estudo dos algoritmos Exemplo – algoritmo de divisão euclidiana Passos para execução 1. Atribuir, inicialmente, o valor de zero para q e o valor de a para r 2. Caso b seja maior que r, o algoritmo pára e o resultado é do quociente é q e do resto é r 3. Subtrair b de r e atribuir o resultado para r 4. Somar um ao valor de q 5. Executar o passo 2. (C) 2008 Gustavo Motta 5 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 eletromecânicos, eletrônicos, ... ou digitais), mecânicos, Abstratas Engendradas na mente humana, formalismo matemático, máquinas virtuais (C) implementadas em programas de computador 6 2008 Gustavo Motta 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 (1646-1716) – matemático alemão Vislumbrou a estrutura de um sistema onde “processos mentais” de uma inferência poderiam ser reduzidos a um procedimento (C) 2008 Gustavo Motta 7 simples – mecânico – regras para manipulação de símbolos 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 8 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 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 mamíferos, são os cães 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 9 1. Introdução – ► O estudo dos algoritmos Exemplo de “automatização do raciocínio” Algoritmo ► Pré-condição Duas premissas ► ► ► Pós-condição ► A=AB (premissa 1) B=BC (premissa 2) A=AC (conclusão) Passos para execução – regra de inferência 1. Substitua B na premissa 1 pelo valor correspondente a B da premissa 2, obtendo a equação resultante A=ABC 2. 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 10 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 11 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 (C) 2008 Gustavo Motta 12 hipótese e a pós-condição é a tese 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 ► Função para decidir se um programa qualquer pára, ou não, sendo conhecido os dados de entrada deste ► Na aritmética ► Teorema da incompletude de Gödel – Kurt Gödel (19061978) 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 Problema da parada – formulado por Alan M. Turing (matemático inglês, 1912-1954) em 1936 Etc. Não são auto-organizáveis - depende do ser humano A capacidade (“inteligência”) das máquinas limita-se (C) 2008 Gustavo Motta 13 ao conhecimento embutido no algoritmo 1. Introdução – ► Questões O estudo dos algoritmos 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 14 1. Introdução – ► Máquinas O desenvolvimento das máquinas algorítmicas 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 15 1. Introdução – ► Máquinas O desenvolvimento das máquinas algorítmicas algorítmicas (computacionais) Tipos de máquinas - Físicas ► Mecânicas Ábaco (c. 3000 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 16 1. Introdução – ► Máquinas O desenvolvimento das máquinas algorítmicas algorítmicas (computacionais) Tipos de máquinas - Físicas ► Mecânicas – baseadas em engrenagens Máquinas de calcular - digitais ► Blaise Pascal (1642) matemático francês) ► G. máquina para somar (1623-1662, W. Leibniz (1673) – máquina com as 4 operações Máquina de Jacquard (1752-1834) ► 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 (C) 2008 Gustavo Motta operários forneciam basicamente a energia mecânica 17 1. Introdução – ► Máquinas O desenvolvimento das máquinas algorítmicas 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 (17921871) ► Produção ► Projeto de tabelas logarítmicas iniciado nunca foi concluído Máquina analítica de Babbage (1933) ► Primeiro ► Não ► Os modelo teórico de computador universal foi implementado – totalmente mecânico – movido à vapor algoritmos não eram “amarrados” à máquina, que poderia ser programada livremente ► 1842 (C) 2008 Gustavo Motta 18 – Primeiro programa escrito por Lady Ada Augusta Byron 1. Introdução – ► Máquinas O desenvolvimento das máquinas algorítmicas 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 19 1. Introdução – ► Máquinas O desenvolvimento das máquinas algorítmicas algorítmicas (computacionais) Tipos de máquinas - Físicas ► 1o Computador eletromecânico (relé) universal Z1 (1936) – Konrad Zuze (1910-1995) engenheiro civil alemão http://www.computersciencelab.com/ComputerHistory/History.htm ► 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 20 1. Introdução – ► As Histórico das linguagens de programação 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 21 1. Introdução – ► As Histórico das linguagens de programação 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 (19031995 – 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 0001 0110 1110 ► Linguagem de máquina 0010 0110 0001 Instruções diretamente interpretada por computadores Difíceis para programar e para entender 0001 1110 0110 (C) 2008 Gustavo Motta 22 1. Introdução – ► As Histórico das linguagens de programação primeiras linguagens Linguagens artificiais ► Linguagens dos anos 50 de montagem (assembler) - fins dos anos 40 início Notação simbólica para instruções em linguagem de máquina Uso de mnemônicos Primeiros tradutores – assembler linguagem de máquina LOAD R, X ADD R, 1 LOAD X, R tradução 0001 0110 1110 LOAD X 0010 0110 0001 ADD Dependente de máquinas específicas Instruções muito primitivas (C) 2008 Gustavo Motta Linguagens de baixo nível R R 1 0001 1110 0110 LOAD X R 23 1. Introdução – ► As Histórico das linguagens de programação 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 fonte alto nível X=X+1 código objeto linguagem de máquina código objeto intermediário tradução LOAD R, X ADD R, 1 LOAD X, R tradução (C) 2008 Gustavo Motta Processo de compilação 0001 0110 1110 0010 0110 0001 0001 1110 0110 24 1. Introdução – Histórico das linguagens de programação 1950 Fortran 1960 Simula 1970 Pascal Smalltalk Lisp Algol-60 Cobol Algol-68 PL/1 C 1980 ML Prolog Ada Miranda C++ 1990 Haskell Java 2000 Linguagens orientadas a objetos Linguagens concorrentes e imperativas Linguagens Linguagens funcionais 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 25 1. Introdução – ► Inicialmente Evolução da ciência da computação – 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$ 1.000.000,00 PDP-1 – primeiro minicomputador – fabricado pela DEC nos anos 60, custava aproximadamente US$ 120.000,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 Gustavo Motta (revisto nos anos 70 para a cada 26 integrados dobrará(C)a2008 cada ano 18 meses) 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 (C) 2008 Gustavo Motta Sociedade da informação 27 1. Introdução – ►O A construção de modelo para resolução de problemas 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 (C) 2008 Gustavo Motta 28 Belvedere (1958), litogravura - M. C. Escher Waterfall (1961), litogravura - M. C. Escher René Magritte, 1928-1929 observador que resolver 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 ►e 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 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 queGustavo instalou (C) 2008 Motta a lâmpada ► Etc. 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 ► 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() estadoDaLampada apaga() mostraEstado() (C) 2008 Gustavo Motta Operações que permitem interagir com o modelo da entidade (fenômeno) observada (estudado) 30 1. Introdução – A construção de modelo para resolução de problemas modelo Lampada inicio do modelo variavel estadoDaLampada = apagada; ► Exemplos Declaração do estado entidade representada Problema 1: Controlar o acendimento-apagamento de operacao acende() Símbolo para operador inicio que atribui um valor uma lâmpada estadoDaLampada = aceso; (à direita) a uma ► Representação do modelo numa pseudo-linguagem variável (à esquerda)de fim programação operacao apaga() ► Cabe ressaltar que este modelo considerou os aspectos Declaração das inicio essenciais na perspectiva do problema enunciando operações da entidade estadoDaLampada = apagado; Caso fosse para representar as lâmpadas à venda num representada fim supermercado, as propriedade essenciais seriam diferentes operacao mostraEstado() inicio se (estadoDaLampada == aceso) exiba “A lâmpada está acesa”; senão exiba “A lâmpada está apagada”; (C) 2008 Gustavo Motta fim fim do modelo Símbolo para operador de igualdade que determina se dois valores são iguais 31 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 32