Linguagens de Programação – 2019/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 204 – 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 2019/2 inicia em 12/08/2019 e termina em 16/12/2019. A semana de provas finais 2019/2 vai de 17 a 23/12/2019. 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
13/08/2019 Não haverá aula – Greve Geral da Educação.
15/08/2019 Primeira aula do curso.
27/08/2019 Não haverá aula – Semana da Engenharia.
29/08/2019 Não haverá aula – Semana da Engenharia.
17/09/2019 Prazo para definição dos grupos para seminários.
24/09/2019 Prova Parcial 01.
22/10/2019 Prova Parcial 02.
29/10/2019 Início dos seminários.
05/11/2019 Não haverá aula – Participação em Congresso.
07/11/2019 Não haverá aula – Participação em Congresso.
12/12/2019 Prova Parcial 03.
16/12/2019 Prazo para entrevistas sobre trabalho prático.
19/12/2019 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 29/10/2019 Python Ariel, Bruno, Luma e Murilo Seminário / Trabalho
02 31/10/2019 C# Allan, Fernando, Hericles e Leonardo Seminário / Trabalho
03 12/11/2019 TypeScript Gabriel, Gabriel, Iury e Mikaella Seminário / Trabalho
04 19/11/2019 Scala Lucas, Matheus, Pedro e Otávio Seminário / Trabalho
05 21/11/2019 Haskell Alan, Bruno, Fernando e Victor Seminário / Trabalho
06 26/11/2019 Kotlin Gabriel, Luiz Felipe, Matheus e Renan Seminário / Trabalho
07 28/11/2019 Go Fernando, Guilherme, Igor e João Felipe Seminário / Trabalho
08 03/12/2019 Lua Jordan, Matheus, Thiago e Vinícius Seminário / Trabalho
09 05/12/2019 Dart Daniel, Gustavo, Lorenzo e Usiel Seminário / Trabalho
10 10/12/2019 Visual Basic Kaique, Leonardo e Mateus Seminário