Buscar

Aulas Capitulo 1 Linguagens

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Federal do Ceará 
Campus de Quixadá 
 
 
 Linguagens de Programação: 
Introdução* 
 
 
 
 
 
 
 
 
 
 
 
 
Flávio R. C. Sousa 
 flaviosousa@ufc.br 
@flaviosousa 
www.es.ufc.br/~flavio 
 
 
* Material: George Darmiton da Cunha Cavalcanti 
Introdução 
 Linguagens de Programação são usadas: 
 Projetos disciplinares 
 Estágio 
 Empresas (Novos e antigos projetos) 
 Existem dezenas de linguagens de 
programação 
 Linguagens com características diferentes 
Em 17 de maio de 2013, havia 669 LPs" na lista da Wikipédia. 
Motivação 
 Quais características de uma linguagem de 
programação são importantes? 
 Como comparar estas características? 
 Qual linguagem de programação usar? 
 Como comparar diversas linguagens? 
 Como estudar novas linguagens? 
 Como projetar novas linguagens? 
 Qual a melhor linguagem para uma 
determinada aplicação? 
Objetivos 
 Análise crítica de paradigmas e linguagens de 
programação 
 Estudo dos conceitos gerais de linguagens de 
programação: valores, tipos, bindings, escopo, 
memória, entre outros. 
 Visão geral dos paradigmas imperativo, 
funcional, orientado a objetos, lógico e 
concorrente 
Razões para estudar os conceitos de LPs 
 Melhorar a capacidade de expressar 
conceitos de programação 
 Maior embasamento para a escolha de 
linguagens apropriadas 
 Escolha mais consciente 
 Incrementar a capacidade para aprender 
 novas linguagens 
 Consolidação dos conceitos das linguagens 
 
 
Razões para estudar os conceitos de LPs 
 Entender melhor o significado da 
implementação 
 Uso de uma linguagem de forma mais 
inteligente. 
 Aumentar a capacidade de projeção de 
novas linguagens 
 Avanço global da computação 
Linguagens de Programação 
 Programa 
 Um conjunto completo de comandos estruturados 
de forma a especificar um algoritmo. 
 Algoritmo 
 Conjunto de regras e de procedimentos lógicos, 
perfeitamente definidos, que levam à solução de 
um problema em um número finito de etapas. 
Linguagens de Programação 
 É uma ferramenta para instruir máquinas ? 
 Um meio de comunicação entre humanos e 
máquinas ? 
 Um veículo para expressar modelos de alto-
nível? 
 Uma notação para algoritmos? 
 Uma LP de propósito geral deve permitir 
tudo isto. 
 Uma notação para se ler, escrever e executar 
computações. 
Linguagens de Programação 
 Uma linguagem é um conjunto de regras 
sistemáticas para a comunicação de ideias 
 Linguagens de programação 
 Instrumentos para facilitar a comunicação entre 
humanos e computadores a fim de solucionar 
problemas 
 Têm o objetivo de representar alguma 
informação por meio de uma sequência de 
símbolos 
Características das LPs 
 Voltada para a descrição de algoritmos 
 Implementável nos PCs tradicionais 
 Gramática e significado bem definidos 
 Não permite sentenças com significado 
ambíguo. 
Características de uma LP 
 Universal 
 Todo problema que pode ser resolvido pelo 
computador tem que ter uma solução programável 
na LP 
 Tem que ser implementável num computador 
 Natural para expressar problemas em um certo 
domínio de aplicação 
 Tem que ser capaz de ter uma implementação 
aceitável, em termos de eficiência 
Paradigmas de Programação 
 Modelo, padrão ou estilo de programação 
suportado por linguagens que agrupam certas 
características comuns 
 Cada linguagem apresenta uma maneira 
particular de modelar o que é um programa 
 Cada paradigma agrupa linguagens que 
representam programas de forma semelhante 
Paradigmas de Programação 
 A escolha de um determinado paradigma 
influencia a forma com a qual uma aplicação 
real é modelada do ponto de vista 
computacional 
 Principais paradigmas: 
 Imperativo 
 Orientado a objetos 
 Funcional 
 Lógico 
 Concorrente 
Paradigmas de Programação 
 Imperativo 
 Procedural – Pascal, FORTRAN, COBOL, C, ADA 
 Orientado a Objetos (Smalltalk, objectPascal, C++, Java) 
 Declarativo 
 Funcional – LISP, ML, Haskell 
 Lógico – Prolog 
 Concorrente 
 Paralelo – n processadores + 1 memória (ADA, 
concurrent Pascal) 
 Distribuído – n processadores + m memórias (Java) 
 Paradigmas Híbridos 
 OOLP (Object-Oriented Logic Programming) 
 
 Linguagens de Programação: 
Conceitos Básicos* 
 
 
 
 
 
 
 
 
 
 
 
 
* Material: George Darmiton da Cunha Cavalcanti 
Domínios de Programação 
 Aplicações científicas 
 Grande número de operações com números reais 
 Fortran 
 Aplicações comerciais 
 Produção de relatórios, uso de números decimais e texto 
 COBOL 
 Inteligência artificial 
 Uso de computações simbólicas em vez de numéricas 
 LISP 
 Programação de sistemas 
 Precisa de eficiência devido ao uso contínuo 
 C 
 Softwares para a Web 
 Coleção eclética de linguagens: markup (XHTML), 
scripting (PHP), general-purpose (Java) 
Critérios de avaliação de LPs 
 Legibilidade (Readability) 
 Quão facilmente um programa pode ser lido e 
entendido 
 Capacidade escrita (Writability) 
 Quão facilmente uma linguagem pode ser usada para 
criar programas 
 Confiabilidade (Reliability) 
 Conformidade com as especificações sob todas as 
condições 
 Custo 
 O custo final de uma linguagem é uma função de suas 
características 
Critérios de avaliação de LPs 
Legibilidade (Readability) 
 Simplicidade 
 Pequeno número de componentes básicos são mais 
fáceis de aprender 
 Multiplicidade de recursos (mais de uma maneira 
para realizar uma operação particular) 
 Um exemplo em C para incrementar uma variável 
inteira simples: 
 cont = cont +1 
 cont += 1 
 cont++ 
 ++cont 
 Sobrecarga (overloading) de um operador, ou seja, 
um único símbolo possui mais de um significado. 
 
 
 
 
Legibilidade (Readability) 
 Ortogonalidade 
 Conj. relativamente pequeno de construções 
primitivas pode ser combinado em um número 
relativamente pequeno de maneiras. 
 Toda combinação possível é legal e significativa. 
 Possibilidade de combinar entre si, sem 
restrições, os componentes básicos da LP 
 Exemplo: projeto VAX 
 Uma única operação pode usar registradores ou 
células de memória como operandos. 
Legibilidade (Readability) 
 Instruções de Controle 
 Existência de estruturas de controle bem 
conhecidas (exemplo: while) 
while (incr < 20) { 
 while (sum <= 100) { 
 sum += incr; 
 } 
 incr++; 
} 
loop1: 
 if (incr >= 20) goto out; 
 
loop2: 
 if (sum > 100) goto next; 
 sum += incr; 
 goto loop2; 
 
next: 
 incr++; 
 goto loop1; 
out: 
Legibilidade (Readability) 
 Tipos de Dados e Estruturas 
 A presença de facilidades adequadas para 
definir tipos de dados e estruturas de dados. 
 Exemplo: 
 Suponha que em uma linguagem não exista um tipo 
de dado booleano e um tipo numérico seja usado 
para substituí-lo: 
 timeOut = 1 (significado não claro) 
 timeOut = true (significado claro) 
Legibilidade (Readability) 
 Considerações sobre a sintaxe 
 Formas identificadoras 
 Restringir os identificadores a tamanhos muito 
pequenos prejudica a legibilidade 
 Palavras especiais 
 Formas das palavras especiais de uma linguagem 
(exemplo: while, class, for e begin-end) 
 Palavras especiais de uma linguagem podem ser 
usadas como nomes de variáveis? 
 Forma e significado 
 Projetar instruções de forma que sua aparência indique 
sua finalidade 
Capacidade escrita (Writability) 
 Simplicidade e Ortogonalidade 
 Poucos construtores, um pequeno número de 
primitivas, um pequeno conjunto de regras para 
combiná-los. 
 Suporte para abstração 
 A capacidade de definir e de usar estruturas ou 
operações complexas de maneira que permita 
ignorar muitosdos detalhes. 
 Expressividade 
 Conjunto relativamente conveniente de maneiras de 
especificar operadores. 
 Exemplos: 
 count++ é mais conveniente do que count = count + 1 
 a inclusão do for em muitas linguagens modernas 
Confiabilidade (Reliability) 
 Verificação de tipos 
 Testar se existem erros de tipos 
 Tratamento de Exceções 
 Capacidade de interceptar erros em tempo de 
execução e por em prática medidas corretivas 
 Apelidos (Aliasing) 
 Presença de dois ou mais métodos, ou nomes, 
distintos que referenciam a mesma célula de 
memória 
 
 
Confiabilidade (Reliability) 
 Legibilidade (Readability) e Capacidade de 
Escrita (Writability) 
 Uma linguagem que não suporta maneiras 
naturais de expressar os algoritmos usará, 
necessariamente, abordagens não-naturais. 
Assim, a legibilidade será reduzida. 
 A legibilidade afeta a confiabilidade tanto na 
escrita quanto na manutenção. 
 
Custo 
 Treinamento para usar a linguagem 
 Escrita de programas na linguagem 
 Compilação de programas na linguagem 
 Execução dos programas 
 Sistema de implementação da linguagem: 
 Existência de compiladores free 
 Confiabilidade 
 Confiabilidade baixa leva a altos custos 
 Manutenção dos programas 
 
Outros Critérios de avaliação 
 Portabilidade 
 Quão facilmente um programa pode ser movido de 
uma “plataforma” para outra 
 Generalidade 
 Seu uso em uma gama de aplicações 
 Boa definição (Well-definedness) 
 A precisão da definição oficial da linguagem 
Influência na criação das LPs 
 Arquitetura do Computador 
 Linguagens são desenvolvidas com base na 
arquitetura mais usada, conhecida como 
arquitetura von Neumann 
 As Linguagens Imperativas são as dominantes, 
motivadas por computadores von Neumann 
 Dados e programas armazenados na memória 
 Memória separada da CPU 
 Instruções e dados trafegam da memória para a CPU 
 Metodologias de programação 
 Novas metodologias de desenvolvimento de 
software (ex. OO) levam a novos paradigmas e, 
novas linguagens 
Influência na criação das LPs 
 Arquitetura de von Neumann 
 
Gargalo de Von Neumann 
 Velocidade de conexão entre a memória do 
computador e seu processador determina a 
velocidade de um computador 
 Instruções geralmente são executadas mais 
rapidamente do que podem ser transferidas 
 Esta relação é denominada gargalo de von 
Neumann 
 Fator limitante básico da velocidade dos computadores 
 Influencia as as Linguagens de Programação 
Metodologia de Programação 
 Década de 50 e início da de 60 
 Aplicações simples 
 Preocupação era a eficiência da máquina 
 Final da década de 60 
 Foco agora são as pessoas: legibilidade, melhores 
estruturas de controle 
 Programação estruturada e projeto top-down e 
refinamento passo-a-passo 
 Final da década de 70 
 Orientado para processo ⇒ orientada a dados 
 Abstração de dados 
 Meados da década de 80 
 Programação orientada a objetos 
 Abstração de dados + herança + polimorfismo 
Custo/benefício no projeto de LPs 
 Confiabilidade versus Custo de Execução 
 A verificação da validade do índice de um array 
aumenta a confiabilidade através de mais instruções. 
 Aumenta o custo de execução. 
 Readability versus writability 
 Linguagem compacta é mais simples de escrever 
 Ex: C++ for(;argv;count<< *argv++;); 
 Dificulta a leitura. 
 Writability (flexibility) versus reliability 
 Ponteiros são poderosos e muito flexíveis. 
 Pode causar problemas. 
Métodos de Implementação 
 Compilação 
 Programas são traduzidos para linguagem de 
máquina 
 Interpretação pura 
 Programas são interpretados por outro programa 
conhecido como interpretador 
 Sistemas de Implementação Híbridos 
 Um meio-termo entre compiladores e 
interpretadores puros 
Compilação 
 Traduz programas em alto-nível (linguagem fonte) 
em código de máquina (linguagem de máquina) 
 Tradução lenta, execução rápida 
 O processo de compilação possui várias fases: 
 Análise léxica 
 Converte caracteres de um programa fonte em unidades 
léxicas 
 Análise sintática 
 Transforma unidades léxicas em parse trees, as quais 
representam a estrutura sintática do programa 
 Análise semântica 
 Gera código intermediário 
 Geração de código 
 Código de máquina é gerado 
Interpretação Pura 
 Sem tradução 
 Fácil implementação de programas (erros de 
execução podem ser facilmente e rapidamente 
mostrados) 
 Execução lenta (de 10 a 100 vezes mais lenta 
do que programas compilados) 
 Geralmente requer mais espaço 
 Cada vez mais raro em linguagens de alto-nível 
 Embora não seja uma linguagem simples, 
JavaScript é puramente interpretado 
Implementação Híbridos 
 Meio-termo entre compilador e interpretador 
puro 
 Um programa em uma linguagem de alto-nível é 
traduzido para uma linguagem intermediária que 
permite fácil interpretação 
 Mais rápido do que interpretação pura 
 Exemplos 
 Programas em Perl são parcialmente compilados para 
detectar erros antes da interpretação 
 Implementações de Java: bytecode 
Métodos de Implementação 
Sistemas Just-in-Time 
 Inicialmente traduz os programas para uma 
linguagem intermediária 
 Compila os métodos da linguagem 
intermediária para linguagem de máquina 
quando esses são chamados 
 A versão em código de máquina é mantida para 
chamadas subsequentes 
 Sistemas JIT são agora usados amplamente 
para programas Java 
 As linguagens .NET também são 
implementadas com um sistema JIT 
 
 
 
Pré-processadores 
 Macro instruções são normalmente usadas para 
especificar que um código de outro arquivo 
deve ser incluído 
 Um pré-processador processa um programa 
imediatamente antes do programa ser 
compilado, expandindo as macros 
 Um exemplo: pré-processador C 
 expande #include, #define, entre outras 
Ambientes de Programação 
 Uma coleção de ferramentas usadas no 
desenvolvimento de software 
 UNIX 
 Um sistema operacional e um conjunto de ferramentas 
 Atualmente, normalmente usada através de uma GUI 
(exemplos: CDE, KDE ou GNOME) que roda em cima do 
UNIX 
 NetBeans 
 Um ambiente integrado de desenvolvimento para Java 
 Microsoft Visual Studio.NET 
 Um grande e complexo ambiente 
 Usado para programar C#, Visual BASIC.NET, JScript, J# 
ou C++

Outros materiais