relacionamentos entre objetos - ufpercmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. ·...

22
1 Programação Orientada a Objetos Relacionamentos Relacionamentos Relacionamentos Relacionamentos entre objetos entre objetos Associação, composição e agregação C t t b Reinaldo Gomes [email protected] Construtores e sobrecarga Variáveis de classe e de instância Relacionamentos entre objetos Objetos do mundo real relacionam-se uns com os outros de diversas formas: outros de diversas formas: Um objeto motor é parte de um objeto carro Um objeto turma tem vários objetos alunos Um objeto botão tem um objeto tratador de eventos Tipos de associações entre objetos de software: 2 Agregação: estabelecem um vínculo entre objetos Composição: relacionamento do tipo todo/parte. Uso: um objeto usa a funcionalidade de outro sem estabelecer vínculo duradouro (referências)

Upload: others

Post on 19-Nov-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

1

Programação Orientada a Objetos

Relacionamentos Relacionamentos Relacionamentos Relacionamentos entre objetosentre objetos

Associação, composição e agregaçãoC t t b

Reinaldo [email protected]

Construtores e sobrecargaVariáveis de classe e de instância

Relacionamentos entre objetosObjetos do mundo real relacionam-se uns com os outros de diversas formas:outros de diversas formas:

Um objeto motor é parte de um objeto carroUm objeto turma tem vários objetos alunosUm objeto botão tem um objeto tratador de eventos

Tipos de associações entre objetos de software:

2

Agregação: estabelecem um vínculo entre objetosComposição: relacionamento do tipo todo/parte.Uso: um objeto usa a funcionalidade de outro sem estabelecer vínculo duradouro (referências)

Page 2: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

2

Relacionamentos entre objetos

3Copyright 1991, Grady Booch

Relacionamentos entre objetosAgregação

Forma de composição em que o objeto composto Forma de composição em que o objeto composto apenas usa ou tem conhecimento da existência do(s) objeto(s) componente(s)Os objetos componentes podem existir sem o agregado e vice-versa.

Composição

4

ComposiçãoForma de associação em que o objeto composto é responsável pela existência dos componentesO componente não tem sentido fora da composição

Page 3: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

3

Relacionamentos entre objetosExemplos:

Uma conta corrente é formada por várias transações de Uma conta corrente é formada por várias transações de crédito e débito composiçãoUm cadastro de clientes é formado por vários clientes

agregaçãoUm cliente tem uma conta-corrente agregaçãoUm documento possui um conjunto de parágrafos

5

Um documento possui um conjunto de parágrafos composiçãoUma turma é um conjunto de alunos composição

Relacionamentos entre objetosConta bancária implementada como agregação:

Cliente

Conta10

6

Transação

TransaçãoTransação

1020

-10

Page 4: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

4

Relacionamentos entre objetosConta bancária implementada como composição:

10-10

Cliente

7

Conta

20 Transação

Relacionamentos entre objetosEm Java:

Java não possui uma forma declarativa para Java não possui uma forma declarativa para implementar agregações nem associaçõesJava apenas cria associações unidirecionais através de referências. Exemplo:

• Uma Conta tem uma propriedade do tipo Cliente referência de conta para cliente, mas não de cliente para

8

contapublic class Conta {private int codigo;private Cliente cliente;//...

}

Associação unidirecional

Page 5: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

5

Relacionamentos entre objetosNotação UML para definir composições, agregações e uso:agregações e uso:

Conta-código: int

0..n

composição

agregação

Transação-valor: real-data: Date-tipo: char+getValor()+setValor(double)+getTipo()

+addTransacao(Transacao)+setCliente(Cliente)

uso

trans

9

+getTipo()+setTipo(char)+getData()+setData(Date)

Cliente-nome: String-endereço: String+setConta(Conta)+getConta(): Conta

Date

uso

Relacionamentos entre objetosImplementação em Java:public class Conta {private int codigo;private Cliente cliente;private Transacao[] trans;private int qTransacoes;//...

}

bli l i

public class Transacao {private double valor;private char tipo;pri ate D t d t

10

public class Cliente {private String nome;private Conta conta;private String endereço;//...

}

private Date data;//...

}

Page 6: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

6

Relacionamentos entre objetosEm Java:

Estabelece-se uma associação unidirecional entre Estabelece se uma associação unidirecional entre objetos definindo, na classe do objeto originário, uma propriedade cujo tipo é a classe do objeto destinatárioLembre-se!!! Ao instanciar um objeto da classe de onde parte a associação você não estará criando uma instância do objeto destinatário da associação

11

j ç• Ao criar um objeto da classe Conta, você não criará um

objeto da classe Cliente ou vários objetos da classe Transação

• Métodos em ambas as classes deverão concretizar a agregação/composição em tempo de execução

Relacionamentos entre objetosEm alguma classe de aplicação:public static void main(String[] args) {public static void main(String[] args) {Conta cc5 = new Conta();Cliente cliente = new Cliente();Transacao credito = new Transacao();

cc5.setCodigo(100);cc5.setCliente(cliente);cliente.setConta(cc5);

Concretiza a agregaçãoentre cliente e conta

12

credito = new Transacao();credito.setValor(10000000.0);credito.setTipo('C');credito.setData(new Date());cc5.addTransacao(credito);

}

Concretiza a composiçãoentre transação e conta

Page 7: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

7

Relacionamentos entre objetosNa classe Conta:public class Conta {pub c c ass Co ta {private int codigo;private Cliente cliente;private Transacao[] trans;private int qTransacoes=0;

public void setCliente(Cliente c) {cliente = c;

}

13

}

public void addTransacao(Transacao t) {trans[qTransacoes++] = t;

}}

Outros possíveis métodos da classe foram omitidos.

Implementação muitosimplista!

Relacionamentos entre objetosNa classe Cliente:public class Cliente {public class Cliente {private String nome;private Conta conta;private String endereço;

public void setConta(Conta c) {conta = c;

}

14

Como o relacionamento entre Cliente e Conta é bidirecional, cada uma das classes possui uma propriedade que é do tipo da outra!

}

Page 8: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

8

Relacionamentos entre objetosUm método para devolver o saldo da conta:public class Conta {

//...

public double getSaldo() {double total = 0.0;for (int i=0; i<qTransacoes ;i++) {if (trans[i].getTipo() == 'C')total += trans[i].getValor();

15

if (trans[i].getTipo() == 'D')total -= trans[i].getValor();

}return total;

}}

Relacionamentos entre objetosA composição do mundo real é conseguida por meio de um processo chamado de montagemmeio de um processo chamado de montagem

Os objetos são unidos por meio de interfaces físicas bem definidas (o cano do guidon deve encaixar perfeitamente no tubo do quadro, o parafuso do pneu dianteiro deve encaixar no garfo do quadro, etc..)

As operações enviadas ao objeto composto

16

As operações enviadas ao objeto composto disparam operações dos seus objetos componentes

Page 9: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

9

Relacionamentos entre objetosExemplo de relacionamento de uso:public class Conta {private int codigo;private Cliente cliente;private Transacao[] trans;private int qTransacoes=0;

public void imprimeSaldo(Date data) {String s;

17

String s;...

}} Conta usa as classes

String e Date

Relacionamentos entre objetosExemplo de relacionamento de uso:

Conta

+imprimirSaldo(Date)

Date

18

String

Page 10: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

10

Relacionamentos entre objetosMais um exemplo:class Venda {private Cliente cliente;private Produto[] produtos;private Date data;private int numProd;public float getTotal() {...}

}

19

class Produto {private float preco;public float getTotal() {return preco;}

}

Relacionamentos entre objetosExemplo:

getTotal()

[ ] [ ]

numProdprodutoscliente data

(Venda)

2

15/07/03

20

(Date)

(Cliente)(Produto)(Produto)

200 50

total += produtos[i].getTotal();Em getTotal()

Page 11: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

11

Relacionamentos entre objetosExemplo:

getTotal()

[ ] [ ]

numProdprodutoscliente data

(Venda)

2

15/07/03getTotal()

1

00

21

(Date)

(Cliente)(Produto)

50200

(Produto)

total += produtos[0].getTotal();Em getTotal()

Relacionamentos entre objetosExemplo:

getTotal()

[ ] [ ]

numProdprodutoscliente data

(Venda)

2

15/07/03

1

01 250

22

(Date)

(Cliente)(Produto)

50200

(Produto)

getTotal()

total += produtos[1]. getTotal();Em getTotal()

Page 12: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

12

Relacionamentos entre objetosO objeto Venda delega para os objetos Produto a tarefa de informar o preço para que a operação tarefa de informar o preço para que a operação getTotal() possa ser implementada.

Venda ProdutogetTotal()

n:getTotal()

23

De forma análoga, poderia ser implementada a operação getMesVenda(); só que desta vez, o objeto delegado seria a data.

Relacionamentos entre objetosResumo:

Os relacionamentos que objetos assumirão em tempo Os relacionamentos que objetos assumirão em tempo de execução são definidos nas suas respectivas classes em tempo de compilação

24

Page 13: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

13

ConstrutoresA instanciação de um objeto:

Aloca área em memória para as propriedades do objetoAloca área em memória para as propriedades do objetoPõe valores iniciais para as propriedades, de acordo com seus tipos (0 para números, string vazio, null, etc)

Construtores de objetosMétodo especial que define valores iniciais para as

i d d d bj t é i t i d

25

propriedades de um objeto recém-instanciadoSó é usado no momento da instanciação do objetoEm Java, os construtores devem ter o mesmo nome da classe e não possuem tipo de retorno

ConstrutoresUm construtor para a classe Cliente:public class Cliente {public class Cliente {private String nome;private Conta conta;private String endereço;

public Cliente(String n, String e, Conta c) {nome = n;endereço = e;

26

conta = c;}

//outros métodos de Cliente

}

Page 14: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

14

ConstrutoresInstanciando um cliente "sem construtor":public static void main(String[] args) {public static void main(String[] args) {Cliente c;Conta cc5;

cc5 = new Conta();cc5 = setCodigo(100);

c = new Cliente();

27

c.setNome("Malug");c.setConta(cc5);c.setEndereco("São Paulo");

}

O método main acima está em alguma classe de aplicação.

ConstrutoresInstanciando um cliente com o construtor anterior:public static void main(String[] args) {public static void main(String[] args) {Cliente c;Conta cc5;

cc5 = new Conta();cc5 = setCodigo(100);

c = new Cliente("Malug", cc5, "São Paulo");

28

}

O método main acima está em alguma classe de aplicação.

Page 15: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

15

ConstrutoresUm construtor para a classe Conta:public class Conta {public class Conta {private int codigo;private Cliente cliente;private Transacao[] trans;private int qTransacoes;

public Conta(int cod, Cliente c, int maxTran) {codigo = cod;

29

cliente = c;trans = new Transacao[maxTran];qTransacoes = 0;

}//outros métodos de Conta

}

Resumo de construtoresConstrutores em Java:

Construtores não possuem tipo de retornoConstrutores não possuem tipo de retornoConstrutores devem ter o mesmo nome da classeConstrutores podem ser públicos ou privadosConstrutores só são usados durante a instanciaçãoJava já oferece para todas as classes um construtor

d ã â t i l t ã i

30

padrão sem parâmetros e com implementação vazia• Se você não definir nenhum construtor na classe poderá

usar esse construtor vazio na instanciação de objetos

Page 16: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

16

SobrecargaMétodos em Java podem ser sobrecarregados

Métodos com mesmo identificador mas com listas de Métodos com mesmo identificador mas com listas de parâmetros diferentes (quantidade ou tipos)

Vantagens:Permitir que uma mesma operação possa ser executada com diferentes parâmetros mas mantenha o mesmo nome

31

mesmo nomeMelhora a legibilidade do código, pois o programador não precisa aprender os diferentes nomes que uma operação pode ter

SobrecargaSobrecarregando o método getSaldo() em Conta:

//// calcula o saldo com todas as transacoespublic double getSaldo() {double total = 0.0;for (int i=0; i<qTransacoes ;i++) {if (trans[i].getTipo() == 'C')total += trans[i].getValor();

if (trans[i] getTipo() == 'D')

32

if (trans[i].getTipo() == 'D')total -= trans[i].getValor();

}return total;

}

Page 17: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

17

SobrecargaSegunda implementação de getSaldo():// calcula o saldo até uma determinada data// calcula o saldo até uma determinada datapublic double getSaldo(Date data) {double total = 0.0;for (int i=0; i<qTransacoes ;i++) {if (trans[i].getTipo() == 'C' &&

trans[i].getDate().before(data))total += trans[i].getValor();

if (trans[i].getTipo() == 'D' &&

33

trans[i].getDate().before(data))total -= trans[i].getValor();

}return total;

}

SobrecargaSobrecarregando o construtor de Cliente:public class Cliente {// propriedades omitidas

public Cliente(String n, String e, Conta c) {nome = n;endereço = e;conta = c;

}

bli Cli t (St i St i ) {

34

public Cliente(String n, String e) {nome = n;endereço = e;

}// outros métodos

}

Page 18: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

18

Resumo de sobrecargaSobrecarga em Java:

Métodos sobrecarregados devem possuir o mesmo Métodos sobrecarregados devem possuir o mesmo identificador, rigorosamenteO tipo de retorno de um método não pode ser levado em conta para diferenciar métodos sobrecarregadosA lista de parâmetros reais da mensagem define qual versão do método sobrecarregado será chamada

35

versão do método sobrecarregado será chamadaConstrutores podem ser sobrecarregadosA sobrecarga de métodos também é conhecida por polimorfismo paramétrico

Variáveis de instância e de classeTodas as propriedades definidas em uma classe serão criadas quando objetos desta classe forem serão criadas quando objetos desta classe forem instanciados

São também chamadas de variáveis de instânciaCada objeto tem suas próprias cópias particulares das variáveis de instânciaElas não são compartilhadas entre objetos distintos (a

36

Elas não são compartilhadas entre objetos distintos (a menos que seu encapsulamento seja public)Nos métodos, a palavra this é usada para referenciar as variáveis (e métodos) de instância do objeto atual

Page 19: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

19

Variáveis de instância e de classeUso do this em Java:public class Conta {public class Conta {private int codigo;private Cliente cliente;private Transacao[] trans;private int qTransacoes=0;

public void setCliente(Cliente cliente) {this.cliente = cliente;

37

O this é uma forma genérica de referenciar o objeto que receberá a chamada setCliente()

}}

Variáveis de instância e de classeEm algum método de alguma classe que usa Conta:Conta:Conta c1 = new Conta(); Conta c2 = new Conta();

c1.setCliente(new Cliente());c2.setCliente(new Cliente());

c1 c2

38

c1

this

c2

this

Page 20: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

20

Variáveis de instância e de classeAlgumas informações, entretanto, não pertencem a uma instância particular, mas a todas elas.uma instância particular, mas a todas elas.

Variáveis compartilhadas entre todas as instâncias são chamadas de variáveis de classeExiste apenas uma cópia dela que fica na classe (em memória)Todos os objetos da classe podem acessar/modificar

39

Todos os objetos da classe podem acessar/modificar as variáveis de classe

Variáveis de instância e de classeExemplo:

A alíquota da CPMF é a mesma para todas as contasA alíquota da CPMF é a mesma para todas as contasDefine-se esta informação numa variável de classe

public class Conta {private int codigo;private Cliente cliente;private Transacao[] trans;private int qTransacoes=0;

40

p q

public static double CPMF = 0.0038;

}

Outros possíveis métodos da classe foram omitidos.

Page 21: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

21

Variáveis de instância e de classeVariáveis de classe em Java:

São declaradas com a palavra reservada staticSão declaradas com a palavra reservada staticNa própria classe, são acessadas diretamenteFora da classe, são acessadas antepondo-se a ela o nome da classe e o operador "." (ponto)Exemplos de acessos fora da classe:Conta cc5 = new Conta();

41

Conta cc5 = new Conta();double cpmf;cpmf = cc5.getSaldo() * cc5.CPMF;

Conta cc5 = new Conta();double cpmf;cpmf = cc5.getSaldo() * Conta.CPMF;

Variáveis de instância e de classeGraficamente:

variável de codigo

CPMF0.0038

instanciaçãovariáveis de

instância

variável declasse

codigoclientetransqTransacoes

codigocliente

42

Conta

Instâncias da classe Conta

transqTransacoes

Page 22: Relacionamentos entre objetos - UFPErcmg/cefet-al/proo/aulas/proo... · 2009. 5. 7. · Construtores de objetos Método especial que define valores iniciais para as idd d bjt é it

22

Variáveis de classeEm Java:

Variáveis de classe são muito utilizadas para declarar Variáveis de classe são muito utilizadas para declarar constantes comuns a todas as instânciasSe uma variável de classe for pública, todas as outras classes podem acessá-la através da notação geral Classe.variável

Dentro da classe onde está declarada a forma de

43

Dentro da classe onde está declarada, a forma de acessar a variável de classe é indiferente

• Deve-se sempre preferir a notação acima

Programação Orientada a Objetos

Relacionamentos Relacionamentos Relacionamentos Relacionamentos entre objetosentre objetos

Associação, composição e agregaçãoC t t b

Reinaldo [email protected]

Construtores e sobrecargaVariáveis de classe e de instância