Prof. Rodrigo Rocha

Documentos relacionados
Revisão: linguagens de programação

Aspectos preliminares

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Linguagens de Programação

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Linguagens de Programação

Linguagem de Programação e Compiladores

Linguagens de Programação Aula 3

Paradigmas de Linguagens Computacionais (PLC) (Apresentação da disciplina)

Linguagens de Programação. Introdução. Carlos Bazilio

Capítulo 1. Aspectos Preliminares

Programação de Computadores

Linguagens Computacionais (Conceitos Básicos)

As fases de um compilador

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

Programação de Computadores

Nomes, vinculações e escopos

Histórico de Linguagens de Programação

Nomes, vinculações e escopos

As fases de um compilador

Conceitos de Linguagens de Programação

Linguagens de Programação Funcional

Programação de Computadores:

Programação de Computadores

Fundamentos de Programação 1

1 Introdução à Programação O que é? Para que serve?... 1

PLANO DE UNIDADE DIDÁTICA- PUD

Aspectos preliminares

Aspectos preliminares

CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO

Informática I. Aula Aula 18-29/10/2007 1

Expressões e sentença de atribuição

PROGRAMAÇÃO ORIENTADA A OBJETOS I -CONCEITOS PRELIMINARES. Prof. Angelo Augusto Frozza, M.Sc.

LAPRO I. Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática - FACIN. Prof. Dr. Rafael Garibotti

Aula 1 Java Prof. Dr. Sylvio Barbon Junior

Linguagens de Programação. Marco A L Barbosa

Noções de compilação

Informática I. Aula 9. Aula 9-17/05/2006 1

Noções de compilação

Paradigmas de Linguagem de Programação

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Informática I. Aula 19. Aula 19-31/10/2007 1

Python - Variáveis e expressões

Paradigmas de Linguagens

Informática I. Aula 12. Aula 12-29/05/2006 1

Conceitos de Linguagem de Programação - 2

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

Informática I. Aula 9. Aula 9-27/09/2006 1

Programação I Apresentação

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Universidade Estadual de Santa Cruz

Paradigmas de Programação

Compiladores. Introdução

ao paradigma imperativo

Linguagens de Programação

Algoritmos e Programação

Paradigmas de Programação

Curso: Análise e Desenvolvimento de Sistemas. (Introdução a disciplina Algoritmos e Programação)

Algoritmos e Programação

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 1ª Parte Prof. Sandra Pais Soares

Projeto de Compiladores

a) Computador b) Estrutura do sistema i. Hardware ii.software c) Linguagens de Programação i. Paradigmas e Programação 1.

2 Paradigmas de linguagens de programação João B. Rocha- Junior. As linguagens evoluem com o passar do tempo

Introdução à Programação

Paradigmas de Programação

Autômatos e Linguagens

Linguagens de Programação

Paradigmas de Linguagem de Programação. Aspectos Básicos

Visão Geral... e conceitos básicos

AJProença, Sistemas de Computação, UMinho, 2017/18 1

Organização de Computadores

LINGUAGENS FORA DO PADRÃO DE MERCADO

Fundamentos de Programação 1

3. Linguagem de Programação C

Capítulo 5. Nomes, Vinculações e Escopos

Métodos de implementação de linguagens. Kellen Pinagé

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

Capítulo III - Linguagens de Programação

MINISTÉRIO DA EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS DIRETORIA DE GRADUAÇÃO

Introdução à Computação

Introdução à Computação

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

Implementando subprogramas

Compiladores. Introdução à Compiladores

Linguagens de Programação Conceitos e Técnicas. Amarrações

Introdução as Máquinas de Autômatos

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Universidade Estadual De Santa Cruz (UESC)

Introdução a lógica e a Linguagem de Programação

Introdução à Computação

Linguagens de Programação

Introdução a Ciência da Computação

Introdução. Parte 01. Desenvolvimento de Programação Orientada a Objetos. Prof. Pedro Neto

II.1 Conceitos Fundamentais. Uma delas é programar o =>

Paradigmas de Programação

Estudos de Linguagens de Programação - Revisão

Transcrição:

: sobre : MATA56 - de Linguagens de Programação, UFBA, 2016.1

: sobre

: Links interessantes sobre Comparação de sintaxe: http://merd.sourceforge.net/pixel/ language-study/syntax-across-languages/ Programa escrito em várias linguagens: http://www.99-bottles-of-beer.net/ Popularidade de linguagens: http://www.tiobe.com/ index.php/content/paperinfo/tpci/index.html

: sobre sobre

: sobre Domínios Aplicações científicas números ponto flutuante, operações vetorizadas Aplicações de negócio relatórios, números decimais Inteligência artificial manipulação de símbolos Programação de sistemas eficiência Web marcação, script...

: Critérios de avaliação (Sebesta) sobre Legibilidade Escritabilidade Confiabilidade Custo

: Características de (Tucker) sobre Simplicidade e legibilidade Clareza sobre amarração (binding) Confiabilidade Suporte Abstração Ortogonalidade Implementação eficiente

: Implementação de sobre Compilada Interpretada Híbrida JIT (just-in-time compilation)

: sobre Sintaxe Descreve a aparência (forma) dos programas Um programa pode estar sintaticamente correto mas, mesmo assim, não fazer sentido (ex.: "oi" * 5 em Java) A sintaxe de uma LP pode ser descrita por expressões regulares e uma gramática BNF. Exemplo (LISP, simplificado): expression ::= atom list atom ::= number symbol number ::= [+-]?['0'-'9']+ symbol ::= ['A'-'Z''a'-'z'].* list ::= '(' expression* ')'

: Semântica sobre Se refere ao significado do programa "oi" * 5: "oi" é string, 5 é inteiro, * é um operador aritmético binário Sistema de tipos tipagem forte vs. fraca tipagem estática vs. dinâmica

: Nomes, escopos e amarração sobre Qual valor será impresso? (Javascript) var x = 1; function teste() { var x = 2; console.log(x); } teste();

: Gerenciamento de memória sobre alocação estática, baseada em pilha, baseada em heap baseada em heap controle explícito contagem de referências garbage collection

: sobre

: História sobre 1949-55 computadores a válvula linguagem de máquina: 803C0800 1949, primeiro assembler (montador): cmp byte [eax + ecx], 0 compiladores de expressões (ex.: b*b - 4*a*c)

: sobre Linguagem de montagem ; Comprimento de uma string terminada em 0 ; in: eax = endereço da string ; out: ecx = comprimento da string B9FFFFFFFF mov ecx, -1.loop: 41 inc ecx 803C0800 cmp byte [eax + ecx], 0 75F9 jne.loop C3.done: ret Fonte: https://en.wikipedia.org/wiki/assembly_language

: História sobre 1956-60 transistores compiladores, interpretadores FORTRAN, LISP, ALGOL, COBOL

: História sobre 1961-65 famílias de arquiteturas compatíveis ALGOL, COBOL, APL

: História sobre 1966-70 circuitos integrados compiladores com otimização BASIC, PL/I, SIMULA

: História sobre 1971-75 microcomputadores programação estruturada, engenharia de software Pascal, C, Scheme, Prolog

: História sobre (Ver imagem)

: sobre

: sobre Linguagem de programação... é uma linguagem formal construída para comunicar instruções a uma máquina. não pode ser ambígua!... pode ser usada para criar programas para controlar máquinas ou para expressar algoritmos Paradigma de programação... estilo de programação, forma de construir a estrutura e os elementos de programas de computador. Linguagens de programação dão suporte a um ou mais paradigmas

: sobre 1ª geração: linguagem de máquina 803C0800 2ª geração: linguagem de montagem cmp byte [eax + ecx], 0 3ª geração Gerações imperativas: FORTRAN, COBOL, BASIC, ALGOL, ADA, Pascal, C... lógicas e funcionais: LISP, ML, Prolog 4ª/5ª geração terminologia nebulosa alguns consideram SQL e R de 4ª geração alguns consideram Prolog de 5ª geração

: sobre Dois principais grupos de linguagem: Imperativo Descreve o passo-a-passo da execução de um programa Declarativo Descreve o que deve ser feito (e não como)

: Paradigma imperativo sobre Imperativo Sequência de comandos, passo-a-passo Lê e modifica a memória (estado) Descreve como o programa opera Base teórica: máquinas de Turing, arquitetura de Von Neumann Analogia: quadro-negro Linguagens: BASIC, Pascal, C

: Paradigma imperativo sobre Imperativo Mesmo linguagens imperativas possuem partes declarativas Ex.: expressões aritméticas 2 + 3 * 4

: Paradigma imperativo sobre Refinamentos do paradigma imperativo Programação estruturada (evita uso do GOTO) if, while, for Programação procedural/procedimental Subrotinas: procedimentos e funções

: Programação orientada a objetos sobre Programação orientada a objetos Objeto: dados + comportamento Passagem de mensagens Encapsulamento, herança, polimorfismo Pode ser baseada em classes (Java, C++) ou em protótipos (Javascript, Lua) Se combina com outros paradigmas: imperativo, funcional... Primeira linguagem: Smalltalk (design de interfaces)

: declarativos sobre Paradigma funcional (Scheme, ML, LISP) Paradigma baseado em lógica ou em restrições (Prolog, VisiCalc)

: sobre Paradigma funcional Um programa funcional corresponde à computação de uma função Funções não possuem efeitos colaterais (i.e., não alteram o estado) Se eu chamar a mesma função duas vezes, o resultado é o mesmo Não há comandos, apenas expressões Características funcionais têm sido incorporadas a linguagens de programação imperativas, como Java 8, Python, Javascript, Ruby... Base teórica: cálculo-lambda Analogia: linha de produção

: Paradigma funcional sobre Exemplo: o n-ésimo número da sequência de Fibonacci, fib(n), é definido matematicamente como: 0, se n = 0 1, se n = 1 fib(n-1) + fib(n-2), caso contrário

: Paradigma funcional sobre Implementação em Elixir (funcional) defmodule Fibonacci do def fib(0), do: 0 def fib(1), do: 1 def fib(n), do: fib(n-1) + fib(n-2) end

: Paradigma funcional sobre Funções transformam entradas em saídas Parece uma linha de produção Exemplo (bash): ls -l cut -d' ' -f3 sort uniq -c Filosofia Unix: programas fazem apenas uma coisa, mas fazem bem feito

: sobre Paradigma funcional Funções são elementos de primeira classe podem ser passadas como parâmetro ou retornadas de outras funções Função de alta ordem: função que recebe ou retorna uma função Ex.: map Ruby: ['a', 'b', 'c'].map(&:upcase) Javascript (com underscore.js) _.map(['a', 'b'], function(x) { return x.touppercase(); } );

: Paradigma lógico sobre Um programa consiste de fatos e regras Regras permitem derivar novos fatos Usuário faz uma consulta para determinar se um determinado fato pode ser derivado a partir dos fatos e regras existentes Base teórica: lógica de predicados Ex.: Prolog

: Paradigma lógico sobre Programa: mulher(maria). homem(joao). humano(x) :- homem(x). humano(x) :- mulher(x). Consulta: humano(joao).

: Outros paradigmas sobre Baseado em eventos (Visual Basic) Baseado em autômatos / máquinas de estado finitas Programação concorrente / paralela / distribuída (Erlang) Programação orientada a aspectos (AspectJ) Programação literária (Sweave, knitr) Ver mais: https: //en.wikipedia.org/wiki/programming_paradigm

: sobre

: sobre Scheme (estilo LISP) (define bottles (lambda (n) (cond ((= n 0) (display "No more bottles")) ((= n 1) (display "One bottle")) (else (display n) (display " bottles"))) (display " of beer"))) (define beer (lambda (n) (if (> n 0) (begin (bottles n) (display " on the wall") (newlin (bottles n) (newline) (display "Take one down, pass it around") (n (bottles (- n 1)) (display " on the wall") ( (newline) (beer (- n 1))))))

: sobre bottles 0 = "no more bottles" bottles 1 = "1 bottle" bottles n = show n ++ " bottles" verse 0 Haskell = "No more bottles of beer on the wall, no m ++ "Go to the store and buy some more, 99 bot verse n = bottles n ++ " of beer on the wall, " ++ b ++ "Take one down and pass it around, " ++ bo ++ " main = mapm (putstrln. verse) [99,98..0]

: Prolog sobre bottles :- bottles(99). bottles(1) :- write('1 bottle of beer on the wall, 1 bottle of b write('take one down, and pass it around,'), nl, write('now they are all gone.'), nl,!. bottles(x) :- write(x), write(' bottles of beer on the wall,'), write(x), write(' bottles of beer,'), nl, write('take one down and pass it around,'), nl, NX is X - 1, write(nx), write(' bottles of beer on the wall.'), bottles(nx).

: Whitespace sobre Ver http://www.99-bottles-of-beer.net/ language-whitespace-154.html

: Referências sobre TUCKER, NOONAN. Programming Languages Principles and Paradigms. Cap. 1. SCOTT. Programming Language Pragmatics. Cap. 1. SEBESTA. Concepts of Programming Languages. Caps. 1 e 2. Slides do prof. Manoel Mendonça (UFBA). Parte 1.