Escolar Documentos
Profissional Documentos
Cultura Documentos
Disciplinas Feup
Disciplinas Feup
• Programa:
o M1. Introdução: Elementos de sistemas computacionais modernos e as
suas áreas de aplicação. Caraterísticas básicas de organização,
desempenho e energia.
o M2. Representação de informação: Representação binária de números
inteiros. Operações aritméticas elementares. Códigos. Vírgula flutuante.
o M3. Circuitos combinatórios: Álgebra de Boole. Portas lógicas
elementares. Diagramas lógicos. Simulador lógico. Circuitos com
funções padrão.
o M4. Circuitos sequenciais: Elementos de memória; registos e contadores.
Máquinas de estados finitas.
o M5. Computadores: Linguagens de alto e baixo nível. Modelo concetual
da execução de um programa. Subsistemas: CPU, memória, periféricos.
o M6. Conjunto de instruções: Tipos de instruções, modos de
endereçamento, codificação.
o M7. Linguagem “assembly”: conceitos básicos de programação.
o M8. Implementação de controlo de fluxo (testes, saltos condicionais).
o M9. Unidade de processamento: Organização lógica de um CPU simples
(de ciclo único).
o M10. Desempenho: Equação básica. Benchmarks. Lei de Amdahl.
• Programa:
o Introdução ao Pensamento Computacional, algoritmos e programação
com Python.
o Conceitos fundamentais de programação: tipos de dados simples;
variáveis, expressões e declarações; fluxo de programa, condicionais,
iteração; funções, passagem de parâmetros, recursão; ficheiros.
o Tipos de dados compostos: strings, tuplos, conjuntos, listas, dicionários.
o Programação livre de efeitos usando variáveis imutáveis e chamadas a
função sem efeitos colaterais.
o Funções de ordem superior: map, reduce/fold e filter.
o Compreensões em listas.
o Estratégias de resolução de problemas.
o Ferramentas de programação, teste e depuração.
• Bibliografia:
o Brad Miller; How to think like a computer scientist (Disponível
livremente em PDF e em HTML)
o Steven F. Lott; Building skills in Python
o Allen B. Downey; Think Python. ISBN: 978-1-449-33072-9
o David Mertz; Functional programming in Python. ISBN: 978-1-491-
92856-1
3. Laboratório de Desenho e Teste de Software
• Resultados:
o Saber desenvolver (desenhar, codificar, documentar, analisar, testar e
manter) programas orientados por objetos com Java e UML;
o Saber utilizar ferramentas de suporte às várias fases do desenvolvimento
e manutenção de programas;
o Ser capaz de conceber e desenhar software modular, flexível e fácil de
manter e evoluir;
o Ser capaz de reutilizar padrões e frameworks;
o Compreender a importância dos testes durante o desenvolvimento de
software.
• Programa:
o Uma breve introdução ao Git: repositórios locais, remotes, branches e
workflows;
o Gestão de dependências usando Gradle;
o A linguagem Java: Tipos, literais e variáveis; Estruturas de
controlo;Classes e objetos; Coleções; Tipos genéricos; Threads e
sincronização; Input e output; Interfaces gráficas usando Swing;
o Princípios da programação orientada a objetos: abstração de dados,
polimorfismo, herança e encapsulamento; utilização da composição em
vez de herança como mecanismo para atingir polimorfismo;
o Princípios SOLID: Single Responsibility, Open/Closed, Liskov
Substitution, Interface Segregation e Dependency Inversion;
o Testes unitários usando JUnit: Mocks e Stubs usando Mockito; Cobertura
e mutation-testing;
o Diagramas UML: diagramas de classes, sequência e comunicação;
o Code smells e técnicas de refactoring;
o Padrões de desenho: Factory-Method, Command, Composite, Observer,
Strategy, Abstract Factory, State, Adapter, Decorator e Singleton;
o Model-View-Controller como padrão de arquitetura;
o Patterns of Enterprise Architecture.
• Bibliografia:
o Bruce Eckel; Thinking in Java. ISBN: 0-13-027363-5 (4ª edição ou
superior)
o Russ Miles and Kim Hamilton; Learning UML 2.0. ISBN: 978-0-596-
00982-3
o Kent Beck; Test-driven development. ISBN: 978-0-32-114653-3
o Erich Gamma... [et al.]; Design patterns. ISBN: 0-201-63361-2
o Martin Fowler ; with contributions by kent Beck... [et al.]; Refactoring.
ISBN: 0-201-48567-2
o Robert C. Martin; Agile Software Development: Principles, Patterns and
Practices, Prentice-Hall, 2003. ISBN: 0-13-597444-5
o Joost Visser; Building Maintainable Software, O'Reilly, 2015. ISBN:
978-1-491-94434-9
4. Interação Pessoa Computador
• Programa:
o Fundamentos de IHC
▪ Importância da IHC
▪ Conceitos-base
• Perceção humana e processos cognitivos
• Sistemas computacionais e seus mecanismos de interação,
• Metodologias e padrões de UI/UX design
o Design Centrado no Utilizador
▪ Identificação de necessidades e definição de requisitos
▪ Ideação e desenho
▪ Prototipagem e Avaliação
▪ Iteração e refinamentos
o UI/UX aplicado
▪ Ferramentas para UI/UX Design
▪ Interação Multimodal
▪ Acessibilidade
• Bibliografia:
o Manuel J. Fonseca, Pedro Campos, Daniel Conçalves; ntrodução ao
Design de Interfaces, 2012. ISBN: 9789727227389
o Yvonne Rogers, Helen Sharp, Jennifer Preece; Interaction design. ISBN:
978-0-470-66576-3
o Alan Dix; Human-computer interaction. ISBN: 978-0-13-046109-4
o Alan Cooper, Robert Reimann, David Cronin; About Face 3: The
Essentials of Interaction Design, John Wiley & Sons, 2007. ISBN: 978-
0470084113
o Donald A. Norman; The design of everyday things. ISBN: 0-262-64037-
6
o Donald A. Norman; The Invisible computer. ISBN: 0-262-64041-4
o Jakob Nielsen; Designing web usability. ISBN: 1-56205-810-X
o Jeff Johnson; Designing With the mind in mind, Morgan Kaufmann,
2010. ISBN: 978-0123750303
o Giles Colborne; simple and usable, New Riders, 2010. ISBN: 978-
0321703545
o David Benyon; Designing interactive systems, Pearson, 2014. ISBN:
9781447920113
5. Laboratório de Bases de Dados e Aplicações Web
• Programa:
o Softwares: Laravel, Git, PostgreSQL, Docker, PHP
o Desenvolvimento de uma aplicação web suportada por uma base de
dados: levantamento de requisitos, conceção, modelação, implementação
e documentação;
o Aprofundamento de conceitos e do desenvolvimento da arquitetura de
aplicações web. Utilização de linguagens de programação e frameworks
web, baseadas no cliente e no servidor;
o Projeto de bases de dados relacionais com recurso a linguagens de
modelação de dados (UML), à linguagem SQL, à utilização de índices de
desempenho e de pesquisa, e de extensões procedimentais à linguagem
SQL;
o Identificação e manutenção de regras de negócio: na interface; na lógica
de negócio e na base de dados (triggers); transações;
o Desenho de interação com o utilizador: arquitetura de informação,
usabilidade e acessibilidade web.
• Bibliografia:
o Ramakrishnan, Raghu; Database management systems. ISBN: 0-07-
116898-2
o Jeffrey D. Ullman, Jennifer Widom; A First course in database systems.
ISBN: 978-0-13-600-637-4
o Russ Miles and Kim Hamilton; Learning UML 2.0. ISBN: 978-0-596-
00982-3
o Michal Zalewski; The tangled Web. ISBN: 978-1-59327-388-0
o Nielsen, Jakob; Designing web usability. ISBN: 1-56205-810-X
6. Redes de Computadores
• Resultados: Depois de ter frequentado RCOM o estudante deverá ser capaz de:
a) perceber e explicar os conceitos fundamentais das redes de comunicações; b)
escolher, comparar ou empregar as tecnologias de redes de comunicações atuais;
c) implementar, configurar e testar mecanismos e componentes essenciais de
uma rede de comunicações.
• Bibliografia:
• Objetivos: Esta Unidade Curricular tem como objetivo fornecer aos estudantes
uma perspectiva integrada dos fundamentos da segurança informática; visa dotar
os estudantes de uma visão abrangente dos aspetos de segurança inerentes ao
desenvolvimento e operação de sistemas informáticos, contextualizando
problemas e soluções tecnológicas específicas para tecnologias abordadas em
outras Unidades Curriculares do Ciclo de Estudos.
• Resultados:
o Conhecer os princípios da construção de programas e sistemas
informáticos seguros.
o Aprender a pensar sobre sistemas informáticos como um atacante.
o Compreender como se identificam ameaças a um sistema informático e
como se avalia a sua relevância.
o Reconhecer limitações e justificar medidas de proteção de um sistema
informático.
o Explicar como diversos tipos de ataques funcionam na prática.
• Programa:
o 1) Princípios da segurança informática: confidencialidade, integridade,
disponibilidade; risco, ameaças, vulnerabilidades, vetores de ataque e
mecanismos de segurança.
o 2) Princípios da construção de sistemas seguros: princípios do privilégio
mínimo e isolamento; defesa em profundidade; segurança por
construção.
o 3) Conceitos básicos de criptografia: criptografia simétrica e de chave
pública; cifras e autenticação; assinaturas digitais; gestão de chaves; PKI.
o 4) Controlo de acessos: conceitos fundamentais; modelos para controlo
de fluxos de dados; mecanismos de segurança ao nível do sistema
operativo.
o 5) Introdução à programação defensiva: validação de inputs; ataques
comuns; buffer overflows; race conditions; atualizações de segurança.
o 6) Tópicos de segurança de redes: ataques e proteção ao nível da rede;
ataques por Denial of Service (DoS) e Distributed Denial of Service
(DDoS).
o 7) Segurança Web: modelo de segurança; gestão de sessões;
autenticação; vulnerabilidades comuns.
• Bibliografia:
o Goodrich, M., & Tamassia, R.; Introduction to Computer Security,
Pearson, 2011. ISBN: 978-0321512949
o Matt Bishop; Computer Security: Art and Science, 2nd Edition, Addison-
Wesley Professional, 2018. ISBN: 978-0321712332
8. Programação Funcional e em Lógica
• Objetivos:
o Os paradigmas de Programação Funcional e de Programação em Lógica
apresentam abordagens declarativas e baseadas em processos formais de
raciocínio à programação, mais apropriada para a resolução de alguns
tipos de problemas.
o Objetivos: Adquirir familiaridade com os paradigmas da Programação
Funcional e da Programação em Lógica. Desenvolver as capacidades de
raciocínio abstrato e de representação de problemas de forma declarativa.
• Programa:
o Programação em Lógica (6-7 semanas)
▪ Lógica proposicional e de predicados. Cláusulas de Horn. Factos
e regras. Termos de Herbrand. Unificação.
▪ Linguagem Prolog. Modelo de execução. Resolução SLD.
Negação por falha.
▪ Bases de factos e relações. Programação com recursão e
estruturas.
▪ Aritmética. Predicados extra-lógicos e de controlo.
▪ Exemplos de programação: procura, jogos, manipulação
simbólica.
o Programação Funcional (6 semanas)
▪ Expressões, avaliação e valores. Tipos pré-definidos. Definições
usando equações.
▪ Polimorfismo paramétrico e “bounded”. Classes de tipos
fundamentais.
▪ Expressões lambda. Aplicação parcial e “currying”. Funções de
ordem superior do prelúdio-padrão.
▪ Definição de tipos algébricos; encaixe de padrões e definições
recursivas.
▪ Exemplos de programação: árvores equilibradas; árvores
sintáticas;layout de texto; visualização e jogos.
▪ Programação com I/O.
▪ Provas de correção de programas usando definições por equações
e indução.
• Bibliografia:
o Simon Thompson; Haskell the craft of functional programming. ISBN:
0- 201-34275-8
o Graham Hutton; Programming in Haskell, Cambridge University Press,
2016. ISBN: 978-1316626221
o Leon Sterling; The Art of Prolog. ISBN: 0-262-69163-9
o Bryan O'Sullivan, Don Stewart, and John Goerzen; Real World Haskell,
O'Reilly Media, 2008. ISBN: 9780596514983
o Richard Bird; Introduction to Functional Programming using Haskell,
Pearson, 1998. ISBN: 978-0-13-484346-9
o Ivan Bratko; Prolog programming for artificial intelligence. ISBN: 0-
201-40375-7