Linguagens de Programação – 2018/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 2018/2 inicia em 01/08/2018 e termina em 07/12/2018. A semana de provas finais 2018/2 vai de 10 a 14/12/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
02/08/2018 Primeira aula do curso.
06/09/2018 Prazo para definição dos grupos para seminários.
11/09/2018 Prova Parcial 01.
11/10/2018 Prova Parcial 02.
18/10/2018 Início dos seminários.
15/11/2018 Não haverá aula – Feriado da Proclamação da República.
27/11/2018 Prova Parcial 03.
07/12/2018 Prazo para entrevistas sobre trabalho prático.
11/12/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 23/10/2018 Python Eduarda, Jhones, Kaio e Lucas Vidoto Seminário / Trabalho
02 25/10/2018 PHP Breno Coimbra, Bruno Piraja, Franco, Gabriel Rezende, Rayane e Rhuan Seminário / Trabalho
03 30/10/2018 C# Bruno Oliveira, Elson, Lucas Cunha, Rafael e Vinícius Seminário / Trabalho
04 01/11/2018 JavaScript Elciney, Felipe, Fernando, Luan, Mateus Gomes Seminário / Trabalho
05 06/11/2018 Groovy Bruno Vittorazzi, Danilo, Matheus Sathler, Matusalem e Vitor Seminário / Trabalho
06 08/11/2018 Scala Igor, Kaique, Lucas Bergantini, Mateus Souza e Rebeca Seminário / Trabalho
07 13/11/2018 Kotlin Carolina, Julio Cesar, Lorena, Murilo e Ricardo Seminário / Trabalho
08 20/11/2018 Lua Andre, Breno Krohling, Israel, Matheus Ribeiro e Pedro Henrique Seminário / Trabalho
09 22/11/2018 Perl Beatriz, Heitor, Lucio, Maik Wander, Matheus Risso e Tiago Seminário / Trabalho
10 27/11/2018 Swift Dyego, Gabriel Fagundes, Luiz Felipe, Melina e Sandor Seminário / Trabalho