36
Linguagens Computacionais (Conceitos Básicos) George Darmiton da Cunha Cavalcanti ([email protected])

Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Embed Size (px)

Citation preview

Page 1: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Linguagens Computacionais

(Conceitos Básicos)

George Darmiton da Cunha Cavalcanti([email protected])

Page 2: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Tópicos

� Razões para estudar os conceitos de

linguagens de programação

� Domínios de programação

� Critérios de avaliação de linguagens

� Influências sobre o projeto de uma linguagem

� Categorias de Linguagens

� Custo\benefício no projeto da linguagem

� Métodos de Implementação

� Ambientes de programação

Page 3: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Razões para estudar os conceitos

de linguagens de programação

� Aumento da capacidade de expressar idéias

– Capacidade intelectual ⇔ poder de se expressar

– Facilidades de algumas linguagens podem ser simuladas em outras linguagens

� Maior embasamento para a escolha de linguagens

apropriadas

– Escolha mais consciente

� Capacidade aumentada para aprender novas

linguagens

– Consolidação dos conceitos das linguagens

Page 4: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Razões para estudar os conceitos de linguagens de programação

� Entender melhor a importância da

implementação

– Uso de uma linguagem de forma mais inteligente

� Aumento da capacidade de projetar novas

linguagens

� Avanço global da computação

Page 5: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

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)

Page 6: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Critérios de avaliação da linguagem

� 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

Page 7: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Critérios de avaliação da linguagem

Page 8: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Legibilidade (Readability)

� Simplicidade global

– Linguagens com um 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)

– Sobrecarga (overloading) de um operador, ou seja,

um único símbolo possui mais de um significado.

Um exemplo em C para incrementar uma variável inteira simples:cont = cont +1

cont += 1

cont++

++cont

Page 9: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Legibilidade (Readability)

� Ortogonalidade

– Um conjunto 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

Page 10: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Legibilidade (Readability)Ortogonalidade

Um exemplo: adicionar valores inteiros de 32 bits que residem na

memória ou nos registradores e substituir um dos valores pela soma.

Computadores de grande porte da IBMA Reg1, célula_de_memória

AR Reg1, Reg2

Semântica: Reg1 ← conteúdo(Reg1) + conteúdo(célula_de_memória)

Reg1 ← conteúdo(Reg1) + conteúdo(Reg2)

Instrução de adição do VAXADDL operando_1, operando_2

Semântica: operando_2 ← conteúdo(operando_1) + conteúdo(operando_2)

O projeto da instrução VAX é ortogonal, pois uma única operação pode usar registradores ou células de memória como operandos.

Page 11: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Legibilidade (Readability)

� Instruções de controle– A 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:

Page 12: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

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)

Page 13: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

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

Page 14: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Capacidade de 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 muitos dos detalhes

� Expressividade

– Um 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

Page 15: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Confiabilidade (Reliability)

� Verificação de tipos– Testar se existem erros de tipos

� Manipulação 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

� 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 namanutenção.

Page 16: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Custo

� Treinamento dos programadores para usar a linguagem

� Escrita de programas na linguagem

� Compilação 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

Page 17: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Custo

Sabendo que esses são funções da capacidade de escrita e da legibilidade.

Fatores importantes

para os custos da linguagem

Manutenção

Desenvolvimento

do Programa

Confiabilidade

Page 18: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Outros critérios de avaliação

� Portabilidade

– Quão facilmente um programa pode ser movido de

uma implementação para outra

� Generalidade

– Seu uso em uma gama de aplicações

� Boa definição (Well-definedness)

– A precisão e a completeza da definição oficial da linguagem

Page 19: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Influências sobre o projeto da linguagem

� Arquitetura do Computador– Linguagens são desenvolvidas com base na

arquitetura mais usada, conhecida como arquitetura von Neumann

� Metodologias de programação– Novas metodologias de desenvolvimento de software

(exemplo, desenvolvimento orientado a objetos) levam a novos paradigmas de programação, e novas linguagens de programação

Page 20: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Influência da arquitetura de computador

� 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

Page 21: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

A arquitetura von Neumann

Page 22: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Influências sobre as metodologias de programação

� Década de 1950 e início da década de 1960

– aplicações simples; preocupações com a eficiência da máquina

� Final da década de 1960

– a eficiência das pessoas se tornou um ponto importante; legibilidade, melhores estruturas de controle

• Programação estruturada

• Projeto top-down e refinamento passo-a-passo

� Final da década de 1970

– orientado para processo → orientada a dados

• Abstração de dados

� Meados da década de 1980

– programação orientada a objetos

• Abstração de dados + herança + polimorfismo

Page 23: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Categorias de Linguagens� Imperativa

– Características centrais: variáveis, estruturas de atribuição e iteração

– Exemplos: C, Pascal

� Funcional– Principal maneira de computar é através da aplicação de funções para

os parâmetros fornecidos

– Exemplos: LISP, Scheme

� Lógica– Baseado em regras (regras são especificadas sem ordem pré-

determinada)

– Exemplo: Prolog

� Orientada a objetos– Abstração de dados, herança

– Exemplos: Java, C++

� Marcação (Markup)– Nova; não especificam computação, são usadas para definir o layout

de informação em documentos Web

– Exemplos: XHTML, XML

Page 24: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Custo\benefício no projeto da linguagem

� Confiabilidade versus Custo de Execução– Critérios conflitantes– Exemplo: Java requer que todas as referências a vetores sejam

checadas para garantir que os índices estejam dentro dos limites, mas isso aumenta o custo de execução

� Readability versus writability– Critérios conflitantes– Exemplo: APL provê muitos operadores poderosos (e uma

grande quantidade de novos símbolos), permitindo que computações complexas sejam escritas em programas compactos, porém isso dificulta a leitura

� Writability (flexibility) versus reliability– Critérios conflitantes– Exemplo: ponteiros em C++ são poderosos e muito flexíveis

Page 25: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Interface de computadores disposta em camadas

Page 26: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

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

Page 27: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

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

Page 28: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

O processo de compilação

Page 29: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Gargalo de Von Neumann

� Velocidade de conexão entre a memória do

computador e seu processador determina a

velocidade de um computador

� As instruções geralmente são executadas mais

rapidamente do que podem ser transferidas

� Conhecido como o gargalo de von Neumann;

esse é o fator limitante primário da velocidade

dos computadores

Page 30: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

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

Page 31: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

O processo de interpretação pura

Page 32: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Sistemas de Implementação Híbridos

� Um 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 iniciais de Java eram híbridas

• A forma intermediária, byte code, provinha portabilidade para qualquer máquina que tivesse o interpretador de byte code e um sistema de run-time(juntos, esses são chamados de Java Virtual Machine)

Page 33: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

O processo de implementação híbrida

Page 34: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Pré-processadores

� Macros 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

Page 35: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

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

� Borland JBuilder– 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++

Page 36: Linguagens Computacionais (Conceitos Básicos)jrpn/arquivos/5%BA%20Periodo/Paradigmas/Aulas/... · – COBOL Inteligência artificial – Uso de computações simbólicas em vez de

Sumário

� O estudo de linguagens de programação é válido por uma série de motivos:

– Aumenta nossa capacidade de usar diferentes construções para escrever programas

– Nos habilita a escolher linguagens de forma mais inteligente

– Nos ajuda a aprender novas linguagens mais facilmente

� Os critérios mais importantes para a avaliação de linguagens:

– Readability, writability, reliability e cost

� As principais influências no projeto de uma linguagem têm sido aarquitetura da máquina e as metodologias de projeto de software

� Os principais métodos para implementar linguagens são:

– compilação, interpretação pura e implementação híbrida