Introdução à Programação

Slides:



Advertisements
Apresentações semelhantes
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Advertisements

1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Introdução à Ciência da Computação Linguagens de Programação.
Evolução da Computação
Arquitetura e organização de computadores.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Linguagem de Montagem Visão geral.
Introdução a Informática
Lógica de Programação Módulo II
INTRODUÇÃO À PROGRAMAÇÃO
Professor: Erivelto Tschoeke – UDESC/CEPLAN
Universidade Federal do Espírito Santo
Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB.
Introdução à Programação
00(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Linguagens de Programação
Introdução a Programação
Professor Fernando Luís
História da Informática Necessidade de realizar cálculos matemáticos Ábaco – criado por volta de 2000 A.C., foi a primeira.
Lógica de Programação UNIDADE 1 – Introdução a) Computador
Arquitetura de Computadores Hardware
História da informação
MATEMÁTICA Prof. Carlos Alexandre.
PROGRAMAÇÃO I UNIDADE 1.
Histórico e Evolução da Informática
INTRODUÇÃO – LOGICA E ALGORITMOS
Informática Teórica Engenharia da Computação
PCI- Introdução à Computação
TECNOLOGIA EM REDES DE COMPUTADORES INTRODUÇÃO A COMPUTAÇÃO Aula /02/2013 Professor Leomir J. Borba- –
Introdução a Programação
Do supercomputador de neurônios ao Ruindows? ...Ábaco?
Algoritmos 1º Semestre Materia: Informática Profº: Cristiano.
Fundamentos da Computação
História e Evolução do Computador
Laboratório I Mateus Raeder Material baseado nos originais da
ORGANIZAÇÃO DE COMPUTADORES
Teoria da Computação Aula 5 Prof. Fabiano Sabha.
Informática nas Organizações
Inteligência Artificial
Organização e Arquitetura de Computadores
Análise e Projeto de Sistemas de Informação 2o. Semestre de 2014
ALGORITMOS Intensivo Janeiro e Fevereiro de 2011
Marcos da Arquitetura de Computadores
Evolução e Desempenho de Computadores
Fundamentos de Arquitetura da Computação
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Os engenhos calculadores
História do Computador.
Aula 01 HISTÓRICO DA INFORMÁTICA.
Igor Steinmacher, MSc. O maravilhoso mundo da Lógica de Programação.
1 TEORIA DA COMPUTAÇÃO Motivação Licenciatura em Ciência e Tecnologia da Computação Licenciatura em Engenharia Informática e de Computadores (Prep.)
Sistemas Microprocessados e Microcontrolados
Programação de computadores Prof. Giovanni Castro.
Programação Lógica com Prolog
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA ENGENHARIA DE AUTOMAÇÃO INDUSTRIAL DISCIPLINA PROGRAMAÇÃO COMPUTACIONAL I Prof. Marcelo Maciel de Souza
Fundamentos de linguagens de programação
COMPUTADOR - EVOLUÇÃO HISTÓRICA
Software Básico Introdução à Organização de Computadores Capítulo 1 Mitsuo Takaki
Algoritmos e Programação MC102
Linguagens de Programação
Algoritmos e Programação I
Introdução à Programação
Evolução dos computadores
Introdução à Ciência da Computação I
O que é Hardware ? Conjunto de unidades físicas, componentes, circuitos integrados, discos e mecanismos que compõem um computador ou seus periféricos.
Aula Introdutória “Lógica para Computação”
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
Influencias sobre o Projeto da Linguagem
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Transcrição da apresentação:

Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB

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

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

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

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

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

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 simples – mecânico – regras para manipulação de símbolos (C) 2008 Gustavo Motta

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

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

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

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

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

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 (1906-1978) 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, 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 ao conhecimento embutido no algoritmo (C) 2008 Gustavo Motta

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

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

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. 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

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 (1623-1662, matemático francês) G. 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 operários forneciam basicamente a energia mecânica (C) 2008 Gustavo Motta

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

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

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 (1910-1995) 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 http://www.computersciencelab.com/ComputerHistory/History.htm (C) 2008 Gustavo Motta

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

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 (1903-1995 – 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 0001 0110 1110 0010 0110 0001 0001 1110 0110 (C) 2008 Gustavo Motta

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 0001 0110 1110 LOAD R X 0010 0110 0001 ADD R 1 0001 1110 0110 LOAD X R LOAD R, X ADD R, 1 LOAD X, R tradução (C) 2008 Gustavo Motta

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 0001 0110 1110 0010 0110 0001 0001 1110 0110 tradução tradução X = X + 1 (C) 2008 Gustavo Motta Processo de compilação

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

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$ 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 integrados dobrará a cada ano (revisto nos anos 70 para a cada 18 meses) (C) 2008 Gustavo Motta

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

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, 1928-1929 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

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

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

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

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