Licenciatura

Engenharia Informática

Área Científica

Ciências Informáticas

Duração

Semestral

Unidade Curricular

Programação III

ECTS

6

Horas de Contacto Teórico Práticas

60h

OBJETIVOS DA APRENDIZAGEM

Para concluir com sucesso esta unidade curricular, os alunos deverão demonstrar possuir os seguintes conhecimentos e capacidades:

1. Conhecer e saber instalar o ambiente de desenvolvimento XCode;

2. Saber usar interface playground para desenvolver programas;

3. Conhecer os vários tipos de dados da linguagem Swift e saber criar e usar variáveis e constantes;

4. Conhecer os operadores da linguagem e saber usar expressões;

5. Compreender a estrutura das strings e saber usar funções de strings;

6. Saber usar arrays unidimensionais e multidimensionais;

7. Compreender o conceito de set saber executar operações com sets;

8. Saber declarar e aceder a dictionaries;

9. Compreender a estrutura e saber utilizar os statements de decisão e de repetição;

10. Saber utilizar funções na linguagem Swift;

11. Compreender o significado e saber utilizar enumerations;

12. Compreender os conceitos associados e saber utilizar classes e objetos;

13. Saber desenvolver aplicações (“apps”) de complexidade moderada no sistema operativo iOS, usando a linguagem Swift.

PROGRAMA

1. Desenvolvimento de aplicações para iOS – Uma visão geral

1.1. Tecnologias para desenvolvimento de aplicações iOS

1.2. Obter e instalar o Xcode e o iOS SDK

1.3. O Apple Developer Program

1.4. O Xcode

2. Playground user interface

2.1. Criar um primeiro programa (com playground)

2.2. Introduzir código na área de edição

2.3. As áreas do playground IDE

3. Variáveis e constantes

3.1. Declarar variáveis e constantes

3.2. Type annotations

3.3. Atribuição de nomes às variáveis

3.4. Imprimir strings e variáveis

3.5. Optionals

3.6. Exemplo – Declaração e utilização de variáveis (playground)

4. Tipos de dados

4.1. Integers

4.2. Floating-point

4.3. Conversões entre Integers e Floating-points

4.4. Booleans

4.5. Tuples

5. Operadores

5.1. Operador de atribuição

5.2. Operadores aritméticos

5.3. Operador Remainder

5.4. Operações com diferentes tipos de dados

5.5. Operadores de incremento e decremento

5.6. Os operadores unários + e –

5.7. Operadores aritméticos de atribuição

5.8. Precedência e associatividade de operadores

5.9. Operadores de comparação

5.10. Operadores lógicos

5.11. Operador condicional

5.12. Operador Nil Coalescing

5.13. Operadores Range

6. Strings e Characters

6.1. Declarar e iniicializar strings “vazias”

6.2. Concatenação de strings

6.3. Interpolation

6.4. Representação interna das strings

6.5. Caracteres especiais em literais String

6.6. Extended Grapheme Clusters

6.7. Comparação de strings

6.8. Determinar o comprimento das strings

7. Arrays

7.1. Declarar arrays

7.2. Declarar arrays com um valor pré-definido

7.3. Criar arrays por adição de dois arrays

7.4. Criar um array com um Array Literal

7.5. Aceder a arrays e alterar o conteúdo

7.6. Arrays multidimensionais

8. Sets

8.1. Declarar um set

8.2. Criar um set com um array literal

8.3. Criar um set com o range operator

8.4. Aceder e alterar um set

8.5. Operações fundamentais com Sets

8.6. Determinar a associação e a igualdade entre sets

8.7. Equality

8.8. Subsets e Strict Subsets

8.9. Supersets e Strict Superset

8.10. Disjoint

9. Dictionaries

9.1. Declarar um dictionary

9.2. Declarar um empty dictionary

9.3. Criar um Dictionary

9.4. Determinar se um Dictionary tem ou não elementos

9.5. Determinar o número de elementos num Dictionary

9.6. Aceder aos elementos de um Dictionary

9.7. Alterar elementos de um Dictionary

9.8. Adicionar elementos a um Dictionary

9.9. Remover elementos de um Dictionary

9.10. Nested dictionaries

10. Estruturas de decisão

10.1. O statement if

10.2. Utilizar os operadores lógicos

10.3. Comparar e utilizar optionals

10.4. A cláusula else

10.5. O statement if…else if

10.6. O statement switch

10.7. Interval Matching case

10.8. Tuples Matching case

10.9. Switch…case – utilização de variáveis/constantes temporárias

10.10. Switch…case – utilização da cláusula where

11. Estruturas de repetição

11.1. while e repeat…while

11.2. for…in loops

11.3. for loops

11.4. Utilizar for…in loops em vez de for loops

11.5. Incrementar e apresentar o index com for…in loop

11.6. Decrementar e apresentar o index com for…in loop

11.7. Utilizar a função enumerate()

11.8. Iteração não-sequencial – cláusula where

11.9. Iteração não-sequencial – função stride()

11.10. Percorrer arrays multidimensionais

11.11. Control Transfer Statements

12. Funções

12.1. Definir e chamar funções

12.2. Parâmetros da função (Function parameters)

12.3. Valores de parâmetros pré-definidos

12.4. Valor de retorno da função (Function return value)

12.5. Funções com múltiplos valores de retorn

12.6. Argument Labels e Parameter Names

12.7. Variadic Parameters

12.8. In-Out Parameters

12.9. Function Types

12.10. Function Types como Parameters Types

12.11. Function Types como valor de retorno

12.12. Nested Functions

13. Enumerations

13.1. A sintaxe das Enumerations

13.2. Testar valore de uma Enumeration com um Switch

13.3. Associated Values

13.4. Raw Values

13.5. Enumerations recursivas

14. Classes e Structures

14.1. Comparação entre Classes e Structures

14.2. Structures e Enumerations são “Value Types”

14.3. Classes são “Reference Types”

14.4. Escolher entre Classes e Structures

14.5. Comportamento na atribuição e cópia de Strings, Arrays e Dictionaries

14.6. Propriedades

14.7. Métodos

14.8. Herança

14.9. Inicialização e Deinicialização

14.10. Exemplos de utilização de classes e objetos em Swift

15. Desenvolver aplicações

15.1. Aplicação 1 – Calculadora

15.2. Aplicação 2 – Jogo Bull’s Eye

15.3. Aplicação 3 – Checklists

DEMONSTRAÇÃO DE COERÊNCIA ENTRE CONTEÚDOS PROGRAMÁTICOS E RESULTADOS DA APRENDIZAGEM

Os pontos 1.1 a 1.4 permitem concretizar o objetivos 1. O objetivo 2 é alcançável através do conteúdos com o números 2.1 a 2.3. Os pontos do programa de 3.1 a 3.6 e de 4.1 a 4.5 permitem alcançar o objetivo 3. O objetivo 4 é atingido através dos pontos 5.1 a 5.11. Os pontos do conteúdo programático de 6.1 a 6.8 permitem atingir o objetivo 5. O objetivo 6 é alcançável através dos conteúdos programáticos 7.1 a 7.6. Os pontos do programa de 8.1 a 8.10 permitem concretizar o objetivo 7. O objetivo 8 é atingido com os pontos 9.1 a 9.10. Os conteúdos programáticos com os números 10.1 a 10.10 e 11.1 a 11.11 permitem atingir o objetivo permitem atingir o objetivo 9. O objetivo 10 é alcançável com o conteúdos 12.1 a 12.3. Os pontos 13.1 a 13.5 permitem atingir o objetivo 11. O objetivo 12 é alcançável através dos pontos 14.1 a 14.10. Finalmente, o objetivo 13 é atingido com os pontos 15.1 a 15.3.

METODOLOGIA DE ENSINO E AVALIAÇÃO

Todas as aulas são de natureza teórico-prática. Estão previstas 60 horas de contato. O tempo total de trabalho do aluno corresponde a 162 horas. A apresentação dos elementos da linguagem Swift é concretizada através da resolução de exemplos apresentados e resolvidos pelo professor, seguidos de pequenos exercícios e projetos desenvolvidos pelos alunos. inicialmente através da utilização do playground do ambiente de desenvolvimento. Esta metodologia, baseada numa evolução gradual, permitirá que os alunos possam acompanhar o desenvolvimento da matéria e criar aplicações de complexidade crescente.

De acordo com o Regulamento de Funcionamento do ISTEC a avaliação é efetuada através de um exame escrito individual e obrigatório. Na classificação final, poderão ser considerados elementos de avaliação contínua, tais como testes, trabalhos individuais ou em grupo, assim como a participação nas aulas presenciais e em recursos de aprendizagem proporcionados por sistemas de e-learning.

DEMONSTRAÇÃO DE COERÊNCIA ENTRE METODOLOGIAS DE ENSINO E RESULTADOS DE APRENDIZAGEM

A participação dos alunos na resolução de problemas de programação e de aplicações de complexidade crescente, deverá permitir a aquisição dos conhecimentos e das capacidades que permitam o desenvolvimento de “apps” para os vários dispositivos do sistema operativo iOS.

BIBLIOGRAFIA

Fundamental:
MARCELINO, Luís SILVA, Catarina; Desenvolvimento em Swift para iOS; FCA
Hoffman, Jon., Mastering Swift 4;Packt

Apple Inc (2017). The Swift Programming Language (Swift 4). Retirado de https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/

Complementar:
KNOTT, Matthew; Beginning Xcode; Apress
MANNING, Jonathon et al;Swift Development with Cocoa; O’Reilly Media
ROGERS, T. Michael; Swift Recipes – A Problem-Solution Approach; Apress
GRAY, Anthony; Swift Pocket Reference Programming for iOS and OS X; O’Reilly Media
PIERCE, Taylor et al; The Business of iOS App Development; Apress
NEUBERG, Matt; iOS 11 Programming Fundamentals with Swift; O’Reilly Media

INTERNET:
Acesso a publicações da especialidade, gratuitamente, através da rede SPRINGER:
https://link.springer.com/