DEISI Chess, projeto de Linguagens de Programação 2
O curso de licenciatura em Engenharia Informática da Universidade Lusófona forma licenciados capazes de assumir posições de destaque em projetos de engenharia informática ou equipas de desenvolvimento e consultadoria, na área da engenharia dos sistemas de informação, assumindo pela sua formação e atitude papéis relevantes na geração de inovação e riqueza. Nesse sentido, os estudantes obtêm as competências adequadas à conceção, realização e manutenção de sistemas informáticos, programação de aplicações e de sistemas, desenho arquiteturas de computação e comunicações, gestão de sistemas de informação e de conhecimento, assim como à compreensão e resolução dos problemas associados.
Plano de Estudos
Explore conteúdos e projetos das disciplinas
-
1.º Ano
1.º Semestre -
Fundamentos de Física
Apresentação
Mecânica clássica, eletrostátíca e corrente contínua.
Docentes: Cristiane Ferreira, Alexander Mikovic, Cristina Guerra.
Programa
- Grandezas físicas, dimensões e sistemas de unidades.
- Referencial, posição e trajetória. Movimento unidimensional.
- Movimento no espaço. Projéteis e movimento circular.
- Leis de Newton. Tipos de forças, força gravitacional.
- Aplicações de Leis de Newton: plano inclinado, rodelas, mola oscilatória, pendulo.
- Trabalho. Forças conservativas e energia potencial.
- Conservação da energia mecânica.
- Centro de massa, impulso e momento linear. Colisões.
- Momento de uma força, momento de inércia e momento angular.
- Lei de Coulomb, campo elétrico.
- Potencial elétrico e capacitores.
- Corrente elétrica e resistência elétrica.
- Circuitos elétricos. Leis de Kirchhoff.
Objetivos
Compreensão do movimento dos corpos, ou seja, cinemática. Compreender as forças que atuam sobre os corpos e resolver as equações do movimento, ou seja, a dinâmica. Compreender o trabalho e a energia. Entendendo o campo elétrico e o potencial elétrico, ou seja, eletrostática. Compreender as correntes elétricas e resolver circuitos com correntes elétricas contínuas.
-
Fundamentos de Programação
Apresentação
Esta é uma disciplina fundamental na formação de qualquer profissional da área de Informática pois introduz os conceitos básicos da programação, sobre os quais assentarão muitas disciplinas subsequentes como Linguagens de Programação I e II, Algoritmia e Estruturas de Dados, Programação Web, Computação Móvel, etc. Mais do que aprender uma linguagem de programação, o aluno aprende a pensar como um programador, analisando problemas e desenhando algoritmos que os resolvam recorrendo a fluxogramas e a programas escritos em Kotlin, uma linguagem promissora que combina as melhores características das linguagens modernas mais populares (Java, Python, etc.)
Dado ser o primeiro contacto de muitos alunos com o tópico da Programação, reveste-se de uma importância especial na aquisição de conhecimentos primordiais mas também na sua motivação. Mais do que aprender a programar, os alunos aprendem a gostar de programar.
Docentes: Pedro Alves, Brena Lima, Bruno Saraiva, Lucio Studer, Rodrigo Correia, Wellington Oliveira.
Programa
- Introdução à programação
- Algoritmos, fluxogramas, pseudo-código
- Sintaxe e semântica das linguagens
- Elementos da sintaxe, estrutura de um programa
- Declarações e atribuições
- Tipos primitivos
- Expressões aritméticas, expressões lógicas
- Entradas e saídas de dados
- Selecção
- Repetição
- Funções
- Arrays uni-dimensionais e bi-dimensionais
- Tratamento de erros
- Leitura e escrita de ficheiros
- Boas práticas de programação imperativa
Objetivos
O objectivo desta unidade curricular é fornecer aos futuros profissionais na área da informática as bases para que possam iniciar (de um modo disciplinado) a actividade de programação.
O aluno começa por desenvolver a capacidade de raciocínio algorítmico recorrendo a fluxogramas.
O aluno deverá ser capaz de traduzir esses fluxogramas numa linguagem de programação imperativa. Concretamente, o aluno deverá conhecer a sintaxe básica de Kotlin que lhe permitam criar programas simples de linha de comando.
Finalmente, o aluno deve conseguir analisar e avaliar programas feitos por outras pessoas (colegas, professores, etc.).
-
Matemática Discreta
Apresentação
Na UC de Matemática Discreta pretende-se contribuir para a aquisição de um conjunto de competências nos alunos: capacidade de assimilar informação e de a comunicar; capacidade de expressão escrita; capacidade de expressão oral e capacidade de raciocínio matemático. Para tal, serão estudados conceitos de lógica matemática, teoria de conjuntos e teoria de números.
Docentes: Maria Silva, Houda Harkat.
Programa
CP1. Cálculo proposicional e quantificadores
CP2. Provas
CP3. Teoria de conjuntos
CP4. Funções
CP5. Teoria de números
Objetivos
Os objetivos principais desta disciplina são:
OA1. Aplicar propriedades elementares das operações lógicas e de quantificação;
OA2. Construir argumentos matemáticos usando métodos de prova comum;
OA3. Explicar os conceitos básicos sobre conjuntos e funções e realizar operações elementares sobre estes objetos matemáticos;
OA4. Distinguir entre conjuntos numeráveis e conjuntos não numeráveis;
OA5. Entender a teoria dos números;
OA6. Contribuir para a aquisição de um conjunto de competências: capacidade de assimilar informação e de a comunicar; capacidade de expressão escrita; capacidade de expressão oral.
-
Matemática I
Apresentação
Esta disciplina abrange os métodos fundamentais de Cálculo associados a funções reais de variável real. É uma área transversal a todas as engenharias e demais cursos de cariz científico. Abrange os métodos clássicos de cálculo diferencial e Integral a uma dimensão.
Docentes: André Fonseca.
Programa
1. Lógica Matemática
- Designação e proposição. Valor lógico de uma proposição. Conjunção e disjunção de proposições. Conjunto, interseção e união de conjuntos.
2. Os números reais
- Números racionais e irracionais. Ordem e valor absoluto.
3. Funções reais de variável real:
- Generalidades sobre funções. Funções polinomiais e racionais. Funções trigonométricas. Função exponencial e logarítmica.
3. Limite:
- Definição e propriedades de limites de uma função. Continuidade de funções.
4. Derivada:
- Interpretação geométrica. Regras de derivação. Derivadas de ordem superior.
5. Estudo global de uma função:
- Monotonia e extremos relativos. Concavidade e pontos de inflexão. Assíntotas. Gráficos.
6. Integração:
- Primitiva imediata. Primitivação por substituição e por partes. Integral definido, teorema fundamental do cálculo. Aplicações da integração (áreas de figuras planas).
Objetivos
Esta disciplina confere a(o) aluna(o) conhecimentos que lhe permitam utilizar, de forma criativa, autónoma, e em contextos diversificados:
OA1: a linguagem simbólica matemática e o raciocínio matemático;
OA2: os conceitos e resultados fundamentais do cálculo diferencial, de modo a que possa proceder ao estudo de uma função real de variável real;
OA3: os métodos de primitivação:
OA4: as noções fundamentais do cálculo integral, de modo a que possa calcular integrais simples e determinar áreas de domínios planos.
-
Sistemas Digitais
Apresentação
Esta unidade curricular visa apresentar aos estudantes os conceitos básicos conducentes à compreensão de Unidades Curriculares mais avançadas, nomeadamente no domínio da arquitetura de computadores. Tem ainda como objetivo potenciar o desenvolvimento do racíonio lógico.
Docentes: João P. Carvalho, Carlos Fernandes, Daniel Fernandes, Sérgio Ferreira.
Programa
1. Códigos numéricos e Sistemas de Numeração (5%) Circuitos Lógicos Básicos (5%)
2. Álgebra de Boole (10%)
3. Funções Lógicas (10%)
4. Circuitos Combinatórios Básicos( 15%)
5. Circuitos Digitais com Memória (25%)
6. Síntese de Circuitos Sequênciais Elementares (25%)Objetivos
Os conteúdos programáticos são adequados aos objectivos da disciplina tendo em conta a actualidade e o processo de Bolonha tendo uma forte componente prática laboratorial. A matéria das aulas teóricas está devidamente actualizada e adaptada ao perfil dos alunos para o 1º ano do Curso de Engenharia segundo o protocolo de Bolonha.
O responsável pela disciplina tem vindo a fazer evoluir os conteúdos programáticos ao longo dos anos em face da experiência profissional e académica próprias, tendo sempre presente o conteúdo programático das escolas de referência para as matérias leccionadas.
2.º Semestre -
Álgebra Linear
Apresentação
Na sequência da Matemática Discreta, a Álgebra Linear é uma disciplina do 2ºsemestre do curso e estuda os espaços vectoriais finitamente gerados.sobre um corpo com comparticular incidência nos corpos primos Z p e o corpo dos reais
O estudo dos espaços vectoriais confere aos estudantes competência para analisar problemas, equacioná-los e definir estratégias diversificadas de resolução.
As aplicações lineares conduzem ao conceito de matriz que aparece como ferramenta de cálculo no estudo dos espaços vectoriais.
O aluno adquire algumas técnicas de cálculo matricial e confere ao conjunto das matrizes finitas a estrutura de espaço vectorial.
O aluno tem a oportunidade de estabelecer um isomorfismo entre espaços vectoriais de matrizes e o espaço vectorial de aplicações lineares o que lhe permitirá selecionar, na resolução de problemas, o espaço onde trabalhar tendo em atenção a especificidade do problema em causa.
Docentes: Maria Silva, Luís Maia, Sofia Fernandes.
Programa
1. Estruturas algébricas: grupos comutativos, aneis e corpos. Os corpos Z p, p primo.
2. Espaços vectoriais finitamente gerador. Subespaços vectoriais .
3. Sistemas de vectores equivalentes e dependência linear.
4. Teorema de Steinitz e suas consequências.
5. Aplicações lineares. Isomorfismos
6. Matrizes sobre um corpo. Espaços vectoriais de matrizes .Produto de Matrizes
7. Sistemas de Equações lineares: Estudo e resolução de equações vectoriais lineares. Representação de subespaços vectoriais através de sistemas de equações lineares
8. Determinantes: principais propriedades dos determinantes . Teorema de La Place
9. Valores e vectores próprios.
Objetivos
Conhecer a estrutura de espaço vectorial. Conhecer o conceito de aplicação linear e as suas propriedades. Saber operar em espaços de matrizes. Conhecer a teoria dos determinantes e aplicá-la na resolução de problemas.. Esta unidade curricular confere competências que permitem usar os conhecimentos adquiridos para definir a melhor estratégia na resolução de problemas. O estudante desenvolve competências de raciocínio analógico e dedutivo. Adquire capacidade para lidar com várias caracterizações de um conceito assim como competência para seleccionar a informação mais adequada em cada situação
-
Algoritmia e Estruturas de Dados
Apresentação
Esta UC surge no 2º semestre do 1º ano, na continuação do trabalho iniciado em Fundamentos de Programação (FP). Em FP, os alunos deram os primeiros passos na programação e preocuparam-se principalmente em produzir programas correctos. Agora, em Algoritmia e Estruturas de Dados, irão continuar a produzir programas correctos mas com preocupações de desempenho, a nível de tempo de execução e consumo de memória.
Esta é uma UC fundamental no currículo de um Engenheiro Informático, que na sua vida profissional encontrará inúmeras situações em que terá que resolver problemas causados por fraco desempenho das aplicações e que exigem um conhecimento sólido dos princípios subjacentes aos principais algoritmos e estruturas de dados.
Não obstante a aprendizagem de conceitos e técnicas de algoritmia e estruturas de dados, os alunos trabalham outras competências fundamentais. Nomeadamente, o espírito crítico e a capacidade de avaliar várias alternativas para resolver os problemas.
Docentes: Pedro Alves, Bruno Cipriano, Duarte Neves, Miguel Tavares, Rodrigo Correia.
Programa
- funções recursivas, algoritmos recursivos
- tipos de dados complexos
- eficiência e optimização (algorítmica e não-algorítmica)
- complexidade de algoritmos
- algoritmos de pesquisa
- algoritmos de ordenação – bubble sort, selection sort, merge sort, quick sort
- tipos de dados abstractos – pilhas e filas
- listas ligadas
- árvores binárias, árvores ordenadas, árvores AVL
- hashtables
Objetivos
O objectivo desta unidade curricular é introduzir os conceitos fundamentais de algoritmos e das estruturas de dados básicas, numa perspetiva de resolver problemas complexos de uma forma eficiente. O aluno deverá ser capaz de analisar e avaliar a eficiência de um algoritmo sem necessidade de o implementar ou testar. Deverá ser igualmente capaz de aplicar a estrutura de dados mais eficaz e eficiente para resolver um determinado problema.
Concretamente, o aluno deverá conseguir criar programas em Java cuja eficiência seja um critério significativo de sucesso (ex: pesquisa, ordenação).
-
Arquitetura de Computadores
Apresentação
Esta unidade curricular (UC) introduz conceitos de circuitos lógicos combinatórios e sequenciais. Os alunos aprendem a construir uma máquina sequencial e posteriormente um microprocessador. Como transformar uma operação numa instrução que possa ser interpretada e executada por um processador é um dos objetivos principais desta UC.
Docentes: Daniel Fernandes, Paulo Guedes, Ricardo Santos, Sérgio Ferreira.
Programa
Aulas Teóricas
- Circuitos digitais MSI: Portas Lógicas, registos, contadores, memórias, multiplexers e descodificadores. Simulação.
- Arquitetura de um Microprocessador (CPU) genérico.
- Componentes básicos: ALU, Registos e Barramentos.
- Instruções e Microinstruções
- Memórias de Programa e Dados.
- Fluxo de informação num CPU: Operações Fetch e Execution
- Estudo de um Microcontrolador comercial de baixo custo.
- Ambiente de desenvolvimento, programação, simulação e teste.
Aulas Práticas
- Componentes digitais típicos
- Simulação de componentes básicos da arquitetura interna de um CPU genérico
- Projeto simples com um microcontrolador comercial económico
Objetivos
Entender o funcionamento dos computadores, de uma perspetiva microscópica até uma perspetiva macroscópica. Reconhecimento das potencialidades e limitações de um computador. Entendimento da forma como interagem os diversos elementos da estrutura/arquitetura de um computador.
-
Competências Comportamentais
Apresentação
Esta unidade curricular (UC) inscreve-se num contexto onde têm sido elencadas necessidades de adaptação dos especialistas em informática ao contexto das organizações, nomeadamente no que às denominadas soft skills diz respeito. Assim, pretende-se que os alunos desenvolvam conhecimentos ao nível das ferramentas básicas de empregabilidade (ex. Currículo, redes sociais e networking, marketing pessoal), gestão das emoções, gestão de tempo (ex. trabalho remoto), trabalho em equipa e liderança, comunicação e desenvolvimento de competências comportamentais e autoconhecimento. Por outro lado, é objetivo desta UC o desenvolvimento de um plano individual de desenvolvimento pessoal, bem como de aptidões que permitam aos alunos destingir entre factos e opiniões, conhecimento científico e senso comum. Sendo uma UC de índole prática, pretende-se que os conhecimentos sejam operacionalizáveis e tendentes ao desenvolvimento de competências transferíveis do plano académico para a domínio profissional.
Docentes: Diogo Morais, Tomáz Saraiva.
Programa
Marketing Pessoal:
- CV;
- Portefólio;
- Apresentação pessoal e contextos de entrevista;
- Apresentação em público e ferramentas de suporte;
- Redes sociais e Networking;
- Factos Vs Opiniões;
- Gestão de tempo:
- Trabalho remoto e comunicação mediada;
- Work-life balance.
- As tecnologias no trabalho: oportunidades e ameaças:
- Trabalho em equipa;
- Comunicação;
- Personal and Social Skills development;
- Percursos de carreira;
- Critical thinking and problem solving.
Objetivos
Pretende-se que os alunos desenvolvam conhecimentos ao nível das ferramentas básicas de empregabilidade (ex. Currículo, redes sociais e networking, marketing pessoal), gestão das emoções, gestão de tempo (ex. trabalho remoto), trabalho em equipa e liderança, comunicação e desenvolvimento de competências comportamentais e autoconhecimento. Por outro lado, é objetivo desta UC o desenvolvimento de um plano individual de desenvolvimento pessoal, bem como de aptidões que permitam aos alunos destingir entre factos e opiniões, conhecimento científico e senso comum. Sendo uma UC de índole prática, pretende-se que os conhecimentos sejam operacionalizáveis e tendentes ao desenvolvimento de competências transferíveis do plano académico para a domínio profissional.
-
Linguagens de Programação I
Apresentação
Esta unidade curricular oferece uma extensa exploração da programação procedural usando a linguagem de programação C, abrangendo tópicos fundamentais e avançados. Os alunos obterão uma compreensão abrangente da história da programação C e dos seus benefícios, bem como aprenderão a criar e executar programas simples em C. O currículo concentra-se em conceitos essenciais, incluindo tipos de dados, variáveis, estruturas de controlo, funções e ponteiros, com oportunidades de experiência prática para reforçar o conhecimento. A unidade curricular também aborda tópicos avançados, como manipulação de ficheiros, alocação dinâmica de memória e estruturas de dados como listas e filas. Através de projetos de programação, os alunos desenvolverão experiência prática, com ênfase particular em obter uma compreensão completa da organização e operação da memória do computador como um recurso. No final do curso, os alunos serão capazes de criar programas eficientes que fazem uso eficaz da memória.
Docentes: Pedro Serra, Daniel M. Silveira, Thiago Gustavo, Wellington Oliveira.
Programa
M0: Introdução: Visão geral, programação C, história, benefícios, configuração do ambiente, programa simples
M1: Sintaxe Básica: Definições, tipos de dados, operadores, entrada/saída, estruturas de controlo
M2: Estruturas de controle avançadas: Switch, break/continue, goto
M3: Funções: definição/invocação, argumentos/valores de retorno, recursão
M4: Matrizes e Strings: Definições, vectores de caracteres, strings, funções, matrizes 2D
M5: Ponteiros: Definições, aritmética, pilha/heap, alocação dinâmica de memória
M6: Ponteiros Avançados: Ponteiros para ponteiros/funções
M7: Estruturas e Uniões: Definições, estruturas aninhadas, uniões
M8: Entrada/saída de arquivo: visão geral, abertura/leitura/gravação de ficheiros, entrada/saída binária
M9: Diretivas e Macros do Pré-processador: Definições, #define, #ifdef, #undef, macros com parâmetros
M10: Operadores bit a bit: Definições, operadores bit a bit AND/OR/XOR/NOT/shift
M11: Listas Ligadas: Definições, criação/manipulação, exemplos, pilhas/filasObjetivos
No final desta Unidade Curricular, os alunos deverão ser capazes de criar programas C eficientes e rápidos, tendo em consideração o uso correto da memória. Deverão adquirir uma compreensão sólida da abstração procedural e ser capazes de analisar e criar algoritmos simples usando essa abordagem. Além disso, os alunos devem entender os princípios por trás dos sistemas "coletores de lixo" em linguagens de alto nível, e da operação de bibliotecas de estruturas de dados. O curso visa fornecer aos alunos conhecimentos necessários para criar programas em C bem projetados, eficientes e robustos e para entender os princípios fundamentais que sustentam a operação das linguagens de programação modernas.
-
Matemática II
Apresentação
Geométria analítica e calculo diferencial e integral para funções reais de várias variáveis reais.
Docentes: André Fonseca, Guilherme Antunes, Sofia Naique.
Programa
1. Vectores e geometria do espaço
1.1 Coordenadas cartesianas tridimensionais.
1.2 Vectores, produto escalar.
1.3 Rectas e planos.
1.4 Superfícies cilíndricas e quádricas.
1.5 Noções topologicas
2. Funções vectoriais de variável real
2.1 Funções vectoriais e curvas no espaço.
2.2 Limites e continuidade. Diferenciabilidade, vector tangente a uma curva.
2.3 Integração, comprimento de uma curva.
3. Funções de várias variáveis
3.1 Dominios e curvas de nível.
3.2 Limites e continuidade.
3.3 Derivadas parciais, derivadas de ordem superior.
3.4 Diferenciabilidade, planos tangentes e aproximações polinómiais.
3.5 Derivada direccional, vector gradiente e sua interpretação geométrica.
3.6 Matriz Hessiana, extremos locais e pontos de sela.
4. Integrais múltiplos
4.1 Integrais duplos.
4.2 Coordenadas polares e mudança de variáveis em integrais duplos.
4.3 Integrais triplos.
4.4 Coordenadas cilíndricas e esféricas. Mudança de variáveis em integrais triplos.
Objetivos
Conferir competências nas técnicas e aplicações do cálculo diferencial e integral com funções de várias variáveis. Dominar os conceitos de limite, continuidade e diferenciabilidade de funções. Dominar o cálculo de integrais múltiplos.
Ter capacidade de resolver problemas em contextos diversificados usando os métodos do cálculo diferencial e integral. Conhecer as aplicações a problemas de otimização, de caracterização geométrica de curvas e superfícies e de cálculo de volumes e áreas.
-
Fundamentos de Física
-
2.º Ano
1.º Semestre -
Arquiteturas Avançadas de Computadores
Apresentação
Esta unidade curricular vem completar os conhecimentos adquiridos anteriormente nas UCs de Sistemas Digitais e Arquitectura de Computadores, abordando temas mais actuais e conceitos de mais alto nível. A compreensão destes conceitos avançados de arquitectura de computadores faz com que os alunos tomem consciencia das limitações e possibilidades do hardware. Consequentemente poderão criar programas mais eficientes, capazes de tirar partido das capacidades do hardware e que tenham em conta as eventuais limitações deste.
Docentes: Pedro Serra, Daniel Fernandes, Wellington Oliveira.
Programa
1. Introdução
2. O processador
Principais módulos funcionais
Condutas e riscos
Exceções
Paralelismo ao nível da instrução
3. Hierarquia de memória
Dispositivos e tecnologia de armazenamento: disco magnético, memória flash
Memórias cache
Memória virtual
Confiabilidade na hierarquia de memória
Paralelismo: coerência entre caches, RAID
4. Arquiteturas paralelas
Limites de frequência, dissipação de energia e memória
Paralelismo e limites ao aumento de desempenho
SIMD e processadores vetoriais
Multithreading em hardware
Arquiteturas de multiprocessador¿ aglomerados e computação em grelha.
GPUs
Medição de desempenho
5. Virtualização
Origens e definição do conceito de máquina virtual
Conceito de hipervisor
Variantes de implementação
Virtualização de sistema: processador, memória, periféricos (E/S)
Exemplos de plataformasObjetivos
Os estudantes devem conhecer os componentes de um computador moderno e compreender o seu funcionamento e as suas interações. Devem ser capazes de identificar o fluxo de dados e analizar o desempenho de um computador.
Esta competência é diretamente aplicável nos domínios do hardware e da administração de sistemas, e indiretamente aplicável no domínio do software – permitindo formar futuros engenheiros informáticos que tomem decisões de análise, desenho e implementação de software que tirem partido das capacidades do hardware e tenham em conta as eventuais limitações destas.
-
Bases de Dados
Apresentação
Esta unidade curricular tem por objetivo apresentar a importância da Gestão de Dados no seio de uma empresa, de forma a garantir quer a operação diária de negócio, bem como o apoio à decisão estratégica.
Nesta unidade reforçar-se-á o enquadramento de estruturação e metodologias de criação das bases de dados.
Docentes: Rui Ribeiro, João Caldeira, Luis A. Gomes.
Programa
O programa da unidade curricular é:
A) Componente Teórico- Introdução
- Modelo de relacionamento entre entidades
- O modelo relacional
- Refinamento de esquema: Conceito de normalização e transações
- Arquitetura de SGBD e algum SQL Avançado
B) Componente Prática
- Introdução à linguagem SQL;
- Instruções: DDL, DML (DQL) e DCL
- Operações: WHERE, ORDER BY, GROUP BY;
- Conceito avançados em SQL: Controlo de erros
- Operadores Relacionais: União, intersecção e Subtracção
- Produto Cartesiano (externo)
- Queries complexos (filtro com valores agregados) e sub-queries
- Set DDL; Instrução CREATE; Tipos de dados; Nulidade; Instruções ALTER e DROP
- INDICES e VIEWS
- Controlo de erros: estrutura TRY¿CATCH
- Procedimentos (SP) e Triggers
- Operações com tabelas: Cursores
Objetivos
São objetivos dotar os estudantes dos conhecimentos teóricos e práticos necessários à concepção, construção e análise de bases de dados relacionais: nomeadamente obter as seguintes aptidões e
competências:
1. Compreender as razões de implementação de bases de dados relacionais no mundo empresarial
2. Transpor de uma análise de requisitos para um modelo entidade-associação para desenhar bases de dados;
3. Aplicar os conceitos do modelo relacional de bases de dados, transformando o modelo entidade-associação, em modelo físico de dados;
4. Aplicar as técnicas de normalização de tabelas;
5. Compreender arquitetura e principais componentes de Sistemas de Gestão de Bases de Dados;
6. Utilizar a linguagem SQL base e avançado para a criação, consulta e modificação de bases de dados;
-
Linguagens de Programação II
Apresentação
Esta UC é o culminar de um caminho iniciado em Fundamentos de Programação e aprofundado em Algoritmia e Estruturas de Dados, solidificando os conhecimentos de programação. Com um foco no desenvolvimento e manutenção de programas de elevada complexidade, o paradigma imperativo deixa de ser suficiente e são abordados os paradigmas orientado a objectos e funcional. São igualmente abordados conceitos adjacentes à fase de implementação, como o controlo de versões, os testes unitários e funcionais, a cobertura de código e outras métricas de qualidade. Esta é uma UC fundamental na formação de qualquer profissional da área de Informática, pois fornece um conjunto de conhecimentos e ferramentas que serão essenciais nos projectos empresariais em que estes alunos virão a estar inseridos.
Docentes: Pedro Alves, Bruno Cipriano, Duarte Neves.
Programa
- Paradigmas de programação
- Imperativo, funcional, orientado a objetos
- Conceitos de programação por objectos
- Entidades, Atributos, Acções
- Classe vs Objecto, Principio do encapsulamento
- Herança, polimorfismo, parametrização por herança, composição
- UML
- Diagramas de classes
- Java orientado a objectos
- Classes, objectos, variáveis
- Construtores, métodos
- Visibilidade, Exceptions
- Estruturas de dados: Arrays, Lists, Maps
- Herança, classes abstractas
- Input/Output
- Testes unitários
- JUnit
- Controlo de versões
- Git, Github
- Padrões de desenho
- Factory, Singleton, Observer/Observable, Composite
- Conceitos de programação funcional em Kotlin
- Funções puras, lambdas, funções de primeira ordem, iteração interna, operações com listas
- Boas práticas de programação multi-paradigma
Objetivos
Esta UC tem como objetivo apresentar uma visão multi-paradigma da programação. São analisados e comparados os 3 paradigmas mais populares: imperativo, orientado a objectos e funcional. Os alunos revêm conceitos da programação imperativa e adquirem conceitos fundamentais da programação orientada a objetos (herança, encapsulamento, polimorfismo, etc.) e da programação funcional (lambdas, funções de 1a ordem, etc.) de forma a que consigam aplicá-los em projetos de desenvolvimento de software complexo usando linguagens de programação modernas multi-paradigma (Java, C#, Python, Kotlin, JavaScript).
Ao longo do semestre, os alunos são consciencializados para a necessidade de redução de custos de manutenção através de melhorias na qualidade do software produzido e aplicação de boas práticas tirando partido das vantagens específicas de cada paradigma. São igualmente expostos a ferramentas essenciais no desenvolvimento moderno de software, como controlo de versões e testes unitários.Todos estes conceitos são aplicados num projeto de elevada complexidade, multi-paradigma e multi-linguagem que atinge em média as 2500 LOC. O projeto tem que ser desenvolvido em Git e ter uma cobertura elevada de testes unitários. Mais do que as capacidades técnicas, os alunos trabalham a gestão de tempo, o rigor e a resiliência, a capacidade analítica e espírito crítico, a criatividade e o trabalho em equipa.
- Paradigmas de programação
-
Probabilidades e Estatística
Apresentação
A disciplina de Probabilidades e Estatística tem como objetivo fundamental dar ao estudante conceitos fundamentais da teoria da probabilidade e técnicas de estatística descritiva e inferência estatística, essenciais para o estudo de Engenharia.
Docentes: Sofia Naique, Guilherme Antunes.
Programa
1. Estatística Descritiva:
- Tabelas de frequência;
- Representação Gráfica;
- Cálculo de medidas descritivas de localização e dispersão;
2. Regressão Linear:
- Estimar os parâmentros do modelo;
- Calcular e compreender o coeficiente de determinação;
3. Teoria das Probabilidades:
- Experiência aleatória: Espaço amostral; Acontecimentos;
- Álgebra de acontecimentos: Definição, Propriedades da Probabilidade; Axiomática Kolmogorov;
- Probabilidade Condicionada: Independência; Teorema de Bayes;
4. Variáveis aleatórias discretas e continuas:
- Função de probabilidade, Função densidade de probabilidade e Função distribuição;
- Parâmetros de variáveis aleatórias: Valor esperado, Variância e Desvio padrão;
5. Distribuições discretas: Bernoulli, Binomial e Poisson;
6. Distribuições contínuas: Normal e Exponencial;
7. Inferência Estatística:
- Amostra e Amostra Aleatória. Média amostral;
8. Estimação:
- Intervalos de Confiança para Valor Esperado;
- Testes de Hipóteses para Valor Esperado.
Objetivos
Pretende-se que o estudante:
- Seja capaz de organizar dados estatístios e realizar análises de estatística descritiva e compreenda as principais medidas estatístcias de localização e dispersão;
- Compreenda os aspetos teóricos essenciais dos modelos de regressão linear.
- Compreenda os conceitos fundamentais da teoria das probabilidades e saiba calcular as probabilidades associadas ao fenómeno em estudo;
- Seja capaz de caracterizar variáveis aleatórias e identificar as respectivas distribuições de probabilidade;
- Seja capaz de aplicar técnicas adequadas de estimação pontual e intervalar para inferir sobre as características de uma população com base numa amostra e analisar os resultados obtidos;
- Compreenda os procedimentos gerais para aplicação de um teste de hipóteses;
- Compreenda a disciplina de Probalidades e Estatística como uma área da ciência que permite recolher e analisar dados, formular hipóteses relativas a esses dados e testar essas hipóteses.
-
Sistemas Operativos
Apresentação
O objectivo desta UC é o de apresentar os princípios fundamentais dos Sistemas Operativos, de forma a permitir uma compreensão detalhada da sua arquitectura e funcionamento, dando aos alunos os conhecimentos e capacidades para utilizar, configurar e optimizar este componente fundamental dos sistemas informáticos.
Docentes: João Craveiro, Daniel M. Silveira, João Madeira.
Programa
- Introdução a Sistemas Operativos
- Processos
- Threads e concorrência
- Escalonamento do CPU
- Sincronização de processos
- Deadlocks
- Gestão de Memória
- Gestão de armazenamento em massa
- Sistema de ficheiros
- Virtualizacao
Objetivos
No final da cadeira, os alunos deverão:
- Conhecer os princípios dos Sistemas Operativos actuais e identificar os vários componentes que o constituem.
- Conhecer os algoritmos fundamentais em que assentam os principais componentes de um Sistema Operativo assim como as suas optimizações mais atuais.
- Programar exemplos ilustrativos de alguns algoritmos mais representativos (escalonador, sistema de ficheiros, etc..)
- Tirar partido da utilização directa das interfaces sistema para o desenvolvimento e optimização de aplicações complexas.
2.º Semestre -
Engenharia de Requisitos e Testes
Apresentação
A UC de Análise e Conceção de Sistemas tem por objetivo garantir um enquadramento de gestão de Sistemas de Informação e o seu impacto na componente aplicacional, onde a componente de metodologia e engenharia de requisitos, tal como a metodologia e estruturação de testes de software, sejam unitários ou agregados, são essenciais para o sucesso de negócio das empresas.
Docentes: Rui Ribeiro, José Cascais Brás, Luis A. Gomes.
Programa
Estrutura de Capítulos principais de conteúdos
-
Visão de Gerenciamento de Sistemas de Informação
-
Engenharia de Requisitos (Gestão de backlog, BPMN e UML – Modelação)
-
Testes de software
-
Gestão de Projetos
Objetivos
- Entender o que é Gestão de Sistemas de Informação
- Por que é fundamental definir requisitos
- Saber desenvolver e gerenciar uma metodologia de definição e estrutura de requisitos
- Como alinhar os testes com os requisitos
- Compreender a importância de modelar os requisitos e testes
- Fundamentos de Gestão de Projetos
-
-
Processamento de Imagem
Apresentação
Esta unidade curricular e¿ dedicada ao processamento de imagem, como fonte sensorial de maior alto ni¿vel. Aqui sera¿o apresentadas as va¿rias tecnologias de sensores de imagem, a captac¿a¿o de imagem e em seguida sa¿o estudados os va¿rios me¿todos de tratamento de imagem e de extrac¿a¿o de informac¿a¿o. Na componente pra¿tica sera¿ desenvolvida uma aplicac¿a¿o de processamento de imagem, que ira¿ usar os alguns dos me¿todos aprendidos durante o semestre para resolver um problema pra¿tico que sera¿ proposto, usando a biblioteca OpenCV e linguagem c#. Ira¿ tambe¿m ser dado umas noções de introduc¿a¿o a¿ Intelige¿ncia Artifical aplicadas nas imagens.
Docentes: João P. Carvalho, Houda Harkat.
Programa
- Processamento de Imagens: dos pixeis a¿s caracteri¿sticas;
- Operac¿o¿es sobre imagens;
- Segmentac¿a¿o;
- Detecc¿a¿o de objectos;
- Extracc¿a¿o de caracteri¿sticas;
- Medidas;
- Ana¿lise de aplicac¿o¿es.
Conteu¿dos de ensino a¿ dista¿ncia: Tutoriais e apoio em video-confere¿ncia e/ou em comunicac¿a¿o assi¿ncrona.
Objetivos
Pretende-se que no final do semestre os estudantes possuam:
- Capacidades de analisar imagens 2D e aplicar os filtros necessa¿rios (como a rotac¿a¿o, translac¿a¿o, etc) para um determinado objectivo;
- Conhecimentos mais aprofundados na linguagem c#;
- Noc¿o¿es ba¿sicas de intelige¿ncia artifical em imagens.
-
Programação Web
Apresentação
Esta Unidade Curricular pretende dar formação na área da programação Web em geral, e em particular no desenvolvimento de aplicações Web back-end e front-end, providenciando uma visão global do desenvolvimento moderno para a Web. No front-end, são introduzidos conceitos de estruturação, estilização e interação de conteúdos através das linguagens HTML, CSS e JavaScript, in. No back-end, é ensinado o desenvolvimento de aplicações empresariais seguindo o padrão de desenho model-view-control, recorrendo à linguagem Python e a Web framework django. Pretende-se estimular a criatividade e imaginação no desenvolvimento de aplicações inovadoras que sejam eficientes, escaláveis e fáceis de modificar por um lado, e que ofereçam uma boa experiência para o utilizador. Esta é uma UC fundamental para qualquer profissional da área da informática, pois fornece um conjunto de conhecimentos e ferramentas que serão essenciais em projetos empresariais em que virão a estar inseridos.
Docentes: Lucio Studer, Pedro Perdigão, Rui Santos.
Programa
A Web e seus paradigmas
– Funcionamento da Internet e da Web: arquitetura e protocolos IP e HTTP
– Tecnologias, paradigmas e padrões de desenho da WebHTML e CSS para desenho de páginas Web
– HTML e seus elementos
– Formulários para envio de dados
– HTML5 e elementos semânticos
– CSS e seus seletores, para estilização de conteúdos
– Propriedades CSS
– Design responsivo e layouts dinâmicos
– Efeitos e animações CSS
– BootstrapJavaScript para programação Front-end
– Programação Orientada a Eventos
– Manipulação do DOM
– JSON e APIs
– Single Page ApplicationsPython para desenvolvimento Web
– Sintaxe, operadores, controlo de fluxos e tipos de dados
– Funções e módulos
– Gestão de ficheiros e pastas
– ClassesDjango web framework para Back-end
– Web frameworks
– Arquitetura MVT
– Urls, views e templates
– Linguagem template
– Modelação de base de dados, ORM
– Formulários
– Autenticação
– Implantação na cloudObjetivos
- Entender o funcionamento da Internet e da Web.
- Compreender os princípios da programação Web e seus principais padrões de desenho.
- Aplicar estes conceitos, usando várias tecnologias (HTML, CSS, JavaScript, Python and Django¿).
- Arquitetar aplicações eficientes, de fácil manutenção, que corram na Web.
- Avaliar as diferentes estratégias de desenho, sabendo escolher a abordagem que mais se adequa ao contexto.
- Ser capaz de construir e implantar na cloud aplicações Web complexas e criativas, totalmente funcionais (full stack).
-
Redes de Computadores
Apresentação
Esta UC em Redes de Computadores faz um curso introdutório à rede de computadores Internet. Tem como objectivo apresentar todas as camadas de que é constituida a Internet (Inter-Networks), i.e. Camada de Aplicação, Camada de Transporte, Camada de Rede e Camada de Ligação/Fisica.
A abordagem ao Conteudos Programáticos é feita de uma forma Top-Down, i.e. começando com uma introdução de todas a camadas seguida por cada uma em detalhe começando pela camada de Aplicação.
Existe uma componente prática nesta UC, do qual são demostrados e treinados os conceitos introduzidos na componente teórica.
Esta Unidade Curricular complementa e integra-se assim, ao presente ciclo de estudos oferecendo uma componente disciplinar de Redes de Computadores e sua evoluc¿a¿o.
Docentes: João Craveiro, Brena Lima, Houda Harkat.
Programa
CP1: Introdução
- O que é a Internet?
- Elementos
- Convenções
- Serviços
- Protocolos
- The Network Edge (Periferia da Network)
- The Network Core (Malha interna)
- Circuit Switching (Comutação de Circuitos)
- Packet Switching (Comutação de Pacotes)
- Topologias e Redes de Acesso
- Niveis de Protocolos e Modelos de Serviço
CP2: Camada de Aplicação
- Evolução de Aplicações de Internet
- DNS (Domain Name System)
- HTTP (HyperText Transfer Protocol)
- Web proxies and caching
- Sistemas Distribuidos
- Peer-to-peer (BitTorrent)
- Aplicações Real-time (VoIP)
CP3: Camada de Transporte
- Service models
- User Datagram Protocol (UDP)
- Connections (TCP)
- Sliding Window (TCP)
- Flow control (TCP)
- Retransmission timers (TCP)
- Congestion control (TCP)
CP4: Camada de Rede
- Network service models
- IP (Internet Protocol)
- NAT, a ¿middlebox¿
- Routing algorithms
CP5: Camada Data Link
- Framing
- Error detection and correction
- Retransmissions
- Multiple Access
- Switching
Objetivos
OA1: Saber que o que é uma rede a nível geral. E que a Internet é uma rede de redes ou inter-network. Gerir uma rede de redes que partilha dados sem gestão centralizada envolve em termos de gestão e de operação vários desafios.
OA2: Adquirir conhecimentos teóricos e práticos dos diversos protocolos envolvidos em cada camada (layer) de operação. Na Camada de Aplicação, tais como HTTP 1.0 e 1.1, DNS, etc. Na camada de Transporte, protocolos como o UDP e TCP e suas variantes. Na camada de Rede o protocolo IP, etc. E na camada de data link, saber o que é uma comutação por circuitos e por pacotes.
OA3: Ganhar a aptidão teórica e prática de uma comunicação Cliente-Servidor.
-
Sistemas de Suporte à Decisão
Apresentação
A UC de Sistemas de Suporte à Decisão / Business Intelligence tem por objetivo garantir que há a introdução à temática de processos de análise de dados para apoio às áreas de gestão das empresas. Neste sentido, a UC tem um papel fundamental no ciclo de estudo na compreensão dos processos de gestão e decisão de organizações, para além de como colocar infraestruturas de dados ao serviço do negócio empresarial.
Docentes: Rui Ribeiro, João Caldeira, João Licínio.
Programa
- Desafios de Negócio de DW
- Arquitecturas DW
- Melhores Práticas de Modelação de DW
- Implementação de ETL
- Bases de Dados específicas para BI
- Ferramentas de Relatórios
Objetivos
- Entender por que as empresas precisam de um ambiente de BI
- Quais componentes da arquitetura existem para BI
- Esquemas de modelação para DW
- Conhecer os vários processos de manipulação de dados em ambientes DW
- O que um colaborador/utilizador pode obter em interfaces de relatórios
-
Arquiteturas Avançadas de Computadores
-
3.º Ano
1.º Semestre -
Computação Distribuída
Apresentação
Disciplina focada na construção de aplicações distribuídas, onde se abordam os principais aspetos teóricos e práticos necessários para a construção dessas aplicações.
Docentes: Paulo Guedes, Sérgio Nunes.
Programa
1. Introdução. Caracterização, requisitos, arquitectura e funcionalidades
2. Arquitecturas e Modelos de Comunicação Distribuída. Arquitecturas de sistemas, níveis de software
3. Comunicação entre Processos Distribuídos (IPC). Características da comunicação entre processos, Invocação, parâmetros e heterogeneidade de dados
4. Invocação Remota e Objectos Distribuídos. RPC: Modelo de execução. Linguagem de definição de interfaces (IDL). Plataformas de execução: Sun RPC, Java RMI
5. Nomeação e Serviços de Directório. Tipos de Nomes. Espaços de nomeação. Serviços de Directório (Web, X.500, LDAP)
6. Web Services (WS). Modelo de Execução Web Services (WS). O protocolo SOAP. Linguagens de definição de Serviços (WSDL)
7. Segurança. Modelo de segurança. Autenticação. Controlo de acesso
8. Sistemas de Ficheiros Distribuídos. Arquitecturas de SGF distribuídos. Implementações: NFS e AFS
9. Transações. Modelo transaccional. Propriedades ACID das transacções. Transacções distribuídas. Protocolo 2-phase-commitObjetivos
Esta unidade curricular tem por objectivo abordar os principais modelos de computação distribuída, começando pelas técnicas fundamentais, apresentando de seguida as tecnologias associadas à invocação remota de objectos e arquitecturas orientadas aos serviços e terminando com os fundamentos de segurança e transações distribuídas.
-
Data Science
Apresentação
Esta disciplina oferece uma visão aprofundada do campo da Ciência de Dados, ensinando princípios e métodos fundamentais de análise e aprendizado a partir de dados. O curso é direcionado a analistas de dados sem conhecimentos prévios em estatística, e enfatiza a importância da ética na construção e uso de modelos obtidos a partir de dados. Os métodos de ensino incluem aulas tradicionais, debates em sala de aula e atividades de auto-avaliação, ajudando os alunos a desenvolver habilidades críticas e analíticas essenciais para o sucesso na ciência de dados. Ao final do curso, os alunos terão uma compreensão abrangente do campo, bem como as habilidades e conhecimentos necessários para se tornarem cientistas de dados de sucesso.
Docentes: Manuel M. Pita, Zuil Pirola.
Programa
- Introdução à Ciência de Dados
- O que significa aprender com dados?
- Como garantir a precisão dos modelos?
- Regressão linear simples
- Regressão linear múltipla
- Como trabalhar com modelos de regressão?
- Classificação logística
- Modelos de classificação generativa
- Métodos de reamostragem
- Métodos baseados em árvores para regressão e classificação
- Aspetos éticos e regulamentos âmbito da Ciência de dados
Objetivos
- Familiarizar os estudantes com o campo multidisciplinar da Ciência de Dados
- Adquirir conhecimentos aprofundados sobre o que significa aprender estatisticamente a partir de dados
- Compreender o que são os modelos de regressão e classificação
- Compreender como validar e utilizar modelos construídos a partir de dados
- Adquirir uma diversidade de métodos para criar modelos de regressão e classificação
- Comparar criticamente diferentes métodos para produzir modelos de regressão ou classificação
- Compreender a importância e usos de métodos de reamostragem na Ciência de Dados
- Compreender os princípios éticos básicos e regulamentações no contexto de modelos baseados em dados
-
Engenharia de Software
Apresentação
A Engenharia de Software ensina o desenho, escrita de código e testes, e manutenção de programas que têm um propósito de resolver problemas complexos com soluções eficientes e seguras. Todas as unidades curriculares anteriores tem um maior foco na sintaxe e técnicas de programação enquanto nesta unidade curricular os alunos aprendem as técnicas de de desenhar e desenvolver software de uma forma eficiente, legível, modular e escalável.
Esta unidade curricular é essencial para desenvolver as capacidades de desenho e programação que os alunos vão enfrentar no mercado de trabalho.
Docentes: José Cascais Brás, Pedro Perdigão, Rui Santos.
Programa
- CP1. Introdução à Engenharia de Software;
- CP2. Modelos e processos desenvolvimento de software;
- Modelos Clássicos: Cascata (contexto histórico)
- Modelos Ágeis: Agile (framework de Scrum)
- CP3. Modelação de sistemas;
- Análise de requisitos
- Diagrama de domínio
- Diagrama de conceitos
- Casos de uso
- CP4. Desenho da arquitectura;
- Análise
- Desenho
- Avaliação
- Evolução
- CP5. Desenho e implementação;
- Padrões UML
- Princípios de desenvolvimento orientado a objectos: S.O.L.I.D, KISS, entre outros.
- CP6. Verificação e validação;
- Conhecer os diferentes tipos de testes
- Aplicação de testes unitários
- CP7. Segurança e Confiabilidade
- CP8. Integração Contínua
- Vantagens
- Ferramentas e tecnologias
Objetivos
OA1. Compreender os métodos, técnicas e ferramentas para o completo desenvolvimento de um sistema de software, desde a sua conceção até à sua entrega e manutenção.
OA2. Saber planear, gerir, avaliar e garantir a qualidade do desenvolvimento de projetos de software utilizando os princípios da Engenharia de Software.
-
Interação Humano-Máquina
Apresentação
A disciplina Interação Humano-Máquina tem por principal objetivo dotar os estudantes de competências metodológicas, de design, de comunicação e de fatores humanos, que lhes permitam desenhar produtos e serviços com as pessoas e para as pessoas. Num mundo cada vez mais digital, a inclusão de todas as pessoas/cidadãos é cada vez mais necessária. A Humanização da Tecnologia é mais do que uma boa experiência do Utilizador. Na prática e, aplicando os conhecimentos teóricos a projetos, os estudantes deverão ser capazes de criar artefactos (em tecnologias de informação) que melhorem a forma como as pessoas trabalham, comunicam e interagem numa sociedade inclusiva.
Docentes: Conceição Costa, Miguel Tavares.
Programa
O que é o Desenho de Interação? Compreender e conceptualizar a interação. O impacto da Teoria da Actividade. Desenhar com a acessibilidade em mente. Princípios para inclusão. Os contributos da psicologia cognitiva no estudo da interação humano-máquina. Perceção humana e funções cognitivas que influenciam o desempenho do utilizador e a satisfação. Desenvolvimento e Avaliação de Protótipos iniciais. Tipos de estudos em user experience, ao longo do ciclo de vida do projeto. Análise crítica aos resultados do estudo para melhorias no protótipo.
Objetivos
-
Adquirir competências em Desenho de Interação e Desenho Inclusivo.
-
Compreender como a perceção humana e funções cognitivas influenciam a interação entre o humano e o computador. Compreender que a diferentes interações correspondem diferentes interfaces utilizador.
-
Compreender o impacto dos públicos heterogéneos e dos fatores culturais no desenho de aplicações
-
Aprender metodologias de projeto que facilitem o desenho de experiências satisfatórias para o utilizador;
-
Criar protótipos de alta fidelidade e recolher feed-back junto do Público-Alvo;
-
Aprender a planear, desenhar e realizar estudos de avaliação da usabilidade ao longo do ciclo de desenvolvimento de software. Saber tratar e analisar dados, bem como apresentar resultados de forma sucinta.
-
Aplicar as competências adquiridas ao desenvolvimento de sistemas de informação e ao projeto transversal de IHM e Computação Móvel.
-
2.º Semestre -
Computação Móvel
Apresentação
Esta UC é cada vez mais fundamental numa sociedade onde o número de smartphones já ultrapassa largamente o número de computadores e onde se prevê que, num futuro próximo, cada indivíduo se faça acompanhar de um conjunto de dispositivos móveis (smartwatches, smart glasses, sensores, etc.) programáveis, criando a oportunidade para que os engenheiros informáticos possam resolver um vasto conjunto de problemas cuja resolução era até agora impossível ou excessivamente dispendiosa.
A dificuldade está em passar conhecimento que não se esgote no dia em que terminam a UC, dada a velocidade vertiginosa a que evoluem as tecnologias associadas à computação móvel. Nesse sentido, esta UC não pretende apenas ensinar a programar Android mas sim abordar temas intemporais desta área como os vários Modelos de Desenvolvmento, Autonomia, Geo-localização, Conectividade ou Usabilidade.
Docentes: Pedro Alves, Miguel Tavares, Wellington Oliveira.
Programa
- Computação Móvel / Sistemas Ubíquos / IoT
- Arquitetura e desenvolvimento de aplicações móveis (Web, Híbridas, Nativas) – Usabilidade e Interação
- Conectividade
- Geo-localização
- Autonomia
- Sensores
- Integração com serviços externos
- Modelos de negócio
- Dispositivos emergentes: smartwatches, dispositivos activados por voz
Objetivos
O objectivo desta unidade curricular é introduzir os conceitos fundamentais da computação móvel. O aluno deverá ser capaz de perceber como tirar o máximo partido das vantagens da computação móvel (localização, sensores, contextual), quando aplicados à resolução de problema concretos. O aluno deverá estar sensibilizado para os constrangimentos típicos de uma aplicação móvel (autonomia, conectividade, usabilidade) e conhecer os mecanismos que permitem ultrapassar esses constrangimentos.
Concretamente, o aluno deverá conhecer os 4 modelos de desenvolvimento de aplicações móveis (Web, Híbrido-Web, Híbrido-Nativo e Nativo) e saber aplicar os conceitos utilizando pelo menos 2 destes modelos – nomeadamente Híbrido-Nativo (Flutter) e Nativo (Android Kotlin).
-
Inteligência Artificial
Apresentação
Esta cadeira é uma introdução aos conceitos e técnicas básicas da Inteligência Artificial, com três áreas principais de atuação. Primeiro, a formalização do que é uma máquina, tanto na óptica de manipulação de símbolos da máquina de Turing, como nas máquinas de McCulloch and Pitts que funcionam com padrões de interligação entre nós em redes de neurónios. Segundo, o conceito de agente racional em IA, que emerge da interseção com as ciências cognitivas, e as diversas implementações de algoritmos de busca exaustiva estruturada (informados e não informados). Ainda dentro desta área de foco são ainda introduzidos os conceito de busca estocástica e algoritmos para satisfação de restrições (CSPs). Finalmente, na terceira área de foco, os estudantes aprendem noções e usos de alguns dos algoritmos de inteligência artificial avançados que são utilizados hoje em dia.
Docentes: Manuel M. Pita, Zuil Pirola.
Programa
- Conceitos Básicos
- Definições de IA
- Máquina de Turing
- Redes neuronais de McCulloch e Pitts
- Cómo analisar máquinas? diagramas de transição de estados
- Busca
- O conceito de agente de busca em IA
- Espaços e Grafos de busca
- Busca não informada: British Museum, DFS, BFS
- Busca Informada: Dijkstra e A*
- Busca adversária
- Problemas de satisfação de restrições
- Nocões básicas de sistemas de recomendação
- O futuro de IA
- Analise critica de artigos recentes em IA
Objetivos
Os objectivos de aprendizagem desta cadeira incluem (1) Entendimento profundo dos aspectos conceituais que dão origem à IA, nomeadamente a formalização do conceito de computação universal via manipulação de símbolos, e a computação baseada em redes de neurónios; (2) os métodos e representações usados para estudar o funcionamento de qualquer máquina; (3) Desenho e implementação de agentes racionais e o conceito de "processamento de informação"; (4) Algoritmos clássicos de busca não informada: British Museum, DFS e BFS; (5) Busca informada: Dijkstra e A*; (6) Formalização e resolução de problemas de satisfação de restrições (CSP); (7) conhecimentos básicos de técnicas avançadas de inteligência artificial nos domínios de machine learning e data science; e (8) Conhecimentos sobre os usos da inteligência artificial na sociedade incluindo aspectos relacionados com ética e o futuro de IA.
- Conceitos Básicos
-
Segurança Informática
Apresentação
A presente unidade curricular tem por objectivo formar estudantes com perfis profissionais especializados, capazes de lidar eficazmente com a complexidade crescente das ameaças à segurança das aplicações em rede e na nuvem, utilizando as mais avançadas tecnologias da segurança informática, para implementar elevados padrões de segurança em redes informáticas
Docentes: Sérgio Nunes.
Programa
¿Introdução à Segurança Informática ¿Conceitos fundamentais de Segurança Informática ¿Paradigmas de Segurança ¿Criptografia ¿Algoritmos de segurança ¿Autenticação e autorização ¿Gestão de chaves ¿Segurança de Redes ¿Firewalls ¿IDS/IPS ¿Redes sem fios ¿Arquitecturas de Segurança ¿Protocolos de comunicação segura ¿Tipificação de vulnerabilidades e ataques ¿Segurança de Software ¿Políticas e gestão de segurança
Objetivos
No final da cadeira, os estudantes deverão: Identificar os diferentes domínios e aplicações da segurança informática. Perceber e utilizar os principais algoritmos de encriptação, assim como quantificar os níveis de segurança que permitem assegurar. Conhecer e perceber as actuais ameaças à segurança em redes de dados e as boas práticas necessárias para as evitar. Conceber e implementar aplicações em rede obedecendo a elevados requisitos de segurança mesmo utilizando canais de comunicação inseguros Utilizar os conceitos adquiridos em cenários reais, no contexto do projecto / estágio profissional a realizar no ano lectivo.
-
Sistemas de Informação na Nuvem
Apresentação
Esta Unidade Curricular tem como objetivo uma introdução à computação em nuvem, numa perspectiva de um iniciante que não possui nenhuma experiência anterior com o tópico.
A ideia é ajudar a criar Junior Cloud Architects, o que significa crias as competências para implementar ou adotar a tecnologia Cloud, entender o que é exatamente e quais opções existem quando se pensa em implantações em nuvem.
Esta UC abrange uma ampla variedade de áreas de tópicos de computação em nuvem, fornecendo uma base sólida de entendimento. Esta unidade curricular cria também um ambiente de entendimento da teoria e das formas práticas dos diferentes modelos de serviços de Cloud Computing: Infraestrutura como Serviço (IaaS), Plataforma como Serviço (PaaS) e Software como Serviço (SaaS), fornecendo exemplos e diferenças entre cada .
Docentes: Rui Ribeiro, Luis A. Gomes, Rui Santos.
Programa
Aulas teóricas:
- Visão geral: história, mercado, tendências
- Revisão de arquiteturas distribuídas: SOA, orientado a eventos Componentes e Serviços
- O que é uma nuvem? Privado, público, híbrido
- Tecnologias, modelos de negócios, principais fornecedores de serviços nacionais e internacionais
- IaaS
- BaaS
- PaaS
- SaaS
- outras
Agenda Prática:
- 1º Trabalho – IaaS e PaaS
- AWS EC2 – Implante e execute o servidor ubuntu
- Docker PaaS – AWS Beanstalk
- Heroku – implantação de 2 aplicativos, cada um por serviço
- 2º Trabalho – SaaS e BaaS
- Trello Board
- AWS BaaS
- Firebase (armazenar dados e média)
Cada trabalho tem um planeamento prático de 6 aulas
Objetivos
- Entenda por que as empresas estão migrando para serviços em nuvem para apoiar seus negócios
- Quais são os modelos de negócios
- Quais são os principais provedores de serviços
- Principais conceitos da arquitetura em nuvem
- Recursos práticos para criar e implantar um serviço em nuvem
-
Computação Distribuída
Áreas Científicas
Conheça as áreas científicas em que este curso aposta
-
-
Maths – Matemáticas, Físicas e Metodologias de Computação
-
Álgebra Linear
Apresentação
Na sequência da Matemática Discreta, a Álgebra Linear é uma disciplina do 2ºsemestre do curso e estuda os espaços vectoriais finitamente gerados.sobre um corpo com comparticular incidência nos corpos primos Z p e o corpo dos reais
O estudo dos espaços vectoriais confere aos estudantes competência para analisar problemas, equacioná-los e definir estratégias diversificadas de resolução.
As aplicações lineares conduzem ao conceito de matriz que aparece como ferramenta de cálculo no estudo dos espaços vectoriais.
O aluno adquire algumas técnicas de cálculo matricial e confere ao conjunto das matrizes finitas a estrutura de espaço vectorial.
O aluno tem a oportunidade de estabelecer um isomorfismo entre espaços vectoriais de matrizes e o espaço vectorial de aplicações lineares o que lhe permitirá selecionar, na resolução de problemas, o espaço onde trabalhar tendo em atenção a especificidade do problema em causa.
Docentes: Maria Silva, Luís Maia, Sofia Fernandes.
Programa
1. Estruturas algébricas: grupos comutativos, aneis e corpos. Os corpos Z p, p primo.
2. Espaços vectoriais finitamente gerador. Subespaços vectoriais .
3. Sistemas de vectores equivalentes e dependência linear.
4. Teorema de Steinitz e suas consequências.
5. Aplicações lineares. Isomorfismos
6. Matrizes sobre um corpo. Espaços vectoriais de matrizes .Produto de Matrizes
7. Sistemas de Equações lineares: Estudo e resolução de equações vectoriais lineares. Representação de subespaços vectoriais através de sistemas de equações lineares
8. Determinantes: principais propriedades dos determinantes . Teorema de La Place
9. Valores e vectores próprios.
Objetivos
Conhecer a estrutura de espaço vectorial. Conhecer o conceito de aplicação linear e as suas propriedades. Saber operar em espaços de matrizes. Conhecer a teoria dos determinantes e aplicá-la na resolução de problemas.. Esta unidade curricular confere competências que permitem usar os conhecimentos adquiridos para definir a melhor estratégia na resolução de problemas. O estudante desenvolve competências de raciocínio analógico e dedutivo. Adquire capacidade para lidar com várias caracterizações de um conceito assim como competência para seleccionar a informação mais adequada em cada situação
-
Fundamentos de Física
Apresentação
Mecânica clássica, eletrostátíca e corrente contínua.
Docentes: Cristiane Ferreira, Alexander Mikovic, Cristina Guerra.
Programa
- Grandezas físicas, dimensões e sistemas de unidades.
- Referencial, posição e trajetória. Movimento unidimensional.
- Movimento no espaço. Projéteis e movimento circular.
- Leis de Newton. Tipos de forças, força gravitacional.
- Aplicações de Leis de Newton: plano inclinado, rodelas, mola oscilatória, pendulo.
- Trabalho. Forças conservativas e energia potencial.
- Conservação da energia mecânica.
- Centro de massa, impulso e momento linear. Colisões.
- Momento de uma força, momento de inércia e momento angular.
- Lei de Coulomb, campo elétrico.
- Potencial elétrico e capacitores.
- Corrente elétrica e resistência elétrica.
- Circuitos elétricos. Leis de Kirchhoff.
Objetivos
Compreensão do movimento dos corpos, ou seja, cinemática. Compreender as forças que atuam sobre os corpos e resolver as equações do movimento, ou seja, a dinâmica. Compreender o trabalho e a energia. Entendendo o campo elétrico e o potencial elétrico, ou seja, eletrostática. Compreender as correntes elétricas e resolver circuitos com correntes elétricas contínuas.
-
Matemática Discreta
Apresentação
Na UC de Matemática Discreta pretende-se contribuir para a aquisição de um conjunto de competências nos alunos: capacidade de assimilar informação e de a comunicar; capacidade de expressão escrita; capacidade de expressão oral e capacidade de raciocínio matemático. Para tal, serão estudados conceitos de lógica matemática, teoria de conjuntos e teoria de números.
Docentes: Maria Silva, Houda Harkat.
Programa
CP1. Cálculo proposicional e quantificadores
CP2. Provas
CP3. Teoria de conjuntos
CP4. Funções
CP5. Teoria de números
Objetivos
Os objetivos principais desta disciplina são:
OA1. Aplicar propriedades elementares das operações lógicas e de quantificação;
OA2. Construir argumentos matemáticos usando métodos de prova comum;
OA3. Explicar os conceitos básicos sobre conjuntos e funções e realizar operações elementares sobre estes objetos matemáticos;
OA4. Distinguir entre conjuntos numeráveis e conjuntos não numeráveis;
OA5. Entender a teoria dos números;
OA6. Contribuir para a aquisição de um conjunto de competências: capacidade de assimilar informação e de a comunicar; capacidade de expressão escrita; capacidade de expressão oral.
-
Matemática I
Apresentação
Esta disciplina abrange os métodos fundamentais de Cálculo associados a funções reais de variável real. É uma área transversal a todas as engenharias e demais cursos de cariz científico. Abrange os métodos clássicos de cálculo diferencial e Integral a uma dimensão.
Docentes: André Fonseca.
Programa
1. Lógica Matemática
- Designação e proposição. Valor lógico de uma proposição. Conjunção e disjunção de proposições. Conjunto, interseção e união de conjuntos.
2. Os números reais
- Números racionais e irracionais. Ordem e valor absoluto.
3. Funções reais de variável real:
- Generalidades sobre funções. Funções polinomiais e racionais. Funções trigonométricas. Função exponencial e logarítmica.
3. Limite:
- Definição e propriedades de limites de uma função. Continuidade de funções.
4. Derivada:
- Interpretação geométrica. Regras de derivação. Derivadas de ordem superior.
5. Estudo global de uma função:
- Monotonia e extremos relativos. Concavidade e pontos de inflexão. Assíntotas. Gráficos.
6. Integração:
- Primitiva imediata. Primitivação por substituição e por partes. Integral definido, teorema fundamental do cálculo. Aplicações da integração (áreas de figuras planas).
Objetivos
Esta disciplina confere a(o) aluna(o) conhecimentos que lhe permitam utilizar, de forma criativa, autónoma, e em contextos diversificados:
OA1: a linguagem simbólica matemática e o raciocínio matemático;
OA2: os conceitos e resultados fundamentais do cálculo diferencial, de modo a que possa proceder ao estudo de uma função real de variável real;
OA3: os métodos de primitivação:
OA4: as noções fundamentais do cálculo integral, de modo a que possa calcular integrais simples e determinar áreas de domínios planos.
-
Matemática II
Apresentação
Geométria analítica e calculo diferencial e integral para funções reais de várias variáveis reais.
Docentes: André Fonseca, Guilherme Antunes, Sofia Naique.
Programa
1. Vectores e geometria do espaço
1.1 Coordenadas cartesianas tridimensionais.
1.2 Vectores, produto escalar.
1.3 Rectas e planos.
1.4 Superfícies cilíndricas e quádricas.
1.5 Noções topologicas
2. Funções vectoriais de variável real
2.1 Funções vectoriais e curvas no espaço.
2.2 Limites e continuidade. Diferenciabilidade, vector tangente a uma curva.
2.3 Integração, comprimento de uma curva.
3. Funções de várias variáveis
3.1 Dominios e curvas de nível.
3.2 Limites e continuidade.
3.3 Derivadas parciais, derivadas de ordem superior.
3.4 Diferenciabilidade, planos tangentes e aproximações polinómiais.
3.5 Derivada direccional, vector gradiente e sua interpretação geométrica.
3.6 Matriz Hessiana, extremos locais e pontos de sela.
4. Integrais múltiplos
4.1 Integrais duplos.
4.2 Coordenadas polares e mudança de variáveis em integrais duplos.
4.3 Integrais triplos.
4.4 Coordenadas cilíndricas e esféricas. Mudança de variáveis em integrais triplos.
Objetivos
Conferir competências nas técnicas e aplicações do cálculo diferencial e integral com funções de várias variáveis. Dominar os conceitos de limite, continuidade e diferenciabilidade de funções. Dominar o cálculo de integrais múltiplos.
Ter capacidade de resolver problemas em contextos diversificados usando os métodos do cálculo diferencial e integral. Conhecer as aplicações a problemas de otimização, de caracterização geométrica de curvas e superfícies e de cálculo de volumes e áreas.
-
Probabilidades e Estatística
Apresentação
A disciplina de Probabilidades e Estatística tem como objetivo fundamental dar ao estudante conceitos fundamentais da teoria da probabilidade e técnicas de estatística descritiva e inferência estatística, essenciais para o estudo de Engenharia.
Docentes: Sofia Naique, Guilherme Antunes.
Programa
1. Estatística Descritiva:
- Tabelas de frequência;
- Representação Gráfica;
- Cálculo de medidas descritivas de localização e dispersão;
2. Regressão Linear:
- Estimar os parâmentros do modelo;
- Calcular e compreender o coeficiente de determinação;
3. Teoria das Probabilidades:
- Experiência aleatória: Espaço amostral; Acontecimentos;
- Álgebra de acontecimentos: Definição, Propriedades da Probabilidade; Axiomática Kolmogorov;
- Probabilidade Condicionada: Independência; Teorema de Bayes;
4. Variáveis aleatórias discretas e continuas:
- Função de probabilidade, Função densidade de probabilidade e Função distribuição;
- Parâmetros de variáveis aleatórias: Valor esperado, Variância e Desvio padrão;
5. Distribuições discretas: Bernoulli, Binomial e Poisson;
6. Distribuições contínuas: Normal e Exponencial;
7. Inferência Estatística:
- Amostra e Amostra Aleatória. Média amostral;
8. Estimação:
- Intervalos de Confiança para Valor Esperado;
- Testes de Hipóteses para Valor Esperado.
Objetivos
Pretende-se que o estudante:
- Seja capaz de organizar dados estatístios e realizar análises de estatística descritiva e compreenda as principais medidas estatístcias de localização e dispersão;
- Compreenda os aspetos teóricos essenciais dos modelos de regressão linear.
- Compreenda os conceitos fundamentais da teoria das probabilidades e saiba calcular as probabilidades associadas ao fenómeno em estudo;
- Seja capaz de caracterizar variáveis aleatórias e identificar as respectivas distribuições de probabilidade;
- Seja capaz de aplicar técnicas adequadas de estimação pontual e intervalar para inferir sobre as características de uma população com base numa amostra e analisar os resultados obtidos;
- Compreenda os procedimentos gerais para aplicação de um teste de hipóteses;
- Compreenda a disciplina de Probalidades e Estatística como uma área da ciência que permite recolher e analisar dados, formular hipóteses relativas a esses dados e testar essas hipóteses.
-
Álgebra Linear
-
Arqs – Arquiteturas e Sistemas Operativos
-
Arquitetura de Computadores
Apresentação
Esta unidade curricular (UC) introduz conceitos de circuitos lógicos combinatórios e sequenciais. Os alunos aprendem a construir uma máquina sequencial e posteriormente um microprocessador. Como transformar uma operação numa instrução que possa ser interpretada e executada por um processador é um dos objetivos principais desta UC.
Docentes: Daniel Fernandes, Paulo Guedes, Ricardo Santos, Sérgio Ferreira.
Programa
Aulas Teóricas
- Circuitos digitais MSI: Portas Lógicas, registos, contadores, memórias, multiplexers e descodificadores. Simulação.
- Arquitetura de um Microprocessador (CPU) genérico.
- Componentes básicos: ALU, Registos e Barramentos.
- Instruções e Microinstruções
- Memórias de Programa e Dados.
- Fluxo de informação num CPU: Operações Fetch e Execution
- Estudo de um Microcontrolador comercial de baixo custo.
- Ambiente de desenvolvimento, programação, simulação e teste.
Aulas Práticas
- Componentes digitais típicos
- Simulação de componentes básicos da arquitetura interna de um CPU genérico
- Projeto simples com um microcontrolador comercial económico
Objetivos
Entender o funcionamento dos computadores, de uma perspetiva microscópica até uma perspetiva macroscópica. Reconhecimento das potencialidades e limitações de um computador. Entendimento da forma como interagem os diversos elementos da estrutura/arquitetura de um computador.
-
Arquiteturas Avançadas de Computadores
Apresentação
Esta unidade curricular vem completar os conhecimentos adquiridos anteriormente nas UCs de Sistemas Digitais e Arquitectura de Computadores, abordando temas mais actuais e conceitos de mais alto nível. A compreensão destes conceitos avançados de arquitectura de computadores faz com que os alunos tomem consciencia das limitações e possibilidades do hardware. Consequentemente poderão criar programas mais eficientes, capazes de tirar partido das capacidades do hardware e que tenham em conta as eventuais limitações deste.
Docentes: Pedro Serra, Daniel Fernandes, Wellington Oliveira.
Programa
1. Introdução
2. O processador
Principais módulos funcionais
Condutas e riscos
Exceções
Paralelismo ao nível da instrução
3. Hierarquia de memória
Dispositivos e tecnologia de armazenamento: disco magnético, memória flash
Memórias cache
Memória virtual
Confiabilidade na hierarquia de memória
Paralelismo: coerência entre caches, RAID
4. Arquiteturas paralelas
Limites de frequência, dissipação de energia e memória
Paralelismo e limites ao aumento de desempenho
SIMD e processadores vetoriais
Multithreading em hardware
Arquiteturas de multiprocessador¿ aglomerados e computação em grelha.
GPUs
Medição de desempenho
5. Virtualização
Origens e definição do conceito de máquina virtual
Conceito de hipervisor
Variantes de implementação
Virtualização de sistema: processador, memória, periféricos (E/S)
Exemplos de plataformasObjetivos
Os estudantes devem conhecer os componentes de um computador moderno e compreender o seu funcionamento e as suas interações. Devem ser capazes de identificar o fluxo de dados e analizar o desempenho de um computador.
Esta competência é diretamente aplicável nos domínios do hardware e da administração de sistemas, e indiretamente aplicável no domínio do software – permitindo formar futuros engenheiros informáticos que tomem decisões de análise, desenho e implementação de software que tirem partido das capacidades do hardware e tenham em conta as eventuais limitações destas.
-
Computação Distribuída
Apresentação
Disciplina focada na construção de aplicações distribuídas, onde se abordam os principais aspetos teóricos e práticos necessários para a construção dessas aplicações.
Docentes: Paulo Guedes, Sérgio Nunes.
Programa
1. Introdução. Caracterização, requisitos, arquitectura e funcionalidades
2. Arquitecturas e Modelos de Comunicação Distribuída. Arquitecturas de sistemas, níveis de software
3. Comunicação entre Processos Distribuídos (IPC). Características da comunicação entre processos, Invocação, parâmetros e heterogeneidade de dados
4. Invocação Remota e Objectos Distribuídos. RPC: Modelo de execução. Linguagem de definição de interfaces (IDL). Plataformas de execução: Sun RPC, Java RMI
5. Nomeação e Serviços de Directório. Tipos de Nomes. Espaços de nomeação. Serviços de Directório (Web, X.500, LDAP)
6. Web Services (WS). Modelo de Execução Web Services (WS). O protocolo SOAP. Linguagens de definição de Serviços (WSDL)
7. Segurança. Modelo de segurança. Autenticação. Controlo de acesso
8. Sistemas de Ficheiros Distribuídos. Arquitecturas de SGF distribuídos. Implementações: NFS e AFS
9. Transações. Modelo transaccional. Propriedades ACID das transacções. Transacções distribuídas. Protocolo 2-phase-commitObjetivos
Esta unidade curricular tem por objectivo abordar os principais modelos de computação distribuída, começando pelas técnicas fundamentais, apresentando de seguida as tecnologias associadas à invocação remota de objectos e arquitecturas orientadas aos serviços e terminando com os fundamentos de segurança e transações distribuídas.
-
Sistemas Digitais
Apresentação
Esta unidade curricular visa apresentar aos estudantes os conceitos básicos conducentes à compreensão de Unidades Curriculares mais avançadas, nomeadamente no domínio da arquitetura de computadores. Tem ainda como objetivo potenciar o desenvolvimento do racíonio lógico.
Docentes: João P. Carvalho, Carlos Fernandes, Daniel Fernandes, Sérgio Ferreira.
Programa
1. Códigos numéricos e Sistemas de Numeração (5%) Circuitos Lógicos Básicos (5%)
2. Álgebra de Boole (10%)
3. Funções Lógicas (10%)
4. Circuitos Combinatórios Básicos( 15%)
5. Circuitos Digitais com Memória (25%)
6. Síntese de Circuitos Sequênciais Elementares (25%)Objetivos
Os conteúdos programáticos são adequados aos objectivos da disciplina tendo em conta a actualidade e o processo de Bolonha tendo uma forte componente prática laboratorial. A matéria das aulas teóricas está devidamente actualizada e adaptada ao perfil dos alunos para o 1º ano do Curso de Engenharia segundo o protocolo de Bolonha.
O responsável pela disciplina tem vindo a fazer evoluir os conteúdos programáticos ao longo dos anos em face da experiência profissional e académica próprias, tendo sempre presente o conteúdo programático das escolas de referência para as matérias leccionadas.
-
Sistemas Operativos
Apresentação
O objectivo desta UC é o de apresentar os princípios fundamentais dos Sistemas Operativos, de forma a permitir uma compreensão detalhada da sua arquitectura e funcionamento, dando aos alunos os conhecimentos e capacidades para utilizar, configurar e optimizar este componente fundamental dos sistemas informáticos.
Docentes: João Craveiro, Daniel M. Silveira, João Madeira.
Programa
- Introdução a Sistemas Operativos
- Processos
- Threads e concorrência
- Escalonamento do CPU
- Sincronização de processos
- Deadlocks
- Gestão de Memória
- Gestão de armazenamento em massa
- Sistema de ficheiros
- Virtualizacao
Objetivos
No final da cadeira, os alunos deverão:
- Conhecer os princípios dos Sistemas Operativos actuais e identificar os vários componentes que o constituem.
- Conhecer os algoritmos fundamentais em que assentam os principais componentes de um Sistema Operativo assim como as suas optimizações mais atuais.
- Programar exemplos ilustrativos de alguns algoritmos mais representativos (escalonador, sistema de ficheiros, etc..)
- Tirar partido da utilização directa das interfaces sistema para o desenvolvimento e optimização de aplicações complexas.
-
Arquitetura de Computadores
-
Redes – Redes e Telecomunicações
-
Redes de Computadores
Apresentação
Esta UC em Redes de Computadores faz um curso introdutório à rede de computadores Internet. Tem como objectivo apresentar todas as camadas de que é constituida a Internet (Inter-Networks), i.e. Camada de Aplicação, Camada de Transporte, Camada de Rede e Camada de Ligação/Fisica.
A abordagem ao Conteudos Programáticos é feita de uma forma Top-Down, i.e. começando com uma introdução de todas a camadas seguida por cada uma em detalhe começando pela camada de Aplicação.
Existe uma componente prática nesta UC, do qual são demostrados e treinados os conceitos introduzidos na componente teórica.
Esta Unidade Curricular complementa e integra-se assim, ao presente ciclo de estudos oferecendo uma componente disciplinar de Redes de Computadores e sua evoluc¿a¿o.
Docentes: João Craveiro, Brena Lima, Houda Harkat.
Programa
CP1: Introdução
- O que é a Internet?
- Elementos
- Convenções
- Serviços
- Protocolos
- The Network Edge (Periferia da Network)
- The Network Core (Malha interna)
- Circuit Switching (Comutação de Circuitos)
- Packet Switching (Comutação de Pacotes)
- Topologias e Redes de Acesso
- Niveis de Protocolos e Modelos de Serviço
CP2: Camada de Aplicação
- Evolução de Aplicações de Internet
- DNS (Domain Name System)
- HTTP (HyperText Transfer Protocol)
- Web proxies and caching
- Sistemas Distribuidos
- Peer-to-peer (BitTorrent)
- Aplicações Real-time (VoIP)
CP3: Camada de Transporte
- Service models
- User Datagram Protocol (UDP)
- Connections (TCP)
- Sliding Window (TCP)
- Flow control (TCP)
- Retransmission timers (TCP)
- Congestion control (TCP)
CP4: Camada de Rede
- Network service models
- IP (Internet Protocol)
- NAT, a ¿middlebox¿
- Routing algorithms
CP5: Camada Data Link
- Framing
- Error detection and correction
- Retransmissions
- Multiple Access
- Switching
Objetivos
OA1: Saber que o que é uma rede a nível geral. E que a Internet é uma rede de redes ou inter-network. Gerir uma rede de redes que partilha dados sem gestão centralizada envolve em termos de gestão e de operação vários desafios.
OA2: Adquirir conhecimentos teóricos e práticos dos diversos protocolos envolvidos em cada camada (layer) de operação. Na Camada de Aplicação, tais como HTTP 1.0 e 1.1, DNS, etc. Na camada de Transporte, protocolos como o UDP e TCP e suas variantes. Na camada de Rede o protocolo IP, etc. E na camada de data link, saber o que é uma comutação por circuitos e por pacotes.
OA3: Ganhar a aptidão teórica e prática de uma comunicação Cliente-Servidor.
-
Segurança Informática
Apresentação
A presente unidade curricular tem por objectivo formar estudantes com perfis profissionais especializados, capazes de lidar eficazmente com a complexidade crescente das ameaças à segurança das aplicações em rede e na nuvem, utilizando as mais avançadas tecnologias da segurança informática, para implementar elevados padrões de segurança em redes informáticas
Docentes: Sérgio Nunes.
Programa
¿Introdução à Segurança Informática ¿Conceitos fundamentais de Segurança Informática ¿Paradigmas de Segurança ¿Criptografia ¿Algoritmos de segurança ¿Autenticação e autorização ¿Gestão de chaves ¿Segurança de Redes ¿Firewalls ¿IDS/IPS ¿Redes sem fios ¿Arquitecturas de Segurança ¿Protocolos de comunicação segura ¿Tipificação de vulnerabilidades e ataques ¿Segurança de Software ¿Políticas e gestão de segurança
Objetivos
No final da cadeira, os estudantes deverão: Identificar os diferentes domínios e aplicações da segurança informática. Perceber e utilizar os principais algoritmos de encriptação, assim como quantificar os níveis de segurança que permitem assegurar. Conhecer e perceber as actuais ameaças à segurança em redes de dados e as boas práticas necessárias para as evitar. Conceber e implementar aplicações em rede obedecendo a elevados requisitos de segurança mesmo utilizando canais de comunicação inseguros Utilizar os conceitos adquiridos em cenários reais, no contexto do projecto / estágio profissional a realizar no ano lectivo.
-
Redes de Computadores
-
Progr – Programação e Engenharia de SW
-
Algoritmia e Estruturas de Dados
Apresentação
Esta UC surge no 2º semestre do 1º ano, na continuação do trabalho iniciado em Fundamentos de Programação (FP). Em FP, os alunos deram os primeiros passos na programação e preocuparam-se principalmente em produzir programas correctos. Agora, em Algoritmia e Estruturas de Dados, irão continuar a produzir programas correctos mas com preocupações de desempenho, a nível de tempo de execução e consumo de memória.
Esta é uma UC fundamental no currículo de um Engenheiro Informático, que na sua vida profissional encontrará inúmeras situações em que terá que resolver problemas causados por fraco desempenho das aplicações e que exigem um conhecimento sólido dos princípios subjacentes aos principais algoritmos e estruturas de dados.
Não obstante a aprendizagem de conceitos e técnicas de algoritmia e estruturas de dados, os alunos trabalham outras competências fundamentais. Nomeadamente, o espírito crítico e a capacidade de avaliar várias alternativas para resolver os problemas.
Docentes: Pedro Alves, Bruno Cipriano, Duarte Neves, Miguel Tavares, Rodrigo Correia.
Programa
- funções recursivas, algoritmos recursivos
- tipos de dados complexos
- eficiência e optimização (algorítmica e não-algorítmica)
- complexidade de algoritmos
- algoritmos de pesquisa
- algoritmos de ordenação – bubble sort, selection sort, merge sort, quick sort
- tipos de dados abstractos – pilhas e filas
- listas ligadas
- árvores binárias, árvores ordenadas, árvores AVL
- hashtables
Objetivos
O objectivo desta unidade curricular é introduzir os conceitos fundamentais de algoritmos e das estruturas de dados básicas, numa perspetiva de resolver problemas complexos de uma forma eficiente. O aluno deverá ser capaz de analisar e avaliar a eficiência de um algoritmo sem necessidade de o implementar ou testar. Deverá ser igualmente capaz de aplicar a estrutura de dados mais eficaz e eficiente para resolver um determinado problema.
Concretamente, o aluno deverá conseguir criar programas em Java cuja eficiência seja um critério significativo de sucesso (ex: pesquisa, ordenação).
-
Computação Móvel
Apresentação
Esta UC é cada vez mais fundamental numa sociedade onde o número de smartphones já ultrapassa largamente o número de computadores e onde se prevê que, num futuro próximo, cada indivíduo se faça acompanhar de um conjunto de dispositivos móveis (smartwatches, smart glasses, sensores, etc.) programáveis, criando a oportunidade para que os engenheiros informáticos possam resolver um vasto conjunto de problemas cuja resolução era até agora impossível ou excessivamente dispendiosa.
A dificuldade está em passar conhecimento que não se esgote no dia em que terminam a UC, dada a velocidade vertiginosa a que evoluem as tecnologias associadas à computação móvel. Nesse sentido, esta UC não pretende apenas ensinar a programar Android mas sim abordar temas intemporais desta área como os vários Modelos de Desenvolvmento, Autonomia, Geo-localização, Conectividade ou Usabilidade.
Docentes: Pedro Alves, Miguel Tavares, Wellington Oliveira.
Programa
- Computação Móvel / Sistemas Ubíquos / IoT
- Arquitetura e desenvolvimento de aplicações móveis (Web, Híbridas, Nativas) – Usabilidade e Interação
- Conectividade
- Geo-localização
- Autonomia
- Sensores
- Integração com serviços externos
- Modelos de negócio
- Dispositivos emergentes: smartwatches, dispositivos activados por voz
Objetivos
O objectivo desta unidade curricular é introduzir os conceitos fundamentais da computação móvel. O aluno deverá ser capaz de perceber como tirar o máximo partido das vantagens da computação móvel (localização, sensores, contextual), quando aplicados à resolução de problema concretos. O aluno deverá estar sensibilizado para os constrangimentos típicos de uma aplicação móvel (autonomia, conectividade, usabilidade) e conhecer os mecanismos que permitem ultrapassar esses constrangimentos.
Concretamente, o aluno deverá conhecer os 4 modelos de desenvolvimento de aplicações móveis (Web, Híbrido-Web, Híbrido-Nativo e Nativo) e saber aplicar os conceitos utilizando pelo menos 2 destes modelos – nomeadamente Híbrido-Nativo (Flutter) e Nativo (Android Kotlin).
-
Engenharia de Software
Apresentação
A Engenharia de Software ensina o desenho, escrita de código e testes, e manutenção de programas que têm um propósito de resolver problemas complexos com soluções eficientes e seguras. Todas as unidades curriculares anteriores tem um maior foco na sintaxe e técnicas de programação enquanto nesta unidade curricular os alunos aprendem as técnicas de de desenhar e desenvolver software de uma forma eficiente, legível, modular e escalável.
Esta unidade curricular é essencial para desenvolver as capacidades de desenho e programação que os alunos vão enfrentar no mercado de trabalho.
Docentes: José Cascais Brás, Pedro Perdigão, Rui Santos.
Programa
- CP1. Introdução à Engenharia de Software;
- CP2. Modelos e processos desenvolvimento de software;
- Modelos Clássicos: Cascata (contexto histórico)
- Modelos Ágeis: Agile (framework de Scrum)
- CP3. Modelação de sistemas;
- Análise de requisitos
- Diagrama de domínio
- Diagrama de conceitos
- Casos de uso
- CP4. Desenho da arquitectura;
- Análise
- Desenho
- Avaliação
- Evolução
- CP5. Desenho e implementação;
- Padrões UML
- Princípios de desenvolvimento orientado a objectos: S.O.L.I.D, KISS, entre outros.
- CP6. Verificação e validação;
- Conhecer os diferentes tipos de testes
- Aplicação de testes unitários
- CP7. Segurança e Confiabilidade
- CP8. Integração Contínua
- Vantagens
- Ferramentas e tecnologias
Objetivos
OA1. Compreender os métodos, técnicas e ferramentas para o completo desenvolvimento de um sistema de software, desde a sua conceção até à sua entrega e manutenção.
OA2. Saber planear, gerir, avaliar e garantir a qualidade do desenvolvimento de projetos de software utilizando os princípios da Engenharia de Software.
-
Fundamentos de Programação
Apresentação
Esta é uma disciplina fundamental na formação de qualquer profissional da área de Informática pois introduz os conceitos básicos da programação, sobre os quais assentarão muitas disciplinas subsequentes como Linguagens de Programação I e II, Algoritmia e Estruturas de Dados, Programação Web, Computação Móvel, etc. Mais do que aprender uma linguagem de programação, o aluno aprende a pensar como um programador, analisando problemas e desenhando algoritmos que os resolvam recorrendo a fluxogramas e a programas escritos em Kotlin, uma linguagem promissora que combina as melhores características das linguagens modernas mais populares (Java, Python, etc.)
Dado ser o primeiro contacto de muitos alunos com o tópico da Programação, reveste-se de uma importância especial na aquisição de conhecimentos primordiais mas também na sua motivação. Mais do que aprender a programar, os alunos aprendem a gostar de programar.
Docentes: Pedro Alves, Brena Lima, Bruno Saraiva, Lucio Studer, Rodrigo Correia, Wellington Oliveira.
Programa
- Introdução à programação
- Algoritmos, fluxogramas, pseudo-código
- Sintaxe e semântica das linguagens
- Elementos da sintaxe, estrutura de um programa
- Declarações e atribuições
- Tipos primitivos
- Expressões aritméticas, expressões lógicas
- Entradas e saídas de dados
- Selecção
- Repetição
- Funções
- Arrays uni-dimensionais e bi-dimensionais
- Tratamento de erros
- Leitura e escrita de ficheiros
- Boas práticas de programação imperativa
Objetivos
O objectivo desta unidade curricular é fornecer aos futuros profissionais na área da informática as bases para que possam iniciar (de um modo disciplinado) a actividade de programação.
O aluno começa por desenvolver a capacidade de raciocínio algorítmico recorrendo a fluxogramas.
O aluno deverá ser capaz de traduzir esses fluxogramas numa linguagem de programação imperativa. Concretamente, o aluno deverá conhecer a sintaxe básica de Kotlin que lhe permitam criar programas simples de linha de comando.
Finalmente, o aluno deve conseguir analisar e avaliar programas feitos por outras pessoas (colegas, professores, etc.).
-
Linguagens de Programação I
Apresentação
Esta unidade curricular oferece uma extensa exploração da programação procedural usando a linguagem de programação C, abrangendo tópicos fundamentais e avançados. Os alunos obterão uma compreensão abrangente da história da programação C e dos seus benefícios, bem como aprenderão a criar e executar programas simples em C. O currículo concentra-se em conceitos essenciais, incluindo tipos de dados, variáveis, estruturas de controlo, funções e ponteiros, com oportunidades de experiência prática para reforçar o conhecimento. A unidade curricular também aborda tópicos avançados, como manipulação de ficheiros, alocação dinâmica de memória e estruturas de dados como listas e filas. Através de projetos de programação, os alunos desenvolverão experiência prática, com ênfase particular em obter uma compreensão completa da organização e operação da memória do computador como um recurso. No final do curso, os alunos serão capazes de criar programas eficientes que fazem uso eficaz da memória.
Docentes: Pedro Serra, Daniel M. Silveira, Thiago Gustavo, Wellington Oliveira.
Programa
M0: Introdução: Visão geral, programação C, história, benefícios, configuração do ambiente, programa simples
M1: Sintaxe Básica: Definições, tipos de dados, operadores, entrada/saída, estruturas de controlo
M2: Estruturas de controle avançadas: Switch, break/continue, goto
M3: Funções: definição/invocação, argumentos/valores de retorno, recursão
M4: Matrizes e Strings: Definições, vectores de caracteres, strings, funções, matrizes 2D
M5: Ponteiros: Definições, aritmética, pilha/heap, alocação dinâmica de memória
M6: Ponteiros Avançados: Ponteiros para ponteiros/funções
M7: Estruturas e Uniões: Definições, estruturas aninhadas, uniões
M8: Entrada/saída de arquivo: visão geral, abertura/leitura/gravação de ficheiros, entrada/saída binária
M9: Diretivas e Macros do Pré-processador: Definições, #define, #ifdef, #undef, macros com parâmetros
M10: Operadores bit a bit: Definições, operadores bit a bit AND/OR/XOR/NOT/shift
M11: Listas Ligadas: Definições, criação/manipulação, exemplos, pilhas/filasObjetivos
No final desta Unidade Curricular, os alunos deverão ser capazes de criar programas C eficientes e rápidos, tendo em consideração o uso correto da memória. Deverão adquirir uma compreensão sólida da abstração procedural e ser capazes de analisar e criar algoritmos simples usando essa abordagem. Além disso, os alunos devem entender os princípios por trás dos sistemas "coletores de lixo" em linguagens de alto nível, e da operação de bibliotecas de estruturas de dados. O curso visa fornecer aos alunos conhecimentos necessários para criar programas em C bem projetados, eficientes e robustos e para entender os princípios fundamentais que sustentam a operação das linguagens de programação modernas.
-
Linguagens de Programação II
Apresentação
Esta UC é o culminar de um caminho iniciado em Fundamentos de Programação e aprofundado em Algoritmia e Estruturas de Dados, solidificando os conhecimentos de programação. Com um foco no desenvolvimento e manutenção de programas de elevada complexidade, o paradigma imperativo deixa de ser suficiente e são abordados os paradigmas orientado a objectos e funcional. São igualmente abordados conceitos adjacentes à fase de implementação, como o controlo de versões, os testes unitários e funcionais, a cobertura de código e outras métricas de qualidade. Esta é uma UC fundamental na formação de qualquer profissional da área de Informática, pois fornece um conjunto de conhecimentos e ferramentas que serão essenciais nos projectos empresariais em que estes alunos virão a estar inseridos.
Docentes: Pedro Alves, Bruno Cipriano, Duarte Neves.
Programa
- Paradigmas de programação
- Imperativo, funcional, orientado a objetos
- Conceitos de programação por objectos
- Entidades, Atributos, Acções
- Classe vs Objecto, Principio do encapsulamento
- Herança, polimorfismo, parametrização por herança, composição
- UML
- Diagramas de classes
- Java orientado a objectos
- Classes, objectos, variáveis
- Construtores, métodos
- Visibilidade, Exceptions
- Estruturas de dados: Arrays, Lists, Maps
- Herança, classes abstractas
- Input/Output
- Testes unitários
- JUnit
- Controlo de versões
- Git, Github
- Padrões de desenho
- Factory, Singleton, Observer/Observable, Composite
- Conceitos de programação funcional em Kotlin
- Funções puras, lambdas, funções de primeira ordem, iteração interna, operações com listas
- Boas práticas de programação multi-paradigma
Objetivos
Esta UC tem como objetivo apresentar uma visão multi-paradigma da programação. São analisados e comparados os 3 paradigmas mais populares: imperativo, orientado a objectos e funcional. Os alunos revêm conceitos da programação imperativa e adquirem conceitos fundamentais da programação orientada a objetos (herança, encapsulamento, polimorfismo, etc.) e da programação funcional (lambdas, funções de 1a ordem, etc.) de forma a que consigam aplicá-los em projetos de desenvolvimento de software complexo usando linguagens de programação modernas multi-paradigma (Java, C#, Python, Kotlin, JavaScript).
Ao longo do semestre, os alunos são consciencializados para a necessidade de redução de custos de manutenção através de melhorias na qualidade do software produzido e aplicação de boas práticas tirando partido das vantagens específicas de cada paradigma. São igualmente expostos a ferramentas essenciais no desenvolvimento moderno de software, como controlo de versões e testes unitários.Todos estes conceitos são aplicados num projeto de elevada complexidade, multi-paradigma e multi-linguagem que atinge em média as 2500 LOC. O projeto tem que ser desenvolvido em Git e ter uma cobertura elevada de testes unitários. Mais do que as capacidades técnicas, os alunos trabalham a gestão de tempo, o rigor e a resiliência, a capacidade analítica e espírito crítico, a criatividade e o trabalho em equipa.
- Paradigmas de programação
-
Programação Web
Apresentação
Esta Unidade Curricular pretende dar formação na área da programação Web em geral, e em particular no desenvolvimento de aplicações Web back-end e front-end, providenciando uma visão global do desenvolvimento moderno para a Web. No front-end, são introduzidos conceitos de estruturação, estilização e interação de conteúdos através das linguagens HTML, CSS e JavaScript, in. No back-end, é ensinado o desenvolvimento de aplicações empresariais seguindo o padrão de desenho model-view-control, recorrendo à linguagem Python e a Web framework django. Pretende-se estimular a criatividade e imaginação no desenvolvimento de aplicações inovadoras que sejam eficientes, escaláveis e fáceis de modificar por um lado, e que ofereçam uma boa experiência para o utilizador. Esta é uma UC fundamental para qualquer profissional da área da informática, pois fornece um conjunto de conhecimentos e ferramentas que serão essenciais em projetos empresariais em que virão a estar inseridos.
Docentes: Lucio Studer, Pedro Perdigão, Rui Santos.
Programa
A Web e seus paradigmas
– Funcionamento da Internet e da Web: arquitetura e protocolos IP e HTTP
– Tecnologias, paradigmas e padrões de desenho da WebHTML e CSS para desenho de páginas Web
– HTML e seus elementos
– Formulários para envio de dados
– HTML5 e elementos semânticos
– CSS e seus seletores, para estilização de conteúdos
– Propriedades CSS
– Design responsivo e layouts dinâmicos
– Efeitos e animações CSS
– BootstrapJavaScript para programação Front-end
– Programação Orientada a Eventos
– Manipulação do DOM
– JSON e APIs
– Single Page ApplicationsPython para desenvolvimento Web
– Sintaxe, operadores, controlo de fluxos e tipos de dados
– Funções e módulos
– Gestão de ficheiros e pastas
– ClassesDjango web framework para Back-end
– Web frameworks
– Arquitetura MVT
– Urls, views e templates
– Linguagem template
– Modelação de base de dados, ORM
– Formulários
– Autenticação
– Implantação na cloudObjetivos
- Entender o funcionamento da Internet e da Web.
- Compreender os princípios da programação Web e seus principais padrões de desenho.
- Aplicar estes conceitos, usando várias tecnologias (HTML, CSS, JavaScript, Python and Django¿).
- Arquitetar aplicações eficientes, de fácil manutenção, que corram na Web.
- Avaliar as diferentes estratégias de desenho, sabendo escolher a abordagem que mais se adequa ao contexto.
- Ser capaz de construir e implantar na cloud aplicações Web complexas e criativas, totalmente funcionais (full stack).
-
Sistemas de Informação na Nuvem
Apresentação
Esta Unidade Curricular tem como objetivo uma introdução à computação em nuvem, numa perspectiva de um iniciante que não possui nenhuma experiência anterior com o tópico.
A ideia é ajudar a criar Junior Cloud Architects, o que significa crias as competências para implementar ou adotar a tecnologia Cloud, entender o que é exatamente e quais opções existem quando se pensa em implantações em nuvem.
Esta UC abrange uma ampla variedade de áreas de tópicos de computação em nuvem, fornecendo uma base sólida de entendimento. Esta unidade curricular cria também um ambiente de entendimento da teoria e das formas práticas dos diferentes modelos de serviços de Cloud Computing: Infraestrutura como Serviço (IaaS), Plataforma como Serviço (PaaS) e Software como Serviço (SaaS), fornecendo exemplos e diferenças entre cada .
Docentes: Rui Ribeiro, Luis A. Gomes, Rui Santos.
Programa
Aulas teóricas:
- Visão geral: história, mercado, tendências
- Revisão de arquiteturas distribuídas: SOA, orientado a eventos Componentes e Serviços
- O que é uma nuvem? Privado, público, híbrido
- Tecnologias, modelos de negócios, principais fornecedores de serviços nacionais e internacionais
- IaaS
- BaaS
- PaaS
- SaaS
- outras
Agenda Prática:
- 1º Trabalho – IaaS e PaaS
- AWS EC2 – Implante e execute o servidor ubuntu
- Docker PaaS – AWS Beanstalk
- Heroku – implantação de 2 aplicativos, cada um por serviço
- 2º Trabalho – SaaS e BaaS
- Trello Board
- AWS BaaS
- Firebase (armazenar dados e média)
Cada trabalho tem um planeamento prático de 6 aulas
Objetivos
- Entenda por que as empresas estão migrando para serviços em nuvem para apoiar seus negócios
- Quais são os modelos de negócios
- Quais são os principais provedores de serviços
- Principais conceitos da arquitetura em nuvem
- Recursos práticos para criar e implantar um serviço em nuvem
-
Algoritmia e Estruturas de Dados
-
SI – Sistemas de Informação
-
Bases de Dados
Apresentação
Esta unidade curricular tem por objetivo apresentar a importância da Gestão de Dados no seio de uma empresa, de forma a garantir quer a operação diária de negócio, bem como o apoio à decisão estratégica.
Nesta unidade reforçar-se-á o enquadramento de estruturação e metodologias de criação das bases de dados.
Docentes: Rui Ribeiro, João Caldeira, Luis A. Gomes.
Programa
O programa da unidade curricular é:
A) Componente Teórico- Introdução
- Modelo de relacionamento entre entidades
- O modelo relacional
- Refinamento de esquema: Conceito de normalização e transações
- Arquitetura de SGBD e algum SQL Avançado
B) Componente Prática
- Introdução à linguagem SQL;
- Instruções: DDL, DML (DQL) e DCL
- Operações: WHERE, ORDER BY, GROUP BY;
- Conceito avançados em SQL: Controlo de erros
- Operadores Relacionais: União, intersecção e Subtracção
- Produto Cartesiano (externo)
- Queries complexos (filtro com valores agregados) e sub-queries
- Set DDL; Instrução CREATE; Tipos de dados; Nulidade; Instruções ALTER e DROP
- INDICES e VIEWS
- Controlo de erros: estrutura TRY¿CATCH
- Procedimentos (SP) e Triggers
- Operações com tabelas: Cursores
Objetivos
São objetivos dotar os estudantes dos conhecimentos teóricos e práticos necessários à concepção, construção e análise de bases de dados relacionais: nomeadamente obter as seguintes aptidões e
competências:
1. Compreender as razões de implementação de bases de dados relacionais no mundo empresarial
2. Transpor de uma análise de requisitos para um modelo entidade-associação para desenhar bases de dados;
3. Aplicar os conceitos do modelo relacional de bases de dados, transformando o modelo entidade-associação, em modelo físico de dados;
4. Aplicar as técnicas de normalização de tabelas;
5. Compreender arquitetura e principais componentes de Sistemas de Gestão de Bases de Dados;
6. Utilizar a linguagem SQL base e avançado para a criação, consulta e modificação de bases de dados;
-
Engenharia de Requisitos e Testes
Apresentação
A UC de Análise e Conceção de Sistemas tem por objetivo garantir um enquadramento de gestão de Sistemas de Informação e o seu impacto na componente aplicacional, onde a componente de metodologia e engenharia de requisitos, tal como a metodologia e estruturação de testes de software, sejam unitários ou agregados, são essenciais para o sucesso de negócio das empresas.
Docentes: Rui Ribeiro, José Cascais Brás, Luis A. Gomes.
Programa
Estrutura de Capítulos principais de conteúdos
-
Visão de Gerenciamento de Sistemas de Informação
-
Engenharia de Requisitos (Gestão de backlog, BPMN e UML – Modelação)
-
Testes de software
-
Gestão de Projetos
Objetivos
- Entender o que é Gestão de Sistemas de Informação
- Por que é fundamental definir requisitos
- Saber desenvolver e gerenciar uma metodologia de definição e estrutura de requisitos
- Como alinhar os testes com os requisitos
- Compreender a importância de modelar os requisitos e testes
- Fundamentos de Gestão de Projetos
-
-
Bases de Dados
-
IHM – Interação Humano-Máquina
-
Interação Humano-Máquina
Apresentação
A disciplina Interação Humano-Máquina tem por principal objetivo dotar os estudantes de competências metodológicas, de design, de comunicação e de fatores humanos, que lhes permitam desenhar produtos e serviços com as pessoas e para as pessoas. Num mundo cada vez mais digital, a inclusão de todas as pessoas/cidadãos é cada vez mais necessária. A Humanização da Tecnologia é mais do que uma boa experiência do Utilizador. Na prática e, aplicando os conhecimentos teóricos a projetos, os estudantes deverão ser capazes de criar artefactos (em tecnologias de informação) que melhorem a forma como as pessoas trabalham, comunicam e interagem numa sociedade inclusiva.
Docentes: Conceição Costa, Miguel Tavares.
Programa
O que é o Desenho de Interação? Compreender e conceptualizar a interação. O impacto da Teoria da Actividade. Desenhar com a acessibilidade em mente. Princípios para inclusão. Os contributos da psicologia cognitiva no estudo da interação humano-máquina. Perceção humana e funções cognitivas que influenciam o desempenho do utilizador e a satisfação. Desenvolvimento e Avaliação de Protótipos iniciais. Tipos de estudos em user experience, ao longo do ciclo de vida do projeto. Análise crítica aos resultados do estudo para melhorias no protótipo.
Objetivos
-
Adquirir competências em Desenho de Interação e Desenho Inclusivo.
-
Compreender como a perceção humana e funções cognitivas influenciam a interação entre o humano e o computador. Compreender que a diferentes interações correspondem diferentes interfaces utilizador.
-
Compreender o impacto dos públicos heterogéneos e dos fatores culturais no desenho de aplicações
-
Aprender metodologias de projeto que facilitem o desenho de experiências satisfatórias para o utilizador;
-
Criar protótipos de alta fidelidade e recolher feed-back junto do Público-Alvo;
-
Aprender a planear, desenhar e realizar estudos de avaliação da usabilidade ao longo do ciclo de desenvolvimento de software. Saber tratar e analisar dados, bem como apresentar resultados de forma sucinta.
-
Aplicar as competências adquiridas ao desenvolvimento de sistemas de informação e ao projeto transversal de IHM e Computação Móvel.
-
-
Interação Humano-Máquina
-
IA – Dados e Inteligência Artificial
-
Data Science
Apresentação
Esta disciplina oferece uma visão aprofundada do campo da Ciência de Dados, ensinando princípios e métodos fundamentais de análise e aprendizado a partir de dados. O curso é direcionado a analistas de dados sem conhecimentos prévios em estatística, e enfatiza a importância da ética na construção e uso de modelos obtidos a partir de dados. Os métodos de ensino incluem aulas tradicionais, debates em sala de aula e atividades de auto-avaliação, ajudando os alunos a desenvolver habilidades críticas e analíticas essenciais para o sucesso na ciência de dados. Ao final do curso, os alunos terão uma compreensão abrangente do campo, bem como as habilidades e conhecimentos necessários para se tornarem cientistas de dados de sucesso.
Docentes: Manuel M. Pita, Zuil Pirola.
Programa
- Introdução à Ciência de Dados
- O que significa aprender com dados?
- Como garantir a precisão dos modelos?
- Regressão linear simples
- Regressão linear múltipla
- Como trabalhar com modelos de regressão?
- Classificação logística
- Modelos de classificação generativa
- Métodos de reamostragem
- Métodos baseados em árvores para regressão e classificação
- Aspetos éticos e regulamentos âmbito da Ciência de dados
Objetivos
- Familiarizar os estudantes com o campo multidisciplinar da Ciência de Dados
- Adquirir conhecimentos aprofundados sobre o que significa aprender estatisticamente a partir de dados
- Compreender o que são os modelos de regressão e classificação
- Compreender como validar e utilizar modelos construídos a partir de dados
- Adquirir uma diversidade de métodos para criar modelos de regressão e classificação
- Comparar criticamente diferentes métodos para produzir modelos de regressão ou classificação
- Compreender a importância e usos de métodos de reamostragem na Ciência de Dados
- Compreender os princípios éticos básicos e regulamentações no contexto de modelos baseados em dados
-
Inteligência Artificial
Apresentação
Esta cadeira é uma introdução aos conceitos e técnicas básicas da Inteligência Artificial, com três áreas principais de atuação. Primeiro, a formalização do que é uma máquina, tanto na óptica de manipulação de símbolos da máquina de Turing, como nas máquinas de McCulloch and Pitts que funcionam com padrões de interligação entre nós em redes de neurónios. Segundo, o conceito de agente racional em IA, que emerge da interseção com as ciências cognitivas, e as diversas implementações de algoritmos de busca exaustiva estruturada (informados e não informados). Ainda dentro desta área de foco são ainda introduzidos os conceito de busca estocástica e algoritmos para satisfação de restrições (CSPs). Finalmente, na terceira área de foco, os estudantes aprendem noções e usos de alguns dos algoritmos de inteligência artificial avançados que são utilizados hoje em dia.
Docentes: Manuel M. Pita, Zuil Pirola.
Programa
- Conceitos Básicos
- Definições de IA
- Máquina de Turing
- Redes neuronais de McCulloch e Pitts
- Cómo analisar máquinas? diagramas de transição de estados
- Busca
- O conceito de agente de busca em IA
- Espaços e Grafos de busca
- Busca não informada: British Museum, DFS, BFS
- Busca Informada: Dijkstra e A*
- Busca adversária
- Problemas de satisfação de restrições
- Nocões básicas de sistemas de recomendação
- O futuro de IA
- Analise critica de artigos recentes em IA
Objetivos
Os objectivos de aprendizagem desta cadeira incluem (1) Entendimento profundo dos aspectos conceituais que dão origem à IA, nomeadamente a formalização do conceito de computação universal via manipulação de símbolos, e a computação baseada em redes de neurónios; (2) os métodos e representações usados para estudar o funcionamento de qualquer máquina; (3) Desenho e implementação de agentes racionais e o conceito de "processamento de informação"; (4) Algoritmos clássicos de busca não informada: British Museum, DFS e BFS; (5) Busca informada: Dijkstra e A*; (6) Formalização e resolução de problemas de satisfação de restrições (CSP); (7) conhecimentos básicos de técnicas avançadas de inteligência artificial nos domínios de machine learning e data science; e (8) Conhecimentos sobre os usos da inteligência artificial na sociedade incluindo aspectos relacionados com ética e o futuro de IA.
- Conceitos Básicos
-
Processamento de Imagem
Apresentação
Esta unidade curricular e¿ dedicada ao processamento de imagem, como fonte sensorial de maior alto ni¿vel. Aqui sera¿o apresentadas as va¿rias tecnologias de sensores de imagem, a captac¿a¿o de imagem e em seguida sa¿o estudados os va¿rios me¿todos de tratamento de imagem e de extrac¿a¿o de informac¿a¿o. Na componente pra¿tica sera¿ desenvolvida uma aplicac¿a¿o de processamento de imagem, que ira¿ usar os alguns dos me¿todos aprendidos durante o semestre para resolver um problema pra¿tico que sera¿ proposto, usando a biblioteca OpenCV e linguagem c#. Ira¿ tambe¿m ser dado umas noções de introduc¿a¿o a¿ Intelige¿ncia Artifical aplicadas nas imagens.
Docentes: João P. Carvalho, Houda Harkat.
Programa
- Processamento de Imagens: dos pixeis a¿s caracteri¿sticas;
- Operac¿o¿es sobre imagens;
- Segmentac¿a¿o;
- Detecc¿a¿o de objectos;
- Extracc¿a¿o de caracteri¿sticas;
- Medidas;
- Ana¿lise de aplicac¿o¿es.
Conteu¿dos de ensino a¿ dista¿ncia: Tutoriais e apoio em video-confere¿ncia e/ou em comunicac¿a¿o assi¿ncrona.
Objetivos
Pretende-se que no final do semestre os estudantes possuam:
- Capacidades de analisar imagens 2D e aplicar os filtros necessa¿rios (como a rotac¿a¿o, translac¿a¿o, etc) para um determinado objectivo;
- Conhecimentos mais aprofundados na linguagem c#;
- Noc¿o¿es ba¿sicas de intelige¿ncia artifical em imagens.
-
Sistemas de Suporte à Decisão
Apresentação
A UC de Sistemas de Suporte à Decisão / Business Intelligence tem por objetivo garantir que há a introdução à temática de processos de análise de dados para apoio às áreas de gestão das empresas. Neste sentido, a UC tem um papel fundamental no ciclo de estudo na compreensão dos processos de gestão e decisão de organizações, para além de como colocar infraestruturas de dados ao serviço do negócio empresarial.
Docentes: Rui Ribeiro, João Caldeira, João Licínio.
Programa
- Desafios de Negócio de DW
- Arquitecturas DW
- Melhores Práticas de Modelação de DW
- Implementação de ETL
- Bases de Dados específicas para BI
- Ferramentas de Relatórios
Objetivos
- Entender por que as empresas precisam de um ambiente de BI
- Quais componentes da arquitetura existem para BI
- Esquemas de modelação para DW
- Conhecer os vários processos de manipulação de dados em ambientes DW
- O que um colaborador/utilizador pode obter em interfaces de relatórios
-
Data Science
-
Gestão – Gestão e Softskills
-
Competências Comportamentais
Apresentação
Esta unidade curricular (UC) inscreve-se num contexto onde têm sido elencadas necessidades de adaptação dos especialistas em informática ao contexto das organizações, nomeadamente no que às denominadas soft skills diz respeito. Assim, pretende-se que os alunos desenvolvam conhecimentos ao nível das ferramentas básicas de empregabilidade (ex. Currículo, redes sociais e networking, marketing pessoal), gestão das emoções, gestão de tempo (ex. trabalho remoto), trabalho em equipa e liderança, comunicação e desenvolvimento de competências comportamentais e autoconhecimento. Por outro lado, é objetivo desta UC o desenvolvimento de um plano individual de desenvolvimento pessoal, bem como de aptidões que permitam aos alunos destingir entre factos e opiniões, conhecimento científico e senso comum. Sendo uma UC de índole prática, pretende-se que os conhecimentos sejam operacionalizáveis e tendentes ao desenvolvimento de competências transferíveis do plano académico para a domínio profissional.
Docentes: Diogo Morais, Tomáz Saraiva.
Programa
Marketing Pessoal:
- CV;
- Portefólio;
- Apresentação pessoal e contextos de entrevista;
- Apresentação em público e ferramentas de suporte;
- Redes sociais e Networking;
- Factos Vs Opiniões;
- Gestão de tempo:
- Trabalho remoto e comunicação mediada;
- Work-life balance.
- As tecnologias no trabalho: oportunidades e ameaças:
- Trabalho em equipa;
- Comunicação;
- Personal and Social Skills development;
- Percursos de carreira;
- Critical thinking and problem solving.
Objetivos
Pretende-se que os alunos desenvolvam conhecimentos ao nível das ferramentas básicas de empregabilidade (ex. Currículo, redes sociais e networking, marketing pessoal), gestão das emoções, gestão de tempo (ex. trabalho remoto), trabalho em equipa e liderança, comunicação e desenvolvimento de competências comportamentais e autoconhecimento. Por outro lado, é objetivo desta UC o desenvolvimento de um plano individual de desenvolvimento pessoal, bem como de aptidões que permitam aos alunos destingir entre factos e opiniões, conhecimento científico e senso comum. Sendo uma UC de índole prática, pretende-se que os conhecimentos sejam operacionalizáveis e tendentes ao desenvolvimento de competências transferíveis do plano académico para a domínio profissional.
-
Competências Comportamentais
-
Genérica
-
Trabalho Final de Curso
Apresentação
O Trabalho Final de Curso (TFC) é um elemento fundamental do currículo da Licenciaturas, funcionando como um momento nuclear na formação dos alunos, nomeadamente em ordem à
promoção da sua integração profissional e/ou iniciação ao trabalho científico.
O TFC deve corresponder a um projecto aplicado na área objecto de estudo, podendo incluir a realização de projectos de produção de soluções relevantes para os conteúdos dos curso,
desenvolvimento de software ou projectos de índole mais teórica ou académica. O TFC deve conduzir a resultados finais susceptíveis de utilização em contexto real (aparelho, programa, método, modelo conceptual, contributo para investigação ou conclusões sobre um problema).Docentes: Luis A. Gomes, Daniel Fernandes, Gabriela Soares, João P. Carvalho, Lucio Studer, Pedro Alves, Sofia Naique, Bruno Cipriano, Bruno Saraiva, Diogo Morais, Duarte Neves, João Caldeira, João Craveiro, José Cascais Brás, Manuel M. Pita, Maria Silva, Pedro Perdigão, Pedro Serra, Rodrigo Correia, Rui Ribeiro, Rui Santos, Sérgio Ferreira, Sofia Fernandes, Wellington Oliveira, Zuil Pirola, Daniel M. Silveira.
Programa
CP1. Orientação.
CP2. Elaboração do estado da arte.
CP3. Desenvolvimento do projeto.
CP3.1. Identificação de problema
CP3.2. Planeamento do projecto
CP3.3. Demonstração de viabilidade
CP3.4. Execução
CP3.5. Controlo do projecto
CP3.6. Testes
CP4. Apresentação dos resultados.
Objetivos
O principal objectivo desta unidade curricular é de integrar os conceitos que foram adquiridos pelo aluno ao longo do curso, num projecto de âmbito alargado e onde o aluno autonomamente resolva um problema.
Este objectivo geral pode ser concretizado por:
OA1. Saber aplicar os princípios e técnicas associadas à conceção e implementação de casos reais ou simulados.
OA2. Saber aplicar os conhecimentos obtidos nas unidades curriculares do curso face a problemas ligados às mesmas, bem como a aplicação dos conhecimentos a novos paradigmas dos SI/TIC não abordados no curso.
OA3. Saber investigar o estado da arte no objeto de estudo.
OA4. Saber desenvolver um trabalho de natureza aplicada que integre os conhecimentos adquiridos ao longo da componente curricular do curso.
-
Trabalho Final de Curso
-
Maths – Matemáticas, Físicas e Metodologias de Computação