1 AULA 1: PARADIGMAS DE PROGRAMAÇÃO Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme
Ementa 2 Programação Imperativa. Programação Paralela e Concorrente. Programação Lógica. Programação Funcional. Programação Orientada a Objetos. Comparativo entre os diversos paradigmas da programação.
Referências bibliográficas 3 SEBESTA, R. W. Conceitos de Linguagens de Programação. 9ª ED. BOOKMAN, 2011. TUCKER, A. B.; NOONAN, R. E. Linguagens de Programação: Princípios e Paradigmas. 2ª Edição. McGraw-Hill, 2009. David A. Watt. Programming Language Design Concepts. Wiley, 2004.
Avaliação 4 1º Seminário: 15 pontos 12/03/2015 1ª Avaliação: 25 pontos Data: 03/04/2015 2ª Avaliação: 30 pontos Data: 07/05/2015 2º Seminário: 15 pontos Data: 12/06/2015 Trabalho final: 15 pontos Data: 26/06/2015
Algumas perguntas 5 1. Quais características de uma linguagem de programação são importantes? 2. Como comparar estas características? 3. Qual linguagem de programação usar? 4. Como estudar novas linguagens? 5. Qual a melhor linguagem para uma determinada aplicação?
Objetivos da disciplina 6 Análise crítica de paradigmas e linguagens de programação Estudo dos conceitos gerais de linguagens de programação Visão geral dos paradigmas
Razões para estudar conceitos de linguagens de programação 7 1. Capacidade aumentada para expressar ideias A linguagem adotada impõe limitações Conhecer uma variedade de recursos Aprender novas construções E se o programador for obrigado a usar uma determinada linguagem? Simular construções de outras linguagens Exemplo: tipo booleano em C
Razões para estudar conceitos de linguagens de programação 8 2. Embasamento para escolher linguagens adequadas Como escolher a linguagem de um novo projeto? Linguagens surgem ao longo do tempo Ex.: C# (2000) Simulação de recursos
Razões para estudar conceitos de linguagens de programação 9 3. Habilidade aumentada para aprender novas linguagens Em constante evolução Exige apredizado contínuo É essencial conhecer vocabulário e conceitos para ler, entender e avaliar Indicador de popularidade das linguagens http://www.tiobe.com/index.php/content/paperinfo/tpci/in dex.html
10
Razões para estudar conceitos de linguagens de programação 11 4. Melhor entendimento da importância da implementação Aspectos de implementação que afetam esses conceitos Pode levar a habilidade de usar de maneira mais eficiente Entender as escolhas entre as construções e as consequências
Razões para estudar conceitos de linguagens de programação 12 5. Melhor uso das linguagens já conhecidas Muitas linguagens são grandes e complexas e é incomum conhecer todos os recursos 6. Avanço geral da computação Muitos acreditam que as linguagens mais populares nem sempre são as melhores disponíveis Ao menos em parte, por não estarem familiarizados com os conceitos Se quem escolhem fosse mais bem informados, talvez linguagens melhores ganhassem de outras.
Domínios de programação 13 De controlar usinas a jogos eletrônicos em celulares Aplicações científicas Aritmética e ponto flutuante, vetores e matrizes Aplicações empresariais Relatórios Inteligência artificial Programação de sistemas Sistema operacional e ferramentas de suporte. Eficiência Softwares para web Marcação, conteúdo dinâmico
Critérios de avaliação de linguagens 14 Examinar os conceitos das construções e capacidades das linguagens São quatro critérios, conforme Sebesta (2011): Legibilidade Facilidade de escrita Confiabilidade Custo Algumas características que influenciam esses critérios
1. Legibilidade 15 Facilidade com a qual os programas podem ser lidos e entendidos Antes de 1970: eficiência e legibilidade de máquina Após, facilidade de manutenção
1. Legibilidade 16 1.1 Simplicidade geral Uma linguagem com muitas construções é difícil de aprender Multiplicidade de recursos Ex.: count = count + 1 count += 1 count++ ++count Sobrecarga de operadores Apesar de útil, pode não fazer sentido para quem ler Ex.: operador + para vetores
1. Legibilidade 17 1.2 Ortogonalidade Conjunto pequeno de construções que podem ser combinado a um número pequeno de formas Cada combinação é legal e significativa Um recurso é independente do contexto A falta de ortogonalidade leva a exceções Ex. Na linguagem C: Vetores não podem ser retornados por funções e registros sim. Um membro de uma estrutura pode ser de qualquer tipo, exceto void Vetores podem ser qualquer tipo exceto void Parâmetros são passados por valor, exceto vetores
1. Legibilidade 18 1.3 Tipos de dados Presença de mecanismos para definir tipos de dados O que é mais claro? flag=1 ou flag=true 1.4 Projeto da sintaxe Formato dos identificadores: Fortran 77 permite 6 caracteres Palavras especiais (while, for, if) { } ou end if / end loop
2. Facilidade de escrita 19 A capacidade de criar programas para um domínio 2.1 Simplicidade e ortogonalidade Número menor de construções 2.2 Suporte à abstração Habilidade de definir estruturas complicadas ignorando alguns detalhes Subprogramas Abstração de estruturas de dados 2.3 Expressividade cont++ ou for
3. Confiabilidade 20 3.1 Verificação de tipos Detectar erros de tipos (compilador e durante a execução) Ex.: void verifica_tipo(int a){ printf("%d",a); } void main(){ float a = 2; verifica_tipo(a); }
3. Confiabilidade 21 3.2 Tratamento de exceções Interceptar erros em tempo de excecução 3.3 Utilização de apelidos Ponteiro 3.4 Legibilidade e facilidade de escrita Programas difícieis de ler são também dificies de escrever e modificar
4. Custo 22 Treinamento Escrita Compilação Execução Sistema de implantação Confiabilidade baixa Manutenção
Outros critérios 23 Portabilidade Generalidade
Influências no projeto de linguagens 24 Arquitetura de computadores Von Neumann Memória e CPU separadas (transmissão é necessária) Variáveis, sentenças de atribuição, repetição iterativa Metodologias de projeto de programas Mudança de maior custo de hardware para softwares Modelar sistemas complexos Suporte às abstrações de dados Orientação a objetos
Categorias 25 Definição: Modelo, padrão ou estilo de programação suportado por determinado grupo de linguagens Classificação: Paradigma Imperativo Paradigma Funcional Paradigma Lógico Paradigma Orientado por Objetos Paradigma Paralela e Concorrente
Implementação 26 Compilação, Interpretação Pura, Hibridos Ambientes de programação
Paradigma Imperativo 27 Baseado no conceito de variáveis e operações Sequência de comandos Primeiro paradigma a surgir e ainda é o dominante Vantagens: Eficiência (arquiteturas von Neumann) Modelagem natural de aplicações do mundo real Paradigma fortemente estabelecido Desvantagens: Implementações demasiadamente operacionais definem como fazer e não o que fazer privilegiam as operações (processos) às estruturas de dados
Paradigma Funcional 28 Toda computação em um programa funcional é realizada por meio da aplicação de funções a argumentos Mapeamento muito próximo do modelo matemático de funções Vantagens: Concorrência é explorada de forma natural Desvantagem: Implementações em geral são ineficientes
Paradigma funcional 29 Ex.: Em Haskell let x = 8 * 10 in x + x R.:160 'a' : 'b' : [] R.: ab map (*99) [1..10] R.:[99,198,297,396,495,594,693,792,891,990]
Paradigma lógico 30 Linguagens cujos programas são relações entre entrada e saída (E/S) Estilo declarativo, notação lógica formal Ex.: Prolog Fatos: pai(joana, jake) pai(jose,joana) Regras: avo(x, Z) :-pai(x,y), pai(y,z) Consultas: pai(bob, darcie) R.: true ou false
Paradigma orientado a objetos 31 Classes com atributos e métodos Instância de objetos, herança, encapsulamento Reutilização de código Ex.:
Paradigma orientado a objetos 32 public class Pessoa { private string nome; private string endereco; private DateTime datanasc; public int Idade() { //cálculos return idade; } }
Leitura complementar 33 Capítulo 1 Aspectos preliminares SEBESTA, R. W. Conceitos de Linguagens de Programação. 9ª ED. BOOKMAN, 2011. http://book.realworldhaskell.org/read/ http://www.haskell.org/haskellwiki/introduction
Contato 34 luciana.balieiro@ifnmg.edu.br