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

From Wiki**3

(Objectivos Operacionais)
(Pautas)
 
(269 intermediate revisions by the same user not shown)
Line 1: Line 1:
{| cellspacing="0" cellpadding="0" style="clear:right; margin-bottom: .5em; float: right; padding: .5em 0 .8em 1.4em; background: none;"
+
__NOTOC__
|
+
{{NAVPO}}
__TOC__
+
<!-- {{TOCright}} -->
|}
+
<!-- __NOEDITSECTION__ -->
 +
{{Suggestion|https://bit.ly/po-wiki}}
 +
== Tópicos Teóricos e Práticos ==
  
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.
+
* [[Tópicos sobre Programação com Objectos]] (teoria e prática)
  
== Aula 01: Apresentação ==
+
== Projecto ==
  
===Objectivos Gerais===
+
* [[Programação com Objectos/Projecto de Programação com Objectos|Projecto de Programação com Objectos]] -- informação sobre todos os aspectos do projecto
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.
 
  
Assim, parecem ser quatro as principais competências e atitudes que identificam os processos cognitivos internos do aluno, uma vez finalizado o processo educativo:
+
== Aulas Práticas ==
#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===
+
Plano das aulas: https://bit.ly/po23-plano
As condutas observáveis e mensuráveis, que deve ter o aluno uma vez concluída, com sucesso, esta disciplina, são:  
 
#Justificar os princípios da programação com objectos e os conceitos do encapsulamento, da abstracção, da herança e do polimorfismo;
 
#Explicar como o mecanismo de classes permite codificar, encapsular e esconder informação;
 
#Comparar as noções de sobrecarregar (overloading) e redefinir (overriding) métodos;
 
#Modelar problemas usando uma linguagem orientada a objectos;
 
#Usar a linguagem Java (programação, teste e depuração) para resolver problemas modelados com objectos;
 
#Usar Unified Modeling Language (UML) para representar relações estáticas entre classes (herança, agregação e referência) e relações 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===
+
* Semana 1.1: [[Programação com Objectos/Aula Prática 01|Aula Prática 01]] - Tipos de dados abstractos em C e em C++
===Avaliação===
+
* Semana 1.2: [[Programação com Objectos/Aula Prática 02|Aula Prática 02]] - Processos de análise e modelação; criação de classes simples
 +
* Semana 2.1: [[Programação com Objectos/Aula Prática 03|Aula Prática 03]] - Criação de objectos, herança, polimorfismo, overloading e overriding (métodos)
 +
* Semana 2.2: [[Programação com Objectos/Aula Prática 04|Aula Prática 04]] - Herança, polimorfismo, aspectos de programação OO
 +
* Semana 3.1: [[Programação com Objectos/Aula Prática 05|Aula Prática 05]] - Polimorfismo: interfaces e classes abstractas
 +
* Semana 3.2: [[Programação com Objectos/Aula Prática 06|Aula Prática 06]] - Java: classes internas; comparadores, iteradores
 +
* Semana 4.1: [[Programação com Objectos/Aula Prática 07|Aula Prática 07]] - Java: excepções; colecções
 +
* Semana 4.2: [[Programação com Objectos/Aula Prática 08|Aula Prática 08]] - Java: entradas e saídas; serialização de objectos
 +
* Semana 5.1: [[Programação com Objectos/Aula Prática 09|Aula Prática 09]] - Composite (padrão de desenho)
 +
* Semana 5.2: [[Programação com Objectos/Aula Prática 10|Aula Prática 10]] - Strategy (padrão de desenho) & State (padrão de desenho)
 +
* Semana 6.1: [[Programação com Objectos/Aula Prática 11|Aula Prática 11]] - Visitor (padrão de desenho)
 +
* Semana 6.2: [[Programação com Objectos/Aula Prática 12|Aula Prática 12]] - Decorator (padrão de desenho) & Adapter (padrão de desenho)
 +
* Semana 7.1: [[Programação com Objectos/Aula Prática 13|Aula Prática 13]] - Diagramas de sequência UML
  
===Informação Adicional===
+
== Pautas ==
 +
As páginas das pautas contêm, além dos resultados de avaliação, também os critérios de avaliação e aprovação.
 +
* {{PautaAberta}} [[Programação com Objectos/Pautas 2023-2024|Pautas 2023-2024]]
 +
* {{PautaFechada}} Pautas de anos anteriores: [[Programação com Objectos/Pautas 2022-2023|2022-2023]] [[Programação com Objectos/Pautas 2021-2022|2021-2022]] [[Programação com Objectos/Pautas 2020-2021|2020-2021]] [[Programação com Objectos/Pautas 2019-2020|2019-2020]] [[Programação com Objectos/Pautas 2018-2019|2018-2019]] [[Programação com Objectos/Pautas 2017-2018|2017-2018]] [[Programação com Objectos/Pautas 2016-2017|2016-2017]] [[Programação com Objectos/Pautas 2015-2016|2015-2016]] [[Programação com Objectos/Pautas 2014-2015|2014-2015]]
  
*  [https://fenix.ist.utl.pt/publico/viewSiteExecutionCourse.do?method=firstPage&objectCode=43084 Página oficial] (Fénix)
+
<!--== Testes de Avaliação (por data) ==
  
== Aula 02: Introdução ==
+
[[Programação com Objectos/Teste de 2013/11/15|20131115]] [[Programação com Objectos/Teste 1 de 2013/02/04|20130204(1)]] [[Programação com Objectos/Teste 2 de 2013/02/04|20130204(2)]] [[Programação com Objectos/Teste de 2013/01/17|20130117]] [[Programação com Objectos/Teste de 2012/11/19|20121119]]
  
===Introdução aos objectos===
+
[[Programação com Objectos/Teste de 2012/01/30|20120130]] [[Programação com Objectos/Teste de 2012/01/07|20120107]] [[Programação com Objectos/Teste de 2011/01/10|20110110]] [[Programação com Objectos/Teste de 2010/01/21|20100121]] [[Programação com Objectos/Teste de 2010/01/04|20100104]] [[Programação com Objectos/Teste de 2009/01/24|20090124]] [[Programação com Objectos/Teste de Dezembro de 2008|200812]] [[Programação com Objectos/Teste de Dezembro de 2005|200512]]
* [[O que é um objecto?|O que é um objecto]]
+
-->
* Aspectos da captura de características: como capturar a natureza das coisas, tendo em consideração os aspectos de interesse para o fim em causa.
+
[[category:Ensino]]
 
+
[[category:PO]]
===Introdução à programação em Java===
+
[[en:Object-Oriented Programming]]
* [[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|Exemplo simples]]: ''"Hello world"''.
 
 
 
== Aula 03: Operadores, Expressões e Controlo de Fluxo ==
 
 
 
===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
 
 
 
== Aula 04: Construção de Objectos ==
 
 
 
===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.
 
 
 
== Aulas 05 e 06: Organização de Código e ''Packages'' ==
 
 
 
===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]]
 
 
 
== Aulas 07 e 08: Herança e Composição ==
 
 
 
===Herança e composição===
 
 
 
* Diferenças
 
* Quando usar cada uma das técnicas
 
* Discussão de aspectos relacionados com estes conceitos
 
 
 
===Exemplos===
 
 
 
* [[PO 2005/06: Exemplos da Aula 07|Classe Gato como subclasse de Mamífero]]
 
* [[PO 2005/06: Exemplos da Aula 07|Composição de um Gato a partir de "peças básicas"]]
 
 
 
===Mecanismos do Java===
 
 
 
* Chamadas a construtores
 
* Ordem de iniciação
 
* Controlo de utilização de atributos e métodos
 
* A palavra chave [[Palavras chave da linguagem Java#final|final]]
 
* Uso de [[Palavras chave da linguagem Java#private|private]], [[Palavras chave da linguagem Java#protected|protected]] e [[Palavras chave da linguagem Java#public|public]]: discussão de aspectos relativos ao uso destas palavras chave
 
* Funcionamento das [[As referências this e super (Java)|referências this e super]]
 
 
 
===Exemplos===
 
 
 
* [[PO 2005/06: Exemplos da Aula 08|Apresentação e discussão de exemplo completo]]: classes <code>Evento</code>, <code>RefeiçãoComSopa</code>, <code>Almoço</code>, <code>Jantar</code>, <code>Sopa</code> e <code>Bolo</code>.
 
* Referências [[Palavras chave da linguagem Java#this|this]] e [[Palavras chave da linguagem Java#super|super]]: exemplo prático no contexto da aplicação <code>Evento</code>.
 
 
 
== Aula 09: Polimorfismo ==
 
 
 
===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===
 
 
 
* [[PO 2005/06: Exemplos da Aula 09#Hierarquia de Classes|Exemplo simples]]: <code>Animal</code>, <code>Mamífero</code>, <code>Gato</code>
 
* [[PO 2005/06: Exemplos da Aula 09#Vector|Exemplo com vector]].
 
 
 
== Aula 10: Polimorfismo e Classes Abstractas ==
 
 
 
===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
 
 
 
== Aula 11: Interfaces ==
 
 
 
===Interfaces===
 
 
 
* Revisão dos conceitos subjacentes às classes abstractas e suas propriedades
 
* Princípios e propriedades
 
 
 
===Interfaces em Java===
 
 
 
* Comparação entre classes abstractas e interfaces
 
 
 
===Exemplos===
 
 
 
* Exemplos simples em Java e C++ (classes virtuais puras)
 
* Exemplo completo em Java: Cão, Vigilante, CãoDeGuarda, CãoPastor
 
 
 
[[category:OOP]]
 
[[category:Aulas]]
 

Latest revision as of 11:15, 28 August 2023

Programação com Objectos
Introduction
Creation and Destruction
Inheritance & Composition
Abstraction & Polymorphism
Code Organization
Java Topics
Inner Classes
Enumerations
Data Structures
Exceptions
Input/Output
RTTI
Other Topics
JUnit Tests
UML Topics
Design Patterns
"Simple" Factory
Composite & Visitor
Command
Strategy & State
Template Method
Observer
Abstract Factory
Decorator & Adapter
Façade (aka Facade)

Tópicos Teóricos e Práticos

Projecto

Aulas Práticas

Plano das aulas: https://bit.ly/po23-plano

Pautas

As páginas das pautas contêm, além dos resultados de avaliação, também os critérios de avaliação e aprovação.