29
Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic Programming André Santanchè e Oscar Rojas Instituto de Computação – UNICAMP Maio 2019 Picture by http://www.flickr.com/photos/fdecomite/1457493536/

Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Programação Orientada a Objetos

Tipos, Ponteiros eDatatype-Generic Programming

André Santanchè e Oscar RojasInstituto de Computação – UNICAMP

Maio 2019

Pic

ture

by

htt

p:/

/ww

w.f

lickr

.co

m/p

ho

tos/

fdec

om

ite/

1457

4935

36/

Page 2: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Tipos de Dados Primitivosx

Classes

Page 3: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Duplo Papel das Variáveis

▪ Variáveis que contêm dados de tipos primitivos

▪ Variáveis que são ponteiros para objetos

Page 4: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Ponteiros Implícitos

▪ Java os apresenta de maneira indistinta, sem ponteiros explícitos

int valor;

Circle c;

Page 5: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Wrapper

▪ Tipos primitivos tratados como objetos:

Page 6: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Wrapper Classes

Primitive Data Type Wrapper Class

char Character

byte Byte

short Short

long Integer

float Float

double Double

boolean Boolean

Page 7: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Exercício

▪ Liste quais as vantagens e desvantagens de representar tipos primitivos na forma de objetos.

Page 8: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Vantagens e desvantagens

▪ Vantagens

▫ Passagem de parametro por referencia

▫ Tratamento homogeneo

▪ Desvantagens

▫ Memória

▫ Tempo de processamento

Page 9: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Vetor Estático e Dinâmico

Page 10: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Vetor Estático▪ Declaração

<tipo>[] <declaração1>, ..., <declaração

n>;

<tipo> <declaração1>[], ..., <declaração

n>[];

▫ <declaração>◦ Sintaxe: <nome> = <inicialização>◦ Chaves são usadas para inicializar cada dimensão◦ Ex.: int primos[] = {1, 2, 3, 5, 7};

▪ Quando a inicialização não é inline o vetor ou matriz precisa ser instanciado<nome> = new <tipo>[<tamanho>]▫ Ex.:

int primos[];primos = new int[5];

Page 11: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Vetor DinâmicoBaseado em Classes

▪ Crescem conforme a demanda▪ ArrayList

▫ não sincronizada

▫ múltiplas rotinas paralelas podem atualizá-lo simultaneamente

▪ Vector▫ sincronizada

▫ Somente uma rotina atualiza de cada vez

Page 12: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Vetor DinâmicoBaseado em Classes

▪ Crescem conforme a demanda▪ ArrayList

▫ não sincronizada

▫ múltiplas rotinas paralelas podem atualizá-lo simultaneamente

▫ velocidade

▪ Vector▫ sincronizada

▫ somente uma rotina atualiza de cada vez

▫ consistencia

Page 13: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Vetor DinâmicoBaseado em Classes

▪ Crescem conforme a demanda▪ ArrayList

▫ não sincronizada

▫ múltiplas rotinas paralelas podem atualizá-lo simultaneamente

▪ Vector▫ sincronizada

▫ Somente uma rotina atualiza de cada vez

Page 14: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Exercício

▪ Quais as vantagens e desvantagens das abordagens de Vector e ArrayList?

Page 15: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Generalidade (Genericity)

Page 16: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Genericity x Inheritance

▪ Genericity – “[…] defining elements that have more than one interpretation. depending on parameters representing types”

▪ Inheritance – “[…] to define elements as extensions or restrictions of previously defined ones.”

▪ “Both methods apply some form of polymorphism.”

(Meyer, 1986)

Page 17: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Datatype-Generic Programming

▪ Termo Programação Genérica tem diferentes interpretações de acordo com o contexto:

▫ Polimorfismo paramétrico

▫ Abstração de dados

▫ Meta-programação

▫ etc.

(Gibbons, 2007)

Page 18: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Generalidade por Valor

System.out.println("===");System.out.println("==========");

static void travessao(int tamanho) { for (int t = 1; t <= tamanho; t++) System.out.print("="); System.out.println();}

_____________________________________

travessao(3);travessao(10);

Page 19: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Generalidade por Tipo

▪ Forma de usar depende da linguagem

▫ ML (1973) – pioneira (Wikipedia, 2015)

▫ Ada

▫ C++ - templates

▫ Java - generics

Page 20: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Java <Generics>

Page 21: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

<Generics>

▪ Introduzido no JDK 1.5

▪ Permite que programadores declarem sua intenção de tipo

▪ Possibilita mais verificações em tempo de compilação

▫ ajuda a redução de erros no código

(Bracha, 2004) (Sun, 2011)

Page 22: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

<Generics>

▪ Tipos declarados entre < >

▪ Usado em funções habilitadas para generics

▫ Exemplo: Collections

(Bracha, 2004) (Sun, 2011)

Page 23: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Usando <Generics> em Vector

Page 24: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Criando <Generics>

Page 25: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Unconstrained Genericity

▪ Unconstrained Genericity

▫ Sem restrições de tipo recebido (Meyer, 1986)

▪ Java

▫ <Tipo> somente→

Page 26: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Constrained Genericity

▪ Constrained Genericity

▫ Com restrições de tipo recebido (Meyer, 1986)

▪ Java

▫ <Tipo extends Tipo_superior> somente→

Page 27: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

Referências

▪ Bracha, G. (2004). Generics in the Java Programming Language. http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf.

▪ Meyer, B. (1986). Genericity Versus Inheritance. SIGPLAN Not., 21(11), 391–405.

▪ Gibbons, J. (2007). Datatype-Generic Programming. In R. Backhouse, J. Gibbons, R. Hinze, & J. Jeuring (Eds.), Datatype-Generic Programming (Vol. 4719, pp. 1–71). Springer Berlin Heidelberg.

▪ Sun (2011) The Java Tutorials – Generics. http://download.oracle.com/javase/tutorial/java/generics/index.html

Page 28: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

André Santanchèhttp://www.ic.unicamp.br/~santanche

Page 29: Programação Orientada a Objetos Tipos, Ponteiros e 3 Datatype …santanch/teaching/oop/2019-1/... · 2019-05-21 · Programação Orientada a Objetos Tipos, Ponteiros e Datatype-Generic

License▪ These slides are shared under a Creative Commons License.

Under the following conditions: Attribution, Noncommercial and Share Alike.

▪ See further details about this Creative Commons license at:http://creativecommons.org/licenses/by-nc-sa/3.0/