Linguagens de Programação – 2015/2

Ementa: definição de linguagens: sintaxe e semântica. Paradigmas de programação. Modelos de implementação: compilação e interpretação. Visibilidade de nomes. Comunicação entre unidades. Alocação estática e dinâmica de memória. Subprogramas. Tipos abstratos de dados. Unidades genéricas. Tratamento de exceções. Noções de programação em linguagens funcionais e lógicas. Estudo comparativo de linguagens.

Objetivo: proporcionar uma visão geral sobre os conceitos definidos em várias linguagens de programação em diferentes paradigmas. Possibilitar que o aluno tenha contato com diversas linguagens de programação modernas. Capacitar o aluno para que ele possa analisar e escolher linguagens de programação.

Metodologia: aulas expositivas e exercícios em sala de aula, seminários.

Dia/horário das aulas: quartas e sextas-feiras das 9h às 11h.

Local: CT-9, sala 202 – Ufes (Av. Fernando Ferrari, 514 – Goiabeiras – Vitória, ES).

Carga horária semestral: 60 horas.

Mais informações:

Programa detalhado

  1. Introdução:
    1. Por que estudar LPs;
    2. Propriedades de linguagens de programação (LPs);
    3. Especificação e implementação de LPs;
    4. Paradigmas de LPs;
    5. Origem e evolução das LPs;
  2. Amarrações:
    1. Tempos de amarração;
    2. Identificadores;
    3. Ambientes e escopo de amarração;
    4. Definições e declarações;
  3. Valores e tipos de dados:
    1. Tipagem estática e dinâmica;
    2. Sistemas de tipos, erros de tipo;
    3. Tipos primitivos;
    4. Tipos compostos;
  4. Variáveis e constantes:
    1. Propriedades de variáveis;
    2. Armazenamento em memória principal (pilha e monte);
    3. Armazenamento em memória secundária (I/O, serialização);
  5. Expressões e comandos:
    1. Operadores;
    2. Tipos de comandos e expressões;
    3. Propriedades de comandos e expressões;
    4. Avaliação de expressões;
  6. Modularização:
    1. Tipos de abstração (processos e dados);
    2. Subprogramas e parâmetros;
    3. Tipos abstratos de dados;
    4. Pacotes e espaços de nome;
    5. Compilação separada;
  7. Polimorfismo:
    1. Sistemas de tipos (verificação, inferência, conversão de tipos);
    2. Sistemas de tipos monomórficos e polimórficos;
    3. Tipos de polimorfismo: coerção, sobrecarga, paramétrico e inclusão;
    4. Herança, sobrescrita, amarração tardia, classes e métodos abstratos;
    5. Metaclasses;
  8. Exceções:
    1. Abordagens de LPs para tratamento de erros;
    2. Especificação, tratamento e propagação de exceções;
    3. Exceções e polimorfismo;
  9. Concorrência:
    1. Motivação;
    2. Processos e threads;
    3. Problemas da execução concorrente;
    4. Semáforos;
    5. Programação concorrente estruturada;
    6. Suporte avançado de LPs à programação concorrente;
  10. Avaliação de LPs:
    1. Critérios gerais e específicos;
    2. Exemplo de comparação (C vs. C++ vs. Java);
  11. Seminários sobre linguagens de programação modernas.

Sistema de avaliação

A avaliação será constituída de 3 provas individuais (P1, P2 e P3) valendo 10 cada, 1 seminário em grupo (S) valendo 10 e um trabalho prático em grupo (T) valendo 1. A nota parcial será obtida com a seguinte fórmula:

NOTA PARCIAL = (P1 + P2 + P3 + S * T) / 4

Alunos que obtiverem nota parcial igual ou superior a 7 não farão prova final, tendo sua nota final igual à nota parcial. Demais alunos terão sua nota final calculada pela média aritmética simples entre a nota parcial e a nota da prova final e deverão obter nota final igual ou superior a 5 para serem aprovados.

Observação: o aluno que tiver mais de 25% (vinte e cinco por cento) de faltas, contadas em relação ao número de horas-aulas previstas para a disciplina, será privado do direito de prestar exame final e estará, independentemente de qualquer outra condição, reprovado. (Art. 51 Regimento CT, art. 104 Regimento Geral Ufes). Além disso, a média final da disciplina será arredondada para valores inteiros ou fração de 0,5, de acordo com o art. 63, parágrafos 1º e 2º do Regimento CT.

Bibliografia

Livros:

A lista de livros da bibliografia complementar está disponível no programa da disciplina arquivado junto à secretaria do Departamento de Informática.

Materiais disponíveis online:

Cronograma / Datas importantes

O período 2015/2 inicia em 03/08/2015 e termina em 04/12/2015. A semana de provas finais 2015/2 vai de 07 a 11/12/2015. A tabela abaixo resume eventos importantes durante o curso. O programa de aulas com o cronograma completo do curso é exibido em seguida.

Data Descrição
05/08/2015 Não haverá aula – Semana da Engenharia.
07/08/2015 Não haverá aula – Semana da Engenharia.
12/08/2015 Primeira aula do curso.
25/08/2015 Prazo para definição dos grupos para seminários.
09/09/2015 Prova Parcial 01.
25/09/2015 Não haverá aula, será reposta dentro do calendário.
14/10/2015 Prova Parcial 02.
21/10/2015 Início dos seminários.
30/10/2015 Não haverá aula – Feriado do Dia do Servidor Público.
02/12/2015 Prova Parcial 03.
04/12/2015 Prazo para entrevistas sobre trabalho prático.
11/12/2015 Prova Final.

Download de material

Seminário e trabalho prático

Veja aqui a especificação completa do seminário e trabalho prático. Abaixo encontra-se a divisão dos grupos e suas respectivas linguagens e datas de apresentação.

# Data Linguagem Alunos Download
01 23/10/2015 Python Felipe Seminário / Trabalho
02 28/10/2015 JavaScript Roger Seminário / Trabalho
03 04/11/2015 PHP Luiz Felipe Seminário / Trabalho
04 06/11/2015 Haskell Josias e Ramon Seminário / Trabalho
05 11/11/2015 Go Matheus Seminário / Trabalho
06 13/11/2015 Ruby Cassiano Seminário / Trabalho
07 18/11/2015 Lua Leonardo e Luiz Guilherme Seminário / Trabalho
08 20/11/2015 Perl Marco Aurélio e Marcos Paulo Seminário / Trabalho
09 25/11/2015 Erlang Luiz Carlos Seminário / Trabalho
10 27/11/2015 Scala Gabriel Seminário / Trabalho