Quatro Balões em Linha – Projeto de Fundamentos de Programação

  • Curso: Licenciatura em Engenharia Informática, Licenciatura em Informática, Redes e Telecomunicações
  • Unidade Curricular : Fundamentos de Programação – 1º Ano | 1º Semestre
  • Ano lectivo: 2024-25
  • Docente responsável: Pedro Alves, Bruno Saraiva, Martim Mourão, Rodrigo Correia, Wellington Júnior

 

Veja o enunciado do projeto. Sim, é um vídeo!

Continuar a ler

The Night of the Living DEISI – Projeto de Linguagens de Programação 2

  • Curso: Licenciatura em Engenharia Informática, Licenciatura em Informática, Redes e Telecomunicações
  • Unidade Curricular : Linguagens de Programação II – 2º Ano | 1º Semestre
  • Ano lectivo: 2024-25
  • Docente responsável: Pedro Alves, Duarte Neves, Bruno Cipriano

Veja o enunciado do projeto. Sim, é um vídeo!

Continuar a ler

Batalha Naval, projeto de Fundamentos de Programação

  • Curso: Licenciatura em Engenharia Informática, Licenciatura em Informática de Gestão, Licenciatura em Informática, Redes e Telecomunicações
  • Unidade Curricular : Fundamentos de Programação – 1º Ano | 1º Semestre
  • Ano lectivo: 2023-24
  • Docente responsável: Pedro Alves, Brena Lima, Bruno Saraiva, Lúcio Studer, Rodrigo Correia

Continuar a ler

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.

      DocentesCristiane FerreiraAlexander MikovicCristina Guerra

      Programa

      1. Grandezas físicas, dimensões e sistemas de unidades.
      2. Referencial, posição e trajetória. Movimento unidimensional.
      3. Movimento no espaço. Projéteis e movimento circular.
      4. Leis de Newton. Tipos de forças, força gravitacional.
      5. Aplicações de Leis de Newton: plano inclinado, rodelas, mola oscilatória, pendulo.
      6. Trabalho. Forças conservativas e energia potencial.
      7. Conservação da energia mecânica.
      8. Centro de massa, impulso e momento linear. Colisões.
      9. Momento de uma força, momento de inércia e momento angular.
      10. Lei de Coulomb, campo elétrico.
      11. Potencial elétrico e capacitores.
      12. Corrente elétrica e resistência elétrica.
      13. 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.

      DocentesPedro Alves, Brena Lima, Bruno Saraiva, Lucio Studer, Rodrigo CorreiaWellington 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.

      DocentesMaria SilvaHouda 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. 

      DocentesAndré 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.

      DocentesJoão P. CarvalhoCarlos FernandesDaniel FernandesSé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.

       

       

      DocentesMaria 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.  

      DocentesPedro AlvesBruno Cipriano, Duarte Neves, Miguel TavaresRodrigo 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.

      DocentesDaniel FernandesPaulo Guedes, Ricardo Santos, Sérgio Ferreira

      Programa

      Aulas Teóricas

      1. Circuitos digitais MSI: Portas Lógicas, registos, contadores, memórias, multiplexers e descodificadores. Simulação.
      2. Arquitetura de um Microprocessador (CPU) genérico.
        1. Componentes básicos: ALU, Registos e Barramentos.
        2. Instruções e Microinstruções
        3. Memórias de Programa e Dados.
        4. Fluxo de informação num CPU: Operações Fetch e Execution
      3. Estudo de um Microcontrolador comercial de baixo custo.
      4. Ambiente de desenvolvimento, programação, simulação e teste.

      Aulas Práticas

      1. Componentes digitais típicos
      2. Simulação de componentes básicos da arquitetura interna de um CPU genérico
      3. 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.

      DocentesDiogo Morais, Tomáz Saraiva. 

      Programa

      Marketing Pessoal:

      1. CV;
      2. Portefólio;
      3. Apresentação pessoal e contextos de entrevista;
      4. Apresentação em público e ferramentas de suporte;
      5. Redes sociais e Networking;
      6. Factos Vs Opiniões;
      7. Gestão de tempo:
        1. Trabalho remoto e comunicação mediada;
        2. Work-life balance.
      8. As tecnologias no trabalho: oportunidades e ameaças:
      9. Trabalho em equipa;
      10. Comunicação;
      11. Personal and Social Skills development;
      12. Percursos de carreira;
      13. 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.

      DocentesPedro SerraDaniel 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/filas

      Objetivos

      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.

      DocentesAndré FonsecaGuilherme AntunesSofia 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.

  • 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.

      DocentesPedro SerraDaniel FernandesWellington 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 plataformas

      Objetivos

      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.

      DocentesRui RibeiroJoão CaldeiraLuis 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.

      DocentesPedro AlvesBruno 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.

    • 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. 

      DocentesSofia NaiqueGuilherme 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. SilveiraJoã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.

      DocentesRui RibeiroJosé Cascais BrásLuis A. Gomes

      Programa

      Estrutura de Capítulos principais de conteúdos

      1. Visão de Gerenciamento de Sistemas de Informação

      2. Engenharia de Requisitos (Gestão de backlog, BPMN e UML – Modelação)

      3. Testes de software

      4. 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.

      DocentesJoão P. CarvalhoHouda Harkat

      Programa

      1. Processamento de Imagens: dos pixeis a¿s caracteri¿sticas;
      2. Operac¿o¿es sobre imagens;
      3. Segmentac¿a¿o;
      4. Detecc¿a¿o de objectos;
      5. Extracc¿a¿o de caracteri¿sticas;
      6. Medidas;
      7. 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ãoRui 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 Web

       

      HTML 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
      – Bootstrap

       

      JavaScript para programação Front-end
      – Programação Orientada a Eventos 
      – Manipulação do DOM 
      – JSON e APIs
      – Single Page Applications

       

      Python para desenvolvimento Web
      – Sintaxe, operadores, controlo de fluxos e tipos de dados
      – Funções e módulos 
      – Gestão de ficheiros e pastas   
      – Classes 

       

      Django 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 cloud 

      Objetivos

      • 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.

      DocentesRui RibeiroJoã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

  • 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.

      DocentesPaulo GuedesSé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-commit

      Objetivos

      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.

      DocentesManuel M. PitaZuil Pirola

      Programa

      1. Introdução à Ciência de Dados
      2. O que significa aprender com dados?
      3. Como garantir a precisão dos modelos?
      4. Regressão linear simples
      5. Regressão linear múltipla
      6. Como trabalhar com modelos de regressão?
      7. Classificação logística
      8. Modelos de classificação generativa
      9. Métodos de reamostragem
      10. Métodos baseados em árvores para regressão e classificação
      11. Aspetos éticos e regulamentos âmbito da Ciência de dados

      Objetivos

      1. Familiarizar os estudantes com o campo multidisciplinar da Ciência de Dados
      2. Adquirir conhecimentos aprofundados sobre o que significa aprender estatisticamente a partir de dados
      3. Compreender o que são os modelos de regressão e classificação
      4. Compreender como validar e utilizar modelos construídos a partir de dados
      5. Adquirir uma diversidade de métodos para criar modelos de regressão e classificação
      6. Comparar criticamente diferentes métodos para produzir modelos de regressão ou classificação
      7. Compreender a importância e usos de métodos de reamostragem na Ciência de Dados
      8. 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.

      DocentesJosé Cascais BrásPedro PerdigãoRui 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.

      DocentesConceição CostaMiguel 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.

      DocentesPedro AlvesMiguel TavaresWellington 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.

      DocentesManuel M. PitaZuil Pirola

      Programa

      1. Conceitos Básicos
        1. Definições de IA
        2. Máquina de Turing
        3. Redes neuronais de McCulloch e Pitts
        4. Cómo analisar máquinas? diagramas de transição de estados
      2. Busca
        1. O conceito de agente de busca em IA
        2. Espaços e Grafos de busca
        3. Busca não informada: British Museum, DFS, BFS
        4. Busca Informada: Dijkstra e A*
        5. Busca adversária
      3. Problemas de satisfação de restrições
      4. Nocões básicas de sistemas de recomendação
      5. O futuro de IA
        1. 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.

    • 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

      DocentesSé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 .

      DocentesRui RibeiroLuis A. GomesRui 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

Á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.

         

         

        DocentesMaria 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.

        DocentesCristiane FerreiraAlexander MikovicCristina Guerra

        Programa

        1. Grandezas físicas, dimensões e sistemas de unidades.
        2. Referencial, posição e trajetória. Movimento unidimensional.
        3. Movimento no espaço. Projéteis e movimento circular.
        4. Leis de Newton. Tipos de forças, força gravitacional.
        5. Aplicações de Leis de Newton: plano inclinado, rodelas, mola oscilatória, pendulo.
        6. Trabalho. Forças conservativas e energia potencial.
        7. Conservação da energia mecânica.
        8. Centro de massa, impulso e momento linear. Colisões.
        9. Momento de uma força, momento de inércia e momento angular.
        10. Lei de Coulomb, campo elétrico.
        11. Potencial elétrico e capacitores.
        12. Corrente elétrica e resistência elétrica.
        13. 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.

        DocentesMaria SilvaHouda 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. 

        DocentesAndré 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.

        DocentesAndré FonsecaGuilherme AntunesSofia 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. 

        DocentesSofia NaiqueGuilherme 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.

         

    • 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.

        DocentesDaniel FernandesPaulo Guedes, Ricardo Santos, Sérgio Ferreira

        Programa

        Aulas Teóricas

        1. Circuitos digitais MSI: Portas Lógicas, registos, contadores, memórias, multiplexers e descodificadores. Simulação.
        2. Arquitetura de um Microprocessador (CPU) genérico.
          1. Componentes básicos: ALU, Registos e Barramentos.
          2. Instruções e Microinstruções
          3. Memórias de Programa e Dados.
          4. Fluxo de informação num CPU: Operações Fetch e Execution
        3. Estudo de um Microcontrolador comercial de baixo custo.
        4. Ambiente de desenvolvimento, programação, simulação e teste.

        Aulas Práticas

        1. Componentes digitais típicos
        2. Simulação de componentes básicos da arquitetura interna de um CPU genérico
        3. 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.

        DocentesPedro SerraDaniel FernandesWellington 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 plataformas

        Objetivos

        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.

        DocentesPaulo GuedesSé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-commit

        Objetivos

        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.

        DocentesJoão P. CarvalhoCarlos FernandesDaniel FernandesSé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. SilveiraJoã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.

    • 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

        DocentesSé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.

    • 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.  

        DocentesPedro AlvesBruno Cipriano, Duarte Neves, Miguel TavaresRodrigo 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.

        DocentesPedro AlvesMiguel TavaresWellington 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.

        DocentesJosé Cascais BrásPedro PerdigãoRui 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.

        DocentesPedro Alves, Brena Lima, Bruno Saraiva, Lucio Studer, Rodrigo CorreiaWellington 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.

        DocentesPedro SerraDaniel 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/filas

        Objetivos

        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.

        DocentesPedro AlvesBruno 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.

      • 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ãoRui 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 Web

         

        HTML 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
        – Bootstrap

         

        JavaScript para programação Front-end
        – Programação Orientada a Eventos 
        – Manipulação do DOM 
        – JSON e APIs
        – Single Page Applications

         

        Python para desenvolvimento Web
        – Sintaxe, operadores, controlo de fluxos e tipos de dados
        – Funções e módulos 
        – Gestão de ficheiros e pastas   
        – Classes 

         

        Django 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 cloud 

        Objetivos

        • 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 .

        DocentesRui RibeiroLuis A. GomesRui 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

    • 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.

        DocentesRui RibeiroJoão CaldeiraLuis 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.

        DocentesRui RibeiroJosé Cascais BrásLuis A. Gomes

        Programa

        Estrutura de Capítulos principais de conteúdos

        1. Visão de Gerenciamento de Sistemas de Informação

        2. Engenharia de Requisitos (Gestão de backlog, BPMN e UML – Modelação)

        3. Testes de software

        4. 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

    • 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.

        DocentesConceição CostaMiguel 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.

    • 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.

        DocentesManuel M. PitaZuil Pirola

        Programa

        1. Introdução à Ciência de Dados
        2. O que significa aprender com dados?
        3. Como garantir a precisão dos modelos?
        4. Regressão linear simples
        5. Regressão linear múltipla
        6. Como trabalhar com modelos de regressão?
        7. Classificação logística
        8. Modelos de classificação generativa
        9. Métodos de reamostragem
        10. Métodos baseados em árvores para regressão e classificação
        11. Aspetos éticos e regulamentos âmbito da Ciência de dados

        Objetivos

        1. Familiarizar os estudantes com o campo multidisciplinar da Ciência de Dados
        2. Adquirir conhecimentos aprofundados sobre o que significa aprender estatisticamente a partir de dados
        3. Compreender o que são os modelos de regressão e classificação
        4. Compreender como validar e utilizar modelos construídos a partir de dados
        5. Adquirir uma diversidade de métodos para criar modelos de regressão e classificação
        6. Comparar criticamente diferentes métodos para produzir modelos de regressão ou classificação
        7. Compreender a importância e usos de métodos de reamostragem na Ciência de Dados
        8. 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.

        DocentesManuel M. PitaZuil Pirola

        Programa

        1. Conceitos Básicos
          1. Definições de IA
          2. Máquina de Turing
          3. Redes neuronais de McCulloch e Pitts
          4. Cómo analisar máquinas? diagramas de transição de estados
        2. Busca
          1. O conceito de agente de busca em IA
          2. Espaços e Grafos de busca
          3. Busca não informada: British Museum, DFS, BFS
          4. Busca Informada: Dijkstra e A*
          5. Busca adversária
        3. Problemas de satisfação de restrições
        4. Nocões básicas de sistemas de recomendação
        5. O futuro de IA
          1. 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.

      • 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.

        DocentesJoão P. CarvalhoHouda Harkat

        Programa

        1. Processamento de Imagens: dos pixeis a¿s caracteri¿sticas;
        2. Operac¿o¿es sobre imagens;
        3. Segmentac¿a¿o;
        4. Detecc¿a¿o de objectos;
        5. Extracc¿a¿o de caracteri¿sticas;
        6. Medidas;
        7. 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.

        DocentesRui RibeiroJoã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

    • 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.

        DocentesDiogo Morais, Tomáz Saraiva. 

        Programa

        Marketing Pessoal:

        1. CV;
        2. Portefólio;
        3. Apresentação pessoal e contextos de entrevista;
        4. Apresentação em público e ferramentas de suporte;
        5. Redes sociais e Networking;
        6. Factos Vs Opiniões;
        7. Gestão de tempo:
          1. Trabalho remoto e comunicação mediada;
          2. Work-life balance.
        8. As tecnologias no trabalho: oportunidades e ameaças:
        9. Trabalho em equipa;
        10. Comunicação;
        11. Personal and Social Skills development;
        12. Percursos de carreira;
        13. 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.

    • 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).

         

        DocentesLuis A. GomesDaniel FernandesGabriela SoaresJoão P. Carvalho, Lucio Studer, Pedro AlvesSofia NaiqueBruno CiprianoBruno SaraivaDiogo Morais, Duarte Neves, João Caldeira, João Craveiro, José Cascais BrásManuel M. PitaMaria SilvaPedro PerdigãoPedro SerraRodrigo CorreiaRui RibeiroRui SantosSérgio FerreiraSofia FernandesWellington OliveiraZuil PirolaDaniel 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.

  • Início
  • Projetos de Unidades Curriculares

Universidade Lusófona


ECATI Escola de Comunicação, Arquitetura, Artes e Tecnologias da Informação

Departamento de Engenharia Informática e Sistemas de Informação
Edifício F, sala F.1.3
Direção — 217 515 500 (ext: 683)
Serviço de Apoio Tecnico-Admistrativo (SATA) — 17 515 500 (ext: 764)


Lisboa
Avenida do Campo Grande,
376 1749-024 Lisboa, Portugal
Tel.: 217 515 500 | email: info.cul@ulusofona.pt
Porto
Rua Augusto Rosa,
Nº 24, 4000-098 Porto - Portugal
Tel.: 222 073 230 | email: info.cup@ulusofona.pt

Gestão de conteúdos por Lucio Studer Ferreira © 2022 COFAC.