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