92
Linguagens de Programação: Implementação e Técnicas de Implementação

Conceitos Importantes sobre Linguagens de Progemação

Embed Size (px)

Citation preview

Page 1: Conceitos Importantes sobre Linguagens de Progemação

Linguagens de Programação: Implementação e Técnicas de

Implementação

Page 2: Conceitos Importantes sobre Linguagens de Progemação

Histórico da Programação

Page 3: Conceitos Importantes sobre Linguagens de Progemação

Recuperando o contexto histórico da evolução das linguagens de programação, pode-se dizer que elas representam graus variados de abstração da arquitetura subjacente, chamada Von Neumann ( processador, memória e entradas e saídas).

Arquitetura de Von Neumann

Page 4: Conceitos Importantes sobre Linguagens de Progemação

Os computadores disponíveis no final da década de 40 e início da década de 50, além dos problemas decorrentes da tecnologia da época, eram difíceis de serem programados pela ausência de software.

Page 5: Conceitos Importantes sobre Linguagens de Progemação

Na falta de linguagens de programação de alto nível, ou mesmo linguagens de montagem, a programação era feita em código de máquina (por exemplo, uma instrução para "somar", deveria ser especificada por um código em vez do seu uso textual).

Essa maneira de programar tornava os programas ilegíveis, além de ser bastante complicado o seu processo de depuração. Do ponto de vista do programador, essa foi uma motivação importante para a criação das linguagens de montagem e seus montadores.

.

Page 6: Conceitos Importantes sobre Linguagens de Progemação

Além disso, as aplicações numéricas da época requeriam o uso de certas facilidades que não estavam incluidas no hardware das máquinas de hoje, tais como, (números reais, acesso a elementos de um conjunto por seu índice, por exemplo) surgindo assim a necessidade da criação de linguagens de mais alto nível que incluíssem tais recursos.Sendo assim, foram desenvolvidas, ao longo da história da computação, diversas “linguagens de programação”, cada qual, a seu tempo, introduzindo facilidades e recursos que foram tornando a tarefa de programar mais fácil e menos susceptível a erros

Page 7: Conceitos Importantes sobre Linguagens de Progemação

O que é uma Linguagem de Programação

Page 8: Conceitos Importantes sobre Linguagens de Progemação

Uma Linguagem de Programação é uma ferramenta utilizada pelo profissional de computação para escrever programas, isto é, conjuntos de instruções a serem seguidas pelo computador para realizar determinador processo.

Linguagens de programação são instrumentos para facilitar a comunicação entre humanos e computadores a fim de solucionar problemas.

Page 9: Conceitos Importantes sobre Linguagens de Progemação

Assim, linguagens de programação têm o objetivo de representar alguma informação por meio de uma seqüência de símbolos

Page 10: Conceitos Importantes sobre Linguagens de Progemação

Qual necessidade fez surgi-la

Page 11: Conceitos Importantes sobre Linguagens de Progemação

Na época do surgimento dos primeiros computadores, eles só podiam ser programados por meio de linguagens de programação muito simples.

Caracterizavam-se por um pequeno conjunto de instruções capazes de realizar ações muito elementares e de uso exclusivo de um computador especifico .

Page 12: Conceitos Importantes sobre Linguagens de Progemação

À medida que a computação avança e as aplicações iam se tornando cada vez mais complexas, constata-se que o uso de linguagens tão simples e especificas reduzia significativamente a produtividade dos programadores e impedia a ampla disseminação do computador.

Para contornar este problema, surgiram as linguagens de programação de alto nível. Caracterizavam-se por não serem especificas a apenas a um computador e por terem um conjunto mais amplo e expressivo de tipos de instrução.

Page 13: Conceitos Importantes sobre Linguagens de Progemação

Classificação das Linguagens

Page 14: Conceitos Importantes sobre Linguagens de Progemação

Conforme uma maior ou menor proximidade com a linguagem de máquina, classificam-se as linguagens em:

• LINGUAGENS DE BAIXO NÍVEL

• LINGUAGENS DE ALTO NÍVEL

Page 15: Conceitos Importantes sobre Linguagens de Progemação

Linguagens de Baixo Nível

Page 16: Conceitos Importantes sobre Linguagens de Progemação

As linguagens de baixo nível

- Restritas a linguagem de máquina

- Forte relação entre as operações implementadas pela linguagem e as operações implementadas pelo hardware.

-Indicada para funções que precisam implementar instruções de máquina específicas que não são suportadas por linguagens de alto nível

- A grande eficiência e o reduzido tamanho dos programas

Page 17: Conceitos Importantes sobre Linguagens de Progemação

Linguagens de Alto Nível

Page 18: Conceitos Importantes sobre Linguagens de Progemação

• Problemas podem ser solucionados muito mais rapidamente e com muito mais facilidade.

• O programa em linguagem de alto nível é normalmente fácil de seguir e entender cada passo da execução.

As linguagens de alto nível

• Aproximam-se das linguagens utilizadas por humanos para expressar problemas e algoritmos

• Cada declaração numa linguagem de alto nível equivale a várias declarações numa linguagem de baixo nível.

Page 19: Conceitos Importantes sobre Linguagens de Progemação

Especificação de Linguagens de Programação

Page 20: Conceitos Importantes sobre Linguagens de Progemação

Ao se criar uma LP é necessário definir a forma de escrever programas validos nessa linguagem e como os programas válidos devem se comportar.

Essa definição deve ser feita por meio de documentos descritos que estabeleçam de maneira precisa como essas duas atividades devem ser realizadas .

Tais documentos formam a especificação da LP.

Page 21: Conceitos Importantes sobre Linguagens de Progemação

A especificação de um LP requer a descrição de :

- Um Léxico

- Uma Sintaxe

- Uma Semântica

Page 22: Conceitos Importantes sobre Linguagens de Progemação

Um Léxico

Page 23: Conceitos Importantes sobre Linguagens de Progemação

O Léxico da LP corresponde ao vocabulário que pode ser utilizado para formar sentenças na linguagem ou seja símbolos ( tokens).

Por exemplo:

O seguinte comando da Linguagem Pascal

A := B;O Léxico da LP estabelece que os símbolos A, := , B e ; fazem parte do vocabulário da LP.

Page 24: Conceitos Importantes sobre Linguagens de Progemação

Uma Sintaxe

Page 25: Conceitos Importantes sobre Linguagens de Progemação

A Sintaxe da LP corresponde ao conjunto de regras que determinam quais sentenças podem ser formadas a partir da combinação dos itens léxicos.

O léxico e a sintaxe estão relacionados com a forma dos programas, isto é, como expressões, comandos, declarações e outros elementos da LP podem ser combinados para forma programas válidos.

soma:= x + sqrt(b+3.2);readln (x);x :integer

Page 26: Conceitos Importantes sobre Linguagens de Progemação

Por exemplo :

O seguinte comando da Linguagem Pascal

A := B + 2;

A Sintaxe da LP indica que a sentença formada pelo identificador A, o símbolo := , o identificador B, o símbolo +, o numero 2 e o símbolo ; designa um comando válido de soma.

Page 27: Conceitos Importantes sobre Linguagens de Progemação

Uma Semântica

Page 28: Conceitos Importantes sobre Linguagens de Progemação

A Semântica da LP descreve como as construções sintaticamente corretas são interpretadas ou executadas.

A semântica esta relacionada com o significado dos programas, isto é, como eles se comportam quando são executados por computadores.

Page 29: Conceitos Importantes sobre Linguagens de Progemação

Por exemplo :

O seguinte comando da Linguagem C

A = B;

A Semântica da LP indica que esse comando deve ser executado de modo a substituir o valor de A pelo valor atual de B e retornar o valor de A.

Page 30: Conceitos Importantes sobre Linguagens de Progemação

Métodos de Implementação de Linguagens de Programação

Page 31: Conceitos Importantes sobre Linguagens de Progemação

Todo e qualquer Programa escrito em uma LP necessita ser traduzido para a linguagem de maquina a fim de ser executado.

Para fazer isso, é necessário aplicar um programa que recebe como entrada o código-fonte do programa a ser traduzido e gere o código traduzido na linguagem de maquina.

Esse programa tradutor é quem determina como os programas na LP serão implementados, isto é, como o código–fonte traduzido se comportará efetivamente quando executado no computador.

Page 32: Conceitos Importantes sobre Linguagens de Progemação

São descritos três métodos gerais de implementação de linguagens de programação , são eles:

• Compilação

• Interpretação Pura

• Hibrido

Page 33: Conceitos Importantes sobre Linguagens de Progemação

Compilação

Page 34: Conceitos Importantes sobre Linguagens de Progemação

Um Compilador traduz o programa fonte inteiro, produzindo um outro programa equivalente, em linguagem executável.

A vantagem é que o compilador precisa traduzir um comando apenas uma única vez, não importando quantas vezes ele será executado.

Na prática o compilador é usado para gerar o código definitivo (eficiente) de um programa.

Exemplos de linguagens compiladas : Pascal, C, C++,Java e outras

Page 35: Conceitos Importantes sobre Linguagens de Progemação
Page 36: Conceitos Importantes sobre Linguagens de Progemação

Interpretação Pura

Page 37: Conceitos Importantes sobre Linguagens de Progemação

Um interpretador traduz o programa fonte um comando por vez e chama uma rotina para executar esse comando.

A vantagem é que o interpretador não traduz comandos que podem não ser executados e pode relatar erros na linguagem original em cada ponto de execução. Na prática as linguagens interpretadas servem para a realização de uma prototipagem rápida.

Exemplos de linguagens interpretadas: Prolog, linguagens de script

Page 38: Conceitos Importantes sobre Linguagens de Progemação
Page 39: Conceitos Importantes sobre Linguagens de Progemação

Hibrido

Page 40: Conceitos Importantes sobre Linguagens de Progemação

Processo que combina tanto a execução eficiente quanto a portabilidade de programas pela aplicação combinada dos dois métodos anteriores.

A base para o método hibrido é a existência de um código intermediário, mais fácil de ser interpretado e, ao mesmo tempo, não especifico de uma de uma plataforma computacional.

O método hibrido é dividido , portanto, em duas etapas: compilação para um código intermediário e interpretação desse código.

Page 41: Conceitos Importantes sobre Linguagens de Progemação

Exemplos de linguagens hibridas : JAVA e PERL

Page 42: Conceitos Importantes sobre Linguagens de Progemação
Page 43: Conceitos Importantes sobre Linguagens de Progemação

Gráfico Data x Linguagens

Page 44: Conceitos Importantes sobre Linguagens de Progemação

O gráfico mostra o surgimento e a evolução das principais linguagens de programação. FORTRAN (1957): aplicações numéricas

LISP (1959): programação funcional

ALGOL (1960): programação estruturada

COBOL (1960): aplicações comerciais

BASIC (1964): ensino para leigos

PASCAL (1971): programação estruturada; simplicidade

C (1972): implementação de UNIX

PROLOG (1972): programação lógica

SMALLTALK (1972): programação orientada a objetos

ADA (1983): programação concorrente

C++ (1985): disseminação de programação O. objetos

JAVA (1995): mais simples e confiável que C++; Internet

Ler enquanto mostra figura da próxima pagina

Page 45: Conceitos Importantes sobre Linguagens de Progemação
Page 46: Conceitos Importantes sobre Linguagens de Progemação

Paradigmas

Page 47: Conceitos Importantes sobre Linguagens de Progemação

Paradigmas: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.

A escolha de um determinado paradigma influencia a forma com que uma aplicação real é modelada do ponto de vista computacional

Page 48: Conceitos Importantes sobre Linguagens de Progemação

Existem diversas classificações de Paradigmas de LPs , sendo a mais comum a que divide os paradigmas de LPs nos paradigmas : Imperativo e Declarativo

Visual Estruturado Orientado a Objetos Orientado a aspectos Concorrente

Funcional Lógico

ImperativoLinguagens

DeclarativoLinguagens

Mostrar figura próximo slide enquanto le

Page 49: Conceitos Importantes sobre Linguagens de Progemação
Page 50: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Imperativo

Page 51: Conceitos Importantes sobre Linguagens de Progemação

O Paradigma Imperativo engloba os paradigmas fundamentados na idéia de computação como um processo que realiza mudanças de estados. Nesse sentido, um estado representa uma configuração qualquer da memória do computador. Os conceitos fundamentais são de variável, valor e atribuição,.

Page 52: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Visual

Page 53: Conceitos Importantes sobre Linguagens de Progemação

As linguagens de programação visual partem do princípio de que gráficos são mais fáceis de serem entendidos do que textos. Sendo assim, a especificação de um programa por meio de diagramas e outros recursos gráficos tende a tornar a própria programação mais fácil, permitindo mesmo que usuários sem muitas habilidades em programação gerem programas.As LPV são divididas em dois grupos:

- Linguagens Visuais Puras

- Linguagens Visuais Hibridas

Page 54: Conceitos Importantes sobre Linguagens de Progemação

As linguagens de programação visual puras são aquelas em que o programa é determinado exclusivamente por meio dos gráficos e diagramas que o especificam.

Dentre elas podemos citar:

Khoros - computação gráfica.

Simulink - simulação de sistemas dinâmicos.

Page 55: Conceitos Importantes sobre Linguagens de Progemação

Linguagens Visuais Hibridas

As linguagens que incluem-se nesta categoria são normalmente linguagens de programação convencional, acrescidas das ferramentas visuais que lhes dão o “status” de visuais.

Exemplos incluem o :

Delphi, Visual Basic, Visual C++.

Page 56: Conceitos Importantes sobre Linguagens de Progemação

• Boas para definir – interconexão entre componente – configuração de linhas de produtos – mas não para restrições associadas

• Razoáveis para definir – estados de um sistema– mas não para fluxo de controle em geral

VANTAGENS DO MODELO VISUAL

Page 57: Conceitos Importantes sobre Linguagens de Progemação

Este tipo de representação normalmente limita bastante a flexibilidade dos programas que podem ser desenvolvidos.

DESVANTAGEN DO MODELO VISUAL

Page 58: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Estruturado

Page 59: Conceitos Importantes sobre Linguagens de Progemação

A Programação Estruturada pode ser entendida como uma forma de programar que visa facilitar a escrita, entendimento, validação e manutenção de programas.

Para Dijkstra, “a arte de programar consiste na arte de organizar e dominar a complexidade”.

A Programação Estruturada procurar reduzir o nível de complexidade através de três níveis:

•desenvolvimento do programa em diferentes fases por refinamento sucessivo (desenvolvimento top-down);

•decomposição do programa total em módulos funcionais, organizados de preferência num sistema hierárquico;

•uso de um número limitado de estruturas básicas de fluxo de controle dentro de cada módulo.

Page 60: Conceitos Importantes sobre Linguagens de Progemação

Modelo Computacional do Paradigma Estruturado

Entrada Programa Saída

Estado

Page 61: Conceitos Importantes sobre Linguagens de Progemação

• Eficiência (embute modelo de Von Neumann)

• Modelagem “natural” de aplicações do mundo real

• Paradigma dominante e bem estabelecido

VANTAGENS DO MODELO ESTRUTURADO

Page 62: Conceitos Importantes sobre Linguagens de Progemação

DESVANTAGENS DO MODELO ESTRUTURADO

- Relacionamento indireto entre E/S resulta em:

– difícil legibilidade

– erros introduzidos durante manutenção

– descrições demasiadamente operacionais focalizam o como e não o que

Page 63: Conceitos Importantes sobre Linguagens de Progemação

Algumas linguagens de programação do paradigma estruturado :

Fortran – 1957

Algol – 1960

Cobol – 1960

Basic – 1964

Pascal – 1971

C – 1971

C++ – 1985

Page 64: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Orientado a Objetos

Page 65: Conceitos Importantes sobre Linguagens de Progemação

• Não é um paradigma no sentido estrito: é uma subclassificação do imperativo

• A diferença é mais de metodologia quanto à concepção e modelagem do sistema

• A grosso modo, uma aplicação é estruturada em módulos (classes) que agrupam um estado e operações (métodos) sobre este

• Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos)

Paradigma Orientado a Objetos

Page 66: Conceitos Importantes sobre Linguagens de Progemação

No "meio" orientado a objetos, as unidades de programa são objetos.

Por exemplo, desde uma constante numérica até um sistema para manipular arquivos, são todos objetos.

Mensagens possibilitam a comunicação entre os objetos e é através delas que uma operação de um objeto é requisitada.

Page 67: Conceitos Importantes sobre Linguagens de Progemação

Vantagens do Paradigma Orientado a objetos

Todas as do estilo imperativo

Classes estimulam projeto centrado em dados: modularidade, reusabilidade e extensibilidade

Aceitação comercial crescente

Page 68: Conceitos Importantes sobre Linguagens de Progemação

Problemas do Paradigma OO

Semelhantes aos do paradigma imperativo, mas amenizadas pelas facilidades de estruturação

Page 69: Conceitos Importantes sobre Linguagens de Progemação

Modelo Computacional do Paradigma Orientado a Objetos

Entrada Programa Saída

Estado

......

......

Estado

Entrada Programa

Saída

Estado

Entrada Programa

Saída

Estado

Entrada Programa

Saída

Estado

Entrada Programa

Saída

Page 70: Conceitos Importantes sobre Linguagens de Progemação

Algumas linguagens de programação do paradigma OO:

Smaltalk – 1957

C++ – 1985

Java – 1995

Page 71: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Orientado a Aspectos

Page 72: Conceitos Importantes sobre Linguagens de Progemação

A Programação Orientada a Aspectos (POA) baseia-se na idéia de que sistemas computacionais podem ser mais bem desenvolvidos pela separação de funçõesespecíficas, afetando diferentes partes do sistema, denominadas preocupações ortogonais (crosscuting concerns).

Exemplos de crosscuting concerns são persistência, distribuição, controle de concorrência e tratamento de exceções.

Page 73: Conceitos Importantes sobre Linguagens de Progemação

Com essa separação e o aumento da modularidade proposta pela POA, o sistemaimplementado fica mais legível, o que contribui para o seu projeto e a sua manutenção.

Page 74: Conceitos Importantes sobre Linguagens de Progemação

Modelo Computacional do Paradigma Orientado a Aspectos

Entrada Programa

Saída

Estado

......

......

Estado

Entrada Programa

Saída

Estado

Entrada Programa

Saída

Estado

Entrada Programa

Saída

Estado

Entrada Programa

Saída

AspectoAspecto

AspectoAspecto

Page 75: Conceitos Importantes sobre Linguagens de Progemação

Vantagens do Paradigma Orientado a Aspectos

Todas as do paradigma OO Útil para modularizar conceitos que a Orientação a Objetos não consegue tratar, preocupações ortogonais (crosscutting concerns) . Em especial, aqueles ligados a requisitos não funcionais Aumenta a extensibilidade e o reuso

Page 76: Conceitos Importantes sobre Linguagens de Progemação

Problemas do Paradigma Orientado a Aspectos

Semelhantes aos do OO Ainda é preciso diminuir a relação entre

classes e aspectos Problemas de conflito entre aspectos que

afetam a mesma classe “Weaving” estático

Page 77: Conceitos Importantes sobre Linguagens de Progemação

Linguagem de programação do paradigma OA:

A linguagem AspectJ é um superconjunto da linguagem Java para ser usado na Programação OA.

Em uma aplicação orientada a aspectos em AspectJ, os componentes são implementados usando a sintaxe padrão de Java, e os aspectos são implementados usando uma sintaxe específica de AspectJ.

Page 78: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Concorrente

Page 79: Conceitos Importantes sobre Linguagens de Progemação

A programação concorrente ocorre quando vários processos executam simultaneamente e concorrem por recursos. Eles podem utilizar uma única unidade de processamento ou várias unidades em paralelo. Neste último caso as unidades de processamento podem estar localizadas em um mesmo computador ou distribuídas entre vários. Sistemas concorrentes também podem compartilhar dados ou dispositivos periféricos.

Page 80: Conceitos Importantes sobre Linguagens de Progemação

• Principais focos da programação concorrente:

- interação e a comunicação correta entre as diferentes tarefas

- coordenação do acesso concorrente aos recurso computacionais

Vantagens do Paradigma Concorrente

Page 81: Conceitos Importantes sobre Linguagens de Progemação

Desvantagens do Paradigma Concorrente

– Não-determinismo

– Dependência de velocidade de execução

– Deadlock

– Starvation (escalonamento desonesto )

Page 82: Conceitos Importantes sobre Linguagens de Progemação

Algumas linguagens de programação do paradigma Concorrente:

ADA - 1983

Java - 1995

Page 83: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Declarativo

Page 84: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Declarativo, em contraste com o paradigma Imperativo, no qual os programas são especificações de como o computador deve realizar uma tarefa, no paradigma declarativo os programas são especificações sobre o que é essa tarefa.

No paradigma declarativo, o programador não precisa se preocupar sobre como o computador é implementado, nem sobre a maneira pela qual ele é melhor utilizado para realizar uma tarefa.

Page 85: Conceitos Importantes sobre Linguagens de Progemação

A preocupação do programador é descrever de forma abstrata a tarefa a ser resolvida.

Tipicamente, programas em linguagens declarativas são especificações de relações e funções.

Neste paradigma temos as seguintes linguagens :

- Lógico

- Funcional

Page 86: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Lógico

Page 87: Conceitos Importantes sobre Linguagens de Progemação

Um programa em lógica é a resolução de um determinado problema através da utilização de sentenças da lógica. Em Pascal ou em C, por exemplo, temos uma seqüência de instruções executadas uma após a outra, que ao final converge em um resultado. Um programa lógico é equivalente à descrição do problema expressar de maneira formal, similar à maneira que o ser humano raciocinaria sobre ele. Linguagens Lógicas: PROLOG

Page 88: Conceitos Importantes sobre Linguagens de Progemação

Visão Crítica do Paradigma Lógico

Vantagens Em princípio, todas do paradigma funcional Permite concepção da aplicação em um alto

nível de abstração (através de associações entre E/S)

Problemas Em princípio, todos do paradigma funcional Linguagens usualmente não possuem tipos,

nem são de alta ordem

Page 89: Conceitos Importantes sobre Linguagens de Progemação

Paradigma Funcional

Page 90: Conceitos Importantes sobre Linguagens de Progemação

Linguagens funcionais operam apenas sobre funções, as quais recebem listas de valores e retornam um valor. O objetivo da programação funcional é definir uma função que retorne um valor como resposta do problema.Um programa funcional é uma chamada de uma função que normalmente chama outras funções para gerar um valor de retorno.

Page 91: Conceitos Importantes sobre Linguagens de Progemação

Visão Crítica do Paradigma Funcional

Vantagens Manipulação de programas mais simples: - Prova de propriedades - Transformação (exemplo: otimização) - Concorrência explorada de forma natural Problemas “O mundo não é funcional!” Implementações ineficientes Mecanismos primitivos de E/S e formatação

Page 92: Conceitos Importantes sobre Linguagens de Progemação

As linguagens funcionais mais conhecidas são :

LISP, Prolog, Scheme , ASpecT, Erlang, Gofer, Haskell, Hope, Hugs, J, Miranda, ML, OPAL e outras...