INTERAO ENTRE OBJETOS Dilvan Moreira baseado no livro
INTERAÇÃO ENTRE OBJETOS Dilvan Moreira (baseado no livro Prog. Orientada a Objetos em Java)
Lembrando: Estrutura de classe básica slide 2 O invólucro externo public class Ticket. Machine { de Ticket. Machine A parte interna da classe omitida. } classe pública Nome. Da. Classe { Campos Construtores Métodos } O conteúdo de uma classe © 2008 by Pearson Education Programãção orientada com objetos JAVA – Uma introdução prática utilizando o Blue. J Barnes|Kölling
Lembrando: Métodos de acesso slide 3 modificador de visibilidade tipo de retorno nome do método public int get. Price() { return price; } lista de parâmetro (vazia) instrução de retorno início e fim do corpo do método (bloco) © 2008 by Pearson Education Programãção orientada com objetos JAVA – Uma introdução prática utilizando o Blue. J Barnes|Kölling
slide 4 Lembrando: Métodos modificadores modificador de visibilidade tipo de retorno nome do método parâmetro public void insert. Money(int amount) { balance = balance + amount; } campo sendo modificado instrução de atribuição © 2008 by Pearson Education Programãção orientada com objetos JAVA – Uma introdução prática utilizando o Blue. J Barnes|Kölling
Lembrando: Variáveis locais slide 5 Uma variável local Nenhum Modificador de visibilidade public int refund. Balance() { int amount. To. Refund; amount. To. Refund = balance; balance = 0; return amount. To. Refund; } © 2008 by Pearson Education Programãção orientada com objetos JAVA – Uma introdução prática utilizando o Blue. J Barnes|Kölling
Leitura Capítulo 3 (Prog. Orient. a Obj. usando Java 4 th 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 Nível de Abstração maior 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” Mostrador de dois dígitos para hora e outro para minutos Mostrador de quatro dígitos
Modularização: Relógio digital Mostrador com maior nível de abstração. 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” 1. Podemos criar a classe “Number. Display” 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 - Number. Display public class Number. Display { private int limit; private int value; Construtores e métodos omitidos. }
Modularização: Relógio digital Implementação – Clock. Display A classe “Clock. Display” é nosso relógio. Está composto por dois objetos da classe “Number. Display”. Um deles para mostrar a hora e outro para mostrar os minutos. public class Clock. Display { private Number. Display hours; private Number. Display minutes; Construtores e métodos omitidos. }
Tipo de objeto versus tipo primitivo A classe “Clock. Display” armazena dois objetos de tipo “Number. Display”. Assim, existe um relacionamento entre a classe “Clock. Display” e “Number. Display” A classe “Number. Display” define um tipo. public class Clock. Display { private Number. Display hours; private Number. Display 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 Number. Display obj; tipo de objeto int i; tipo primitivo 32
slide 21 Questionário: qual é o resultado? 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. change. Name("Delmar"); System. out. println( b. get. Name()); © 2008 by Pearson Education Programãção orientada com objetos JAVA – Uma introdução prática utilizando o Blue. J 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. Object. Type a; int a; 32 Object. Type b; b = a; int b; 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: Number. Display public Number. Display(int roll. Over. Limit) { limit = roll. Over. Limit; 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: Number. Display public String get. Display. Value() { if(value < 10) { return "0" + value; } else { return "" + value; } }
Objetos que criam objetos public class Clock. Display { private Number. Display hours; private Number. Display minutes; private String display. String; public Clock. Display() { hours = new Number. Display(24); minutes = new Number. Display(60); update. Display(); } }
Diagrama de objeto Clock. Display
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 Number. Display hours; if(hours == null) {. . . } hours = null;
Objetos que criam objetos na classe Number. Display: public Number. Display(int roll. Over. Limit); parâmetro formal na classe Clock. Display: hours = new Number. Display(24); parâmetro real
Chamadas de método externo A instrução “minutes. increment()” chama o método increment do objeto minutes. public void time. Tick() { minutes. increment(); if(minutes. get. Value() == 0) { // ele acabou de retornar! hours. increment(); } update. Display(); }
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 . nome. Do. Método ( lista de parâmetros ) Essa sintaxe é conhecida como notação de ponto.
Método interno Métodos da mesma classe: public Clock. Display() {. . . update. Display(); } /** * Atualiza a string interna que representa o mostrador. */ private void update. Display() { display. String = hours. get. Display. Value() + ": " + minutes. get. Display. Value(); }
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: update. Display(); . . . private void update. Display() chamadas de método externo: minutes. increment();
Chamadas de método (2) object. nome. Do. Método( lista-de-parâmetros )
A palavra-chave this O construtor da classe “Number. Display” pode ser escrito utilizando a palavra-chave this. public Number. Display(int roll. Over. Limit) { limit = roll. Over. Limit; value = 0; }
A palavra-chave this public Number. Display(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?
- Slides: 44