Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática - FACIN LAPRO I Prof. Dr. Rafael Garibotti v Baseado no material cedido pelos Profs. Dr. Marco Mangan e Dr. Matheus Trevisan
AULA SOBRE: LINGUAGEM DE PROGRAMAÇÃO
LINGUAGEM DE PROGRAMAÇÃO DEFINIÇÃO: Ø Linguagem utilizada para enviar instruções a um computador. Como qualquer linguagem, apresenta símbolos e regras para a combinação desses símbolos. (adaptado de Downing et al. Dictionary of computer and Internet terms). Quais linguagens de programação vocês conhecem? 1
TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Ø Linguagem de alto nível ü Ex.: C, C#, Objective-C, Java, Ruby, Python, Erlang, Clojure, Prolog, Processing. Ø Linguagem de montagem (assembly) ü Ex.: Microsoft Macro Assembler. Ø Linguagem de máquina ü Ex.: conjunto de instruções para processadores Intel. Contador := 0; LDA 4 STA A 0010 0100 0001 1010 2
TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Ø Linguagem de alto nível ü São linguagens voltadas para o usuário (programador). ü Os comandos das linguagens apresentam um nível mais alto de abstração e próximos da linguagem humana. Contador := 0; ü Necessitam de programas especiais (compiladores ou interpretadores) para traduzir o código para linguagem de máquina. ü Vantagens: têm maior portabilidade podendo ser executadas em várias plataformas com pouquíssimas modificações; não exigem conhecimento do código de máquina. ü Desvantagens: as rotinas geradas são mais genéricas e portanto mais complexas e por isso são mais lentas e ocupam mais memória (o código não é tão otimizado). 3
TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Ø Linguagem de alto nível Begin var op1, op2, r: integer; r := 0; while op2 > 0 do begin r := r + op1; op2 := op2-1; end End 4
TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Ø Linguagem de montagem (assembly) ü São linguagens voltadas para a máquina e para o usuário. LDA 4 STA A ü São linguagens intermediárias entre a linguagem de máquina e a linguagem de alto nível. ü As instruções são simplificações da linguagem de máquina que usam código mnemônicos (em inglês). ü Vantagens: comandos com sintaxe mais inteligível que nas linguagens de máquina. ü Desvantagens: alguns mnemônicos ainda são de difícil compreensão; ainda dependente da arquitetura do computador em questão. 5
TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Ø Linguagem intermediária Begin var op1, op2, r: integer; r := 0; laço : if op2 = 0 go to fim; r := r + op1; op2 := op2-1; go to laço; fim: End. 6
TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Ø Linguagem de montagem (Assembly) ORG 0 LDA ZERO STA R LAÇO : LDA OP2 JZ FIM LDA R ADD OP1 STA R LDA OP2 ADD M1 STA OP2 JMP LAÇO FIM : HLT ORG 128 OP1 DEF BYTE OP2 DEF BYTE R DEF BYTE ZERO DEF BYTE = 0 M1 DEF BYTE = -1 r := 0 laço : if op2 = 0 go to fim r := r + op1 op2 := op2-1 go to laço : 7
TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Ø Linguagem de máquina ü São linguagens voltadas para a máquina. ü São baseadas no código binário utilizado diretamente pelo computador. Cadeias de 0s e 1s. ü As instruções variam de processador para processador. 0010 0100 0001 1010 ü Vantagens: produz o único conjunto de instruções que um computador entende sem um tradutor, criando códigos concisos e eficientes além de serem consideravelmente menores do que uma versão escrita em C. ü Desvantagens: pouca portabilidade (em geral, um programa para um processador não serve para outro); programas não são estruturados e de difícil compreensão; manutenção e correção de erros extremamente difícil. 8
TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Ø Linguagem de máquina end.mem. 0 2 83 2 1 82 4 2 81 6 A 16 8 2 82 A 3 80 C 1 82 E 2 81 10 3 84 12 1 81 14 8 4 16 F 9
COMPILADOR DEFINIÇÃO: Ø Um programa de computador que recebe um texto em uma linguagem e gera texto equivalente em outra linguagem. O texto usado na entrada é chamado de código-fonte e o texto na saída é chamado de código-objeto (adaptado de Downing et al. Dictionary of computer and Internet terms). Entrada Código-fonte Compilador Código-objeto Máquina Saída 10
COMPILADOR Ø Durante a 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, e é finalmente gerado o código objeto em linguagem binária de máquina. Ø 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. 11
LINGUAGEM C DEFINIÇÃO: Ø Uma linguagem de programação desenvolvida na década de 1970. Um compilador C é parte do sistema operacional UNIX e boa parte do código do UNIX é escrito em C. A linguagem oferece pleno acesso à representação interna dos dados do computador, o que permite alcançar a maior eficiência disponível em um determinado computador. (adaptado de Downing et al. Dictionary of computer and Internet terms). Ø Uma das linguagens mais utilizadas no mundo! ü http://www.lextrait.com/vincent/implementations.html 12
COMPILADOR C DEFINIÇÃO: Ø Um compilador que recebe um texto escrito em linguagem C e gera um novo texto em linguagem de montagem ou linguagem de máquina (adaptado de Downing et al. Dictionary of computer and Internet terms). 13
ETAPAS DE COMPILAÇÃO EM LINGUAGEM C Editor de Texto Programa Fonte (.c) Compilador Programa Objeto (.o) Biblioteca Padrão (.h) Outras Bibliotecas(.h) Ligador ou Linkeditor Programa Executável 14
AMBIENTES INTEGRADOS DE DESENVOLVIMENTO (IDE) Ø Code::Blocks / QT Creator Ø Eclipse / Netbeans Ø Xcode Ø Visual Studio ü Não incentivaremos nenhuma IDE nesta disciplina. Pelo contrário, visamos a compilação manual dos códigos-fontes atrás de comandos usando um terminal. 15
PROGRAMA DEFINIÇÃO: Ø Um conjunto instruções que pode ser executado por um computador (adaptado de Downing et al. Dictionary of computer and Internet terms). q Aplicações ou aplicativos: programas que realizam tarefas de interesse do usuário. Ex.: processadores e editores de texto, planilhas eletrônicas, sistemas de informação. q Utilitários ou sistemas: programas que realizam tarefas relacionadas com o computador. Ex.: sistemas operacionais, antivírus, compiladores. 16
PROGRAMA FLUXO: 1. Início 2. Entrada 3. Processamento 4. Saída 5. Término Ø Adaptado de Jack Purdum, Beginning C for Arduino, The Five Programming Steps. 17
IMPLEMENTAÇÃO DE ALGORITMOS
ETAPAS PARA RESOLVER UM PROBLEMA Definir o problema Projetar um algoritmo para solucionar o problema Editar um arquivo fonte, em uma linguagem de programação Redefinir o problema Erros de sintaxe Compilar Testar e depurar o programa gerado Erros de lógica 18
PASSOS NA CONSTRUÇÃO DE ALGORITMOS Ø Conhecer o problema ü Pensar sobre o que exatamente precisa ser resolvido; ü Focar no que deve ser obtido, nas restrições existentes, etc... e não em como resolver o problema; ü Exemplos: fazer um mousse de chocolate; somar dois números. 19
PASSOS NA CONSTRUÇÃO DE ALGORITMOS Ø Identificar os dados de entrada ü Responder: Quais valores ou informações precisam ser conhecidos para resolver o problema? Que valores ou informações mudariam para diferentes instâncias do problema? ü Exemplos: quantidade de chocolate, açúcar, etc; dois números inteiros 20
PASSOS NA CONSTRUÇÃO DE ALGORITMOS Ø Identificar os dados de saída ü Qual o resultado ou resultados esperados? ü Exemplos: quantidade de mousse; um valor inteiro representando a soma. 21
PASSOS NA CONSTRUÇÃO DE ALGORITMOS Ø Construir o algoritmo ü Deve-se pensar os diversos passos para resolver o problema. ü Normalmente é possível resolver o problema de mais de uma maneira, ou seja, é possível ter mais de um algoritmo para resolver o mesmo problema. ü Para aprender a programar, é preciso construir algoritmos (sem medo de errar e sem se contentar com a primeira solução). 22
PASSOS NA CONSTRUÇÃO DE ALGORITMOS Ø Testar o algoritmo ü Fundamental realizar o chamado teste de mesa! SEM usar o computador! ü Não tenha preguiça de fazer o algoritmo no papel e fazer o teste de mesa, muita dor de cabeça será evitada! 23
TESTE DE MESA Ø O teste de mesa é feito: ü Escolhendo valores para as variáveis de entrada; ü Seguindo cada uma das etapas do algoritmo; ü Verificando a correção da(s) saída(s). Ø Observação: Com programas pode-se usar o recurso de depuração (debug), mas esse é usado para detectar problemas. A área de Engenharia de Software tem estudos que mostram que quanto antes um erro for detectado, menor é o custo de correção. 24
PARADIGMAS DE LINGUAGENS DE PROGRAMAÇÃO
PARADIGMA IMPERATIVO Ø O modelo Imperativo é baseado na perspectiva do computador: a execução sequencial de comandos e o uso de dados são conceitos baseados no modo como os computadores executam programas no nível de linguagem de máquina. Ø Este modelo é o predominante. Ø As linguagens imperativas são de fácil tradução. Ø Exemplos: FORTRAN, COBOL, ALGOL 60, APL, BASIC, PL/I, SIMULA 67, PASCAL, C e ADA. 25
PARADIGMA IMPERATIVO Ø Exemplo: Linguagem C #include <stdio.h> int main (void) { printf ("Ola! Eu estou vivo!\n"); return 0; } 26
PARADIGMA FUNCIONAL Ø O modelo Funcional focaliza o processo de resolução do problema. A visão funcional resulta num programa que descreve as operações (funções) que devem ser efetuadas para resolver o problema. Ø Baseia-se no conceito matemático de função, que é um mapeamento de um conjunto A num conjunto B. Ø Exemplos: ML, LISP, HASKELL. fun soma ( x: int, y: int) = x + y; fun divide ( x:int, y: int) = x div 2; fun media m n = divide(soma(m,n), 2); media 4 2; 27
PARADIGMA LÓGICO Ø O modelo Lógico está relacionado à perspectiva da pessoa: ela encara o problema de uma perspectiva lógica. Ø Um programa lógico é equivalente à descrição do problema expressa de maneira formal, similar à maneira que o ser humano raciocinaria sobre ele. Ø Escrever um programa é como provar um teorema. Ø Exemplo: PROLOG. colega(carlos,alex). colega(carlos,rafael). colega(carlos,pedro). colega(pedro,paulo). lista_colega(c,l):-bagof(x, colega(c,x), L). 28
PARADIGMA ORIENTADO A OBJETO (OO) Ø O modelo Orientado a Objeto focaliza mais o problema, baseado na união dos conceitos de dados e operações. Ø Um programa OO é equivalente a objetos que mandam mensagens entre si. Os objetos do programa equivalem aos objetos da vida real (problema). Ø A primeira linguagem OO foi Simula, desenvolvida em 1966 e depois refinada em Smalltalk. Existem algumas linguagens híbridas: Modelo Imperativo mais características de Orientação a Objetos (OO), assim como C++. Ø Exemplos: Simula, Smalltalk, ObjectPascal, C++, Java, Visual Basic, C#. 29
PARADIGMA ORIENTADO A OBJETO (OO) Ø Exemplo: JAVA class Pessoa { private String nome; private int idade; public Pessoa(String n, int i){ nome = n; idade = i; } } public void imprime(){ System.out.println( Nome: + nome); System.out.println( Idade: + idade); } 30
ATIVIDADE
LABORATÓRIO Ø As atividades do laboratório da aula de hoje estão no Moodle. 31