Você está na página 1de 44

INTERAÇÃO ENTRE

OBJETOS
Dilvan Moreira
(baseado no livro Prog. Orientada a Objetos em Java)
Lembrando: Estrutura de classe básica
slide 2

public class TicketMachine O invólucro externo


{ de TicketMachine
A parte interna da classe omitida.
}

classe pública NomeDaClasse


{
Campos O conteúdo de
Construtores uma classe
Métodos
}

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Métodos de acesso
slide 3

tipo de
modificador retorno
de visibilidade nome do método

lista de
public int getPrice() parâmetro
{ (vazia)
return price; instrução
} de retorno

início e fim do corpo


do método (bloco)

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Métodos
slide 4
modificadores
modificador
de visibilidade tipo de retorno
nome do método parâmetro

public void insertMoney(int amount)


{
balance = balance + amount;
}
campo sendo
modificado instrução de atribuição

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Variáveis locais
slide 5

Uma variável local

public int refundBalance()


Nenhum {
Modificador int amountToRefund;
de visibilidade
amountToRefund = balance;
balance = 0;
return amountToRefund;
}

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Leitura
 Capítulo 3 (Prog. Orient. a Obj. usando Java - 4th
Edition)
Importância da interação entre objetos

 As aplicações precisam da combinação


de objetos de forma a cooperar para
realizar uma tarefa comum.
Abstração e modularização
 Problemas complexos devem ser divididos e abordados
como subproblemas
 Abstração: é a capacidade de ignorar detalhes de partes para
focalizar a atenção em um nível mais elevado de um
problema
 Modularização: é o processo de dividir um todo em partes
bem-definidas, que podem ser construídas e examinadas
separadamente e que interagem de maneiras bem-definidas.
Modularização: Relógio digital
 Exibir horas e minutos separados por dois-pontos.
 O mostrador exibe a hora de 00:00 a 23:59
Modularização: Relógio digital

Um mostrador
de quatro dígitos?

Ou mostradores de
dois dígitos?
Modularização: Relógio digital
Mostrador de dois dígitos
com limite. No caso das
horas, o limite é entre “0”
até “23”. No caso dos
minutos, o limite é entre
“0” até “59”
Nível de
Mostrador de dois dígitos
Abstração para hora e outro para
maior minutos

Mostrador
de quatro dígitos
Modularização: Relógio digital
Mostrador de dois dígitos
Mostrador com com limite. No caso das
maior nível de horas, o limite é entre “0”
abstração. até “23”. No caso dos
minutos, o limite é entre
“0” até “59”

1. Podemos criar a classe “NumberDisplay” que seria o


mostrador de dois dígitos.

2. Essa classe pode ser utilizada tanto para hora quanto


para minutos
Modularização: Relógio digital
 Implementação - NumberDisplay
public class NumberDisplay
{
private int limit;
private int value;

Construtores e
métodos omitidos.
}
Modularização: Relógio digital
 Implementação – ClockDisplay
 A classe “ClockDisplay” é nosso relógio.
 Está composto por dois objetos da classe “NumberDisplay”. Um deles
para mostrar a hora e outro para mostrar os minutos.

public class ClockDisplay


{
private NumberDisplay hours;
private NumberDisplay minutes;

Construtores e
métodos omitidos.
}
Tipo de objeto versus tipo
primitivo
 A classe “ClockDisplay” armazena dois objetos de tipo
“NumberDisplay”.
 Assim, existe um relacionamento entre a classe “ClockDisplay” e
“NumberDisplay”
 A classe “NumberDisplay” define um tipo.

public class ClockDisplay


{
private NumberDisplay hours;
private NumberDisplay minutes;

Construtores e
métodos omitidos.
}
Diagrama de Objetos
 Mostra os objetos e seus relacionamentos em um
momento no tempo durante a execução de uma
aplicação.
 Fornece as informações sobre objetos em tempo de
execução.
 Apresenta a visualização dinâmica de um
programa.
Diagrama de Objetos
Diagrama de Classes

 Mostra as classes de uma aplicação e os


relacionamentos entre elas.
 Fornece as informações sobre o código-fonte e
apresenta a visualização estática de um programa.
Diagrama de Classes
Tipo de objeto versus tipo
primitivo
 Tipos de objeto versus tipos primitivos

NumberDisplay obj; tipo de objeto

int i; tipo primitivo


32
Questionário: qual é o resultado?
slide 21

 int a;
int b;
a = 32;
b = a;
a = a + 1;
System.out.println(b);

 Person a;
Person b;
a = new Person("Everett");
b = a;
a.changeName("Delmar");
System.out.println( b.getName());

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Referência de Objeto
 O diagrama de objeto mostra a referência de objeto.
 Assim, uma variável de tipo primitivo é mostrada como uma caixa
branca e a referência de objeto é mostrada com uma seta.

ObjectType a; ObjectType b;

b = a;
int a; int b;
32 32
Referência de Objeto
 As variáveis de tipos de objeto armazenam
referências de objetos.
 Em outras palavras, quando uma variável armazena
um objeto, o objeto não é armazenado na variável
diretamente.
 Em vez disso, uma referência de objeto é
armazenada na variável.
Código-fonte: NumberDisplay

public NumberDisplay(int rollOverLimit)


{
limit = rollOverLimit;
value = 0;
}

public void increment()


{
value = (value + 1) % limit;
}
O operador de módulo
 O operador de 'divisão' (/), quando aplicado ao operando int,
retorna o resultado de uma divisão de inteiro.
 O operador de 'módulo' (%) retorna o resto de uma divisão de
inteiro.
 Por exemplo, em geral:
17 / 5 = resulta em 3, restando 2
 Em Java:
17 / 5 = 3
17 % 5 = 2
Código-fonte: NumberDisplay

public String getDisplayValue()


{
if(value < 10) {
return "0" + value;
}
else {
return "" + value;
}
}
Objetos que criam objetos

public class ClockDisplay


{
private NumberDisplay hours;
private NumberDisplay minutes;
private String displayString;

public ClockDisplay()
{
hours = new NumberDisplay(24);
minutes = new NumberDisplay(60);
updateDisplay();
}
}
Diagrama de objeto ClockDisplay
null
 null é um valor especial em Java.
 Todas as variáveis de objeto são inicializadas
como null.
 Você pode atribuir e testar a existência de null:
private NumberDisplay hours;

if(hours == null) { ... }

hours = null;
Objetos que criam objetos

na classe NumberDisplay:
public NumberDisplay(int rollOverLimit);

parâmetro formal

na classe ClockDisplay:
hours = new NumberDisplay(24);

parâmetro real
Chamadas de método externo
 A instrução “minutes.increment()” chama o
método increment do objeto minutes.

public void timeTick()


{
minutes.increment();
if(minutes.getValue() == 0) {
// ele acabou de retornar!
hours.increment();
}
updateDisplay();
}
Chamadas de método externo
 Uma chamada de método para um método de outro
objeto é referida como uma chamada de método
externo.
 A sintaxe de uma chamada de método externo é:
 objeto . nomeDoMétodo ( lista de parâmetros )
 Essa sintaxe é conhecida como notação de ponto.
Método interno
 Métodos da mesma classe:
public ClockDisplay()
{
...
updateDisplay();
}

/**
* Atualiza a string interna que
representa o mostrador.
*/
private void updateDisplay()
{
displayString =
hours.getDisplayValue() + ":" +
minutes.getDisplayValue();
}
Método interno

 Os métodos podem chamar outros métodos da


mesma classe como parte de sua implementação.
 Esse processo é denominado chamada de método
interno.
Chamadas de método (1)

 chamadas de método interno:


updateDisplay();
...

private void updateDisplay()

 chamadas de método externo:


minutes.increment();
Chamadas de método (2)

object . nomeDoMétodo( lista-de-parâmetros )


A palavra-chave this
 O construtor da classe “NumberDisplay” pode ser
escrito utilizando a palavra-chave this.

public NumberDisplay(int rollOverLimit)


{
limit = rollOverLimit;
value = 0;
}
A palavra-chave this

public NumberDisplay(int limit)


{
this.limit = limit;
this.value = 0;
}
A palavra-chave this

 Por exemplo, a linha “this.limit = limit;” é uma


instrução de atribuição.

 Ela atribui o valor do lado direito (limit) à


variável à esquerda (this.limit).
A palavra-chave this
 A razão para utilizar essa construção é que temos
uma situação que é conhecida como sobrecarga
de nome (name overloading).
 O mesmo nome é utilizado para duas entidades
diferentes.
 A expressão this referencia o objeto atual.
Escrever this.limit referencia o campo limit no
objeto atual.
Depurador (debugger)
 ‘O primeiro bug de computador’ foi um inseto de
verdade, uma mariposa, que foi encontrada no
interior do computador Mark II por Grace Murray
Hopper, uma pioneira na computação em 1945.
Depurador (debugger)
 No National Museum of American History do
Smithsonian Institute mostra um registro com essa
maripossa colada no livro e a observação “primeiro
caso real de descoberta de um bug”.
Depurador (debugger)
 Depurador: é uma ferramenta de software que
ajuda a examinar como uma aplicação é executada.
 Bugs: Erros em programas de computador.
 O depurador pode ser utilizado para localizar bugs.
 Ele permite que os programadores executem uma
aplicação em um passo por vez.
Perguntas?

Você também pode gostar