Escolar Documentos
Profissional Documentos
Cultura Documentos
3
Introduo a classes e objetos
OBJETIVOS
Neste captulo, voc aprender: O que so classes, objetos, mtodos e variveis de instncia. Como declarar uma classe e utiliz-la para criar um objeto. Como declarar mtodos em uma classe para implementar os comportamentos da classe. Como declarar variveis de instncia em uma classe para implementar os atributos da classe. Como chamar o mtodo de um objeto para fazer esse mtodo realizar sua tarefa. As diferenas entre variveis de instncia de uma classe e variveis locais de um mtodo. Como utilizar um construtor para assegurar que os dados de um objeto sejam inicializados quando o objeto for criado. As diferenas entre tipos por referncia primitivos.
2005 by Pearson Education do Brasil
3.1 Introduo
3.3 Declarando uma classe com um mtodo e instanciando um objeto de uma classe
Cada declarao de classe que inicia com a palavra-chave public deve ser armazenada em um arquivo que tenha o mesmo nome da classe e terminar com a extenso de nome do arquivo .java.
Class GradeBook
Declaraes de mtodo:
Palavra-chave public indica o mtodo disponvel ao pblico. Palavra-chave void indica nenhum tipo de retorno. Modificador de acesso, tipo de retorno, nome do mtodo e parnteses compem o cabealho do mtodo.
2005 by Pearson Education do Brasil
1 2 3 4 5 6 7 8 9 10 11
10
Resumo
GradeBook.jav a Imprime linha do texto na sada
// exibe uma mensagem de boas-vindas para o usurio GradeBook public void displayMessage() { System.out.println( "Welcome to the Grade Book!" ); } // fim do mtodo displayMessage
11
Classe GradeBookTest
O Java extensvel:
Os programadores podem criar novas classes.
Chamando um mtodo:
Nome de objeto, da o separador ponto (.). Depois, o nome e os parnteses do mtodo.
12
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// Fig. 3.2: GradeBookTest.java // Cria um objeto GradeBook e chama seu mtodo displayMessage.
Resumo
GradeBookTest.Java
public class GradeBookTest { // mtodo main inicia a execuo de programa public static void main( String args[] ) { // cria um objeto GradeBook e o atribui a
Utiliza a expresso de criao de instncia de classe para criar o objeto da classe GradeBook myGradeBook Chama o mtodo displayMessage utilizando o objeto GradeBook
13
14
15
Figura 3.3 | Diagrama de classe UML indicando que a classe GradeBook tem uma
16
17
1 2 3 4 5 6 7 8 9 10 11 12
// Fig. 3.4: GradeBook.java // Declarao de classe com um mtodo que tem um parmetro.
18
Resumo
GradeBook .java
public class GradeBook { // exibe uma mensagem de boas-vindas para o usurio GradeBook public void displayMessage( String courseName ) { System.out.printf( "Welcome to the grade book for\n%s!\n", courseName ); } // fim do mtodo displayMessage
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
// Fig. 3.5: GradeBookTest.java // Create GradeBook object and pass a String to // its displayMessage method. import java.util.Scanner; // program uses Scanner public class GradeBookTest { // main method begins program execution public static void main( String args[] ) { // create Scanner to obtain input from command window Scanner input = new Scanner( System.in );
19
Resumo
GradeB \ ookTes t.Java
// create a GradeBook object and assign it to myGradeBook Chama o mtodo nextLine para GradeBook myGradeBook = new GradeBook(); ler uma linha de entrada // prompt for and input course name System.out.println( "Please enter the course name:" ); String nameOfCourse = input.nextLine(); // read a line of text Chama displayMessage System.out.println(); // outputs a blank line
com um
argumento
// call myGradeBook's displayMessage method // and pass nameOfCourse as an argument myGradeBook.displayMessage( nameOfCourse ); } // end main } // end class GradeBookTest
Please enter the course name: CS101 Introduction to Java Programming Welcome to the grade book for CS101 Introduction to Java Programming!
20
21
22
Ocorrer um erro de compilao se o nmero de argumentos em uma chamada de mtodo no corresponder ao nmero de parmetros na declarao de mtodo.
23
24
25
Figura 3.6 | Diagrama de classe UML indicando que a classe GradeBook tem uma
26
27
28
29
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public class GradeBook { private String courseName; // nome do curos para este GradeBook // mtodo para configurar o nome do curso public void setCourseName( String name ) { courseName = name; // armazena o nome do curso } // fim do mtodo setCourseName // mtodo para recuperar o nome do curso public String getCourseName() { return courseName; } // fim do mtodo getCourseName // exibe uma mensagem de boas-vindas para o usurio GradeBook public void displayMessage() { // essa instruo chama getCourseName para obter o // nome do curso que esse GradeBook representa System.out.printf( "Welcome to the grade book for\n%s!\n", getCourseName() ); } // fim do mtodo displayMessage // Fig. 3.7: GradeBook.java // Classe GradeBook que contm uma varivel de instncia courseName // e mtodos para configurar e obter seu valor.
Resumo
GradeBook.java
30
Tipo de retorno:
Indica itens retornados pelo mtodo. Declarado no cabealho do mtodo.
2005 by Pearson Education do Brasil
31
32
33
Coloque uma linha em branco entre as declaraes de mtodo para separar os mtodos e aprimorar a legibilidade do programa.
34
35
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// Fig. 3.8: GradeBookTest.java // Cria e manipula um objeto GradeBook. import java.util.Scanner; // programa utiliza Scanner public class GradeBookTest { // mtodo main inicia a execuo de programa public static void main( String args[] ) { // cria Scanner para obter entrada a partir da janela de comando Scanner input = new Scanner( System.in ); // cria um objeto GradeBook e o atribui a myGradeBook GradeBook myGradeBook = new GradeBook(); // exibe valor inicial de courseName System.out.printf( "Initial course name is: %s\n\n", myGradeBook.getCourseName() );
36
Resumo
GradeBookTest. Java (1 de 2)
20 21 22 23 24 25 26 27 28 29
// solicita e l o nome do curso System.out.println( "Please enter the course name:" ); String theName = input.nextLine(); // l uma linha de texto myGradeBook.setCourseName( theName ); // configura o nome do curso System.out.println(); // gera sada de uma linha em branco
37
Resumo
GradeBookTest .Java (2 de 2)
// exibe mensagem de boas-vindas depois de especificar nome do curso myGradeBook.displayMessage(); } // fim de main
Chama displayMessage
30 } // fim da classe GradeBookTest Initial course name is: null Please enter the course name: CS101 Introduction to Java Programming Welcome to the grade book for CS101 Introduction to Java Programming!
Diagrama de classe UML de GradeBook com uma varivel de instncia e os mtodos set e get
Atributos:
Listado no compartimento intermedirio da classe. Nome do atributo seguido por um caractere de dois-pontos e o tipo de atributo.
38
39
Figura 3.9 | Diagrama de classe UML indicando que a classe GradeBook tem um atributo
courseName de tipo UML String e trs operaes setCourseName (com um parmetro de nome de tipo UML String), getCourseName (retorna o tipo UML String) e displayMessage.
40
41
42
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// Fig. 3.10: GradeBook.java // Classe GradeBook com um construtor para inicializar o nome de um curso. public class GradeBook { private String courseName; // nome do curso para esse GradeBook // construtor inicializa courseName com String fornecido como argumento public GradeBook( String name ) { courseName = name; // inicializa courseName } // fim do construtor // mtodo para configurar o nome do curso public void setCourseName( String name ) { courseName = name; // armazena o nome do curso } // fim do mtodo setCourseName // mtodo para recuperar o nome do curso public String getCourseName() { return courseName; } // fim do mtodo getCourseName
43
Resumo
GradeBook. java (1 de 2)
25 26 27 28 29 30 31 32 33 34 35 } // fim da classe GradeBook // exibe uma mensagem de boas-vindas para o usurio GradeBook public void displayMessage() { // essa instruo chama getCourseName para obter o // nome do curso que esse GradeBook representa System.out.printf( "Welcome to the grade book for\n%s!\n", getCourseName() ); } // fim do mtodo displayMessage
44
Resumo
GradeBook.j ava (2 de 2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
// Fig. 3.11: GradeBookTest.java // GradeBook constructor used to specify the course name at the // time each GradeBook object is created. public class GradeBookTest { // main method begins program execution public static void main( String args[] ) { // create GradeBook object GradeBook gradeBook1 = new GradeBook( "CS101 Introduction to Java Programming" ); GradeBook gradeBook2 = new GradeBook( "CS102 Data Structures in Java" );
45
Resumo
GradeBookTest.Java
// display initial value of courseName for each GradeBook System.out.printf( "gradeBook1 course name is: %s\n", gradeBook1.getCourseName() ); System.out.printf( "gradeBook2 course name is: %s\n", gradeBook2.getCourseName() ); } // end main
23 } // end class GradeBookTest gradeBook1 course name is: CS101 Introduction to Java Programming gradeBook2 course name is: CS102 Data Structures in Java
46
A menos que a inicializao-padro de variveis de instncia de sua classe seja aceitvel, fornea um construtor para assegurar que as variveis de instncia da sua classe sejam adequadamente inicializadas com valores significativos quando cada novo objeto de sua classe for criado.
47
48
Figura 3.12 | Diagrama de classe UML indicando que a classe GradeBook tem um
49
50
double
Nmeros de ponto flutuante de dupla preciso. Quinze dgitos significativos.
51
Erro comum de programao 3.4 Utilizar nmeros de ponto flutuante de maneira tal que assume que eles so representados precisamente pode levar a erros de lgica.
1 2 3
// Fig. 3.13: Account.java // Classe Account com um construtor para // inicializar a varivel de instncia balance.
52
4 5 public class Account 6 { 7 private double balance; // varivel de instncia que armazena o saldo 8 9 // construtor Varivel double balance 10 public Account( double initialBalance ) 11 { // valida que initialBalance maior que 0,0; 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 // se no, o saldo inicializado como o valor padro 0.0 if ( initialBalance > 0.0 ) balance = initialBalance; } // fim do construtor Account // credita (adiciona) uma quantia conta public void credit( double amount ) { balance = balance + amount; // adiciona amount ao balance } // end method credit // retorna o saldo da conta public double getBalance() { return balance; // fornece o valor de balance ao mtodo chamador } // fim do mtodo getBalance
Resumo
Account.java
53
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
54
Resumo
AccountTest. Java (1 de 3)
public class AccountTest { // mtodo main inicia a execuo do aplicativo Java public static void main( String args[] ) { Account account1 = new Account( 50.00 ); // cria o objeto Account Account account2 = new Account( -7.53 ); // cria o objeto Account
// exibe saldo inicial de cada objeto System.out.printf( "account1 balance: $%.2f\n", account1.getBalance() ); System.out.printf( "account2 balance: $%.2f\n\n", account2.getBalance() );
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
// cria Scanner para obter entrada a partir da janela de comando Scanner input = new Scanner( System.in ); double depositAmount; // quantia de depsito lida a partir do usurio
55
Resumo
AccountTest.java
System.out.print( "Enter deposit amount for account1: " ); // prompt depositAmount = input.nextDouble(); // obtm a entrada do usurio System.out.printf( "\nadding %.2f to account1 balance\n\n", depositAmount );
// display balances System.out.printf( "account1 balance: $%.2f\n", account1.getBalance() ); System.out.printf( "account2 balance: $%.2f\n\n", account2.getBalance() );
System.out.print( "Enter deposit amount for account2: " ); // prompt depositAmount = input.nextDouble(); // obtm a entrada do usurio System.out.printf( "\nadding %.2f to account2 balance\n\n", depositAmount ); account2.credit( depositAmount ); // adiciona ao saldo de account2
41 42 43 44 45 46 47
// exibe os saldos System.out.printf( "account1 balance: $%.2f\n", account1.getBalance() ); System.out.printf( "account2 balance: $%.2f\n", account2.getBalance() ); } // fim de main
56
Resumo
AccountTest.Java AccountTest.java
48 } // fim da classe AccountTest account1 balance: $50.00 account2 balance: $0.00 Enter deposit amount for account1: 25.53 adding 25.53 to account1 balance account1 balance: $75.53 account2 balance: $0.00 Enter deposit amount for account2: 123.45 adding 123.45 to account2 balance account1 balance: $75.53 account2 balance: $123.45
57
Figura 3.15 | Diagrama da classe UML para indicar que a classe Account tem um atributo
private balance do tipo UML Double, um construtor (com um parmetro do tipo UML Double) e duas operaes public credit (com um parmetro amount do tipo UML Double) e getBalance (retorna o tipo UML Double).
58
Local
Seo 3.9 Seo 4.14 Seo 5.10 Seo 6.13 Seo 7.13 Seo 8.18 Seo 9.8 Seo 10.8 Exerccios 11.18 Exerccios 12.12
Ttulo Exerccio(s)
Utilizando caixas de dilogo Entrada e sada bsicas com caixas de dilogo Criando desenhos simples Exibindo e desenhando linhas na tela Desenhando retngulos e ovais Utilizando formas para representar dados Cores e formas preenchidas Desenhando um alvo e imagens grficas aleatrias Desenhando arcos Desenhando espirais com arcos Utilizando objetos com imagens grficas Armazenando formas como objetos Exibindo texto e imagens utilizando rtulos Fornecendo informaes de status Desenhando com polimorfismo Identificando as semelhanas entre formas Expandindo a interface Utilizando componentes GUI e tratamento de evento Adicionando Java 2D Utilizando a API Java 2D para aprimorar desenhos
Figura 3.16 | Resumo da GUI e estudo de caso de imagens grficas em cada captulo.
59
1 2 3 4 5 6 7 8 9 10 11
// Fig. 3.17: Dialog1.java // Imprimindo mltiplas linhas na caixa de dilogo. import javax.swing.JOptionPane; // importa a classe JOptionPane
60
Resumo
Dialog1. java
public class Dialog1 { public static void main( String args[] ) { // exibe um dilogo com a mensagem
61
62
Dilogo de entrada:
Permite que o usurio insira informaes. Criado com o mtodo showInputDialog na classe
JOptionPane.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// Fig. 3.18: NameDialog.java // Entrada bsica com uma caixa de dilogo. import javax.swing.JOptionPane; public class NameDialog { public static void main( String args[] ) { // pede para o usurio inserir seu nome String name = JOptionPane.showInputDialog( "What is your name?" ); // cria a mensagem String message = String.format( "Welcome, %s, to Java Programming!", name ); // exibe a mensagem para cumprimentar o usurio pelo nome JOptionPane.showMessageDialog( null, message ); } // fim de main
63
Resumo
Mostra o dilogo de entrada
NameDialog. Java
3.10 (Opcional) Estudo de caso de engenharia de software: Identificando classes em um documento de requisitos Comea a projetar o sistema ATM:
Analisa os substantivos simples e os substantivos compostos. Introduz diagramas de classe UML.
64
65
66
requisitos.
67
Modelando classes
68
69
A UML:
Permite a supresso de atributos e operaes de classe para criar diagramas mais legveis, quando apropriado chamados de diagramas elididos. A linha slida que conecta duas classes representa uma associao.
Nmeros prximos do final de cada linha so valores de multiplicidade.
70
Figura 3.21 | Diagrama de classes que mostra uma associao entre classes.
71
Smbolo
0 1 m 0..1 m, n m..n * 0..* 1..*
Significado
Nenhum Um Um valor de inteiro Zero ou um m ou n Pelo menos m, mas no mais do que n Qualquer inteiro no-negativo (zero ou mais) Zero ou mais (idntico a *) Um ou mais
72
73
74
75
classe Car.
76
Figura 3.26 | Diagrama de classes para o modelo de sistema ATM incluindo a classe
Deposit.