Linguagens de Programação – 2016/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: segundas-feiras das 8h às 10h e quartas-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 2016/2 inicia em 01/08/2016 e termina em 08/12/2016. A semana de provas finais 2016/2 vai de 09 a 15/12/2016. 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
01/08/2016 Primeira aula do curso.
08/08/2016 Não haverá aula, será reposta dentro do calendário.
22/08/2016 Não haverá aula – Semana da Engenharia.
24/08/2016 Não haverá aula – Semana da Engenharia.
05/09/2016 Prazo para definição dos grupos para seminários.
07/09/2016 Não haverá aula – Feriado da Independência do Brasil.
12/09/2016 Prova Parcial 01.
12/10/2016 Não haverá aula – Feriado de N. Sra. Aparecida.
17/10/2016 Prova Parcial 02.
24/10/2016 Início dos seminários.
02/11/2016 Não haverá aula – Feriado de Finados.
14/11/2016 Não haverá aula – Véspera de Feriado da República.
05/12/2016 Prova Parcial 03.
08/12/2016 Prazo para entrevistas sobre trabalho prático.
12/12/2016 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 24/10/2016 Scala Prof. Vítor 2014/2, 2015/2
02 26/10/2016 Python Guilherme, Nickolas e Nicolas Seminário / Trabalho
03 31/10/2016 PHP Douglas e Emilia Seminário / Trabalho
04 07/11/2016 C# Breno, Luiz e Pedro Seminário / Trabalho
05 09/11/2016 JavaScript Gustavo, Leonardo e Nicolas Seminário / Trabalho
06 16/11/2016 Shell Script Marcelo e Renan Seminário / Trabalho
07 21/11/2016 Lua Carlos Henrique, Matheus e Thiago Seminário / Trabalho
08 23/11/2016 Go André, Arthur e Thais Seminário / Trabalho
09 28/11/2016 Ruby Gabriel, Leonardo e Vinícius Seminário / Trabalho
10 30/11/2016 Julia Gabriel e Luiz Otávio Seminário / Trabalho