title |
---|
Visão Geral e Dicas |
Informações que irão auxiliá-lo a cursar bem a disciplina e a compreender sua importância para o curso.
- Paradigma Imperativo
- Sistemas de tipos
- Encapsulamento de dados
- Estruturas de controle
- Entrada e saída de dados
- Mecanismos de modularização
- Mecanismos de concorrência
- Controle de exceção
- Paradigma Funcional
- Paradigma Lógico/Declarativo
- Paradigma Orientação a objetos
- Classes e heranças
- Heranças simples e múltiplas
- Resolução de conflitos de heranças
- Paradigma Híbrido
- Funcional orientado a objetos
- Lógico orientado a objeto
A disciplina envolve tanto aspectos teóricos, quanto práticos. A teoria é ministrada em aulas expositivas e avaliada através de três provas escritas, uma para cada paradigma visto (imperativo, funcional e lógico). Essas provas envolvem não somente os conceitos teóricos, mas também escrita e correção de código. Já a parte prática é ministrada em aulas de laboratório e envolve dois tipos de atividades avaliativas: as práticas e o projeto.
As práticas são conjuntos de questões (semelhantes às encontradas no CodeForces ou URI) que os alunos devem resolver durante uma aula de laboratório utilizando a linguagem sendo estudada no estágio (C/C++, Haskell ou Prolog). Já o projeto é feito em grupo, com funcionalidades definidas pelo próprio grupo (em acordo com os professores), que deve ser implementado nas três linguagens vistas ao longo do período.
Além de introduzir novos conceitos e maneiras de programar, a disciplina contribui para que os alunos possam perceber, que mesmo que todas as linguagens de programação sejam capazes de resolver os mesmos problemas, sua escolha impacta profundamente o desenvolvimento. Vale salientar que o contato com esses novos paradigmas não são tão comuns durante a graduação e que contribuem para a formação do cientista da computação.
-
Durante a disciplina, você pode precisar aprender até 3 linguagens de programação novas, então evite pagar outras disciplinas no mesmo período que também precisem que você aprenda novas linguagens.
-
O cronograma para entrega dos projetos nunca é tão longo quanto parece. Faça o possível para iniciar a implementação seguinte o mais breve possível após cada entrega.
-
Não escolha projetos excessivamente complexos. Para mostrar que você compreende os novos paradigmas de programação a que foi inserido não basta fazer uma calculadora simples, mas também não é necessário lançar o próximo foguete à lua.
-
Haskell: Um livro muito bom para Haskell é "haskell programming from first principles". A base da programação funcional é o conceito de cálculo lambda que é IGNORADO pela maioria dos outros tutoriais, que preferem focar nas diferenças entre programação funcional e imperativa, dando pouca ou nenhuma base. O efeito disso é que Haskell acaba sendo bem mais difícil de absorver, quando deveria ser uma linguagem simples, e não algo de outro mundo. "Haskell programming from first principles" além de ser um material muito bom, até pra quem tiver interesse em se aprofundar em Haskell futuramente, fornece uma base sólida de cálculo lambda no primeiro capítulo. É uma leitura a mais, porém, o esforço definitivamente compensa.