linguagens e paradigmas de programa§£o
TRANSCRIPT
![Page 1: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/1.jpg)
Universidade Federal do AmazonasDepartamento de Ciência da ComputaçãoIEC481 – Projeto de Programas
Linguagens e Paradigmas de Programação
Professor: César Melo
Slides baseados em materiais preparados pelo Prof. Horacio Fernades, Prof. João Marcos e pela Profa. Rosiane Freitas.
![Page 2: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/2.jpg)
Fatos das nossas vidas....
Cite algumas Linguagens de Programação C, C++, Java, Perl, Python, Bash, Prolog, Pascal, Basic, Fortran,
COBOL, ASM, Lisp, Haskell, Modula-2, Oberon, C#, PL/1, Ada, Smalltalk, Símula, Algol, Eiffel, Scheme,CLOS, Maude, Glass, Holo,...
Mas porque tantas linguagens? Propósitos diferentes
Avanços tecnológicos
Interesses comerciais
Cultura e background científico
![Page 3: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/3.jpg)
Linguagens de Programação
E o que é uma “Linguagem de Programação”?
Sintática: Uma linguagem de programação é uma notação utilizada pelo programador para especificar ações a serem executadas por um computador.
Semântica: Uma linguagem de programação compreende um conjunto de conceitos que um programador usa para resolver problemas de programação.
![Page 4: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/4.jpg)
Linguagens de Programação
Critérios de Avaliação de uma LP
Legibilidade
Simplicidade
Expressividade
Ortogonalidade
Confiabilidade
Portabilidade
![Page 5: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/5.jpg)
Critério: Legibilidade
Facilidade de ler e escrever programas
Legibilidade influi: desenvolvimento e depuração de programas manutenção de programas desempenho de equipes de programação
Fatores que melhoram a legibilidade: abstração de dados comandos de controle modularização de programas documentação convenções léxicas, sintaxe e semântica
exemplo em Java: nomes de classes iniciam por letra maiúscula, nomes de atributos usam letras minúsculas
![Page 6: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/6.jpg)
Critério: Simplicidade
Representação de cada conceito seja simples de aprender e dominar
Simplicidade sintática exige que a representação seja feita de modo preciso, sem ambigüidades
contra-exemplo: A++; A=A+1; A+=1; ++A. Simplicidade semântica exige que a representação possua um
significado independente de contexto
contra-exemplo: private: B b; class B: private A
![Page 7: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/7.jpg)
Critério: Expressividade
Representação clara e simples de dados e procedimentos a serem executados pelo programa
Exemplo: tipos de dados em Pascal
Expressividade x concisão Muito concisa: falta expressividade? Muito extensa: falta simplicidade?
Linguagens mais modernas Incorporam apenas um conjunto básico de representações de tipos de
dados e comandos
Aumentam o poder de expressividade com bibliotecas de componentes
Exemplos: Pascal, C++ e Java
![Page 8: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/8.jpg)
Critério: Ortogonalidade
Possibilidade de combinar entre si, sem restrições, os componentes básicos da LP
Exemplo: permitir combinações de estruturas de dados, como arrays de registros
Contra exemplo: não permitir que um array seja usado como parâmetro de um procedimento
Componente de primeira ordem: pode ser livremente usado em expressões, atribuições, como argumento e retorno de procedimentos
![Page 9: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/9.jpg)
Critério: Portabilidade
Multiplataforma Capacidade de um software executar em diferentes plataformas sem a
necessidade de maiores adaptações Sem exigências especiais de hardware/software Exemplo: aplicação compatível com sistemas Unix e Windows
Longevidade ciclo de vida útil do software e o do hardware não precisam ser
síncronos; ou seja, é possível usar o mesmo software após uma mudança de hardware
![Page 10: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/10.jpg)
Critério: Confiabilidade
Mecanismos que facilitem a produção de programas que atendam às sua especificações
Tipagem forte: o processador da linguagem deve assegurar que a utilização dos diferentes tipos de dados seja compatível
com a sua definição evitar que operações perigosas, tal como aritmética de ponteiros, seja
permitida
Tratamento de exceções: sistemas de tratamento de exceções permitem construir programas que
possuam definições de como proceder em caso de comportamento não usual
possibilitem tanto o diagnóstico quanto o tratamento de erros em tempo de execução
![Page 11: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/11.jpg)
Evolução de Linguagens de Programação
Década de 70: Programação Estruturada Abstração de dados: definição de tipos Abstração de controle: comandos, procedimentos Inicia preocupação com programação em larga escala: módulos e
programação estruturada
Exemplos de linguagens populares: Uso acadêmico: Algol (algoritmos), Pascal (tipos de dados)
Uso comercial: Cobol (arquivos), PL/I (uso amplo)
![Page 12: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/12.jpg)
Evolução de Linguagens de Programação
Década de 80: modularização Ênfase em mecanismos de LP e abstrações Correção de programas: verificação de tipos, exceções Programação baseada em TADs;
Exemplos de linguagens Uso acadêmico: Pascal / Modula-2
Programação de tempo real: Ada 83
![Page 13: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/13.jpg)
Evolução de Linguagens de Programação
Década de 90: base na estrutura Estruturação de dados: encapsulamento Estruturação da computação: classe Estruturação do programa: classes e objetos Programação para Internet: plataforma neutra
Exemplos de linguagens Pascal / Delphi C / C++ Ada83 / Ada95 Java
![Page 14: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/14.jpg)
Paradigmas de Programação
O que é um Paradigma de Programação Modelo, padrão ou estilo de programação suportado por linguagens que
agrupam certas características comuns.
Diferem nos seguintes aspectos:
Conceitos e abstrações usados para representar os elementos de um programa;
A forma como a computação é realizada;
![Page 15: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/15.jpg)
Paradigmas
Paradigmas de Linguagens de Programação Imperativos;
Declarativos;
Orientada a Agentes;
Baseada em Componentes;
Programação paralela ;
Orientada a funcionalidades(Features);
Funcional;
Baseado em lógica;
Baseado em aspectos;
Outros...
![Page 16: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/16.jpg)
Caracterizando Paradigmas
Paradigmas imperativo (Como Fazer) Linguagens expressam sequências de comandos que realizam
transformações sobre dados;
Exemplos de linguagens:
orientadas a procedimentos orientadas a objetos
Baseado fortemente na arquitetura de Von Neuman (1947):
memória;
processador;
dispositivos de entrada e saída.
Primeiro paradigma a surgir e até hoje é o dominante.
![Page 17: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/17.jpg)
O Paradigma Imperativo
Um programa neste paradigma é uma seqüência finita de instruções (ou comandos) de três tipos: atribuição, controle de fluxo, ou entrada/saída de dados.
Comandos de atribuição alteram o “estado” do programa.
![Page 18: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/18.jpg)
O Paradigma Imperativo
Exemplo:
function fatorial (n: integer):integer;
var fat: integer;
begin
fat := 1;
while (n>1) do
begin
fat := fat * n;
n := n – 1;
end;
fatorial := fat;
end;
![Page 19: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/19.jpg)
O Paradigma Imperativo
Exemplo:
![Page 20: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/20.jpg)
O Paradigma Imperativo
Vantagens Eficiência Paradigma dominante e bem estabelecido Método “receita de bolo”
Desvantagens descrições demasiadamente operacionais focalizam o como e não o quê
![Page 21: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/21.jpg)
Aperfeiçoando o Imperativo: TAD
O que são Tipos Abstratos de Dados (TADs)? Conceito matemático que diz respeito a determinada entidade e às
funções aplicadas sobre ela. Um TAD é definido pela sua funcionalidade: “o que” se pode fazer com
ele, e não “como” ele está de fato implementado. Exemplo uma fila é um tipo abstrato de dados: pode-se inserir e retirar
elementos de uma fila, verificar se a fila está cheia ou vazia, ou ainda contar quantos elementos estão nesta fila.
A utilização da fila (por uma aplicação) através destas funções independe de como a fila está de fato implementado.
![Page 22: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/22.jpg)
Aperfeiçoando o Imperativo: Programação Modular
A programação modular implementa a noção de tipo abstrato de dados
Implementação: encapsulamento de dados e funções na mesma unidade sintática – o módulo
A principal estrutura é um módulo, constituído de uma interface e de uma implementação
A interface contém todos os elementos visíveis (importáveis) por outros módulos
A implementação contém os elementos que devem ficar invisíveis e as implementações das funções e procedimentos do módulo
Exemplos de linguagens: Ada (DoD-USA), Modula-2 (Nicklaus Wirth).
![Page 23: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/23.jpg)
Aperfeiçoando o Imperativo: Programação Modular
Exemplo: Fila
![Page 24: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/24.jpg)
Aperfeiçoando o Imperativo: Programação Modular
Exemplo: Fila
![Page 25: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/25.jpg)
Programação Modular
Principais características Encapsulamento de dados e de funções Restrições à visibilidade de constantes, variáveis e funções de um
módulo Interface visível contém apenas a funcionalidade do módulo Separação do “o que” é feito do “como” é feito
![Page 26: Linguagens e Paradigmas de Programa§£o](https://reader031.vdocuments.pub/reader031/viewer/2022021211/6206527c8c2f7b173006a3fb/html5/thumbnails/26.jpg)
Encapsulamento
Encapsulamento é o agrupamento de idéias relacionadas em uma única unidade de programação
Encapsulamento de código Funções e procedimentos (functions, procedures, routines)
Encapsulamento de dados Vetores (arrays), registros (records, structs)
Encapsulamento de dados + código Módulos (modules, packages), em programação modular
Classes, em programação OO