Laboratório de Programação.
60 horas
Tendo como base a execução de atividades práticas e o desenvolvimento de produtos, apresentar ao estudante os principais conceitos relacionados a linguagens e seus diversos paradigmas de programação.
Modelagem e resolução de diversos problemas em linguagens de programação imperativas, lógicas e funcionais utilizando laboratório de informática. Os problemas a serem tratados incluem: Processamento de cadeias de caracteres; Problemas matemáticos; Geometria Computacional; Aplicações de Estruturas de Dados e Bibliotecas.
1. Paradigmas de Programação.
2. Problemas em Paradigmas Imperativos.
Processamento de Strings.
Matemáticos.
Geometria Computacional.
Estruturas de Dados.
3. Problemas em Paradigmas Funcionais.
Processamento de Strings.
Matemáticos.
Geometria Computacional.
Estruturas de Dados.
4. Problemas em Paradigmas Lógicos.
Visão Geral do Paradigma Lógico.
Processamento de Strings.
Matemáticos.
Aprender fazendo e fazer aprendendo. As ações implementadas têm como foco o aprendizado de Laboratório de Programação pelo uso de recursos computacionais - privilegiando o projeto por simuladores e o desenvolvimento prático; seguido de exposições teóricas, apoiadas por: simulações, slides e vídeos. Em resumo, a metodologia tem como base a tríade Conteúdo, Atividade e Produto.
A nota final será dada pelas avaliações dos artefatos (relatório, lista de exercício - manuscritas, apresentação oral, pôster, postagem, vídeo, ...) produzidos durante as aulas e entregues em cada uma das datas especificadas. O aluno também será avaliado através de outros recursos, como p.ex. a frequência e a apresentação de artefatos não obrigatórios - os quais poderão até ter pontuação extra.
Conteúdo:
Paradigmas de Programação.
Atividades:
Observando a Evolução e Organização das Linguagens de Programação.
Entendendo os Paradigmas de Programação.
Avaliativas:
Identificar e exemplificar em C, Java, Python e Rust; os paradigmas apresentados.
Desenvolver a "biblioteca" de programas e apresentá-la de modo semelhante ao deste tutorial: Strings.
Produzir infográficos, com exemplos interativos, dos diagramas e das linguagens apresentadas.
Produtos:
Conteúdo:
Problemas em Paradigmas Imperativos: Processamento de Strings.
Atividades:
Debatendo: Linguagens imperativas e declarativas, o que são?
HTML é uma linguagem de programação?
Qual código é mais rápido para manutenir? O Imperativos ou o Declarativo?
Avaliativas:
Criar exemplos para processamento de Strings em C, Java, Python, Rust, ... para os paradigmas apresentados.
Desenvolver a "biblioteca" de funções e apresentá-la de modo semelhante ao deste tutorial: Strings.
Produzir infográfico, com exemplos interativos, dos Paradigmas e das Linguagens apresentadas.
Produtos:
Conteúdo:
Problemas em Paradigmas Imperativos: Matemáticos.
Atividades:
Programando e Debatendo: O uso de recursividade melhora o desempenho nesta categoria de funções?
Avaliativas:
Criar exemplos para processamento matemático em C, Java, Python, Rust, ... para os paradigmas apresentados.
Desenvolver a "biblioteca" de funções e apresentá-la de modo semelhante ao deste tutorial: Strings.
Produtos:
Programa de Iniciação Científica - Apostilas.
Conteúdo:
Problemas em Paradigmas Imperativos: Geometria Computacional.
Atividades:
Verificando a equidade entre sistemas de coordenadas.
Configurando posicionamento no Tynker.
Avaliativas:
Use de bibliotecas gráficas básicas de linguagens como C, Java, Python, Rust, ... para:
Desenhar figuras geométricas básicas.
Plotar um ponto e deslocá-lo "animadamente" por 300 pixels.
Produtos:
Conteúdo:
Revisão de conteúdos e 1ª Avaliação.
Atividades:
Apresentação e Avaliação de trabalhos.
Produtos:
Relatório de Produto 1 e/ou Prova Prática 1.
Conteúdo:
Problemas em Paradigmas Imperativos: Estruturas de Dados.
Atividades:
Implementando Estruturas de Dados simples.
Avaliativas:
Use de bibliotecas de estruturas de dados básicas de linguagens como C, Java, Python, Rust, ... para:
Implementar operações de inserção e deleção de elementos em uma lista duplamente encadeada, sem usar de bibliotecas para implementação da estrutura de dados e das operações.
Produtos:
Conteúdo:
Problemas em Paradigmas Funcionais: Processamento de Strings.
Atividades:
Observando a relação Procedural e Funcional.
Listando as vantagens e as desvantagens do Paradigma Funcional.
Algumas linguagens funcionais.
Exemplos:
Algoritmo Quicksort usando Programação Funcional na linguagem Potigol.
Algoritmo Quicksort: como implementar em Python - No Paradigma Imperativo.
Programando em C++ no estilo funcional: Escrita de; e Busca em String.
Implementando: Linguagens funcionais, o que são?
Visão geral da Programação Funcional Em Python.
Implementando Programação Funcional em Python (no tutorial deste link, testar os códigos procurando entendê-los).
Avaliativa:
Criar exemplos para processamento de Strings em C, Java, Python, Rust, ... para os paradigmas apresentados.
Desenvolver a "biblioteca" de funções e apresentá-la de modo semelhante ao deste tutorial: Strings.
Produtos:
Conteúdo:
Problemas em Paradigmas Funcionais: Matemáticos.
Atividades:
Estudando Casos.
Programando o Problema do Ogro no estilo funcional.
Avaliativas:
Criar exemplos para processamento de Strings em C, Java, Python, Rust, ... para os paradigmas apresentados.
Desenvolver a "biblioteca" de funções e apresentá-la de modo semelhante ao deste tutorial: Strings.
Resolver de modo Funcional o problema da Festa Olímpica.
Produtos:
Conteúdo:
Problemas em Paradigmas Funcionais: Geometria Computacional.
Atividades:
Criando Gráficos (Pontos, Linhas, Histogramas)
Gerenciar Dados: Como Automatizar Planilhas Do Excel Utilizando Python.
Criar Gráficos: Como Criar Gráficos No Python Utilizando O Plotly.
Observando e aprendendo sobre eventos em interfaces gráficas.
Arquitetura orientada a eventos com lambda functions no Python.
Observe o menu a esquerda e veja quais eventos ele atende e quais ele inicia.
Criando aplicativos gráficos usando programação orientada a eventos.
Construindo um "Olá Mundo!" no AppInventor.
Avaliativa:
A partir de um programa em Python criado para apresentar um gráfico de dados, tente reescrevê-lo usando as diretivas da programação em paradigma funcional. Dica: não pense no gráfico, mas na manipulação dos dados.
Criar, no AppInventor, um aplicativo para trocar mensagens entre 2 dispositivos móveis.
Produtos:
Conteúdo:
Revisão de conteúdos e 2ª Avaliação.
Atividades:
Apresentação e Avaliação de trabalhos.
Produtos:
Relatório de Produto 2 e/ou Prova Prática 2.
Conteúdo:
Problemas em Paradigmas Funcionais: Estrutura de Dados.
Atividades:
Implementando Árvores no Paradigma Funcional.
Explorando os Fundamentos.
Ponteiros.
A variável fundamental: implementar no 8-Bit Assembler e em C++.
Passagem de parâmetros por valor e por referência.
Um exemplo "funcional" e um para dar dor de cabeça.
Listas Encadeadas.
Produtos:
Linguagens funcionais: saiba as vantagens de usá-las na programação.
Ponteiros em Python: Aprenda a dominar essa poderosa ferramenta de programação.
Listas (Python).
Conteúdo:
Problemas em Paradigmas Lógicos: Visão Geral do Paradigma Lógico.
Atividades:
Enquadrando e Caracterizando o Paradigma.
Tem como base Fatos, Regas e Perguntas.
A Programação em Lógica envolve:
Usando Prolog com o SwiSh.
Produtos:
Prolog - Introdução ao Prolog (vídeo lista).
Conteúdo:
Problemas em Paradigmas Lógicos: Processamento de Strings.
Atividades:
Explorando os Fundamentos.
Criando Funções de Manipulação de Strings no SwiSh.
Programa exemplo: Inversão de String.
Produtos:
Conteúdo:
Problemas em Paradigmas Lógicos: Matemáticos.
Atividades:
Explorando os Fundamentos.
Programas exemplo: Conversão Decimal Binário e Exponenciação.
Produtos:
Conteúdo:
Revisão de conteúdos e 3ª Avaliação.
Atividades:
Apresentação e Avaliação de trabalhos.
Produtos:
Relatório de Produto 3 e/ou Prova 3.
Sebesta, R. W. (2011). Conceitos de Linguagens de Programação. Bookman, 9a edição.
Tucker, A. B. e Nooman, R. (2009). Linguagens de Programação – Princípios e Paradigmas. McGraw-Hill, 2a edição.
Sprankle, M. e Hubbard, J. (2011). Problem Solving and Programming Concepts. Pearson, 9a edição.