71
Engenharia da Computação Prof. Cícero Quarto – [email protected] 1 Capítulo 3 Introdução a classes e objetos PROGRAMAÇÃO ORIENTADA A OBJETOS POO

Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –[email protected] Sumário Classes, objetos, métodos

  • Upload
    buidat

  • View
    226

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

1

Capítulo 3Introdução a classes e

objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS

POO

Page 2: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Su

már

ioClasses, objetos,

métodos e variáveis de instâncias

Declarando um método com um

parâmetro

Variáveis de instância, métodos set e get

Tipos primitivos vs. Tipos por referência

Inicializando objetos com construtores

Números de ponto flutuante e tipo double

Estudo de caso de GUI e imagens gráficas

utilizando caixas de diálogo

Declarando uma classe com um método e

instanciando um objeto de uma classe

2

Page 3: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

� O que é uma classe na LPOO?� Conjunto de objetos com características afins;� Define o comportamento dos objetos através de

seus métodos, e quais estados ele é capaz de manter através de seus atributos.

Classes

objetosatributosmétodos

Exemplo: Os seres humanos 3

Page 4: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

� Para ajudar a entender classes e seu conteúdo, consideremos o contexto abaixo:

� “Suponha que você queira guiar um carro e fazê-lo andar mais rápido pisando no pedal acelerador”.

� O que deve acontecer antes que você possa fazer isso?� Alguém tem que projetá-lo (desenho de engenharia,

semelhantes às plantas utilizadas para projetar uma casa).� Os desenhos de engenharia incluem o projeto

de um pedal acelerador para aumentar a velocidade do carro.� O pedal acelerador “oculta” do motorista os complexos

mecanismos que realmente fazem o carro ir mais rápido, assim como o pedal de freio “oculta” os mecanismos que diminuem a velocidade do carro e a direção “oculta” os mecanismos que mudam a direção do carro. Isso permite que as pessoas com pouco ou nenhum conhecimento de como os motores funcionam dirijam um carro facilmente.

Classes, objetos, métodos e variáveis de instância

4

Page 5: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

O carro acelerará por conta própria?

5

Page 6: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

Introdução aos

conceitos da POO

O carro acelerará por conta própria?

6

Page 7: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

� Para realizar uma tarefa em um programa é necessário um método.

����O método descreve os mecanismos que realmente realizam suas tarefas.

���� O método oculta de seu usuário as tarefas complexas que ele realiza, assim como o pedal acelerador de um carro oculta do motorista os complexos mecanismos que fazem o carro andar mais rápido.

���� Em Java, primeiro criamos uma unidade de programa chamada classe para abrigar um método, assim como os desenhos de engenharia do carro abrigam o projeto de um pedal acelerador.

7

Page 8: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

� Em uma classe, você fornece um ou mais métodos que são projetados para realizar as tarefas da classe.

�Exemplo: uma classe que representa uma conta bancária poderia conter um método para fazer depósitos de dinheiro em uma conta, outro para fazer saques e um terceiro para perguntar qual é o saldo atual.

� Assim como você não pode dirigir um desenho de engenharia de um carro, você não pode “dirigir” uma classe. Assim como alguém tem de construir um carro a partir de seus desenhos de engenharia antes de poder realmente guiar o carro, você deve construir um objeto de uma classe antes de fazer um programa realizar as tarefas que a classe descreve como fazer.

8

Page 9: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

� Ao dirigir um carro, o ato de pressionar o acelerador envia uma mensagem para o carro realizar uma tarefa –isto é, fazer o carro andar mais rápido.� De maneira semelhante, você envia mensagens para um objeto – cada mensagem é implementada como uma chamada de método que instrui um método do objeto a realizar sua tarefa. � Um carro, além de suas capacidades, também tem muitos atributos, como cor, número de portas, a quantidade de gasolina no tanque, a velocidade atual e o total de quilômetros percorridos.� Cada carro mantém seus próprios atributos.

9

Page 10: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

� Um objeto tem atributos que são carregados com o objeto quando ele é utilizado em um programa.

�Os atributos do objeto são especificados como parte da classe do objeto.

� Por exemplo, um objeto conta bancária tem um atributo ‘saldo’ que representa a quantidade de dinheiro na conta.

� Cada objeto ‘conta bancária’ sabe o saldo da conta que ele representa, mas não sabe os saldos de outras contas no banco.

� Os atributos são especificados pelas variáveis de instância da classe.

10

Page 11: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

Resumo dos exemplos para demonstrar os conceitos de OO1. O primeiro exemplo apresenta uma classe GradeBook

com um método que simplesmente exibe uma mensagem de boas-vindas quando é chamado. Então é mostrado como criar um objeto dessa classe e chamar o método para ele exibir a mensagem de boas-vindas.

2. O segundo exemplo aprimora o primeiro para permitir ao método receber o nome de um curso como argumento e exibe o nome como parte da mensagem de boas-vindas.

3. O terceiro exemplo mostra como armazenar o nome do curso em um objeto GradeBook. Para essa versão da classe, é mostrado como utilizar métodos para configurar o nome do curso e obter seu nome. 11

Page 12: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

Resumo dos exemplos para demonstrar os conceitos de OO4. O quarto exemplo demonstra como os dados em um objeto GradeBook podem ser inicializados quando o objeto é criado.

� O último exemplo apresenta uma classe Account que reforça os conceitos apresentados nos quatro primeiros exemplos e introduz número de ponto flutuante.

�A classe Account representa uma conta bancária e mantém seu saldo como um número de ponto flutuante. A classe contém dois métodos – um que credita um depósito à conta, aumentando assim o saldo, e outro número que recupera o saldo.

12

Page 13: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Classes, objetos, métodos e variáveis de instância

Resumo dos exemplos para demonstrar os conceitos de OO�O construtor da classe permite que o saldo

de cada objeto Account seja inicializado quando o objeto é criado.

�São criados dois objetos Account e são feitos depósitos em cada um para mostrar que cada objeto mantém seu próprio saldo.

� O exemplo também demonstra como inserir e exibir números de ponto flutuante.

13

Page 14: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

14

Declarando uma classe com um método e instanciando um objeto de uma classe

� Em seções anteriores, aprendeu-se como criar um objeto da classe Scanner e, então, utilizar esse objeto para ler dados a partir do teclado.

� Nesta seção, criar-se-á uma nova classe e usar-se-á para criar um objeto. Iniciaremos com um exemplo que consiste em classes GradeBook (Figura 3.1) e GradeBookTest (Figura 3.2).

� A classe GradeBook (declarada no arquivo GradeBook.java) será utilizada para exibir uma mensagem na tela (Figura 3.2) que dá boas-vindas ao instrutor do aplicativo livro de notas.

Page 15: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

15

A classe GradeBook

� A declaração de classe GradeBook (Figura 3.1) contém um método displayMessage (linha 17) que exibe uma mensagem na tela. Lembre-se que uma classe é como uma planta arquitetônica – precisamos criar um objeto dessa classe e chamar seu método para executar a linha 18 e exibir a mensagem.

Figura 3.1 | Declaração de classe com um método.

Page 16: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

16Figura 3.1 | Declaração de classe com um método.

Comentando o código da classe GradeBook

�Declaração de classe inicia na linha 15;�A palavra-chave public é um modificador de acesso;�Par de chaves { e } – corpo de cada classe (linhas 15-22);�A declaração do método começa com a palavra-chave public (linha 17) para indicar que o método está “disponível para o público” – ele pode ser chamado a partir de métodos de outras classes.

Page 17: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

17Figura 3.1 | Declaração de classe com um método.

Comentando o código da classe GradeBook

�Palavra-chave void (linha 17) especifica o tipo de retorno do método, que define o tipo de dados que o método retorna depois de realizar sua tarefa;�O tipo de retorno void indica que esse método (linha 17) realizará uma tarefa, mas não retornará (isto é, devolverá) nenhuma informação para seu método chamador ao completar sua tarefa;

Page 18: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

18

Figura 3.1 | Declaração de classe com um método.

Comentando o código da classe GradeBook

�O nome do método, displayMessage, segue o tipo de retorno (linha 17);�Por convenção, os nomes de método iniciam com a primeira letra minúscula e as palavras subsequentes do nome iniciam com uma maiúscula;�Os parênteses depois do nome do método indicam que isso é um método. Os parênteses vazios, como na linha 17, indicam que esse método não requer informações adicionais para realizar sua tarefa;

Page 19: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

19Figura 3.1 | Declaração de classe com um método.

Comentando o código da classe GradeBook

�A linha 17 é comumente referida como o cabeçalho de método;� O corpo de cada método é delimitado pelas chaves esquerda e direita { e }, como nas linhas 17 – 20;� O corpo de um método contém uma ou mais instruções que realizam a tarefa do método. No exemplo, o método contém uma instrução (linha 18) que exibe a mensagem “Welcome to the GradeBook!”

Page 20: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

20

Comentando o código da classe GradeBook

�A classe GradeBook não é um aplicativo Java porque não contém o método principal main, o qual inicia a execução de um aplicativo Java;�Se tentarmos executar GradeBook usando o NetBeans, obteríamos uma mensagem de erro como é mostrada na figura abaixo:

Devemos declarar uma

classe separada que

contenha um método

main

Como resolver o problema?

Colocar um método

main na classe

GradeBook

Page 21: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

21

A classe GradeBookTest

� A declaração de classe GradeBookTest(Figura 3.2) contém o método main que controlará a execução do aplicativo.

Figura 3.2 | Criando um objeto GradeBook e chamando seu método displayMessage.

� A declaração de classe GradeBookTest inicia na linha 14 e termina na linha 25;� A classe contém somente um método GradeBookTest, que é típico de muitas classes que iniciam a execução de um aplicativo Java;� As linhas 14 – 23 declaram o método main, que é um método static;� Um método static é especial, porque pode ser chamado sem primeiro criar um objeto da classe em que o método é declarado.

Page 22: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

22

Comentando a classe GradeBookTest

� Na classe GradeBookTest, gostaríamos de chamar o método displayMessage da classe GradeBook (Figura 3.1) para exibir a mensagem de boas-vindas na janela de comando;� Em geral, não podemos chamar um método que pertence a outra classe até que seja criado um objeto dessa classe, como mostrado na linha 18 da Figura 3.2.

Figura 3.1 | Declaração de classe com um método.

Page 23: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

23

Comentando a classe GradeBookTest

� Linha 18 – declaração da variável myGradeBook, que é do tipo GradeBook – a classe que foi declarada na Figura 3.1;� A variável myGradeBook é inicializada com o resultado da expressão de criação de instância de classe new GradeBook().

Figura 3.2 | Criando um objeto GradeBook e chamando seu método displayMessage.

� Assim como podemos usar o objeto System.out para chamar os métodos print, printf e println, também podemos usar o objeto myGradeBook para chamar o método displayMessage;� A instrução da linha 21 myGradeBook.displayMessage(); é uma chamada de método, fazendo com que o método displayMessage realize sua tarefa.

Page 24: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

24

Diagrama de classes UML para a classe GradeBook

�A Figura 3.3 apresenta um diagrama de classes UML para a classe GradeBook da Figura 3.1.

GradeBook

+ displayMessage( )Figura 3.3 | Diagrama de classe UML indicando que a classe GradeBook tem uma operação public displayMessage.

Page 25: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

25

Diagrama de classes UML para a classe GradeBook

�Na UML, cada classe é modelada em um diagrama de classe como um retângulo com três compartimentos.

Compartimento superior

Compartimento do meioCompartimento inferior

Contém o nome da classe centralizado horizontalmente no tipo negrito

Contém os atributos da classe (variáveis de instâncias) em Java

GradeBook

+ displayMessage( )

O compartimento está vazio porque essa classe GradeBook não tem nenhum atributo.

Contém as operações da classe, que correspondem aos métodos em Java

Figura 3.3 | Diagrama de classe UML indicando que a classe GradeBook tem uma operação public displayMessage.

Page 26: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

26

Comentando o Diagrama de classes UML para a classe GradeBook

�A UML modela operações listando o nome da operação precedido por um modificador de acesso (nesse caso +) e seguido por um conjunto de parênteses (ver Figura 3.3);�A classe GradeBook tem um método, displayMessage, então o compartimento inferior da Figura 3.3 lista uma operação com esse nome;�O método displayMessage não requer informações adicionais para executar suas tarefas, portanto os parênteses depois do nome do método no diagrama de classe estão vazios;

Page 27: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

27

Comentando o Diagrama de classes UML para a classe GradeBook

�O sinal de adição ( + ) na frente do nome da operação indica que displayMessage é uma operação public na UML (isto é, um método public no Java). Usaremos com freqüência os diagramas de classe UML para resumir os atributos e as operações de uma classe Java.

GradeBook

+ displayMessage( )Figura 3.3 | Diagrama de classe UML indicando que a classe GradeBook tem uma operação public displayMessage.

Page 28: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

28

Declarando um método com um parâmetro

�Em analogia com o carro, discutimos o fato de que pressionar o acelerador de um carro envia uma mensagem para ele realizar uma tarefa – fazer o carro andar mais rápido.

� Mas quanto o carro deve acelerar?� Quanto mais pressionarmos o pedal, mais

rápido o carro irá acelerar;• Então a mensagem para o carro na

verdade inclui a tarefa a ser realizada e informações adicionais que ajudam o carro a executar essa tarefa. Essas informações adicionais são conhecidas como parâmetro – o valor do parâmetro ajuda o carro a determinar com que rapidez acelerar.

Page 29: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

29

Declarando um método com um parâmetro

�De maneira semelhante, um método pode exigir um ou mais parâmetros que representam informações adicionais necessárias para realizar a tarefa;�Os parâmetros são definidos em uma lista de parâmetros separados por vírgula, que está localizada nos parênteses depois do nome do método;�Todo parâmetro deve especificar um tipo e um identificador;� A lista de parâmetros pode conter qualquer número de parâmetros, inclusive nenhum parâmetro;� Os parênteses vazios que se seguem ao nome de método indicam que um método não requer nenhum parâmetro.

Page 30: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

30

Declarando um método com um parâmetro

�Uma chamada de método fornece valores – chamados argumentos – para cada um dos parâmetros do método;

• Por exemplo, o método System.out.printlnexige um argumento que especifica que dados enviar para a saída em uma janela de comando;

• De maneira semelhante, para fazer um depósito em uma conta bancária, um método deposit especifica um parâmetro que representa a quantidade de depósito;

� Quando o método deposit é chamado um valor de argumento que representa a quantidade de depósito é atribuído ao parâmetro do método. O método então faz um depósito dessa quantia.

Page 31: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

31

Laboratório - declarando um método com um parâmetro

�Declarar uma classe GradeBook2 com um método displayMessage que exibe o nome do curso como parte da mensagem de boas-vindas. O novo método displayMessage requer um parâmetro que representa o nome do curso a ser enviado para a saída.

Ferramenta: NetBeans IDE 7.0

Page 32: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

32

Saída do programa

Figura 3.5 | Criando um objeto GradeBook2 e passando uma String ao seu método displayMessage.

Page 33: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

33

Comentando as classes GradeBook2 e GradeBook2Test

Classe GradeBook2

Classe GradeBook2Test

Figura 3.4

Figura 3.5

Page 34: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

34

Comentando as classes GradeBook2 e GradeBook2Test

�Linha 24: System.out.println( “Please enter the course name:” );

exibe um prompt que pede para o usuário inserir o nome do curso;�Linha 25: String nameOfCourse = input.nextLine( );

mostra o nome do usuário e o atribui à variável nameOfCourse, utilizando o método Scanner nextLine para realizar a tarefa;�Linha 30: myGradeBook2.displayMessage( nameOfCourse );

chama o método displayMessage de myGradeBook. A variável nameOfCourse entre parênteses é o argumento que é passado ao método displayMessage para o método realizar sua tarefa.

Page 35: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

35

Mais sobre argumentos e parâmetros�Na Figura 3.4, a lista de parâmetros de displayMessage (linha 15) public void displayMessage( String courseName) {declara um parâmetro indicando que o método requer uma String para executar sua tarefa.����Quando o método é chamado, linha 30 (Figura 3.5), myGradeBook2.displayMessage( nameOfCourse );, o valor de argumento na chamada é atribuído ao parâmetro correspondente (nesse caso, courseName) no cabeçalho do método (linha 15) da Figura 3.4;Public void displayMessage( String courseName ){;����O número de argumentos em uma chamada de método deve corresponder ao número de parâmetros na lista de parâmetros da declaração do método.

Page 36: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

36

Diagrama de classes UML para a classe GradeBook2

�O diagrama de classe UML da Figura 3.6 modela a classe GradeBook2 da Figura 3.4. Como a Figura 3.3, essa classe GradeBook2 contém displayMessage, uma operação public e um parâmetro.

� A UML modela um parâmetro de um modo pouco diferente do Java listando o nome de parâmetro, seguido por dois pontos e pelo tipo de parâmetro nos parênteses que seguem o nome da operação;

GradeBook2

+ displayMessage( courseName: String )

Figura 3.6 | Diagrama de classe UML indicando que a classe GradeBook2 tem uma operação displayMessage com um parâmetro courseName de tipo UML String.

Page 37: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

37

Variáveis de instância, métodos set e get

� Nos exemplos já vistos, declaramos todas as variáveis de um aplicativo no método main do aplicativo.

� As variáveis declaradas no corpo de um método particular são conhecidas como variáveis locais e só podem ser utilizadas nesse método.

� Um objeto tem atributos que são carregados com o objeto quando ele é utilizado em um programa.

• Os atributos de um objeto existem antes de um método ser chamado em um objeto e depois de o método completar a execução.

� Os atributos são representados como variáveis em uma declaração de classe.

Page 38: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

Instância da classe

38

Classe Cadeira

Objetos(material, braço,

cor, tipo, etc)

Atributos(madeira, plano, verde, diretor)

Métodos(displayCor)

� Campos: variáveis que representam atributos de um objeto em uma declaração de classe, mas fora do corpo das declarações de método da classe;� Variáveis de instâncias: campos que representam as cópias dos atributos de um objeto. Um exemplo nessa seção demonstra uma classe GradeBook que contém uma variável de instânciacourseName para representar o nome do curso de um objeto GradeBook particular.

Instâncias da classe

Page 39: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

39

Classe GradeBook3 com uma variável de instância, um método set e um método get

� No próximo aplicativo (Figuras 3.7 e 3.8), a classe GradeBook3 (Figura 3.7) mantém o nome do curso como uma variável de instância para que ele possa ser utilizado ou modificado a qualquer hora durante a execução de um aplicativo;� A classe contém três métodos – setCourseName, getCourseName e displayMessage;

� método setCourseName – armazena o nome de um curso de um GradeBook3;

� método getCourseName – obtém o nome do curso de um GradeBook3;

� método displayMessage – exibe uma mensagem de boas-vindas que inclui o nome do curso. O método obtém o nome do curso chamando outro método na mesma classe – getCourseName.

Page 40: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

40

Comentando a classe GradeBook3

Figura 3.7 | A classe GradeBook3 que contém uma variável de instânciacoursename e métodos para configurar e obter seu valor

Page 41: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

41

COMENTANDO O CÓDIGO� Linha 16: private String courseName;

declara que courseName é uma variável de tipo String, dentro do corpo da classe, mas fora dos corpos de seus métodos;� Toda instância (isto é, objeto) de classe GradeBook3 contém uma cópia de cada variável de instância.

Figura 3.7 | A classe GradeBook3 que contém uma variável de instância courseName e métodos para configurar e obter seu valor.

Page 42: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

42

Modificadores de acesso public e private� A maioria das declarações de variável de instância é precedida pela palavra-chave private (linha 16);� Como public, a palavra-chave private é um modificador de acesso;� Dessa forma, a variável courseName só pode ser utilizada nos métodos setCourseName, getCourseName e displayMessage da classe GradeBook3;� A declaração de variáveis de instância com o modificador de acesso private é conhecida como ocultamento de dados ou ocultamento de informações; � Quando um programa cria (instancia) um objeto de classe GradeBook3, a variável courseName é encapsulada (ocultada) no objeto e pode ser acessada apenas por métodos da classe do objeto.

Page 43: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

43

Métodos setCourseName e getCourseName� O método setCourseName (linhas 19-21) não retorna quaisquer dados quando ele completa sua tarefa, portanto, seu tipo de retorno é void;� O método recebe um parâmetro -name – que representa o nome do curso que será passado para o método como um argumento;� A linha 20 atribui name à variável de instância courseName;� O método getCourseName (linhas 24-26) devolve um objeto courseName específico de GradeBook3;� O método tem uma lista vazia de parâmetros, então não exige informações adicionais para realizar sua tarefa.

Figura 3.7 | A classe GradeBook3 que contém uma variável de instância courseName e métodos para configurar e obter seu valor.

Page 44: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

44

Métodos setCourseName e getCourseName� O método getCourseName especifica (linha 25) que ele retorna uma String – esse é o tipo de retorno do método;� A instrução return na linha 25 passa o valor da variável de instância courseName de volta à instrução que chama o método getCourseName;� Considere, a linha 31 do método displayMessage, que chama o método getCourseName. Quando o valor é retornado, a instrução na linha 31 utiliza esse valor para gerar o nome do curso.

Figura 3.7 | A classe GradeBook3 que contém uma variável de instância courseName e métodos para configurar e obter seu valor.

Page 45: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

45

Laboratório – Classe com uma variável de instância, um método set e um método get

�Crie duas classes Java ClasseLab2 e ClasseLab2Teste, respectivamente, com o seguinte cenário:Você tem um método square que retorna o quadrado de seu argumento, onde você esperaria que a instrução:

int result = square( 2 );retornasse 4 a partir do método square e atribuísse 4 à variável result.

int biggest = maximum( 27, 114, 51 );retornasse 114 a partir do método maximum e atribuísse 114 à variável biggest.

Ferramenta: NetBeans IDE 7.0

Page 46: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

46

O método displayMessage

� O método displayMessage (linhas 29-31) não retorna quaisquer dados quando ele completa sua tarefa, portanto, seu tipo de retorno é void;� O método não recebe parâmetros, então, a lista de parâmetros está vazia.

Figura 3.7 | A classe GradeBook3 que contém uma variável de instância courseName e métodos para configurar e obter seu valor.

Page 47: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

47

A classe GradeBook3Test que demonstra a classe GradeBook3Test

Page 48: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

48

� A classe GradeBook3Test (Figura 3.8) cria um objeto da classe GradeBook3 e demonstra seus métodos;� A linha 23 cria um objeto GradeBook3 e o atribui à variável local myGradeBook3 de tipo GradeBook3;� A linha 26 exibe o nome do curso inicial que chama o método getCourseName do objeto;

� Observe que a primeira linha de saída mostra o nome “null”. Diferentemente das variáveis locais, que não são automaticamente inicializadas, todo campo tem um valor inicial padrão – um valor fornecido pelo Java quando você não especifica o valor inicial do campo;

� O valor padrão de um campo do tipo String (como courseName nesse exemplo) é null;� A linha 29 exibe um prompt que pede para o usuário inserir o nome de um curso;� A variável String theName local (declarada na linha 30) é inicializada com o nome do curso inserido pelo usuário, que é retornado pela chamada ao método nextLine do objeto Scanner input;� A linha 31 chama o método setCourseName do objeto myGradeBook3 e armazena theName como o argumento do método.

Page 49: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

49

Métodos set e get� Os campos private de uma classe só podem ser manipulados pelos métodos de classe;� Um cliente de um objeto – isto é, qualquer classe que chama os métodos do objeto – chama métodos public da classe para manipular os campos private de um objeto da classe;� As classes costumam fornecer métodos public para permitir a clientes configurar (set, isto é, atribuir valores a) ou obter (get, isto é, obter os valores de) variáveis de instância private;

� Os nomes desses métodos não precisam começar com set ou get, mas essa convenção de atribuição de nomes é recomendada e requerida para componentes de software Java especiais, denominados JavaBeans, que podem simplificar a programação em muitos ambientes de desenvolvimento integrado Java (Integrated Development Environments – IDEs). O método que configura (set) a variável de instância courseName nesse exemplo chama-se setCourseName e o método que obtém (get) o valor de courseName chama-se getCourseName.

Page 50: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

50

Diagrama de classe UML do GradeBook3 com uma variável de instância e os métodos

set e get

� A Figura 3.9 contém um diagrama de classe UML atualizado para a versão da classe GradeBook;

� Esse diagrama modela a variável de instância courseName da classe GradeBook3 como um atributo no compartimento no meio da classe.

GradeBook3- courseName: String

+ setCourseName( name: String )+ getCourseName( ): String+ displayMessage( )

Figura 3.9 | O diagrama de classes UML que indica que a classe GradeBook3 tem um atributo courseName privado do tipo UML String e três operações públicas –setCourseName (com um parâmetro name do tipo UML String, getCourseName (que retorna o tipo UML String e displayMessage.

Page 51: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

51

GradeBook3- courseName: String

+ setCourseName( name: String )+ getCourseName( ): String+ displayMessage( )

Considerações sobre o diagrama da Figura 3.9� A UML representa as variáveis de instância como atributos listando o nome do

atributo, seguido por um caractere de dois-pontos e o tipo de atributo;� O tipo UML do atributo courseName é String;� A variável de instância courseName é private em Java, portanto, o diagrama de

classe lista um modificador de acesso com o sinal de subtração ( - ) na frente do nome do atributo correspondente;

� A classe GradeBook3 contém três métodos public, então o diagrama de classe lista três operações no terceiro compartimento;

� A operação setCourseName tem um parâmetro String chamado name;� A UML indica o tipo de retorno de uma operação colocando um dois-pontos e o

tipo de retorno depois dos parênteses que se seguem ao nome da operação.

Figura 3.9 | O diagrama de classes UML que indica que a classe GradeBook3 tem um atributo courseName privado do tipo UML String e três operações públicas –setCourseName (com um parâmetro name do tipo UML String, getCourseName (que retorna o tipo UML String e displayMessage.

Page 52: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

52

Tipos primitivos vs. tipos por referência

� Os tipos do Java são divididos em tipos primitivos e tipos por referência;

� Os tipos primitivos são:� boolean� byte� char� short� int� long� float� double

� Todos os tipos não primitivos são tipos por referência, portanto, as classes, que especificam os tipos de objeto, são tipos por referência.

Page 53: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

53

Tipos primitivos vs. tipos por referência

� Uma variável de tipo primitivo pode armazenar exatamente um valor de seu tipo declarado por vez. Por exemplo, uma variável int pode armazenar um número inteiro (como 7) por vez;� As variáveis de instância de tipo primitivo são inicializadas por padrão – as variáveis dos tipos byte, char, short, int, long, float e double são inicializadas como 0, e as variáveis do tipo boolean são inicializadas como false;� Lembre-se de que as variáveis locais não são inicializadas por padrão;� Os programas utilizam as variáveis de tipos por referência (normalmente chamadas referências) para armazenar as localizações de objetos na memória do computador. Diz-se que tal variável referencia um objeto no programa.

Page 54: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

54

Tipos primitivos vs. tipos por referência

� A linha 23 da Figura 3.8, GradeBook3 myGradeBook3 = new GradeBook3();, cria um objeto de classe GradeBook3 e a variável myGradeBook3 contém uma referência a esse objeto GradeBook3;� As variáveis de instância de tipo por referência são inicializadas por padrão com um valor null – uma palavra reservada que representa uma “referência a nada”. Essa é a razão por que a primeira chamada a getCourseName na linha 26 da Figura 3.8 retornou null – o valor de courseName não foi configurado, assim o valor inicial padrão null foi retornado;� Na Tabela a seguir, são mostradas as palavras reservadas e palavras-chave da linguagem Java.

Page 55: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

55

Palavras reservadas e palavras-chave do Java

Palavras-chave do Java

abstract assert boolean break byte

case catch char class continue

default do double else enum

extends final finally float for

if implements import instanceof int

interface long native new package

private protected public return short

static strictfp super switch synchronnized

this throw throws transient try

void volatile while

Palavras-chave que não são atualmente utilizadas

const goto

O Java também contém as palavras reservadas true e false, que são literais boolean e null, que é o literal que representa uma referência a nada. Assim como as palavras-chave, essas palavras reservadas não podem ser utilizadas como identificadores.

Page 56: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

56

Inicializando objetos com construtores

� Como vimos, quando um objeto de classe GradeBook3 (Figura 3.7) é criado, sua variável de instância courseName é inicializada como null por padrão;� E se quisermos fornecer o nome de um curso quando criarmos um objeto GradeBook3? � Cada classe declarada pode fornecer um método especial chamado construtor que pode ser utilizado para inicializar um objeto desta classe, isso é um padrão Java;� Um construtor deve ter o mesmo nome que a classe;� A Figura 3.10 contém uma classe GradeBook4 com um construtor que inicializa um objeto desta classe.

Page 57: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

57

Comentando a classe GradeBook4

Figura 3.10 | A classe GradeBook4 com um construtor para inicializar o nome do curso.

� As linhas 18 a 22 declaram o construtor de GradeBook4;� Como um método, a lista de parâmetros de um construtor especifica os dados que ele requer para realizar sua tarefa;� A linha 18 indica que o construtor tem um parâmetro String chamado name;� O name passado para o construtor é atribuído à variável de instância courseName na linha 19;� A Figura 3.11 inicializa os objetos GradeBook4 utilizando o construtor.

Page 58: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

58

O construtor de GradeBook4 usado para especificar o nome do curso a partir de seus

objetos criados

Figura 3.11 | O construtor de GradeBook4.

Saída do programa.

Page 59: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

59

Comentando a classe GradeBook4Test

Figura 3.11 | O construtor de GradeBook4.

� As linhas 18-19 criam e inicializam um objeto GradeBook4 gradeBook1;� O construtor de GradeBook4 é chamado com o argumento “CS101 Introduction to Java Programming” para inicializar o nome do curso;� A expressão de criação de instância de classe nas linhas 18-19 retorna uma referência ao novo objeto, que é atribuído à variável gradeBook1;� As linhas 20-21 repetem esse processo, dessa vez passando o argumento “CS102 Data Structures in Java” para inicializar o nome do curso de gradeBook2;� As linhas 24-27 utilizam o método getCourseName de cada objeto para obter os nomes de curso e mostrar que eles foram inicializados quando os objetos foram criados.

Nota: Uma diferença importante entre construtores e métodos é que os construtores não podem retornar valores, portanto, não podem especificar um tipo de retorno (nem mesmo void).

Page 60: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

60

Adicionando o construtor ao diagrama de classe UML da classe GradeBook4

� O diagrama de classe UML da Figura 3.12 modela a classe GradeBook4 da Figura 3.10, que tem um construtor que possui um parâmetro name de tipo String;� Assim como operações, a UML modela construtores no terceiro compartimento de uma classe em um diagrama de classe;� Para distinguir entre um construtor e operações de uma classe, a UML requer que a palavra “constructor” seja colocada entre aspas francesas (<< e >>) antes do nome do construtor;� É habitual listar construtores antes de outras operações no terceiro compartimento.

Page 61: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

61

GradeBook4- courseName: String

<<constructor>> GradeBook4( name: String )+ setCourseName( name: String )+ getCourseName( ): String+ displayMessage( )

Figura 3.12 | Diagrama de classe UML que indica que a classe GradedeBook4 tem um construtor com um parâmetro name de tipo UML String.

Diagrama de classe UML da classe GradeBook4

Page 62: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

62

Construtores com múltiplos parâmetros

� Às vezes é recomendável inicializar objetos com múltiplos dados. Por exemplo, o Exercício 3.11, Deitel –Java – Como Programar, edição 8, p. 79, solicita que você armazene o nome do curso e o nome do instrutor em um objeto GradeBook. Nesse caso, o construtor de GradeBook seria modificado para receber duas Strings, como em:

public GradeBook4( String courseName, String instructorName )e você chamaria o construtor de GradeBook4 desta maneira:

GradeBook4 gradebook = new GradeBook4(“CS101 Introduction to Java Programming”, “Sue Green” );

Page 63: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

63

Números de ponto flutuante e tipo double

� Agora, temporariamente deixamos de lado nosso estudo de caso GradeBook para declarar uma classe Account que mantém o saldo de uma conta bancária;� A maioria dos saldos de conta não é constituída de números inteiros (por exemplo, 0, -22 e 1024);� Por essa razão, a classe Account representa o saldo de conta como um número de ponto flutuante (isto é, um número com um ponto de fração decimal, como 7,33, 0,0975 ou 1.000, 12345);� O Java fornece dois tipos primitivos para armazenar números de ponto flutuante na memória – float e double;

� A principal diferença entre eles é que as variáveis double podem armazenar números com maior magnitude e mais detalhes (isto é, mais dígitos à direita do ponto de fração decimal – também conhecido como a precisão do número) do que as variáveis

float.

Page 64: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

64

Precisão de número de ponto flutuante e requisitos de memória

� As variáveis do tipo float representam números de ponto flutuante de precisão simples e podem representar até sete dígitos significativos;� As variáveis do tipo double representam números de ponto flutuante de precisão dupla. Essas requerem duas vezes a quantidade de memória das variáveis float e fornecem 15 dígitos significativos – aproximadamente o dobro da precisão de variáveis float;� Por padrão, o Java trata todos os números de ponto flutuante como do tipo double, pois variáveis double podem representar números de ponto flutuante com mais exatidão. Para números de ponto flutuante precisos, o Java fornece a classe BigDecimal (pacote java.math).

Page 65: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

65

A classe Account com uma variável de instância do tipo double

� Nosso próximo aplicativo (Figuras 3.13-3.14) contém uma classe chamada Account (Figura 3-13) que mantém o saldo de uma conta bancária;� Um banco típico atende muitas contas, cada uma com um saldo próprio, portanto a linha 15 Declara uma variável de instância chamada balance do tipo double;� A variável balance é uma variável de instância porque é declarada no corpo da classe, mas fora das declarações de método da classe (linhas 18-23, 26-28 e 31-33);� Cada instância (isto é, objeto) de classe Account contém sua própria cópia de balance.

Page 66: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

66

Comentando a classe Account� A classe tem um construtor e dois métodos;� É comum que alguém abre uma conta deposite o dinheiro imediatamente, assim o construtor (linhas 18-23) recebe um parâmetro initialBalance do tipo double e que representa o saldo inicial;� As linhas 21-22 asseguram que initialBalance seja maior do que 0.0. Se for, o valor de initialBalance é atribuído à variável de instância balance. Caso contrário, balance permanece em 0.0 – seu valor inicial padrão;� O método credit (linhas 26-28) não retorna quaisquer dados quando ele completa sua tarefa, portanto, seu tipo de retorno é void;

Figura 3.13 | A classe Account com um construtor para validar e inicializar a variável de instância balance do tipo double.

Page 67: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

67

Comentando a classe Account� O método credit (linhas 26-28) recebe um parâmetro chamado amount – um valor double que será adicionado ao saldo;� A linha 27 adiciona amount ao valor atual de balance, então atribui o resultado ao balance (substituindo assim a quantia do saldo anterior);� O método getBalance (linhas 31-33) permite aos clientes da classe (isto é, outras classes que utilizam essa classe) obter o valor do balancede um objeto Account particular. O método especifica o tipo de retorno double e uma lista vazia de parâmetros;� Observe que as instruções nas linhas 22, 27 e 32 utilizam a variável de instância balance mesmo se ela não tiver sido declarada em nenhum dos métodos, ela é uma variável de instância da classe Account.

Figura 3.13 | A classe Account com um construtor para validar e inicializar a variável de instância balance do tipo double.

Page 68: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

68

A classe AccountTest para utilizar a classe Account � A classe AccountTest (Figura 3.14)

cria dois objetos Account (linhas 17-18) e os inicializa com 50.00 e -7.53, respectivamente;� As linhas 21-24 geram a saída do saldo em cada Account chamando o método getBalance da Account;� Quando o método getBalance é chamado por account1, a partir da linha 22, o valor do saldo da account1 é retornado da linha 32 da Figura 3.13 e exibido pela instrução System.out.printf (Figura 3.14, linhas23-24);� De maneira semelhante, quando o método getBalance for chamado por account2, da linha 24, o valor do saldo da account2 é retornado da linha 32 da Figura 3.13 e exibido pela instrução System.out.printf (Figura 3.14, linhas 23-24)Figura 3.14 | Entrada e saída de

números de ponto flutuante com objetos Account.

Page 69: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

69

A classe AccountTest para utilizar a classe Account � Observe que o saldo de account2 é

0.00, porque o construtor assegurou que a conta não poderia iniciar com um saldo negativo;� A saída do valor é gerada por printfcom o especificador de formato %.2f;� O especificador de formato %f é utilizado para gerar saída de valores de tipo float ou double;� 0.2 entre % e f representa o número de casas decimais (2) que devem ser enviadas para a saída à direita do ponto de fração decimal no número de ponto flutuante – também conhecido como a precisão do número;� Qualquer saída de valor de ponto flutuante com %.2f será arredondada para a casa decimal dos centésimos –por exemplo, 123,457 seria arredondado para 123,46.Figura 3.14 | Entrada e saída de

números de ponto flutuante com objetos Account.

Page 70: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

70

A classe AccountTest para utilizar a classe Account � A linha 28 declara a variável local

depositAmount para armazenar cada quantia de depósito inserida pelo usuário;� Ao contrário da variável de instância balance na classe Account, a variável local depositAmount em main não é inicializada como 0.0 por padrão. Entretanto, essa variável não precisa ser inicializada aqui porque seu valor será determinado pela entrada do usuário;� A linha 30 pede ao usuário para inserir uma quantia de depósito para account1;� A linha 31 obtém a entrada do usuário chamando o método nextDouble do objeto input de Scanner, que retorna um valor double inserido pelo usuário;

Figura 3.14 | Entrada e saída de números de ponto flutuante com objetos Account.

Page 71: Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail… · Engenharia da Computação Prof. Cícero Quarto –cicero.uema@gmail.com Sumário Classes, objetos, métodos

Engenharia da ComputaçãoProf. Cícero Quarto – [email protected]

71

A classe AccountTest para utilizar a classe Account � As linhas 32-33 exibem o quanto foi

depositado;� A linha 34 chama o método credit do objeto account1 e armazena depositAmount como argumento do método. Quando o método é chamado, o valor do argumento é atribuído ao parâmetro amount (linha 26 da Figura 3.13) do método credit (linhas 26-28 da Figura 3.13), então o método credit adiciona esse valor ao balance (linha 27 da Figura 3.13);�

Figura 3.14 | Entrada e saída de números de ponto flutuante com objetos Account.