Difference between revisions of "Programação com Objectos"

From Wiki**3

m (Exemplos)
Line 4: Line 4:
 
A definição oficial do conteúdo de cada aula pode ser encontrada na [https://fenix.ist.utl.pt/publico/viewSite.do?method=summaries&objectCode=8711&executionPeriodOID=83 página dos sumários] mantida pelo Fénix.
 
A definição oficial do conteúdo de cada aula pode ser encontrada na [https://fenix.ist.utl.pt/publico/viewSite.do?method=summaries&objectCode=8711&executionPeriodOID=83 página dos sumários] mantida pelo Fénix.
  
== Apresentação ==
+
* [[PO 2005/2006: Apresentação da disciplina|Apresentação da disciplina]]
Material correspondente à Aula 01.
+
* [[PO 2005/2006: Introdução|Introdução]]
 
+
* [[PO 2005/2006: Operadores, Expressões e Controlo de Fluxo|Operadores, Expressões e Controlo de Fluxo]]
===Objectivos Gerais===
+
* [[PO 2005/2006: Construção de Objectos|Construção de Objectos]]
A disciplina de Programação com Objectos tem como objectivo que os alunos fiquem a conhecer o paradigma da programação baseada em objectos, assim como as metodologias e tecnologias a ela associadas. Pretende-se que os alunos conheçam as suas vantagens, inconvenientes e limitações.
+
* [[PO 2005/2006: Organização de Código|Organização de Código]]
 
 
Assim, parecem ser quatro as principais competências e atitudes que identificam os processos cognitivos internos do aluno, uma vez finalizado o processo educativo:
 
#Conhecer e utilizar o paradigma da programação baseada em objectos
 
#Conhecer e utilizar a linguagem Java
 
#Conhecer e utilizar padrões de desenho
 
#Conhecer e utilizar as técnicas de escrita de testes de avaliação para o código produzido
 
 
 
===Objectivos Operacionais===
 
As condutas observáveis e mensuráveis, uma vez concluída com sucesso esta disciplina, são:
 
#Justificar os princípios da programação baseada em objectos e os conceitos de encapsulamento, abstracção, herança e polimorfismo
 
#Explicar como o mecanismo de classes permite codificar, encapsular e esconder informação
 
#Comparar as noções de ''overloading'' e ''overriding'' de métodos
 
#Modelar problemas usando uma linguagem baseada em objectos
 
#Usar a linguagem Java (programação, teste e depuração) para resolver problemas modelados com objectos
 
#Usar UML para representar relações estáticas entre classes (herança, agregação e referência) e de colaboração (diagramas de sequência)
 
#Usar uma convenção para os nomes das entidades de um programa durante a codificação
 
#Seleccionar e utilizar padrões de desenho no desenvolvimento de aplicações;
 
#Programar testes para avaliar código
 
 
 
===Programa===
 
====Objectos e a Linguagem Java====
 
Os seguintes tópicos correspondem ao paradigma de programação baseada em objectos e à linguagem Java.
 
*Introdução aos objectos: definição, interface, polimorfismo, longevidade, classes, métodos, programas, regras de codificação
 
*Operadores e controlo de execução: precedências, atribuição, moldagem, literais, instruções de controlo de fluxo
 
*Iniciação e limpeza: construtores, métodos sobrecarregados, <code>[[Palavras chave da linguagem Java#this|this]]</code>, colector de lixo, iniciação
 
*Esconder a realização: bibliotecas, acesso aos membros, acesso à classe
 
*Reutilização: herança, composição, desenvolvimento incremental e palavra reservada <code>[[Palavras chave da linguagem Java#final|final]]</code>, carregamento de classes
 
*Polimorfismo: ''binding'' de métodos; ''overloading'' vs. ''overriding''; classes abstractas e interfaces
 
*Classes internas
 
*Excepções: apanhar uma excepção; criar novas excepções; <code>[[Palavras chave da linguagem Java#finally|finally]]</code>
 
*Guardar os objectos: vectores; contentores; iteradores; colecções; "list"; "set"; "map"
 
*Entradas e saídas: a classe <code>File</code>; ''streams''; compressão; serialização
 
*Classe <code>Class</code>
 
 
 
====Linguagem UML====
 
* Diagrama de classes
 
* Diagrama de sequência
 
 
 
====Padrões de Desenho====
 
*Introdução: como seleccionar um padrão; como usar um padrão
 
*Padrões ''Composite'', ''Command'', ''State'', ''Template Method'', ''Decorator'', ''Strategy'', ''Observer'', ''Abstract factory'', ''Bridge'', ''Visitor''
 
*Catálogo de padrões de desenho
 
 
 
===Avaliação===
 
O método de avaliação é como se indica na [https://fenix.ist.utl.pt/publico/viewSite.do?method=evaluationMethod&objectCode=8711&executionPeriodOID=83 página oficial]<br/>
 
A informação disponibilizada aqui é apenas um resumo com fins meramente informativos.
 
 
 
'''1ª Componente - 50%'''<br/>
 
Projecto (sem nota mínima) com as seguintes datas:
 
*Entrega intermédia: 14 de Novembro de 2005
 
*Entrega final: 30 de Novembro de 2005
 
*Discussões finais decorrem de 13 a 15 de Dezembro de 2005. A discussão final inclui um teste prático.
 
 
 
'''2ª Componente - 40%'''<br/>
 
Teste (nota mínima de 7.5 valores) a realizar em 20 de Dezembro de 2005.<br/>
 
Repescagem a 4 de Fevereiro de 2006.
 
 
'''3ª Componente - 10%'''<br/>
 
Seis Séries de Exercícios (sem nota mínima) a realizar nas aulas práticas e em casa.
 
 
 
===Informação Adicional===
 
 
 
*  [https://fenix.ist.utl.pt/publico/viewSiteExecutionCourse.do?method=firstPage&objectCode=43084 Página oficial] (Fénix)
 
 
 
== Introdução ==
 
Material correspondente à Aula 02.
 
 
 
===Introdução aos objectos===
 
* [[O que é um objecto?|O que é um objecto]]
 
* [[Captura de características dos objectos]]
 
 
 
===Introdução à programação em Java===
 
* [[Tipos primitivos em Java|Tipos primitivos]]: dados atómicos simples;
 
* [[Classes, objectos e referências (Java)|Objectos e referências em Java]]: referências e estruturas compostas;
 
* [[Comparação de Linguagens de Programação|Contraste com C/C++]]: diferenças e semelhanças;
 
* Organização da memória: zonas e memória e respectiva utilização pelos conceitos da linguagem;
 
* [[Classes, objectos e referências (Java)|Definição de classes simples]]: conceitos de variável e método;
 
* O uso da palavra reservada <code>static</code>: definição de dados e funções partilhados;
 
* [[Convenções de escrita de programas em Java]]: melhoramento da legibilidade de um programa;
 
* Escrita e compilação de programas.
 
===Exemplos===
 
 
 
* [[PO 2005/06: Exemplos da Aula 02|Exemplos de Classes em Java]]: ''"Hello world"''.
 
 
 
== Operadores, Expressões e Controlo de Fluxo ==
 
Material correspondente à Aula 03.
 
 
 
===Operadores e Expressões===
 
 
 
* Apresentação e discussão de operadores, expressões e operações de conversão de tipos primitivos e objectos em Java
 
* Aspectos relacionados noutras linguagens (C/C++/Smalltalk)
 
* Método <code>equals</code>
 
* ''[[Conversão de Tipos|Casts]]''
 
* Restrições às operações sobre booleanos
 
 
 
=== Exemplos ===
 
 
 
* [[PO 2005/06: Exemplos da Aula 03|Exemplos de aplicações simples]]: atribuição; comparador; conversão para <code>Strings</code>.
 
 
 
===Controlo de Fluxo===
 
 
 
* [[Palavras chave da linguagem Java#if|if]]-[[Palavras chave da linguagem Java#else|else]]
 
* [[Palavras chave da linguagem Java#while|while]], [[Palavras chave da linguagem Java#for|for]], [[Palavras chave da linguagem Java#do|do]]-[[Palavras chave da linguagem Java#while|while]]
 
* [[Palavras chave da linguagem Java#break|break]], [[Palavras chave da linguagem Java#continue|continue]], [[Palavras chave da linguagem Java#return|return]]
 
* [[Palavras chave da linguagem Java#switch|switch]]-[[Palavras chave da linguagem Java#case|case]]-[[Palavras chave da linguagem Java#default|default]]
 
* [[Comparação de Linguagens de Programação|Comparação com outras linguagens semelhantes]]
 
* Exemplos simples
 
 
 
== Construção de Objectos ==
 
Material correspondente à Aula 04.
 
 
 
===Construção e iniciação de objectos===
 
* Construção e iniciação de objectos em Java;
 
* Ordem de iniciação de atributos de classes (<code>static</code>) e de objectos.
 
 
 
===A Referência <code>this</code>===
 
* Uso como auto-referência
 
* Sintaxe especial para chamada a múltiplos construtores
 
 
 
===Overloading===
 
 
 
* ''[[Overloading]]'' de métodos.
 
 
 
===Exemplos===
 
 
 
[[PO 2005/06: Exemplos da Aula 04|Exemplos de aplicação]].
 
Discussão de aspectos problemáticos e [[Comparação de Linguagens de Programação|comparação com outras linguagens]] (PHP e C/C++).
 
 
 
===Destruição de objectos===
 
 
 
Discussão de aspectos relacionados com a destruição de objectos: o caso do Java ([[Comparação de Linguagens de Programação|comparação com outras linguagens]]). Este tópico foi discutido na Aula 06.
 
 
 
== Organização de Código e ''Packages'' ==
 
Material correspondente às Aulas 05 e 06.
 
 
 
===Organização de código===
 
 
 
* Revisão do conceito de tipo de dados abstracto;
 
* Organização de código: interface/implementação; separação;
 
 
 
===O caso Java===
 
* ''Packages'' e bibliotecas;
 
* Localização de classes: <code>CLASSPATH</code>.
 
* Controlo de acesso: <code>public</code>, <code>protected</code>, <code>private</code>, ''"package"''.
 
* [[Comparação de Linguagens de Programação|Comparação com outras linguagens]].
 
 
 
===Exemplos===
 
 
 
* [[PO 2005/06: Exemplos da Aula 05|Exemplos de código]]
 
* [[PO 2005/06: Exemplos da Aula 06|Exemplo completo]]
 
  
 
== Herança e Composição ==
 
== Herança e Composição ==

Revision as of 15:26, 11 November 2005

A definição oficial do conteúdo de cada aula pode ser encontrada na página dos sumários mantida pelo Fénix.

Herança e Composição

Material correspondente às Aulas 07 e 08.

Herança e composição

  • Diferenças
  • Quando usar cada uma das técnicas
  • Discussão de aspectos relacionados com estes conceitos

Exemplos

Mecanismos do Java

Exemplos

Polimorfismo

Material correspondente à Aula 09.

Tipos

  • Polimorfismo e tipos primitivos
  • Polimorfismo e tipos compostos (classes).
  • Herança e polimorfismo: upcasting e downcasting.

Organização de Código

  • Definição de métodos: overloading vs. overriding
  • Selecção do método a invocar: early binding e late binding

Exemplos

Polimorfismo e Classes Abstractas

Material correspondente à Aula 10.

Classes Abstractas

  • Noção de classe abstracta
  • Separação de interface e implementação
  • Propriedades
  • Polimorfismo e classes abstractas
  • Discussão de aspectos problemáticos

Exemplos

  • Editor gráfico sem classes abstractas
  • Editor gráfico com classes abstractas

Interfaces

Material correspondente à Aula 11.

Interfaces

  • Revisão dos conceitos subjacentes às classes abstractas e suas propriedades
  • Princípios e propriedades

Interfaces em Java

Exemplos

Classes Internas

Material correspondente às Aulas 12 e 13.

Classes internas em Java.

Princípios Básicos

  • Classes internas e os vários aspectos de definição: classes internas simples; implementação de interfaces
  • Ligação implícita entre objectos de classes internas e a instância da classe externa
  • Partilha de acesso entre classe externa e interna
  • Herança e classes internas e externas

Organização de código

  • Sintaxe
  • Organização de interfaces e classes e acesso ao código
  • Classes internas locais (métodos e blocos)
  • Classes anónimas

Exemplos

Enumerações

Material correspondente à Aula 14.

Tipos Enumerados

  • Tipos enumerados em Java
    • Enumerados como classes de domínio finito
    • Propriedades dos enumerados
    • Constraste com a definição de enumerações noutras linguagens (C, C++)

Exemplos

Excepções

Material correspondente à Aula 15.

Introdução às Excepções

  • Introdução às excepções
  • Uso do mecanismo de excepções no controlo da execução de programas

Excepções em Java

  • Mecanismo de excepções em Java
  • Excepções e erros
  • Classes de suporte às excepções: Throwable, Exception, Error
  • Tipos de excepções: checked exceptions (verificadas em tempo de compilação) e excepções durante a execução (RuntimeException).

Exemplos