linguagens e paradigmas de programa§£o

26
Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 – 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.

Upload: others

Post on 11-Feb-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagens e Paradigmas de Programa§£o

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

O Paradigma Imperativo

Exemplo:

Page 20: Linguagens e Paradigmas de Programa§£o

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

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

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

Aperfeiçoando o Imperativo: Programação Modular

Exemplo: Fila

Page 24: Linguagens e Paradigmas de Programa§£o

Aperfeiçoando o Imperativo: Programação Modular

Exemplo: Fila

Page 25: Linguagens e Paradigmas de Programa§£o

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

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