|
|
(264 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/po24-plano |
− | 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 a Unified Modeling Language (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===
| + | * Semana 1.1: [[Programação com Objectos/Aula Prática 01|Aula Prática 01]] - Tipos de dados abstractos em C e em C++ |
− | ====Objectos e a Linguagem Java====
| + | * 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 |
− | Os seguintes tópicos correspondem ao paradigma de programação baseada em objectos e à linguagem Java.
| + | * 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) |
− | *Introdução aos objectos: tudo é um objecto; interface; polimorfismo; tempos de vida | + | * Semana 2.2: [[Programação com Objectos/Aula Prática 04|Aula Prática 04]] - Herança, polimorfismo, aspectos de programação OO |
− | *Tudo é um objecto: definição; longevidade; classes; métodos; programas; regras de codificação | + | * Semana 3.1: [[Programação com Objectos/Aula Prática 05|Aula Prática 05]] - Polimorfismo: interfaces e classes abstractas |
− | *Instruções de controlo: precedências; atribuição; operadores; moldagem; literais; controlo de execução | + | * Semana 3.2: [[Programação com Objectos/Aula Prática 06|Aula Prática 06]] - Java: classes internas; comparadores, iteradores |
− | *Iniciação e Limpeza; construtores; métodos sobrecarregados; "this"; colector de lixo; iniciação | + | * Semana 4.1: [[Programação com Objectos/Aula Prática 07|Aula Prática 07]] - Java: excepções; colecções |
− | *Esconder a realização: bibliotecas; acesso aos membros; acesso à classe | + | * Semana 4.2: [[Programação com Objectos/Aula Prática 08|Aula Prática 08]] - Java: entradas e saídas; serialização de objectos |
− | *Reutilização: composição; herança; desenvolv. Incremental;palavra reservada "final"; carregamento de classes | + | * Semana 5.1: [[Programação com Objectos/Aula Prática 09|Aula Prática 09]] - Composite (padrão de desenho) |
− | *Polimorfismo: ligação na chamada de métodos; carregar vs. substituir; classes abstractas | + | * 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) |
− | *Interfaces | + | * Semana 6.1: [[Programação com Objectos/Aula Prática 11|Aula Prática 11]] - Visitor (padrão de desenho) |
− | *Classes internas | + | * 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) |
− | *Excepções: apanhar uma excepção; criar nobvas excepções; "finally" | + | * Semana 7.1: [[Programação com Objectos/Aula Prática 13|Aula Prática 13]] - Diagramas de sequência UML |
− | *Guardar os objectos: vectores; contentores; iteradores; colecções; "list"; "set"; "map" | |
− | *Entradas /saÃdas: a classe "File"; "streams"; compressão; serialização de objectos
| |
− | *Classe "Class"
| |
| | | |
− | ====Linguagem UML==== | + | == Pautas == |
− | * Diagrama de classes | + | 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. |
− | * Diagrama de sequência | + | * {{PautaAberta}} [[Programação com Objectos/Pautas 2024-2025|Pautas 2024-2025]] |
| + | * {{PautaFechada}} Pautas de anos anteriores: [[Programação com Objectos/Pautas 2023-2024|2023-2024]] [[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]] |
| | | |
− | ====Padrões de Desenho==== | + | <!--== Testes de Avaliação (por data) == |
− | *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===
| + | [[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]] |
| | | |
− | ===Informação Adicional===
| + | [[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]] |
− | | + | --> |
− | * [https://fenix.ist.utl.pt/publico/viewSiteExecutionCourse.do?method=firstPage&objectCode=43084 Página oficial] (Fénix)
| + | [[category:Ensino]] |
− | | + | [[category:PO]] |
− | == Aula 02: Introdução ==
| + | [[en:Object-Oriented Programming]] |
− | | |
− | ===Introdução aos objectos===
| |
− | * [[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.
| |
− | | |
− | ===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|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]] | |
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.