Linguagens de Programação – 2017/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: terças e quintas-feiras das 7h às 9h.

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 2017/2 inicia em 23/08/2017 e termina em 30/12/2017. A semana de provas finais 2017/2 vai de 02 a 09/01/2018. 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
24/08/2017 Primeira aula do curso.
07/09/2017 Não haverá aula – Feriado da Independência do Brasil.
12/09/2017 Não haverá aula – Banca de Doutorado.
26/09/2017 Prazo para definição dos grupos para seminários.
03/10/2017 Prova Parcial 01.
12/10/2017 Não haverá aula – Feriado de Nossa Senhora Aparecida.
19/10/2017 Não haverá aula – Participação em conferência.
02/11/2017 Não haverá aula – Feriado de Finados.
09/11/2017 Prova Parcial 02.
16/11/2017 Início dos seminários.
21/12/2017 Prova Parcial 03.
29/12/2017 Prazo para entrevistas sobre trabalho prático.
04/01/2018 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 16/11/2017 Python Bruno e Gustavo Seminário / Trabalho
02 21/11/2017 JavaScript Georgeana, Isabel e Luiz Felipe Seminário / Trabalho
03 23/11/2017 PHP Guilherme, João Vítor e Lucas Seminário / Trabalho
04 28/11/2017 C# Brenno, Wallace e Wanderson Seminário / Trabalho
05 30/11/2017 Groovy Gabriela, Iagoh e Jonas Seminário / Trabalho
06 05/12/2017 Scala Felipe, Gilmarlen e Gustavo Seminário / Trabalho
07 07/12/2017 Lua André Luiz e Pedro Seminário / Trabalho
08 12/12/2017 Perl Dhiego, Israel e Lucas Seminário / Trabalho
09 14/12/2017 Swift Laisa, Lucas e Nathania Seminário / Trabalho
10 19/12/2017 Julia Lucas, Nicole e Úrsula Seminário / Trabalho