Baixe o app para aproveitar ainda mais
Prévia do material em texto
Laboratório de Programação Dr. Deam James Azevedo da Silva Conteúdo Histórico da Computação Conceitos básicos de linguagens de programação de computadores Conceitos de algoritmos Linguagem Java Exemplos práticos com Netbeans Primeiro ser humano a CALCULAR: pastor Técnica utilizada: empilhamento de pedras para controle da quantidade de ovelhas do rebanho Calculus – lat. pedrinha Histórico da Computação Forma ancestral dos seres humanos para indicar quantidades: gestos com os dedos da mão Histórico da Computação Digitus – lat. dedo Histórico da Computação Sistema de numeração egípcio Sistema de numeração romano Histórico da Computação 10001000500500100100505010105511 MMDDCCLLXXVVII 10001000500500100100505010105511 MMDDCCLLXXVVII 10000001000000100000100000100001000010001000100100101011 10000001000000100000100000100001000010001000100100101011 Primeira tentativa bem sucedida de criação de uma máquina de contar: ábaco (China, cerca de 2500 a.C.) Abacus – lat. tábua de argila Histórico da Computação Bastões de Napier: conjunto de 9 bastões, um para cada dígito, que transformavam a multiplicação de dois números numa soma das tabuadas de cada dígito. Histórico da Computação Régua de Cálculo - o primeiro computador analógico http://www.geocities.com/SiliconValley/Haven/8692/comput.htm Histórico da Computação Primeiro instrumento moderno de calcular: Máquina de Pascal – somadora construída por Blaise Pascal (físico, matemático e filósofo – França, 1642) 9 Histórico da Computação Aplicação dos cartões de Jacquard ao cálculo de funções trigonométricas e logaritmos: concepção da máquina diferencial (matemático Charles Babbage - Inglaterra, 1882) 10 http://ei.cs.vt.edu/~history/Babbage.html Histórico da Computação Gerações Antes de 1943: Geração “zero” (baseado em engrenagens) 1943-1959 Primeira Geração Computadores à Válvulas 1959-1964 Segunda Geração Transístores e Circuitos Impressos 1964-1972 Terceira Geração Circuitos Integrados 1972- ? Quarta Geração LSI (500 partes), VLSI (10000) Alguns dizem que paralelismo e VLSI são a quinta geração 1a Geração 2a Geração 3a Geração Geração I - ENIAC ENIAC (1945) 30 toneladas, 19000 válvulas, consumia 200kwatts Era programado por conexão de cabos! “Killer” Application (primeira): resolver problemas do Manhattan Project (codinome do projeto da bomba atômica) Geração II – IBM 7090 IBM 7090 (1958) Versão de transístores do IBM 709 Usado para computação científica e também para usos comerciais. Geração III – IBM Systems/360 IBM Systems/360 (1964) vários modelos (13), 6 computadores e 40 periféricos, a IBM chegou a produzir 1000 por mês. Geração IV – Microcomputadores Micral (8008) (1973) Altair (Intel 8080) (1974) Odyssey Ralph Baer: 1968, 1972 Pong Nolan Bushnell : Atari (1972) Próximo Passo: A Revolução do Computador Pessoal 1953 – 100 computadores no mundo todo 1976 –dezenas de milhares de microcomputadores (Altair, Apple, etc.) Hoje – Só podemos adivinhar – dezenas de milhões, talvez centenas Apple Computers Apple I – 8 bit, 1 Mhz Max mem 32kb (1976) Apple II (1977) 8 bit, 1Mhz, gráfico! 6 cores em 280x192 Apple Computers Apple III (1980) Codename: Sara 8 bit, 2 MHz, max mem 256kb, max resolução 1 bit (Preto e Branco) a 590x192, unidade de disco A década de 80 No Brasil – Reserva de Mercado Alguns clones nacionais CP500 (TRS-80) CP400 (TRS80 Color) TK90X (ZX Spectrum) Hotbit (MSX) IBM PC (1981) O erro da IBM: Como a IBM deu de graça um dos maiores negócios do planeta à duas empresas (Intel, Microsoft) Apple Macintosh (1984) “Copiado” da Xerox por Steve Jobs, o Mac revoluciona com primeiro sistema de janelas e o primeiro sistema comercial com mouse. !!! A Década do Windows 1990-2000 1990 Microsoft Windows 3.0 1992 Intel i486DX2 - 25/50 MHz (external/internal), Windows 3.1, IBM ThinkPad 700C laptop 1993 IBM OS/2 2.1, Windows NT 3.1, IBM RS/6000 PowerPC (66 MHz), Pentium 60Mhz 1994 Apple Power Macintosh 6100 (60 MHz PowerPC), DEC Alpha AXP (300 MHz) , Iomega Zip drive (até 100 MB) 1995 Windows 95, Pentium Pro (200 MHz), Windows NT 4.0, Windows CE 1996 CD-RW 1997 AMD K6 (233MHz) 1998 400 MHz Pentium II processor, iMac 233 MHz PowerPC G3, Windows 98. 1999 Pentium III 1 Ghz, Apple PowerBook G3/333,Windows 2000 2000 PowerMac G4 Cube (450 MHz PowerPC G4) 2000-… Intel Pentium IV 3.4 Ghz HyperThreading 800Mhz Intel Pentium M (Centrino) 1.7 Ghz (Medição em Ghz não é mais significante, 1.7Ghz é equivalente a um Pentium 4 Mobile 2.5 Ghz) AMD Athlon 64 FX Etc…. Programação de Computadores Como programar computadores atuais? Linguagens de programação Programação de Computadores O que é língua? “O conjunto das palavras e expressões usadas por um povo, por uma nação, e o conjunto de regras da sua gramática.”, “Sistema de signos que permitem a comunicação entre os membros de uma comunidade.” O que é Linguagem: “O uso da palavra articulada ou escrita como meio de expressão e de comunicação entre pessoas.” Programação de Computadores Qual a linguagem que o computador entende? Será que fácil programar um computador assim? Programação de Computadores Linguagens de alto nível Próximo a linguagem humana Conjunto de símbolos reduzidos Possui uma gramática própria Exemplo Java C# Pascal Computador entende linguagem de alto nível? Não. Solução? Interpretador Compilador Lógica de programação LÓGICA DE PROGRAMAÇÃO: Técnica de encadear pensamentos para atingir determinado objetivo Necessária para desenvolver programas e sistemas, pois permite definir a seqüência lógica para a solução de um problema SEQÜÊNCIA LÓGICA: ? 1. 2. 3. ! Estes pensamentos podem ser descritos como uma seqüência de instruções, que devem ser seguidas para se cumprir uma determinada tarefa Passos executados até se atingir um objetivo ou solução de um problema Lógica de programação INSTRUÇÃO: Cada um dos passos, cada uma das ações a tomar (obedecendo a seqüência lógica) para ir resolvendo o problema, ou para ir executando a tarefa Em informática, é a informação que indica a um computador uma operação elementar a executar Ex.: “somar”, “subtrair”, “comparar se é maior”, etc Uma só instrução não resolve problemas Executar um conjunto de instruções Executar em uma sequência lógica Lógica de programação EXEMPLO: para “fazer omelete” Instruções: “quebrar ovos”, “bater ovos”, “pôr sal”, “ligar fogão”, “pôr óleo na frigideira”, “pôr frigideira no fogo”, “fritar ovos batidos”, etc... Quanto às instruções isoladas: Só “quebrar ovos”, ou só “pôr óleo na frigideira”, não é suficiente para cumprir a tarefa “fazer omelete” Quanto à sequência lógica: Se executarmos “fritar ovos batidos” antes de “bater ovos”, ou pior, antes de “quebrar ovos”, não iremos cumprir a tarefa “fazer omelete” Lógica de programação ALGORITMO: Seqüência finita de passos que levam à execução de uma tarefa Claro e preciso. Ex. “somar dois números”: Escrever primeiro número no retângulo A Escrever segundo número no retângulo B Somar o número do retângulo A com o número do retângulo B e escrever o resultado no retângulo C A B C + = Exemplo de algoritmo Quando uma dona de casa prepara um bolo, segue uma receita, que nada mais é do que um algoritmo em que cada instrução é umpasso a ser seguido para que o prato fique pronto com sucesso: 1. Bata 4 claras em neve 2. Adicione 2 xícaras de açúcar 3. Adicione 2 colheres de farinha de trigo, 4 gemas, uma colher de fermento e duas colheres de chocolate 4. Bata por 3 minutos 5. Unte uma assadeira com margarina e farinha de trigo 6. Coloque o bolo para assar por 20minutos Exemplo de algoritmo Um motorista que necessita efetuar a troca de um pneu furado segue uma rotina para realizar essa tarefa: 1. Verifica qual pneu está furado 2. Posiciona o macaco para levantar o carro 3. Pega o estepe 4. Solta os parafusos 5. Substitui o pneu furado 6. Recoloca os parafusos 7. Desce o carro 8. Guarda o macaco e o pneu furado O Programa PROGRAMA: Algoritmo escrito em uma linguagem de computador (linguagem de programação - C, Pascal, COBOL, Fortran, Basic, Java, etc.) Interpretado e executado por um computador Interpretação rigorosa, exata, do computador escrita do algoritmo na linguagem de prog. tem que seguir regras mais rigorosas A descrição de uma linguagem Sintaxe: é o conjunto de regras que determina quais construções são corretas para formação dos programas e quais não são; em outras palavras, preocupa-se com a “forma” dos programas (como expressões, comandos, declarações, etc. são colocados juntos para formar programas). Semântica: é a descrição da maneira que um programa sintaticamente correto é interpretado ou executado; em outras palavras, preocupa-se com o “significado” dos programas (como o programa vai se comportar quando executado no computador) A descrição de uma linguagem Torna-se interessante comentar que o principal objetivo de uma LP é dar suporte ao programador no desenvolvimento dos sistemas. Isto inclui assistência no projeto, implementação, teste, verificação e manutenção do software Existe uma série de características numa linguagem que contribuem para este objetivo. As características gerais que definem uma boa linguagem. Simplicidade: clareza e concisão semântica (linguagem com um mínimo número de conceitos e estruturas), e clareza sintática (sintaxe deve representar cada conceito de uma maneira apenas). Suporte para abstração de dados: representação de um objeto deve incluir somente os atributos relevantes. Expressividade: refere-se a facilidade com que um objeto pode ser representado; a linguagem deve oferecer estruturas de dados e de controle apropriadas. As características gerais que definem uma boa linguagem Ortogonalidade: refere-se a interação entre conceitos, isto é, o grau com que diferentes conceitos podem ser combinados uns com os outros de uma maneira consistente; ortogonalidade reduz o número de exceções das regras de uma linguagem, tornando mais fácil o seu aprendizado e memorização. Suporte à manutenção e portabilidade: habilidade de manter programas que devem ser fáceis de entender e alterar; é afetada pelas características anteriores. As características gerais que definem uma boa linguagem Eficiência: a avaliação precisa de uma linguagem, baseada em critérios pré-definidos, é extremamente importante; as medidas mais comuns são a eficiência da execução do programa, da tradução do programa, e da criação, teste e uso do programa. Classes e Gerações Linguagem de Máquina: é uma linguagem usualmente baseada num código binário, específico para cada tipo de computador (ou microprocessador). Como a codificação das instruções é feita na forma final de execução (endereços e opcode em binário), esta linguagem pode ser usada diretamente pela máquina. Linguagem de Baixo Nível: aqui começa a ser introduzida a abstração, pois os códigos binários são substituídos por mnemônicos. Neste caso é necessário usar um montador (assembler ), que consiste num programa que lê o programa em baixo nível e converte os códigos mnemônicos para opcodes . Linguagem de Alto Nível: é a LP mais próxima da linguagem do homem, não requer conhecimento da arquitetura da máquina e é portável, isto é, independente da máquina. O que caracteriza uma Linguagem de Programação? Gramática e significado bem definidos Implementável (executável) com eficiência ‘‘aceitável’’ Universal: deve ser possível expressar todo problema computável Natural para expressar problemas (em um certo domínio de aplicação) Aspectos do Estudo de linguagens Sintaxe: gramática (forma) Semântica: significado Processadores: compiladores, interpretadores, editores, ambientes visuais ... Por que tantas linguagens? Propósitos diferentes Avanços tecnológicos Interesses comercias Cultura e background científico O que é um paradigma de programação? Modelo, padrão ou estilo de programação suportado por linguagens que agrupam certas características comuns A classificação de linguagens em paradigmas é uma conseqüência de decisões de projeto que impactam radicalmente a forma na qual uma aplicação real é modelada do ponto de vista computacional. O Paradigma Imperativo Programas centrados no conceito de um estado (modelado por variáveis) e ações (comandos) que manipulam o estado Paradigma também denominado de procedural, por incluir subrotinas ou procedimentos como mecanismo de estruturação Primeiro paradigma a surgir e ainda é o dominante em aplicações “legadas” Modelo Computacional do Paradigma Imperativo Entrada Programa Saída Estado Vantagens do modelo imperativo Eficiência (embute modelo de Von Neumann) Modelagem “natural” de aplicações do mundo real Paradigma dominante e bem estabelecido Desvantagens do paradigma imperativo Relacionamento indireto entre E/S resulta em: difícil legibilidade erros introduzidos durante manutenção descrições demasiadamente operacionais focalizam o como e não o que O Paradigma Orientado a Objetos Não é um paradigma no sentido estrito: é uma subclassificacão do imperativo A diferença é mais de metodologia quanto à concepção e modelagem do sistema A grosso modo, uma aplicação é estruturada em módulos (classes) que agrupam um estado (atributos) e operações (métodos) sobre este Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos) Vantagens do Paradigma Orientado a objetos Todas as do estilo imperativo Classes estimulam projeto centrado em dados: modularidade, reuso e extensibilidade Aceitação comercial crescente Problemas do Paradigma OO Semelhantes aos do paradigma imperativo, mas amenizadas pelas facilidades de estruturação O Paradigma Funcional Programas são funções que descrevem uma relação explícita e precisa entre E/S Estilo declarativo: não há o conceito de estado nem comandos como atribuição Conceitos sofisticados como polimorfismo, funções de alta ordem e avaliação sob demanda Aplicação: prototipação em geral, IA, concorrência, core de várias soluções ... Modelo Computacional do Paradigma Funcional Entrada Programa Saída Visão Crítica do Paradigma Funcional Vantagens Manipulação de programas mais simples: - Prova de propriedades - Transformação (exemplo: otimização) - Concorrência explorada de forma natural Problemas “O mundo não é funcional!” Implementações ineficientes Mecanismos primitivos de E/S e formatação O Paradigma Lógico Programas são relações entre E/S Estilo declarativo, como no paradigma funcional Abstração: não determinismo Na prática, inclui características imperativas, por questão de eficiência Aplicações: prototipação em geral, sistemas especialistas,banco de dados, ... Modelo Computacional do Paradigma Lógico Entrada Programa Saída Visão Crítica do Paradigma Lógico Vantagens Em princípio, todas do paradigma funcional Permite concepção da aplicação em um alto nível de abstração (através de associações entre E/S) Problemas Em princípio, todos do paradigma funcional Linguagens usualmente não possuem tipos, nem são de alta ordem. Tendência: integração de paradigmas A principal vantagem é combinar facilidades de mais de um paradigma, aumentando o domínio de aplicação da linguagem Exemplos: linguagens lógicas ou funcionais com o conceito de estado e comandos A integração deve ser conduzida com muita cautela, para que não se viole os princípios básicos de cada paradigma. Outras Classificações Linguagens de 1a., 2a., 3a. 4a. e 5a. gerações Programação sequencial versus concorrente Programação linear versus programação visual (visual programming) Metaprogramação e reflexão Linguagens de script ... Smalltalk C PROLOG 1980....................Ada...........DBASE-II.................................................. 1990.....................................................................Haskell..........Godel... 1950........................................................................................................ FORTRAN 1960.......................ALGOL-60...........COBOL......LISP......................... SIMULA ALGOL-68 PL/I BASIC 1970..................Pascal............................................................................ Modula-2 ML Miranda Eifell C++ Delphi Java Python Ruby Imperativo Funcional LógicoOrientado a objetos Um breve histórico CommonLISP Erlang F# Lua 2000...C#.............................................................................................. Um breve histórico Para mais detalhes, inclusive de versões das linguagens: http://www.levenez.com/lang/ Evolução centrada em níveis crescentes de abstração Linguagens de máquina Endereços físicos e operation code Linguagens Assembly Mnemônicos e labels simbólicos Linguagens de “alto nível” Variáveis e atribuição (versus acesso direto à memória) Estruturas de dados (versus estruturas de armazenamento) Evolução centrada em níveis crescentes de abstração Evolução centrada em níveis crescentes de abstração Evolução centrada em níveis crescentes de abstração Evolução centrada em níveis crescentes de abstração Evolução centrada em níveis crescentes de abstração Estruturas de controle (versus jumps e gotos) Estrutura de blocos como forma de encapsulamento Generalização e parametrização (abstração de tipos de valores) Classes, processos, aspectos, ... Evolução centrada em níveis crescentes de abstração Evolução centrada em níveis crescentes de abstração Evolução centrada em níveis crescentes de abstração Leitura Linguagens de Programação : Princípios e Paradigmas Capítulo 1
Compartilhar