![Page 1: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/1.jpg)
Programação Orientada a Objetos
Metaclasse, Reflexão e Anotação
André SantanchèLaboratory of Information Systems – LIS
Instituto de Computação – UNICAMPMaio 2019
Pic
ture
by
Do
ug
Wh
ell
er
[htt
p:/
/ww
w.f
lic
kr.
co
m/p
ho
tos
/do
ug
88
88
8/5
81
77
115
38
/]
![Page 2: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/2.jpg)
Metaclasse
![Page 3: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/3.jpg)
Metaclasse
▪ Classe cuja instância é outra classe
Metaclasse
Classe
Class
minhaClasse
Java
Classe minhaClasse
metamodelo modelo metamodelo modelo
![Page 4: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/4.jpg)
Objeto Genérico
▪ Instância genérica da metaclasse
Metaclasse
Objeto Genérico
Class
Object
Java
Objeto Genérico Object
metamodelo modelo metamodelo modelo
![Page 5: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/5.jpg)
Objeto Genérico
▪ Todas as classes são herdeiras do Objeto Genérico
Metaclasse
Objeto Genérico
Class
Object
Java
Objeto Genérico Object
metamodelo modelo metamodelo modelo
Classe minhaClasse
![Page 6: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/6.jpg)
Métodos e Atributos
Class Methodmethods
Field
fields
![Page 7: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/7.jpg)
Dentro da Classe Bastião
name: MinhaClasseAttributes: {( ), ( )}methods: {( )}
public Class MinhaClasse { int valor; String x;
void m() { }}
name: mreturnType: void
<<Method>>
name: valortype: int
<<Field>>
name: xtype: String
<<Field>>
classeBastiao
![Page 8: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/8.jpg)
Reflexão e Introspecção
![Page 9: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/9.jpg)
Reflexão e Introspecção
▪ Introspecção: habilidade de um programa de examinar suas próprias estruturas de dados e de programação durante a execução.
▪ Reflexão: habilidade de um programa de examinar e modificar suas próprias estruturas de dados e de programação durante a execução.
![Page 10: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/10.jpg)
Anotação
![Page 11: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/11.jpg)
Comentário
▪ Técnica para registro de informações legíveis para programadores no código fonte
▪ Para documentação e para tornar o código mais fácil de interpretar por programadores
▪ Usualmente ignorado pelo compilador ou interpretador
▪ Tipos
▫ // comentário de linha→
▫ /* */ comentário de bloco→
![Page 12: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/12.jpg)
Javadoc
▪ Tipo especial de comentário em Java
▪ Marcação com dois asteriscos no início /**
▪ Para geração automática de documentação/** * Interface for the Fish component that * enables to trigger the fish drawing. * * @author Andre Santanche * */
public interface IFish extends ISupports
![Page 13: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/13.jpg)
Tags no Javadoc
▪ @author (classes and interfaces only, required)
▪ @version (classes and interfaces only, required. See footnote 1)
▪ @param (methods and constructors only)
▪ @return (methods only)
▪ @exception (@throws is a synonym added in Javadoc 1.2)
▪ @see
▪ @since
▪ @serial (or @serialField or @serialData)
▪ @deprecated (see How and When To Deprecate APIs)
Documentação Java, 2015
![Page 14: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/14.jpg)
Anotação
▪ Metadados que podem ser adicionados ao código fonte
▪ Não tem efeito direto na execução do código
▪ Anotação x Comentário
▫ Anotação é mais estruturada que comentário
▫ Pode ser lida e interpretada pelo compilador
![Page 15: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/15.jpg)
Anotação
▪ Pode ser usada
▫ Pelo compilador para erros e advertências◦ Exemplo: @Overrride e @Deprecated
▫ Em tempo de compilação/execução◦ Exemplo: gerar arquivo XML
▫ Em tempo de execução
▪ Retention Policy▫ CLASS mantém no bytecode mas não carrega→
▫ RUNTIME mantém no bytecode e carrega→
▫ SOURCE não mantém no bytecode (descarta)→
![Page 16: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/16.jpg)
Anotações no Metamodelo Java
Classmethods
fields
Method
Field
Annotation
annotations
annotations
annotations
![Page 17: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/17.jpg)
Anotação
@Component( id = "<http://purl.org/dcc/pt.c02foundations.statistics.s01.StatisticsComponent>", provides = {"<http://purl.org/dcc/pt.c02foundations.statistics.s01.IStatistics>"})
![Page 18: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/18.jpg)
UML Profile
![Page 19: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/19.jpg)
Profile UML
▪ Mecanismo de extensão do modelo UML
▪ Nele podem ser definidos (entre outros):
▫ Estereótipos
▫ Metaclasses
![Page 20: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/20.jpg)
Ferramenta de Referência
▪ Eclipse
▪ Plugin Papyrus Instalado
![Page 21: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/21.jpg)
Caso PráticoProfile MVC
![Page 22: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/22.jpg)
MVCModel-View-Controller
▪ Estilo arquitetural cujos componentes são divididos em três grupos:
▫ Model: modelo subjacente da aplicação◦ representada como estruturas de dados ou de classes
▫ View: lida com a parte de apresentação visual (gráfica)
▫ Controller: interface entre Model e View e com os dispositivos de entrada
![Page 23: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/23.jpg)
Profile MVCbaseado em
A Comparison of Standard Compliant Ways to Define Domain Specific Languages
Ingo Weisemöller and Andy Schürr
Models in Software Engineering - Workshops and Symposia at MoDELS 2007, Nashville, TN, USA, 2007http://www.megaplanet.org/atem2007/ATEM2007-7.pdf
![Page 24: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/24.jpg)
Referências
▪ Rubira, Cecília Mary Fischer (2011). Introdução à Programação Orientada a Objetos Usando Java. Slides de aula, IC – Unicamp.
![Page 25: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/25.jpg)
André Santanchèhttp://www.ic.unicamp.br/~santanche
![Page 26: Programação Orientada a Objetossantanch/teaching/oop/... · Tags no Javadoc @author (classes and interfaces only, required) @version (classes and interfaces only, required. See](https://reader033.vdocument.in/reader033/viewer/2022050609/5fb0d6643f5a2d73911a0bcf/html5/thumbnails/26.jpg)
Licença▪ Estes slides são concedidos sob uma Licença Creative
Commons. Sob as seguintes condições: Atribuição, Uso Não-Comercial e Compartilhamento pela mesma Licença.
▪ Mais detalhes sobre a referida licença Creative Commons veja no link:http://creativecommons.org/licenses/by-nc-sa/3.0/
▪ Agradecimento a Doug Wheller [http://www.flickr.com/photos/doug88888/] por sua fotografia “Two drops” usada na capa e nos fundos, disponível em [http://www.flickr.com/photos/doug88888/5817711538/]vide licença específica da fotografia.