Ficha Programática da unidade curricular

Unidade curricular:

LINGUAGENS DE PROGRAMAÇÃO II

 

 

 

 

Docente:

RUI SILVA MOREIRA

Grau académico:

DOUTOR

Categoria Funcional:

PROFESSOR AUXILIAR

 

 

 

 

 

 

Ciclo de Estudos:

1º CICLO

Curso:

ENGENHARIA INFORMÁTICA

Semestre curricular:

2º SEMESTRE

Ano lectivo:

2009-2010

N.º total de ECTS:

6

 

 

N.º ECTS de Contacto:

2,5

 

 

Tipologia das aulas:

As aulas terão natureza Teórico-Prática (TP) e Prática Não-Laboratorial (PNL)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Avaliação:

 

1 - Avaliação contínua

 

O método de avaliação da disciplina baseia-se no modelo da avaliação contínua e compreende duas componentes: uma componente Teórico-Prática e uma componente Prática Não-Laboratorial resultante de trabalhos realizados com recurso ao computador ou em laboratório de informática.

 

Componente Teórico-Prática

A componente teórico-prática tem um peso de 50% na classificação final da disciplina. A avaliação da componente teórico-prática realiza-se de forma contínua durante as aulas teórico-práticas, e inclui os seguintes elementos de avaliação:

 

·          Dois testes de avaliação individual: incidem sobre os conhecimentos leccionados até ao momento em que são realizados. Cada teste possui um peso de 45% na classificação final da componente teórico-prática. Um teste realiza-se a meio do semestre e o outro no fim do semestre (em data a combinar com os alunos). Estas avaliações incluirão uma parte de índole mais prática (com a duração de 40 minutos) na qual se pedirá aos alunos para desenvolverem determinadas estruturas de dados e/ou algoritmos utilizando a linguagem C – vale 70% da nota do teste. Esta componente será complementada por uma parte de índole mais teórico-prática (com a duração de 20 minutos) englobando um conjunto de perguntas de escolha múltipla (havendo desconto de 25% por cada resposta errada) ou verdadeiros/falso (aplicando-se um desconto de 50% por cada resposta errada) sobre a sintaxe e semântica da linguagem C e de interpretação de programas em C – vale 30% da nota do teste.

 

·          Desempenho nas aulas TP: esta componente procurará avaliar a assiduidade (medida por folhas de presença), a participação e o empenho nas aulas teórico-práticas (como demonstrado nas aulas) e também a capacidade para a realização de pequenos trabalhos práticos, atribuídos durante as aulas, para serem realizados em casa até à aula seguinte. Estes trabalhos serão atribuídos durante todo o semestre e serão contabilizados equitativamente. Este elemento possui um peso de 10% na classificação final da componente teórico-prática.

 

Exige-se uma nota mínima de oito (8) valores nesta componente para que se possa ponderar com a classificação da componente prática não-laboratorial para efeitos de cálculo da classificação final na disciplina.

 

A falta aos momentos de avaliação será convertida numa nota 0 (zero) para efeitos de cálculo da classificação. Caso o aluno não fique aprovado, será remetido para exame de recurso ou especial (seja trabalhador-estudante ou finalista), desde que o aluno tenha obtido a aprovação na componente prática da disciplina e cumprido o regime de assistência às aulas. Nas aulas teórico-práticas a assiduidade obrigatória é de 50%, de acordo com o regulamento pedagógico da UFP.

 

A classificação obtida na componente teórico-prática será, pois, obtida através da seguinte expressão:

 

Nota da componente Teórico-Prática = 45% Teste 1 + 45% Teste 2 + 10% Desempenho nas Aulas TP

 

Componente Prática Não-Laboratorial

A componente prática não-laboratorial tem um peso de 50% na classificação final da disciplina. A avaliação da componente prática não-laboratorial realiza-se igualmente de modo contínuo durante as aulas práticas não-laboratoriais e também pela realização de um projecto. O projecto será realizado em grupo (no máximo com 3 a 4 alunos) e implicará a especificação e desenvolvimento de estruturas de dados e algoritmos, sob a forma de uma ou mais aplicações em Java, sobre um ou mais temas propostos no início do semestre.

 

A avaliação da componente prática não-laboratorial inclui os seguintes elementos de avaliação:

 

·          1º Relatório Projecto: os alunos deverão entregar um relatório, até meio do semestre (em data a especificar), com os diagramas UML e respectiva implementação em Java de uma parte (especificada pelo docente) do projecto proposto. Este relatório possui um peso de 45% da nota da componente prática não-laboratorial.

 

·          2º Relatório Projecto: no final do semestre (em data a especificar) os alunos deverão entregar um relatório final com os diagramas UML e respectiva implementação em Java da solução da totalidade do projecto proposto. Deverão fazer ainda, em sala de aula, uma apresentação e uma demonstração de toda a aplicação. O relatório final deve conter todos os diagramas UML definitivos bem como uma descrição pormenorizada de todas as classes e algoritmos desenvolvidos. Esta componente possui um peso de 45% da nota da componente prática não-laboratorial.

 

·          Desempenho nas aulas PNL: esta componente procurará avaliar a assiduidade (medida por folhas de presença), a participação e o empenho nas aulas práticas não-laboratoriais (como demonstrado nas aulas) e também a capacidade para a realização de pequenos trabalhos práticos, atribuídos durante as aulas, para serem realizados em casa até à aula seguinte. Estes trabalhos serão atribuídos durante todo o semestre e serão contabilizados equitativamente. Este elemento possui um peso de 10% na classificação final da componente teórico-prática.

 

A assiduidade às aulas práticas não-laboratoriais deve ser no mínimo de 70%. Não há possibilidade de recurso ou época especial para a componente prática não-laboratorial. Os alunos terão que marcar presença em duas ou mais sessões de discussão/análise dos trabalhos durante as horas de atendimento para acompanhamento do projecto e/ou esclarecimento de dúvidas. A classificação obtida na componente prática obtém-se através da seguinte expressão:

 

Nota da componente Prática Não-Laboratorial = 45% 1º Relatório Projecto + 45% 2º Relatório Projecto + 10% Desempenho nas Aulas PNL

 

Classificação final

A classificação final da disciplina obtém-se através da seguinte expressão:

 

Nota final = 50% Nota da Componente Teórico-Prática + 50% Nota da Componente Prática Não-Laboratorial

 

Ao aluno, só será contabilizada a classificação obtida na componente teórico-prática da disciplina se o aluno tiver obtido uma classificação igual ou superior a dez (10) valores na componente prática. Caso contrário lança-se a nota negativa (da componente prática) em pauta. De igual modo, exige-se uma nota mínima de oito (8) valores na componente teórico-prática para que se possa ponderar com a classificação da componente prática não-laboratorial. Caso contrário lança-se a nota negativa (da componente teórica) em pauta.

 

2 - Exame de Recurso/Época Especial:

 

O exame de recurso/época especial é uma prova excepcional que ocorre apenas no final do ano lectivo, no período previsto no cronograma, e que apenas abrange a componente teórico-prática da disciplina, incidindo sobre a totalidade da matéria teórico-prática incluída no programa da disciplina, com a duração máxima, incluindo tolerância, de 90 minutos. O aluno só se poderá submeter a este exame se tiver sido aprovado na componente prática desta disciplina e tenha cumprido as assiduidades mínimas estabelecidas no regulamento pedagógico. É exigida uma nota mínima que seja, pelo menos, igual ao valor inferior da classificação, que num exame, dá acesso à oral, nesta componente teórica da avaliação para que se possa ponderar com a nota da componente prática para efeitos do cálculo da nota final. Esta prova destina-se aos alunos que não obtiveram aprovação na componente teórico-prática da disciplina, ou alunos em regimes especiais. Não existe qualquer possibilidade de recurso à componente prática da disciplina.

 

A classificação final do aluno será calculada utilizando a equação indicada acima na secção classificação final. A classificação obtida no exame de recurso ou especial corresponderá à classificação da componente teórica.

 

Este procedimento também se aplica às Épocas de Trabalhador-Estudante e Finalista.

 

No caso de alunos com o estatuto de trabalhador-estudante, com impossibilidade de presença num número significativo de aulas teórico-práticas, a avaliação do desempenho em sala de aula será substituída por uma prova oral em que o aluno deverá resolver um conjunto de problemas teórico-práticos relacionados com o programa da disciplina. Sempre que se julgar necessário, o docente poderá solicitar o desenvolvimento de trabalhos complementares (sob o modo de apresentação oral ou escrita) de modo a melhor aferir o nível de conhecimentos e de competências alcançado pelo aluno.

 

Objectivos da unidade curricular e competências a atingir:

 

Esta disciplina pretende dotar os alunos com uma nova filosofia de abordagem aos problemas através do uso de uma linguagem orientada aos objectos (OO). A linguagem de programação Java é muito utilizada no desenvolvimento de serviços (i.e., aplicações multimédia interactivas e distribuídas), tanto ao nível de projectos de investigação como também no mundo empresarial. Esta linguagem adapta-se tanto a sistemas servidor como a dispositivos móveis (e.g., PDAs) pois é suportada por uma vasta gama de ferramentas de desenvolvimento e plataformas. São estas algumas da razões pelas quais o Java constitui uma das linguagens preferenciais para o desenvolvimento da aplicações para a WWW e serviços móveis.

Esta unidade curricular tem como principal objectivo ensinar os alunos a programar através de uma linguagem de programação orientada aos objectos. Dadas as características da linguagem Java e a sua ampla divulgação e utilização, privilegiamos esta linguagem no ensino e aplicação dos conceitos e metodologias orientadas ao objectos. Assim, pretende-se que os alunos compreendam a sintaxe e a semântica do Java e consigam desenvolver programas nesta linguagem. Pretende-se ainda fomentar e explorar as capacidades de abstracção e de raciocínio orientado aos objectos na elaboração de programas, que são fundamentais nos perfis actuais de engenharia informática.

Numa primeira fase pretende-se que os alunos compreendam os conceitos associados às metodologias e linguagens orientadas aos objectos. Pretende-se ainda que os alunos apreendam os conceitos básicos da linguagem (cf. classes, tipos de dados, atributos e métodos, operadores e expressões, estruturas de controlo, arrays e vectores, interfaces, etc.) de modo a que possam analisar, compreender e modelizar problemas através de classes/interfaces Java. Posteriormente, pretende-se que os alunos dominem a implementação de interfaces gráficas e Applets. Finalmente, pretende-se que os alunos sejam capazes de compreender e utilizar excepções, de manipular  ficheiros (cf. de texto e binários), de desenvolver aplicações concorrentes (cf. Threads) e de utilizar os mecanismos de programação em rede disponibilizados pelo Java.

No final do semestre os alunos deverão ser capazes de compreender fluentemente diferentes tipos de programas/classes em Java e utilizar todas as potencialidades desta linguagem para solucionar múltiplos problemas de programação e desenvolver interfaces gráficas.


 

Conteúdos por unidade lectiva e sua forma de execução pedagógica:

 

 

Conteúdos

Horas Contacto

Estudo Individual

ECTS

Bibliografia

(T+TP+P+L+TC+OT)

1. Introdução à programação OO & UML

 

 

 

 

1.1. Concepção de software Orientado aos Objectos

12

14

1

[1]

1.1.1. Classes versus objectos

1.1.2. Mensagens

1.1.3. Herança

1.1.4. Polimorfismo

1.2. Ferramentas CASE

1.2.1. Exemplos (cf. Rational Rose, Argo, Poseidon)

1.2.2. Metodologias baseadas em UML

1.2.3. Use-cases e diagramas de classes

1.2.4. Geração de código a partir de diagramas de classes

2. A tecnologia Java

 

 

 

 

2.1. Ferramentas e tecnologias (JDK)

6

8

0,5

[2], [3], [5]

2.2. Ambientes integrados desenvolvimento (cf. JBuilder, Eclipse)

2.3. Documentação

2.4. Interpretador (JVM)

2.5. Estrutura das aplicações Java

3. Introdução à linguagem de programação Java

 

 

 

 

3.1. Classes

18

32

2

[2], [3], [4]

3.1.1. Tipos de dados

3.1.2. Atributos - declaração e inicialização de variáveis membro

3.1.3. Métodos – polimorfismo (overloading)

3.3. Operadores

3.4. Entrada e saída de dados básica

3.5. Expressões de controlo de fluxo

3.6. Arrays e vectores

3.7. Contratos e serviços - Interfaces

3.8. Herança de classes (extend)

3.9. Herança de interfaces (implement)

4. Aplicações gráficas para a Web

 

 

 

 

4.1. Interfaces gráficas

16

24

1,5

[2], [3], [4]

4.2. Comparação entre AWT e Swing

4.3. Hierarquia de componentes gráficos da package Swing

4.3.1. Componentes contentores

4.3.2. Componentes gráficos

4.3.3. Gestores de estrutura (Layout)

4.4. Programação por eventos

4.5. Applets

5. Conceitos avançados sobre Java

 

 

 

 

5.1. Packages

12

14

1

[2], [3], [4]

5.2. Manipulação de erros e excepções

5.3. Manipulação de ficheiros

5.4. Threads

5.5. Networking

TOTAL

64

92

     6

 

156

 

Nota: Nº de ECTS = horas/26

 

Conteúdos-Horas-Contacto-Estudo Individual–ECTS-Bibliografia

1. Introdução à programação orientada aos objectos–12–14–1-[1]

2. A tecnologia Java–6-8-0,5-[2], [3], [5]

3. Introdução à linguagem de programação Java-18-32-2-[2], [3], [4]

4. Aplicações gráficas para a Web-16-24-1,5-[2], [3], [4]

5. Conceitos avançados sobre Java-12-14-1-[2], [3], [4]

 

Bibliografia:

Principal

[1] H.E. Eriksson and M. Penker, “UML Toolkit”, John Wiley & Sons Inc., October 1997.

[2] Eckel, Bruce, “Thinking in Java”, President, MindView Inc., 1997, URL: www.eckelobjects.com (2001).

[3] Hubbard, J. R., “Programação em Java”, Schaum’s easy Outlnes, McGraw Hill, 2002.

[4] Sun, The Java Tutorial, A practical guide for programmers, URL: http://java.sun.com/docs/books/tutorial/index.html (2003).

[5] Sun Developers Services, URL: http://developer.java.sun.com/developer/ (2003).

 

Recursos informáticos de apoio - Ambientes de desenvolvimento

[1] JBuider – Borland, http://www.borland.com/downloads/download_jbuilder.html

[2] Eclipse, http://www.eclipse.org/downloads; Visual Editor, http://www.eclipse.org/vep/WebContent/main.php; ou V4ALL Eclipse Swing & SWT GUI Designer, V4ALL Eclipse Swing & SWT GUI Designer, http://sourceforge.net/projects/v4all/

[3] Netbean IDE, http://www.netbeans.org/downloads

 

Requisitos a serem cumpridos para registo total dos ECTS:

 

A aprovação (nota final igual ou superior a dez valores) é condição necessária, mas não suficiente, para creditar esta unidade curricular. Para obter a creditação desta unidade curricular o aluno terá de garantir a obtenção de todos os ECTS previstos para a unidade curricular. A atribuição dos ECTS ao aluno não é dependente exclusivamente da assiduidade em sala de aula (obrigatoriamente assegurada a, pelo menos, a 70% das aulas práticas laboratoriais e 50% das aulas teórico-práticas leccionadas); ela é também decidida em função da assiduidade aos actos pedagógicos programados pelo professor e da participação em seminários, eventos culturais e científicos a definir pelo docente ou a coordenação da área científica de Informática.

 

Os ECTS previstos para o trabalho e estudo pessoal do aluno só lhe serão integralmente atribuídos em função do desempenho demonstrado, nomeadamente no que respeita à aquisição dos conhecimentos e competências visados por esta unidade curricular: conhecimento efectivo da bibliografia indicada e demonstração do conhecimento da linguagem Java e da capacidade para compreender e desenvolver programas nesta linguagem. O grau de desenvolvimento de conhecimentos bem como de aquisição de competências nas áreas temáticas compreendidas no programa da disciplina será avaliado de modo contínuo ao longo do semestre, quer em termos do domínio dos conceitos teóricos que sustentam a análise e compreensão de programas em Java, quer em termos do domínio das metodologias e técnicas de desenvolvimento de aplicações e projectos orientados aos objectos em Java, quer ainda em termos de comunicação oral e escrita dos temas e conceitos abordados.

 

Resumo: Introdução à programação orientada aos objectos: concepção de software orientado aos objectos (cf. classe e objectos, mensagens; herança e polimorfismo); Ferramentas CASE (cf. metodologias baseadas em UML, diagramas de classes e geração de código). Tecnologia Java: ferramentas e tecnologias (JDK); ambientes integrados de desenvolvimento, documentação; interpretador (JVM) e estrutura das aplicações. Introdução à linguagem de programação Java: classes, tipos de dados, atributos e métodos; operadores; expressões de controlo de fluxo; entrada e saída de dados; arrays e vectores; interfaces e herança. Aplicações gráficas para a Web; AWT versus Swing; hierarquia de componentes gráficos; programação por eventos e Applets. Conceitos avançados sobre Java: packages; manipulação de erros e excepções; manipulação de ficheiros; threads e networking.

 

Abstract: Introduction to object-oriented programming: design object-oriented software (cf. classes and objects; messages; inheritance and polymorphism); CASE tools (cf. UML-based methodologies, class diagrams and code generation). The Java technology: tools and tecnologies (JDK); integrated development environments; documentation; the Java Virtual Machine interpreter (JVM) and the structure of applications. Introduction to the Java programming language: classes, data types; attributes and methods, operators; flow control; data input/output; arrays and vectors; interfaces and inheritance. Graphic Web applications: AWT versus Swing; hierarchy of graphic components; event-based programming and Applets. Advanced Java concepts: packages; error and exception handling; files; threads and networking.