Fundamentos de Programação

Unidade Curricular / Curricular Unit
Fundamentos de Programação

Ciclo de Estudos / Study Cycle
Licenciatura em Engenharia Informática, Redes e Telecomunicações

Nome do Docente Responsável
Pedro Hugo Queirós Alves

Nome do Docente Adicional
Hugo Castro, Pedro Sá Costa, João Guerreiro

Objectivos de aprendizagem (conhecimentos, aptidões e competências a desenvolver pelos estudantes)
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 e Java que lhe permitam escrever programas sO objectivo desta unidade curricular é fornecer aos futuros profissionais na área da informática as bases para que possam iniciar (de um modimples de linha de comando.

Intended learning outcomes (knowledge, skills and competences to be developed by the students)
This curricular unit aims to provide the basic programming concepts to future software engineers, allowing them to start (in a disciplined form) the programming activity.
The student develops competences for algorithmic reasoning using flowcharts.
The student should be able to translate those flowcharts into an imperative programming language.
In practice, the student should know the basic syntax of the Kotlin and Java language and develop simple Java applications that run from the command line.

Conteúdos programáticos
Introdução à programação
Algoritmos, fluxogramas, pseudo-código
Sintaxe e semântica das linguagens
Estrutura de um programa
Atribuições
Tipos primitivos
Expressões aritméticas, expressões lógicas
Entradas e saídas de dados
Selecção
Repetição
Funções
Tratamento de erros
Leitura e escrita de ficheiros
Boas práticas de programação imperativa

Syllabus
Introduction to programming
Algorithms, flowcharts, pseudo-code
Syntax and semantic
Structure of a program
Assignments
Primitve types
Arithmetic expressions, logic expressions
Input and Output
Selection
Repetition
Functions
Error handling
Reading and writing files
Best practices of imperative programming

Demonstração da coerência dos conteúdos programáticos com os objectivos de aprendizagem da unidade curricular
Conhecimento e compreensão: a problemática da programação no contexto do desenvolvimento de curta duração deve ser identificada pelo aluno.
Análise em Engenharia: é expectável que o aluno seja capaz de conceber soluções tecnológicas, que essas soluções considerem a optimização básica para os problemas colocados e que sejam capazes de as testar.
Contexto envolvente: O projeto em grupo fomenta o desenvolvimento dos skills de comunicação interpessoal e de gestão de requisitos e de tempo disponível para o seu desenvolvimento.

Evidence of the syllabus coherence with the curricular unit’s intended learning outcomes
Knowledge and understanding: the student should be able to identify the programming problems associated with the short-tem software development.
Analysis in Engineering: it is expectable that the student is able to design technological solutions, that those solutions are properly optimized and tested for the specific problem they aim to solve.
Surrounding context: The project is developed in group, improving communication skills as well as time and requirements management.

Metodologias de ensino (avaliação incluída)
A disciplina é teórico-prática, havendo uma alternância entre métodos:
Met. 1 – expositivos,
Met. 2 – demonstrativos
Met. 3 – participativos

Avaliação Continua:
• 10% – TPCs teóricos
• 15% – Teste intermédio
• 25% – Frequência completa
• 15% – TPCs práticos
• 35% – Projecto

Avaliação da Época de Recurso:
• 50% – Exame
• 50% – Projecto

Teaching methodologies (including assessment)
The curricular unit is both theoretical and practical, switching between:
Met. 1 – exposition,
Met. 2 – demonstration
Met. 3 – participation.

Continuous evaluation:
• 10% – Theoretical homeworks
• 15% – Intermediate tests
• 25% – Final test
• 15% – Practical homeworks
• 35% – Project

Appeal evaluation:
• 50% – Exam
• 50% – Project

Demonstração da coerência das metodologias de ensino com os objectivos de aprendizagem da unidade curricular
Projecto em Engenharia: começa-se nesta cadeira a fomentar as necessidades de alinhar os requisitos dos clientes e utilizadores finais com as soluções tecnológicas conhecidas.
Investigação: Motiva-se nesta cadeira a capacidade de discutir soluções distintas para o mesmo problema e pesquisar soluções já existentes para os problemas colocados.
Prática em Engenharia: usa o contexto laboratorial para introdução a ferramentas (IDEs, etc.) que permitam apoiar o processo de desenvolvimento, optimizando o ciclo de desenvolvimento de software.

Evidence of the teaching methodologies coherence with the curricular unit’s intended learning outcomes
Engineering project: in this curricular unit, students are motivated to align requirements (from clients and final users) with technological solutions.
Research: Students are motivated to discuss several distinct solutions to the same problem and research existing solutions to the proposed problems.
Practice in Engineering: uses the laboratorial context to introduce students to tools (IDEs, etc.) that improve and support the development process.

Bibliografia Principal / Main Bibliography
– Fundamentos de Programação, utilização das linguagens de programação imperativa: C e JAVA, Sérgio Luís Guerreiro, Sebenta ULHT, Lisboa, Portugal, 2008
– Introdução à Programação em Java, António Adrego da Rocha / Osvaldo Manuel da Rocha Pacheco, FCA, Lisboa, Portugal, 2009
– Kotlin in Action. Dmitry Jemerov and Svetlana Isakova. Manning, 2016