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;
- Sistema de avaliação;
- Bibliografia;
- Cronograma / datas importantes;
- Download de material do curso (slides, exercícios, etc.);
- Seminário e trabalho prático;
- Agende um horário para atendimento.
Programa detalhado
- Introdução:
- Por que estudar LPs;
- Propriedades de linguagens de programação (LPs);
- Especificação e implementação de LPs;
- Paradigmas de LPs;
- Origem e evolução das LPs;
- Amarrações:
- Tempos de amarração;
- Identificadores;
- Ambientes e escopo de amarração;
- Definições e declarações;
- Valores e tipos de dados:
- Tipagem estática e dinâmica;
- Sistemas de tipos, erros de tipo;
- Tipos primitivos;
- Tipos compostos;
- Variáveis e constantes:
- Propriedades de variáveis;
- Armazenamento em memória principal (pilha e monte);
- Armazenamento em memória secundária (I/O, serialização);
- Expressões e comandos:
- Operadores;
- Tipos de comandos e expressões;
- Propriedades de comandos e expressões;
- Avaliação de expressões;
- Modularização:
- Tipos de abstração (processos e dados);
- Subprogramas e parâmetros;
- Tipos abstratos de dados;
- Pacotes e espaços de nome;
- Compilação separada;
- Polimorfismo:
- Sistemas de tipos (verificação, inferência, conversão de tipos);
- Sistemas de tipos monomórficos e polimórficos;
- Tipos de polimorfismo: coerção, sobrecarga, paramétrico e inclusão;
- Herança, sobrescrita, amarração tardia, classes e métodos abstratos;
- Metaclasses;
- Exceções:
- Abordagens de LPs para tratamento de erros;
- Especificação, tratamento e propagação de exceções;
- Exceções e polimorfismo;
- Concorrência:
- Motivação;
- Processos e threads;
- Problemas da execução concorrente;
- Semáforos;
- Programação concorrente estruturada;
- Suporte avançado de LPs à programação concorrente;
- Avaliação de LPs:
- Critérios gerais e específicos;
- Exemplo de comparação (C vs. C++ vs. Java);
- 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:
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:
- F. M. Varejão. Linguagens de programação: Java, C e C++ e outras: conceitos e técnicas. Campus, 2004;
- A. B. Tucker, R. E. Noonan. Linguagens de programação: princípios e paradigmas, 2ª edição. McGraw Hill, 2009;
- R. W. Sebesta. Conceitos de linguagens de programação, 9ª edição. Bookman, 2011.
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:
- Livro “Linguagens de programação: Java, C e C++ e outras: conceitos e técnicas” do prof. Flávio Varejão;
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!), by Joel Spolsky.
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
- Apresentação do curso;
- Parte 01: Introdução;
- Parte 02: Amarrações;
- Parte 03: Valores e Tipos de Dados;
- Parte 04: Variáveis e Constantes;
- Parte 05: Expressões e comandos;
- Parte 06: Modularização;
- Parte 07: Polimorfismo;
- Parte 08: Exceções;
- Parte 09: Concorrência;
- Parte 10: Avaliação de Linguagens.
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 |