Planeamento

Aulas Teóricas

Apresentação

Apresentação.

Linguagens de programação e algoritmos.
Interpretação e compilação.

Descrição de linguagens

Computadores e processos.

Programas e algoritmos.
Descrição de linguagens.
Gramáticas: BNF e eBNF.

Expressões e instruções

Introdução ao Python3.

Expressões e Instruções.

Funções

Definição e invocação de funções.

Cálculo numérico em vírgula flutuante.

Representação IEEE-754.

Cálculo numérico em vírgula flutuante.

Tuplos

Tuplos, ranges, slices e ciclos contados.

Cadeias de carateres

Representação e codificação de carateres: utf-8.

Cadeias de carateres: strings e f-strings.
Opeações sobre strings.

Listas

Listas.

Objetos mutáveis: ponteiros.
Operações append, replace e delete.

Dicionários

Dicionários, Sets e frozensets.

List comprehensions

If-aritmético, list comprehensions e geradores.

Argumentos opcionais.

Ficheiros e exceções

Acesso a ficheiros.

Tratamento de exceções.
Instrução with.

Tipos de dados abstratos

Tipos de dados abstratos.

Tipificação.

Modelação por objetos

Modelação por objetos: UML

Ferramenta: plantuml.com

Programação baseada em objetos

Programação baseada em objetos: classes.

Programação orientada por objetos

Programação orientada por objetos: herança.

Métodos estáticos e de classe.
Classes abstratas: ABC.

Teste de software

Asserções: assert.

Registos: logging.
Teste de software.

Testes unitários

Testes unitários: unittest.

Cobertura de testes

Cobertura de testes: coverage.

Recursão

Recursão com operações adiadas.

Recursão pela cauda

Recursão pela cauda e recursão em árvore.

Programação funcional

Programação funcional: funções lambda e closures.

Funcionais sobre listas

Funcionais sobre listas: filter, map, reduce.

Profiling e complexidade

Profiling: cProfile.

Complexidade: BigO.
Algoritmos de procura: pesquisa binária.

Algoritmos de ordenação elementares

Algoritmos de ordenação elementares: selection, insertion, bubble.

Algoritmos de ordenação eficientes

Algoritmos de ordenação eficientes: quick e merge.

Heaps

Ordenação por heap.

Filas com prioridade.

Árvores de pesquisa binária

Árvores de pesquisa binária.

Árvores equilibradas: AVL.

Tabelas de dispersão e grafos

Tabelas de dispesão.

Grafos: representação, pesquisaes em largura e profundidade.

Matrizes

Matrizes: numpy.

Cálculo científico

Cálculo científico: scipy.

Representação gráfica

Representação gráfica: matplotlib.

Extensões em C

Invocação de rotinas em C.cffi.

Extensões em C.

Instalação de pacotes

Instalação de pacotes: PyPI.

Aulas Laboratoriais

Git

Introdução à ferramenta Git.

BNF

Descrição de linguagens por gramáticas BNF.

Funções

Introdução ao Python: expressões inteiras, instruções e funções.

Cálculo em vírgula flutuante

Cálculo em vírgula flutuante: IEEE-754.

Tuplos e strings

Sequências imutáveis: tuplos e strings.

Listas e dicionários

Sequências mutáveis: listas e dicionários.

UML

Modelação orientada por objetos: UML.

Programação com objetos

Programação com objetos: classes e herança.

Testes de software

Criação de testes de software: unittest.

Recursão

Recursão: com operações adiadas, pela cauda e em árvore.

Programação funcional

Programação funcional: lambda.

Funcionais: filter, map e reduce.
Comprehensions.

Complexidade e ordenação

Complexidade: Big-O, pesquisa e ordenação.

Estruturas de dados

estruturas: heap, tree, AVL, hash, graph.

Cálculo científico

Manipulação de dados: numpy, scipy, matplotlib.