Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Linguagens e Paradigmas de Programa§£o
Transcript of 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.
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
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.
Linguagens de Programação
Critérios de Avaliação de uma LP
Legibilidade
Simplicidade
Expressividade
Ortogonalidade
Confiabilidade
Portabilidade
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
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
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
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
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
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
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)
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
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
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;
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...
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.
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.
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;
O Paradigma Imperativo
Exemplo:
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ê
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.
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).
Aperfeiçoando o Imperativo: Programação Modular
Exemplo: Fila
Aperfeiçoando o Imperativo: Programação Modular
Exemplo: Fila
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
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