UNIDADE GS2 - ELEMENTOS AVANÇADOS DE PROGRAMAÇÃO

Objetivo

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.

Objetivos secundários

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.

  1.  

Contexto

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.

Conteúdo

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.

 

Tópicos

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