Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/02494.jsonl.gz/60

Os estudantes deverão ser capazes de projetar, programar e avaliar sistemas relativamente complexos, baseados em computadores, que modelem problemas orientados a processos em várias matérias e áreas de aplicação.
Os estudantes deverão ser capazes de:
1.analisar, metodicamente, e modelar problemas relativamente complexos orientados a processos em uma variedade de áreas de aplicação;
2.aplicar analise formal moderadamente avançada, técnicas de projeto e abstração de dados para planejar algoritmos eficientes, tipos abstratos de dados e estruturas de dados relativamente sofisticadas;
3.codificar e implementar programas e subprogramas (módulos) usando um ambiente de programação de uso geral;
4.avaliar e explorar alternativas para o projeto de programas.
Os estudantes deverão desenvolver habilidades para resolver problemas cada vez mais complexos e sofisticados em muitas áreas de aplicação. A ênfase deve ser dada a modelagem por meio da abstração de dados (uma técnica importante para melhorar a confiabilidade e a reutilização). Atenção especifica deve ser dada aos algoritmos e à estratégia utilizada para simulação avançada, de estruturas de dados lineares e não-lineares para implementação de tipos abstratos de dados.
Esta unidade estende e complementa a unidade GA1, Fundamentos de Programação e Desenvolvimento de Software. Os alunos irão resolver vários problemas progressivamente mais complexos oriundos de áreas de aplicação reais.
Análise de problemas
Os alunos desenvolvem modelos de problemas relativamente complexos orientados a processos, usando estratégias de projeto, como a modelagem por meio de tipos abstratos de dados. Eles analisam o sistema para determinar os seus elementos de dados básicos e funções a eles associadas que são utilizados como objetos no sistema.
Projeto
Os estudantes desenvolvem tipos abstratos de dados para os objetos identificados, os quais podem ser reutilizados por outros projetistas que trabalhem em situações que envolvam os mesmos objetos. Os alunos planejam a solução para o problema expressando-a em termos de módulos que manipulam objetos de dados abstratos apenas por meio das funções identificadas. Os estudantes deverão criar uma interface de comunicação com o usuário adequada e eficiente.
Programação
Os alunos constroem estruturas de dados sofisticadas na forma linear ou em árvore, para representar tipos abstratos de dados. Também criam as funções necessárias para acessar essas estruturas em linguagens de programação de uso geral, que possuam suporte encapsulamento e ocultação de dados, tanto diretamente como por meio de simulação das abstrações de dados. Os estudantes então codificam os seus projetos na linguagem de programação escolhida.
Implementação
Os programas codificados são implementados e executados em um ambiente de programação. Os alunos primeiramente implementam, testam e verificam a execução dos tipos abstratos de dados e só então passam para a execução do programa inteiro.
Avaliação
Os alunos determinam indicadores de ordem de magnitude para comparar diferentes algoritmos e praticam alguns métodos formais básicos para verificação de programas.
Abordagens alternativas
Quando há tempo disponível, as estratégias de desenvolvimento podem utilizar outros paradigmas, como metodologia orientada a objeto ou a programação lógica, que podem ser explorados se os recursos estiverem disponíveis.
Engenharia de software
Análise
Projeto
Abstração de dados e encapsulamento da informação.
Interface com o usuário efetiva.
Algoritmos
Grafos e algoritmos para grafos.
Encapsulamento de tipos abstratos de dados.
Estruturas e tipos dinâmicos de dados.
Arvores binárias.
Procura em arvores binárias.
Algoritmos avançados de procura.
Algoritmos de classificação eficientes, com ordem não quadrática.
Método de Hashing (função para cálculo de endereços).
Avaliação
Analise de algoritmos para determinação aproximada da ordem de magnitude (de tempo e memória).
Limitações dos algoritmos e problemas insolúveis.
Limites da representação numérica e métodos numéricos simples.
Elementos de linguagens de programação
Armazenamento de dados em listas simples e duplamente encadeadas.
Pilhas
Filas
Estruturas de dados em tabelas não-lineares.
Opcional
Aplicações em computação gráfica, robótica e inteligência artificial.
Modelagem utilizando programação lógica ou funcional.
Programação orientada a objetos.
Algoritmos de processamento paralelo.
Recursos
Recursos mínimos necessários
Um ambiente de linguagem de programação de alto nível estruturada, que suporte programação modular e abstração de dados.
Livros-textos modernos, de nível intermediário, sobre estrutura de dados e análise de algoritmos, que utilizem um método de abstração de dados.
Recursos opcionais
Ambiente de programação lógica, funcional, orientada a objetos ou de processamento paralelo.
Conexões
Fundamentos de Programação e Desenvolvimento de Software (GA1).
Metodologia
Ênfase nos conceitos, teorias e praticas da disciplina, em vez de exaustiva descrição da sintaxe da linguagem. É aconselhável o uso, se possível, da mesma linguagem de programação estruturada em ambas as unidades. A unidade tem um conteúdo tradicional, o qual é descrito em vários textos avançados de estrutura de dados. Os professores e os projetistas do currículo deverão considerar o uso da estrutura desses textos como a base para a definição e a abordagem das subunidades e para o desenvolvimento curricular.
Retornar Apêndice 3
Retornar