5.3 Salmon rivers, reborn
5.3.1 Barrier removal as a measure to restore salmon populations
A grade curricular utilizada na modelagem ontológica realizada neste trabalho foi baseada em duas ementas do Curso em Bacharelado de Ciência da Computação. A primeira ementa refere-se a uma nova proposta que teve seu inicio de aplicação em 2006. Desta ementa foram consideradas as quarto primeiras etapas do curso. A segunda ementa refere- se à antiga ementa do mesmo curso anterior a 2006, entretanto foram consideradas as quatro ultimas etapas. As tabelas abaixo mostram a ementa de cada disciplina e o ano a que pertence. Todos os conceitos relacionados neste apêndice foram instanciados no domínio da ontologia criada.
Desenvolvimento de Software II 7a Etapa – Ementa 2005
Conteúdo Programático 1. Padrões de projeto
1.1. Motivação e conceituação básica 1.2. Padrões GRASP 1.3. Padrões GoF 1.3.1. Padrões criacionais 1.3.2. Padrões estruturais 1.3.3. Padrões comportamentais 1.4. Outros padrões 2. Métricas de software 2.1. Conceitos iniciais 2.2. Métricas estruturadas 2.3. Métricas orientadas a objeto
2.4. Papel das métricas no processo de desenvolvimento de software
3. Testes
3.1. Conceitos de testes e testabilidade 3.2. Tipos de testes
3.3. Verificação e Validação de software
4. Qualidade de software 4.1. Conceitos básicos 4.2. Padrões de qualidade
4.2.1. ISO
Ambientes Operacionais 1a Etapa – Ementa 2006 Conteúdo Programático
1. Organização e arquitetura de computadores 1.1. Organização básica de um computador
1.2. Unidade Central de Processamento: ULA, registradores, unidade de controle, clock, noções de execução de programas binários.
1.3. Memória: RAM, ROM, cache.
1.4. Dispositivos de E/S: tipos, interrupções, DMA 2. Sistemas Operacionais
2.1. Módulos básicos de um sistema operacional: gerenciador de processos, gerenciador de memória, gerenciador de arquivos, gerenciador de dispositivos.
2.2. Exemplos das arquiteturas Windows/Linux 2.3. Noções de processos
2.4. Gerenciamento de memória: noções de carregamento de programas, segmentação e paginação. 2.5. Gerenciamento de arquivos: conceito de sistema de arquivos, processo de formatação,
conversão entre sistemas de arquivos.
2.6. Gerenciamento de dispositivos: rotinas de E/S e device drivers 3. Organização e funcionamento de redes
3.1. Conceitos de redes e principais topologias de interligação 3.2. Noções do modelo de referência ISO/OSI
3.3. Protocolos
3.4. Organização e equipamentos das camadas de hardware
3.4.1. Camada física: meios de transmissão, cabos, hubs e switchs.
3.4.2. Camada de enlace: noções de Ethernet, pontes.
3.4.3. Camada de rede: protocolo IP, roteadores.
3.5. Camada de transporte: noções dos protocolos TCP/UDP 3.6. Camada de aplicação: serviços HTTP, FTP e SMTP. 4. Internet
4.1. Pequeno histórico da Internet 4.2. Serviços da Internet
4.3. Noções de hipertexto e provedoria de serviços 4.4. Noções de HTML e XML
5. Ferramentas de desenvolvimento Linux (Parte prática) 5.1. Instalação do ambiente Linux
5.2. Comandos básicos de gerenciamento de processos e manipulação de sistemas de arquivos 5.3. Shells e linguagens de tipo shell script
5.4. Makefiles e o processo de ligação com bibliotecas 5.5. Ambientes de programação
Introdução a algoritmos e computação 1a Etapa - Ementa 2006 Conteúdo Programático
1. Fundamentos de Algoritmos
1.1. Noções intuitivas de problemas e algoritmos
1.2. Formas de descrição de algoritmos 1.3. Exemplos de problemas elementares e
algoritmos associados
2. Programas e noções do processo de compilação 2.1. Linguagens de programação 2.2. Programa-fonte, programa-objeto e programa executável. 2.3. Transformação de algoritmos em programas 2.4. Noções de documentação de programas 2.5. Compilação e interpretação
2.6. Prática em ambiente de compilação C (Windows e Linux)
3. Sistemas numéricos e conversão entre bases
3.1. Bases decimal, binária e hexadecimal. 3.2. Conversão entre as bases decimal e
binária
3.3. Conversão entre as bases decimal e hexadecimal
4. Representação interna de dados
4.1. Noções de tipos primitivos de dados (números e caracteres)
4.2. Representação de números inteiros (positivos e negativos)
4.3. Noções de representação de números em ponto flutuante (IEEE 754)
4.4. Representação de caracteres (ASCII e Unicode)
5. Variáveis
5.1. Definição e iniciação de variáveis 5.2. Operadores aritméticos
5.3. Expressões aritméticas
5.4. Prática em ambiente de compilação C 6. Estruturas de decisão
6.1. Operadores relacionais 6.2. Estrutura do tipo if... else
6.3. Estrutura com múltiplas seleções (switch... case).
6.4. Prática em ambiente de compilação C 7. Controle de fluxo
7.1. Fluxos de execução em programas 7.2. Laços do tipo while
7.3. Laços do tipo do...while 7.4. Laços do tipo for
7.5. Alteração de fluxos via break, continue e goto.
7.6. Prática em ambiente de compilação C 8. Alocação dinâmica de memória
8.1. Noções de organização de programas em tempo de execução
8.2. Funções para alocação dinâmica (malloc e free)
8.3. Noções de aritmética de ponteiros 8.4. Prática em ambiente de compilação C 9. Funções e procedimentos
9.1. Conceitos básicos de funções e procedimentos: parâmetros, variáveis locais e globais, retorno.
9.2. Passagem por valor e por referência 9.3. Prática em ambiente de compilação C 10. Vetores
10.1. Declaração estática e dinâmica de vetores
10.2. Iniciação de vetores
10.3. Algoritmos elementares de
ordenação (seleção/inserção) e busca (linear/binária)
10.4. Prática em ambiente de compilação C 11. Arquivos
11.1. Noções elementares de sistemas de arquivos/diretórios
11.2. Arquivos do tipo texto 11.3. Arquivos binários 11.4. Manipulação de arquivos
11.5. Prática em ambiente de compilação C 12. Registros
12.1. Declaração e iniciação de registros 12.2. Vetores de registros
Técnicas de Desenvolvimento de Algoritmos 2a Etapa - Ementa 2006 Conteúdo Programático 1. Medidas de complexidade de algoritmos 1.1. Medidas experimentais de eficiência de algoritmos
1.2. Cotas superiores e a notação O (.).
1.3. Exemplos elementares de análise O
(.).
1.4. Cotas inferiores e a notação Ω (.).
1.5. Otimalidade de algoritmos
2. Noções de corretude de algoritmos
2.1. Pré e pós-condições
2.2. Invariantes de loops
2.3. Exemplos elementares de provas
de corretude
3. Recursividade e divisão-e-conquista 3.1. Algoritmos recursivos x algoritmos
iterativos
3.2. Exemplos elementares de
algoritmos recursivos
3.3. Análise de algoritmos recursivos
(recorrências básicas)
3.4. Conversão de algoritmos recursivos
para iterativos
3.5. Paradigma de divisão-e-conquista
3.6. Relação entre divisão-e-conquista e
recursividade
3.7. Exemplos de aplicação de divisão- e-conquista, com análise.
4. Backtracking
4.1. Algoritmo geral de backtracking
4.2. Aplicação em problemas clássicos: labirinto, jogos de tabuleiro, palavras- cruzadas.
4.3. Eficiência de algoritmos baseados em backtracking
5. Estruturas de dados básicas
5.1. Pilhas (em vetor)
5.1.1. Operações básicas
5.1.2. Aplicações
5.2. Filas (em vetor)
5.2.1. Operações básicas
5.2.2. Aplicações
5.3. Listas ligadas simples
5.3.1. Alocação dinâmica de estruturas 5.3.2. Operações básicas 5.3.3. Aplicações 6. Algoritmos de busca 6.1. Busca seqüencial 6.1.1. Vetores 6.1.2. Listas ligadas 6.1.3. Análise
6.2. Busca binária e sua análise
7. Algoritmos de ordenação
7.1. Cota inferior para ordenação
baseada em comparação Ω (nlogn)
7.2. Algoritmos clássicos (em vetores)
7.2.1. Seleção 7.2.2. Inserção 7.2.3. Bubblesort 7.2.4. Mergesort 7.2.5. Heapsot 7.2.6. Quicksort
7.3. Análise de pior caso para os
algoritmos clássicos de ordenação baseados em comparações
7.4. Algoritmo Radixsort
8. Busca de padrões em strings
8.1. Problema da busca de padrões em strings e aplicações
8.2. Algoritmo de força bruta
8.3. Algoritmo de Karp-Rabin
8.4. Algoritmo de Knuth-Morris-Pratt
Desenvolvimento Orientado a Objeto 3a Etapa - Ementa 2006 Conteúdo Programático
1. Conceitos básicos de orientação a objetos 1.1. Realidade, conceitos e domínios
1.2. Objetos, classes e instanciação 1.3. Ciclo de vida de objetos 2. Relacionamentos entre objetos
2.1. Conexões, relacionamentos e mapeamentos 2.2. Associações
2.3. Generalização e especialização 2.4. Agregação
2.5. Sub-tipos e super-tipos
2.6. Noções de coesão e acoplamento entre objetos 3. Estrutura comportamental de objetos
3.1. Estados de objetos 3.2. Mudanças de estado 3.3. Eventos e triggers 3.4. Condições de controle
4. Representações diagramáticas de domínios 4.1. Diagramas de casos de uso
4.2. Diagramas de atividade 4.3. Diagramas de classes
4.4. Diagramas de estados (ou máquina de estados) 4.5. Diagramas de seqüência
4.6. Diagramas de colaboração 4.7. Diagramas de pacotes 4.8. Diagramas de deployment
Estrutura de dados 3a Etapa - Ementa 2006 Conteúdo Programático
1. Tipos abstratos de dados
1.1. Conceito de tipo abstrato de dados
1.2. Especificação e refinamento
1.3. Pré e pós-condições
2. Estruturas Lineares
2.1. Listas
2.1.1. Especificação do tipo de dado abstrato Lista
2.1.2. Tipos de listas
2.1.3. Padrão de projeto Iterator e percurso em listas
2.1.4. Implementação e análise de
eficiência
2.1.5. Implementação de listas via STL (Standard Template Library) 2.1.6. Aplicações
2.2. Pilhas
2.2.1. Especificação do tipo de dado abstrato Pilha
2.2.2. Implementação (vetor/lista) e análise de eficiência
2.2.3. Implementação de pilhas via STL
2.2.4. Aplicações
2.3. Filas
2.3.1. Especificação do tipo de dado abstrato Fila
2.3.2. Implementação (vetor/lista) e análise de eficiência
2.3.3. Implementação de filas via
STL
2.3.4. Aplicações
2.4. Deques
2.4.1. Especificação do tipo de dado abstrato Deque
2.4.2. Implementação (vetor/lista) e análise de eficiência
2.4.3. Implementação de deques via STL
2.4.4. Aplicações 3. Tabelas de Hashing
3.1. Especificação do tipo de dado
abstrato Tabela de Hashing
3.2. Funções de hashing
3.3. Resolução de colisão via
endereçamento aberto
3.4. Resolução de colisão via estruturas
ligadas
3.5. Bucket hashing e hashing
extensível
3.6. Implementação e análise de
eficiência
3.7. Implementação de hashing via STL
3.8. Aplicações
4. Árvores binárias
4.1. Especificação do tipo de dado
abstrato Árvore Binária
4.2. Percursos em árvores
4.3. Padrão de projeto Visitor e
percurso em árvores
4.4. Árvores binárias de busca
4.5. Heaps e o algoritmo de ordenação Heapsort 4.6. Estratégias de balanceamento (AVL,Splay) 4.7. Implementação e análise de eficiência 4.8. Aplicações 5. Árvores n-árias
5.1. Especificação do tipo de dado
abstrato Árvore n-ária
5.2. Pomares(Orchads), florestas e
florestas ordenadas
5.3. Árvores de busca lexicográfica
(tries)
5.4. B-árvores
5.5. Implementação e análise de
eficiência
Linguagem de programação I 3a Etapa - Ementa 2006 Conteúdo Programático
1. Teoria elementar de tipos
1.1. Classificação de tipos:
fundamentais e compostos
1.2. Subtipos
1.3. Equivalência de tipos
1.4. Tipos monomórficos e polimórficos
1.5. Promoção e conversão de tipos
1.6. Lvalues
1.7. Name spaces
2. Estruturação elementar de classes e objetos
2.1. Classes como tipos derivados
2.2. Atributos e funções (funções
isoladas e funções-membro)
2.3. Construtores
2.4. Objetos e o processo de
instanciação
2.5. Ponteiros para objetos
2.6. Destruidores
2.7. Herança Simples
3. Encapsulamento e acesso
3.1. Controle de acesso: estruturas x classes
3.2. Especificadores de acesso: private,
protected e public
3.3. Declarações friend
4. Acúmulo (overloading) de funções e operadores
4.1. Conceito de acúmulo
4.2. Acúmulo de funções
4.3. Declaração de operadores
4.4. Acúmulo de operadores
4.5. Mecanismo de acesso na presença
de acúmulo
5. Classes derivadas
5.1. Herança múltipla
5.2. Polimorfismo universal por inclusão
5.3. Classes-base virtuais
5.4. Métodos virtuais e a Tabela de
Métodos Virtuais
5.5. Métodos virtuais e herança simples
5.6. Métodos virtuais e herança múltipla
5.7. Classes-base virtuais e métodos
virtuais
5.8. Renaming
5.9. Dispatching: simples, duplo e
múltiplo, RTTI 6. Tratamento de exceções
6.1. Mecanismos de exceções em C++
6.2. Regiões críticas e blocos try-catch 6.3. Tratamentos múltiplos e ordem de
manipulação 6.4. Lançamento de exceções e declarações throw 6.5. Tratamento hierárquico de exceções 7. Streams 7.1. Conceito de stream 7.2. Hierarquia de streams C++ 7.3. Streams de entrada 7.4. Streams de saída 8. Templates 8.1. Tipos parametrizados
8.2. Polimorfismo universal paramétrico
8.3. Templates de função
8.4. Templates de classe
Organização e Arquitetura de Computadores 3a Etapa - Ementa 2006 Conteúdo Programático
1. Organização funcional
1.1. Unidade Central de Processamento
1.2. Memória
1.3. Barramentos
1.4. Subsistemas de E/S
1.5. Medidas de performance
2. Unidade Central de Processamento
2.1. Estruturas funcionais
2.1.1. Registradores
2.1.2. Unidade de lógica e aritmética
2.1.3. Unidade de Controle
2.1.4. Data Path
2.2. Conjuntos de instruções: características, modos de endereçamento de formatos
2.3. Noções de Assembly e mapeamento para instruções em linguagem de máquina
2.4. Arquiteturas CISC e RISC
2.5. Execução de instruções via microprogramação
2.6. Paralelismo no nível de instrução
2.7. Processadores escalares, super-escalares e vetoriais
2.8. Estudo de arquiteturas de processadores atuais
3. Memória
3.1. Hierarquia de memória
3.2. Tecnologias de memória
3.3. Organização da memória principal e formas de acesso
3.4. Memória cache: cache interno/externo, princípio de funcionamento, políticas de escrita/leitura, coerência 4. Barramentos 4.1. Tipos de barramento 4.2. Sinalização e controle 5. Sub-sistemas de E/S 5.1. Polling 5.2. Interrupções
5.3. Acesso direto à memória (DMA)
5.4. Canais de E/S
5.5. Noções de device drivers
6. Noções de arquiteturas lógico-programáveis
6.1. Arquiteturas FPD: SPLD, CPLD e FPGA
6.2. Programação SPLD
6.3. Programação CPLD
Analise de Algoritmos 4a Etapa – Ementa 2006 Conteúdo Programático
1. Análise assintótica
1.1. Formalização da notação assintótica 1.2. Cotas inferiores e superiores
1.3. Estimação de somas via Teorema do Confronto para séries 1.4. Resolução de recorrências
1.4.1. Método de substituição
1.4.2. Método da árvore de recursão
1.4.3. Método baseado no Teorema-Mestre
1.5. Exemplos de análise de algoritmos iterativos e recursivos clássicos (busca e ordenação) 2. Análise probabilística
2.1. Breve revisão dos conceitos de variável aleatória, esperança matemática e distribuição de probabilidade discretas
2.2. Método das variáveis aletórias indicadoras 2.3. Análise de caso médio para algoritmos clássicos 2.4. Noções de algoritmos aleatórios
3. Análise amortizada
3.1. Operações sucessivas em estruturas de dados e o problema de sub-estimação assintótica 3.2. Método agregado
3.3. Método baseado em atribuição de pesos (accounting method) 3.4. Método do potencial
4. Programação dinâmica 4.1. Problemas e sub-problemas
4.2. Dependências entre problemas e sub-problemas 4.3. Armazenamento e junção de soluções parciais 4.4. Exemplos clássicos de programação dinâmica
4.4.1. Multiplicação de cadeias de matrizes
4.4.2. Maior subseqüência comum
4.4.3. Árvores de busca ótimas
5. Algoritmos gulosos (greedy) 5.1. Noções de matróides
5.2. Estruturas de matróides em problemas 5.3. Estratégia gulosa
5.4. Exemplos clássicos de algoritmos gulosos 5.4.1. Problema de seleção de atividades
5.4.2. Código de Huffman
6. Algoritmos aproximativos
6.1. Soluções exatas e aproximadas de problemas 6.2. Raios de aproximação
Introdução a Computação Gráfica 4a Etapa – Ementa 2006 Conteúdo Programático
1. Processamento Gráfico
1.1. Conceito de Processamento Gráfico 1.2. Áreas de Processamento Gráfico:
computação gráfica, processamento de
imagens, visão computacional e
modelagem
1.3. Exemplos de problemas de
computação gráfica
1.4. Exemplos de problemas de
processamento de imagens
1.5. Exemplos de problemas de visão computacional
1.6. Exemplos de problemas de modelagem 1.7. Suporte de hardware e software para
processamento gráfico
2. Hardware para Computação Gráfica 2.1. Placas de vídeo e aceleração gráfica 2.2. Monitores de vídeo: CRT, LCD e
plasma
2.3. Dispositivos de entrada gráfica 2.4. Integração entre dispositivos gráficos 2.5. Hardware de alto desempenho 3. Bibliotecas Gráficas
3.1. Pipeline básica da computação gráfica 3.2. Organização básica de bibliotecas
gráficas
3.3. Integração com hardware
3.4. Estrutura das principais bibliotecas
gráficas: DirectX, OpenGL,
QuickDraw(Quesa), Java2D/3D. 4. Modelagem Poligonal
4.1. Malhas poligonais 4.2. Resolução de malhas 4.3. Simplificação e refinamento
4.4. Estruturas de dados para malhas poligonais
4.5. Geração de malhas poligonais:
modelagem manual, scanners
tridimensionais, métodos procedimentais. 5. Curvas e Superfícies 5.1. Curvas parametrizadas 5.2. Curvas de Bézier 5.3. Curvas Splines 5.4. Superfícies parametrizadas 5.5. Superfícies de Bézier 5.6. Superfícies Splines 6. Transformações Geométricas
6.1. Sistema de coordenadas homogêneas 6.2. Transformação bidimensionais rígidas 6.3. Transformações tridimensionais rígidas 6.4. Deformações
7. Câmeras e Visualização
7.1. Parâmetros intrínsecos e extrínsecos de câmeras
7.2. Projeções ortogonal e perspectiva 7.3. Transformação de vista
7.4. Remoção de superfícies ocultas e clipping
7.5. Rasterização poligonal 8. Fundamentos de Teoria da Cor
8.1. Natureza física da cor
8.2. Amostragem e reconstrução de cores 8.3. Espaços de cores: CIE, RGB, HSV e
CMYK
8.4. Conversão entre espaços de cores 8.5. Quantização de cores
9. Modelos de iluminação
9.1. Interação entre luz e material 9.2. Iluminação e shading
9.3. Modelo de iluminação de Lambert 9.4. Modelo de iluminação de Phong 9.5. Shading Flat, Phong e Gouraud 10. Geração e Mapeamento de Textura
10.1. Espaços de textura
10.2. Geração de textura por ruído
10.3. Geração de textura por displacement e bump mapping
10.4. Mapeamento de texturas
bidimensionais
10.5. Mapeamento de texturas
Introdução a engenharia de software 4a Etapa – Etapa 2006 Conteúdo Programático
1. Processo de desenvolvimento de
software
1.1. Processo de engenharia de sistemas 1.2. Modelos de processo de software 1.3. Especificação de software 1.4. Projeto e implementação 1.5. Validação de software 1.6. Evolução de software 1.7. Qualidade de software 2. Gerenciamento de projetos 2.1. Atividades de gerenciamento 2.2. Planejamento de projeto 2.3. Programação de projeto 2.4. Gerenciamento de riscos 2.5. Noções de estimativa de custos 3. Engenharia de requisitos
3.1. Requisitos de software 3.2. Documento de requisitos 3.3. Estudos de viabilidade
3.4. Obtenção e análise de requisitos
3.5. Validação e gerenciamento de requisitos 3.6. Modelos de sistemas 3.6.1. Modelos de contexto 3.6.2. Modelos de comportamento 3.6.3. Modelos de dados 3.6.4. Modelos de objetos
3.7. Noções de prototipação de software 4. Projeto de software
4.1. Projeto de Arquitetura 4.2. Projeto Estruturado 4.3. Projeto orientado a objetos 4.4. Projeto de software de tempo real 4.5. Projeto com reuso
4.6. Projeto de interfaces com usuário 4.7. Projeto de sistemas críticos 5. Verificação e validação
5.1. Planejamento de verificação e
validação
5.2. Testes de detecção de defeitos
5.3. Testes de integração 5.4. Testes orientados a objetos 5.5. Validação de sistemas críticos 6. Qualidade de software
6.1. Noções de medição e métricas de software
6.2. Qualidade de processo e de produto 6.3. Medições de processo
6.4. Noções de modelos de maturidade 7. Evolução de software
7.1. Sistemas legados 7.2. Evolução de arquitetura 7.3. Reengenharia de software 7.4. Reengenharia de dados
Linguagem de Programação II 4a Etapa – Ementa 2006 Conteúdo Programático
1. Características de linguagem 1.1. Histórico da linguagem
1.2. Vantagens e deficiências da linguagem 1.3. Comparação com outras linguagens
1.4. Geração de bytecodes e a
interpretação viam JVM (Java Virtual Machine)
1.5. Integração com outras linguagens 2. Sintaxe básica
2.1. Tipos e operadores 2.2. Declaração de variáveis
2.3. Comandos condicionais (if, swtich- case) e iteração(for,while, do-while) 2.4. Arrays
2.5. Organização básica de classes e programas Java
3. Tratamento de exceções 3.1. Principais exceções
3.2. Detecção e recuperação de exceções via try-catch
3.3. Tratamentos com finally
3.4. Lançamento de exceções via throw 3.5. Sinalização de exceções com throws 3.6. Construção de classes de exceção 4. Estruturação de classes
4.1. Atributos, métodos, construtores e instanciação
4.2. Superclasses, sub-classes e o processo de herança em Java
4.3. Polimorfismo
4.4. Declarações static e final
4.5. Modificadores de acesso: public, protected, default e private
4.6. Classes abstratas 5. Interfaces
5.1. Declaração e implementação de
interfaces
5.2. Extensão de interfaces
5.3. Comparação com classes abstratas 6. Pacotes
6.1. Organização e implementação de pacotes
6.2. Acesso a pacotes
6.3. Organização dos pacotes básicos da linguagem Java: java.lang, java.util.
java.io, java.net, java.awt e
javax.swing
7. Classes básicas e utilitárias
7.1. Pacote java.lang ( classes básicas ) 7.2. Pacote java.util ( classes utilitárias ) 8. Tratamento de E/S 8.1. Modelo de streams 8.2. Pacote java.io 8.3. Tratamento de arquivos 9. Fundamentos de programação concorrente e distribuída 9.1. Programação com threads
9.2. Métodos de sincronização e a
declaração synchronized
9.3. Noções do modelo cliente-servidor e sockets
9.4. Pacote java.net 10. Interfaces gráficas 10.1. Pacote java.awt 10.2. Pacotes javax.swing
10.3. Modelo MVC em componentes Swing 11. Applets
11.1. Modelo de execução de applets e políticas de segurança
11.2. Construção de applets 11.3. Integração com páginas HTML
Programação Matemática 4a Etapa – Ementa 2006 Conteúdo Programático
1. Problemas de Otimização
1.1. Tipos de problemas de otimização 1.2. Tamanho do problema
1.3. Complexidade de problemas de otimização 1.4. Algoritmos iterativos e convergência 1.5. Modelagem de problemas
2. Programação Linear
2.1. Propriedades elementares de problemas lineares: estrutura geométrica, soluções básicas, Teorema Fundamental da Programação Linear, Convexidade
2.2. Método Simplex
2.3. Dualidade e o Método Simplex Dual 2.4. Problema de Transporte
2.5. Problema de Atribuição 3. Programação Inteira
3.1. Conceito de relaxação
3.2. Relaxação em Programação Linear 3.3. Relaxações combinatórias e lagrangeanas 3.4. Métodos do tipo branch-and-bound 3.5. Métodos baseados em cortes
4. Programação Não-Linear sem Restrições 4.1. Funções côncavas e convexas
4.2. Funções convexas de minimização e maximização 4.3. Método de busca por seção áurea
4.4. Método do gradiente descendente 4.5. Método do gradiente conjugado 5. Programação Não-Linear com Restrições
5.1. Multiplicadores de Lagrange
5.2. Condições KKT (Karush-Kuhn-Tucker) 5.3. Método da projeção de gradiente 5.4. Método do gradiente reduzido 5.5. Método de penalidades e barreiras
Introdução a compiladores 5a Etapa Conteúdo Programático
1. Fundamentos do processo de compilação 1.1. Noções elementares de linguagens formais 1.2. Compilação x interpretação
1.3. Módulos e interfaces de um compilador
1.4. Ferramentas de geração automática de analisadores 2. Análise léxica
2.1. Tokens léxicos 2.2. Expressões regulares 2.3. Autômatos finitos
2.4. Geradores de analisadores léxicos 3. Análise sintática
3.1. Gramáticas livres de contexto 3.2. Análise preditiva
3.3. Análises LL e LR
3.4. Geradores de analisadores sintáticos 4. Sintaxe abstrata
4.1. Ações semânticas
4.2. Árvores de sintaxe abstrata (AST) 4.3. Percursos em AST e o padrão Visitor 5. Análise semântica
5.1. Tabelas de símbolos 5.2. Verificação de tipos 6. Registros de Ativação
6.1. Organização de programas em tempo de execução 6.2. Stack frames
7. Geração de código intermediário 7.1. Máquinas virtuais
7.2. Árvores de representação intermediárias
7.3. Geração de árvores de representação intermediárias 7.4. Árvores canônicas
8. Geração de código Assembly 8.1. Seleção de instruções 8.2. Análise de sobrevivência 8.3. Alocação de registradores 8.4. Padrões de geração de código
Sistemas Operacionais 5a Etapa – Ementa 2005 Conteúdo Programático
1. Revisão de conceitos de arquitetura de computadores e sistemas de computação.
2. Conceitos fundamentais de sistemas operacionais. 2.1. Processos
2.2. Arquivos e diretórios
2.3. Tipos de sistemas operacionais 2.4. Alternativas de estruturação interna
3. Gerência de processos. 3.1. Conceituação de processo
3.2. Estado de processos e eventos principais
3.3. Escalonamento de processos e gerência de processador 3.4. Comunicação entre processos
3.4.1. Mecanismos de comunicação
3.4.2. Sincronização (semáforos, monitores) 3.4.3. Deadlock
3.5. Problemas clássicos
4. Gerência de memória. 4.1. Alocação de memória
4.2. Conceito de memória virtual (paginação e segmentação) 4.3. Algoritmos de substituição de páginas
5. Gerência de arquivos. 5.1. Arquivos e diretórios
5.2. Organização de arquivos e métodos de acesso 5.3. Alocação de espaço em disco
5.4. Segurança e proteção
6. Gerência de E/S.
6.1. Dispositivos de entrada e saída de dados 6.2. Conceituação de device drivers
6.3. Algoritmos de escalonamento do braço de discos magnéticos
7. Introdução às Redes de computadores. 7.1. Conceitos principais
7.2. Protocolos de comunicação 7.3. Exemplos: Ethernet e Internet
Técnicas avançadas de computação 5a Etapa – Ementa 2005 Conteúdo Programático
1. Defeito, Erro e falha (quebra). Tolerância a erros.
2. Fases no processo de tolerância a falhas 2.1. detecção
2.2. confinamento do dano e controle 2.3. Recuperação do erro
2.4. tratamento da falha sem interrupção do serviço