Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Documentos relacionados
O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D)

Introdução às Linguagens de Programação

Curso Técnico em Redes

1.1. Organização de um Sistema Computacional

ALP Algoritmos e Programação. . Linguagens para Computadores

Organização e Arquitetura de Computadores I. de Computadores

Programação de Computadores III

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

COMPILADORES E INTERPRETADORES

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Figura 1 - O computador

1. NÍVEL CONVENCIONAL DE MÁQUINA

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Introdução a Informática. Prof.: Roberto Franciscatto

Aula teórica 3. Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java. Preparado por eng.

Parte II Introdução a Linguagens de Programação

3 Revisão de Software

Sistemas Operacionais

Software Básico (INF1018)

Lição 1 Introdução à programação de computadores

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

Disciplina: Introdução à informática Profª Érica Barcelos

Introdução à Lógica de Programação

Dadas a base e a altura de um triangulo, determinar sua área.

Algoritmos e Programação I

Processamento de Dados

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador

MC-102 Aula 01. Instituto de Computação Unicamp


Tecnologia da Informação. Visão Geral sobre Informática

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

UFRPE Prof. Gustavo Callou

Introdução à Arquitetura de Computadores

Linguagem de Programação I. Aula 05 Linguagem C

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Introdução à Arquitetura de Computadores IFES Campus Serra

Introdução à Programação

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

Introdução à Engenharia de Computação

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Geração e Otimização de Código

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

ARQUITETURA DE COMPUTADORES

ICC Introdução para JavaScript

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Linguagem de Montagem 2. Operações e Operandos

A Linguagem Pascal e o Ambiente de Programação Dev-Pascal. Introdução à Ciência da Computação I

O modelo do computador

UNIP - UNIVERSIDADE PAULISTA. Arquitetura de computadores

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Orientação a Objetos

Introdução à Programação de Computadores

Everson Scherrer Borges João Paulo de Brito Gonçalves

Edeyson Andrade Gomes

Conceitos básicos de programação

Fundamentos de Microinformática. Ricardo José Cabeça de Souza 2010 Fundamentos 3

Componentes do Computador e. aula 3. Profa. Débora Matos

Introdução aos Sistemas

- Aula 1 - ARQUITETURA DE COMPUTADORES

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

AMBIENTE DE PROGRAMAÇÃO PYTHON

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

Informática II Cap. 3

Introdução à Engenharia de Computação

Instituto Superior Politécnico de VISEU. Escola Superior de Tecnologia

UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE

UNIVERSIDADE FEDERAL DE UBERLÂNDIA Faculdade de Computação Curso de Introdução à Informática Prof: Anilton Joaquim da Silva / Ezequiel Roberto Zorzal

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

1. CAPÍTULO COMPUTADORES

4 Estrutura do Sistema Operacional Kernel

Introdução. Capítulo Breve sinopse

Introdução à Programação e Algoritmos. Aécio Costa

LINGUAGEM C UMA INTRODUÇÃO

O Processo de Programação

Resolução de problemas e desenvolvimento de algoritmos

ARQUITETURA DE COMPUTADORES - CONCEITUAL

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Algoritmos e Linguagem de Programação de Computadores I

Geração de código intermediário. Novembro 2006

Computador Digital Circuitos de um computador (Hardware)

Usando o simulador MIPS

15 Computador, projeto e manufatura

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Aula 10 Introdução à Algoritmos. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

2. Representação Numérica

Sistema Operacional Correção - Exercício de Revisão

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Introdução ao Processamento de Dados (IPD)

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

Disciplina: Organização de computadores

Transcrição:

Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Prof. Bruno Vilela Oliveira bruno@cca.ufes.br http://www.brunovilela.webnode.com.br

Programas e Linguagens Para executar uma tarefa qualquer, um computador precisa receber instruções precisas sobre o que fazer. Uma sequência adequada de instruções de computador, para a realização de uma determinada tarefa, se constitui num PROGRAMA de computador.

Programas e Linguagens Uma linguagem de programação é um conjunto de ferramentas, regras de sintaxe e símbolos ou códigos que nos permitem escrever programas de computador, destinados a instruir o computador para a realização de suas tarefas.

Programas e Linguagens O computador é um equipamento que só consegue compreender as instruções projetadas em seu hardware. Esse conjunto de instruções define sua linguagem, também chamada de linguagem de máquina. A linguagem de máquina normalmente utiliza um sistema binário para representar instruções e dados.

Programas e Linguagens Pode acontecer de seu computador adotar uma codificação binária diferente para instruções similares em relação ao computador de seu vizinho. Na realidade a afirmação acima apenas quer dizer que podem existir diferentes famílias de equipamentos, cada uma com sua própria linguagem de máquina, que é comum entre os computadores da mesma família, mas distinta da linguagem usada pelos computadores de outras famílias.

Programas e Linguagens Mas as linguagens de programação modernas não lhe obrigam a conhecer a linguagem da máquina para a qual você quer escrever programas. Isto porque foram desenvolvidas ferramentas capazes de traduzir as instruções de uma linguagem mais parecida com a dos humanos (linguagem de alto nível) para a linguagem de máquina (que se baseia em um sistema binário).

Programas e Linguagens Então, como você executa seu código escrito em uma linguagem de programação? Para escrever um programa especificando instruções em determinada linguagem de programação, você precisará de um editor de textos e ferramentas de tradução apropriadas para a linguagem de programação que você decidir utilizar. Estas ferramentas podem ser compiladores, interpretadores ou abordagens híbridas. O editor salva o código que você escreveu em um arquivo em sua unidade de memória secundária (discos, pendrives, cds, etc). O código (algumas vezes chamado de código fonte) é um simples texto, e pode ser escrito e lido por humanos. O código fonte.pas

Programas e Linguagens Então, como você executa seu código escrito em uma linguagem de programação? Mas os computadores não podem processar textos significativos para humanos, pelo menos não muito bem. É por isso que precisamos traduzir o código fonte próprio para os 0s e 1s binários que os computadores compreendem. É isto que um programa compilador ou um interpretador fazem.

Programas e Linguagens Então, como você executa seu código escrito em uma linguagem de programação? O compilador Pascal Hmmm... Parece um jogo de adivinhação....pas O compilador (ou interpretador) traduz o texto do código fonte na linguagem que o computador consegue entender.

Programas e Linguagens Então, como você executa seu código escrito em uma linguagem de programação? A linguagem estudada neste curso (Pascal) geralmente possui ferramentas do tipo compilador para traduzir código fonte em programa na linguagem do computador. Um compilador realiza o processo de compilação que consiste em traduzir todas as instruções do código fonte para uma outra linguagem e somente depois da completa tradução é que a versão traduzida do código poderá ser utilizada. No caso do compilador que integra o Turbo Pascal, todo o código fonte é transformado em linguagem de máquina e este poderá ser executado diretamente em ambiente Windows.

Programas e Linguagens Interpretadores funcionam um pouco diferente dos compiladores e os detalhes estão nos próximos slides que contam um pouco da história das linguagens de programação e as principais características das abordagens de tradução de código.

Linguagem de Máquina Primeiros programas: Escritos em linguagem de máquina, isto é, as instruções eram escritas diretamente na linguagem do computador (formada apenas com 1's e 0's). Um programa em linguagem de máquina é uma longa série de 0's e 1's, ordenados de forma que alguns representam códigos de instruções e outros representam os dados que serão processados (ou indicam onde esses dados estão armazenados).

Linguagem de Máquina Em um programa escrito em linguagem de máquina, cada instrução escrita pelo programador será individualmente executada, isto é, a cada instrução do programa corresponderá uma ação do computador. A relação é portanto 1 para 1 - uma instrução do programa corresponde a uma operação do computador.

Linguagem de Máquina Imagine então: um programa extenso escrito apenas usando 1's e 0's; para cada diferente marca ou modelo de computador, as regras para entender esses códigos serão totalmente diferentes; Logo, a tarefa de programação consistia de: escrever uma a uma as instruções e os dados adequadamente codificados e ordenados perfurar todos o programas em cartões e submeter toda a massa de cartões ao computador, para finalmente receber algumas horas depois o seu programa de volta com uma mensagem de erro tipo "erro no cartão X"... e mais nada!

Linguagem de Máquina Problemas: Programas difíceis de serem escritos sem se cometer muitos erros A programação era um processo longo, difícil, entediante e principalmente caro. Um programa em linguagem de máquina era também extremamente difícil de ser entendido por outros programadores que futuramente viessem a trabalhar na manutenção do programa. Essa complexidade levou à necessidade de se desenvolverem técnicas e ferramentas para tornar a escrita e manutenção de programas mais fácil, mais rápida e principalmente mais barata.

Linguagem de Montagem A primeira tentativa bem-sucedida para resolver o problema acima descrito foi a criação de uma linguagem em que os códigos numéricos foram substituídos por mnemônicos (palavras ou símbolos como, por exemplo, LOAD = carregar e ADD = somar, que se aproximam de palavras comuns da língua inglesa). As localizações dos dados foram substituídas por referências simbólicas.

Linguagem de Montagem Foram também definidas regras de sintaxe de fácil memorização, de forma a tornar a escrita de programas e sua posterior manutenção uma técnica de complexidade relativamente menor. Essa linguagem simbólica recebeu o nome de Assembly Language (Linguagem de Montagem).

Linguagem de Montagem O programador não mais precisava decorar os códigos numéricos que representavam as diferentes instruções e os endereços reais de armazenamento, bastando decorar mnemônicos para as instruções e definir nomes para as referências dos endereços, Ex.: NOME para o local onde seriam armazenados os nomes SALARIO para o local onde seriam armazenados os salários, etc)

Linguagem de Montagem É importante lembrar que um computador é sempre monoglota, isto é, ele entende única e exclusivamente a sua própria linguagem de máquina. Para escrever um programa em outra linguagem e ele ser entendido e processado no computador, é preciso haver algum outro programa que leia o programa escrito nessa linguagem alternativa e o traduza para a linguagem nativa do computador Isto é, a linguagem de máquina entendida pelo computador.

Linguagem de Montagem No entanto, o processo continuava lento e complexo, exigindo do programador uma grande compreensão do processo e profundo conhecimento da máquina que ele estava programando.

Linguagens de Programação Os problemas citados anteriormente levaram a uma busca por linguagens que fossem mais simples de programar e entender, mais rápidas e eficientes (levando a programas mais enxutos, com menos instruções), menos dependente do computador-alvo, mas que processassem com boa eficiência (não acarretando processamento lento no computador).

Linguagens de Programação Uma linguagem de programação é outro meio pelo qual se pode indicar os passos que devem ser realizados pelo computador para resolver problemas. Utilizando as linguagens de programação, podese colocar os algoritmos numa forma que (após a devida tradução das instruções) o computador possa interpretá-los, ou seja, na forma de programas computacionais.

Linguagens de Programação As primeiras linguagens foram: FORTRAN (1957), usada basicamente para manipulação de fórmulas; ALGOL (1958), para manipulação de algoritmos; COBOL (1959), para processamento comercial e ainda hoje bastante usada, especialmente em computadores de grande porte (mainframes) em bancos.

Linguagens de Programação Nas décadas de 60 e 70, podem ser citadas: Pascal, a primeira linguagem de alto nível estruturada; BASIC, linguagem criada para facilitar a programação por não-profissionais; ADA, linguagem para processamento em tempo real criada sob encomenda do DoD (Department of Defense norte-americano) e ainda hoje a única linguagem aceita para programas escritos sob encomenda do DoD.

Linguagens de Programação Cada nova linguagem criada visa atingir níveis de abstração mais altos, isto é, afastam cada vez mais o programador do nível de máquina. Se por um lado essas novas linguagens facilitam muito o trabalho do programadores (e reduzem sua necessidade de conhecer o hardware da máquina), elas cobram um alto preço em termos de desempenho (isto é, são cada vez mais lentas, ao consumir cada vez mais ciclos de máquina e espaço em memória).

Linguagens de Programação Esse aumento de exigência ao poder de processamento dos computadores é compensado (e desta forma se faz menos notado) pelo aumento acelerado do poder de processamento dos novos chips (exemplificado pela chamada Lei de Moore, que afirma que o poder de processamento dos chips dobra a cada 18 meses) e pelos avanços na arquitetura dos computadores.

Linguagens de Programação Tal como na linguagem humana, as linguagens de computadores proliferam e sempre há problemas que ainda persistem, continuando a busca por uma linguagem ideal - a solução "definitiva".

Tradução Para que o computador execute um determinado algoritmo, as instruções devem ser transcritas para uma linguagem que a máquina consiga compreender. Um programa em linguagem simbólica escrito por um programador (chamado código fonte) é um conjunto de instruções que é clara para programadores, mas não para computadores.

Tradução Um processo de tradução converte o código fonte (source code) de um programa para a linguagem de máquina do computador, chamada código objeto (object code).

Tradução Tanto os programas em linguagem de alto nível como os escritos em linguagem de Montagem precisam ser traduzidos para linguagem de máquina para poderem ser submetidos ao computador e processados.

Montagem A tradução de um programa em linguagem de montagem para a linguagem de máquina (processo de montagem) é realizado por um programa chamado Assembler (Montador).

Montagem O programa Assembler examina e em seguida converte cada instrução escrita em linguagem Assembly em uma instrução equivalente em linguagem de máquina, gerando assim um programa em linguagem de máquina (código objeto).

Montagem Processo de Montagem Código Fonte Tradução (montagem) Linguagem de Máquina

Compilação Compilação é o processo de tradução de um programa escrito em linguagem de alto nível para código em linguagem de máquina. É similar à montagem (verificação / análise do código fonte, resolução das referências de memória, reserva de espaço em memória e conversão para código de máquina binário). O que diferencia a compilação do processo de montagem é sua maior complexidade.

Compilação No processo de montagem, há uma relação de 1:1, ou seja, cada instrução do código fonte resulta em uma instrução de máquina, enquanto na compilação a relação é múltipla, cada instrução do código fonte gera várias instruções de máquina. Processo de Compilação Linguagem de Baixo Nível Código Assembly Montagem Linguagem de alto Nível Código Fonte Tradução (Compilação) Linguagem de Máquina Código Objeto

Compilação O código fonte é analisado (análise léxica, sintática e semântica), é gerado um código intermediário e são construídas tabelas de símbolos, alocam-se as áreas de memória para variáveis e atribui-se os registradores a serem utilizados. Finalmente é gerado o código objeto em linguagem de máquina.

Compilação Em alguns compiladores, é gerado um código intermediário em Assembly (que pode ser visualizado pelo programador) e que em seguida passa pelo montador para gerar finalmente o código objeto em linguagem de máquina.

Bibliotecas O desenvolvimento de um programa certamente utilizará diversas operações que são comuns a muitos outros programas. Por exemplo, a execução de uma instrução de entrada e saída, a classificação dos dados de um arquivo, o cálculo de funções matemáticas, etc. Uma linguagem de alto nível geralmente incorpora diversas rotinas prontas (que fazem parte da linguagem) e que compõem bibliotecas (librarys) de funções pré-programadas que poderão ser utilizadas pelo programador, poupando tempo, aumentando a eficiência e evitando erros.

Bibliotecas Dessa forma, um programa em alto nível possivelmente conterá diversas chamadas de biblioteca (library calls). Essas funções não devem ser confundidas com as instruções da linguagem - na realidade, são pequenos programas externos que são chamados através de instruções especiais de chamada de biblioteca. Para serem executadas, essas rotinas precisam ser incorporadas ao código do programador, isto é, a chamada de biblioteca precisa ser substituída pelo código propriamente dito, incluindo os parâmetros necessários.

Ligação O código objeto preparado pelo compilador em geral não é imediatamente executável, pois ainda existe código (as rotinas de biblioteca) a ser incorporado ao programa. A cada chamada de biblioteca encontrada no código fonte, o compilador precisará incluir uma chamada para a rotina e o endereço dos dados que devam ser passados para a rotina.

Ligação A tarefa de examinar o código objeto, procurar as referências a rotinas de biblioteca (que constituem referências externas não resolvidas), buscar a rotina da biblioteca, substituir a chamada pelo código ("resolver as referências externas") e obter os parâmetros para incluí-los no código objeto é executada por um programa chamado Ligador (LinkEditor).

Ligação O resultado da execução do Ligador é o código final pronto para ser executado pelo computador, chamado módulo de carga ou código executável. Processo de Compilação e Ligação Linguagem de Baixo Nível Código Assembly Montagem Assembler Linguagem de alto Nível Compilação Ligação Módulo de Carga Código Fonte Compilador LinkEditor Código Executável

Ligação O módulo de carga, após testado e depurado (isto é, depois de resolvidos todos os erros, também chamados "bugs") é armazenado em memória secundária para ser executado quando necessário. O processo de compilação e ligação é executado apenas pelo programador na fase de desenvolvimento e não mais precisará ser executado pelo usuário, quando da execução do programa.

Interpretação Um método alternativo chama-se de interpretação e, a partir do programa fonte, realiza as três fases (compilação, ligação e execução), comando por comando. Traduz e envia para execução, instrução por instrução e o programa permanece na forma fonte. Linguagem de alto Nível Tradução (Interpretação) Execução Resultados Código Fonte Interpretador

Referências BORLAND. Turbo Pascal, versão 7.0. [S.L.] : Borland International, Inc.,1992. DEITEL, P. J.; DEITEL, H.M.; Java: How to program, 9th ed, Ed. Prentice-Hall, 2011. ISBN: 978-0-13-257566-9. FARRER, H.; BECKER, C. G.; FARIA, E. C.; MATOS, H. F.; et al. Algoritmos estruturados. 3ed, Ed. LTC, 1999. ISBN: 9788521611806. FARRER, H.; BECKER, C. G.; FARIA, E. C.; MATOS, H. F.; et al. Pascal estruturado. 3ed, Ed. LTC, 1999. ISBN: 9788521611745. GUIMARÃES, A. M.; LAGES, N. A. C.; Algoritmos e estruturas de dados. 1ed, Ed. LTC, 1994. ISBN: 9788521603788. GRIFFITHS,D., BARRY,P., Head First Programming A learner's guide to programming using the Python language, O Reilly, 2009, 406p. http://wwwusers.rdc.puc-rio.br/rmano/processo.html Velloso, F. C.; Informática: Conceitos Básicos. 7ed, Ed. Campus, 2004. ISBN: 9788535215366.