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;
- 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 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
- 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 | 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 |