Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our...

39
Chapter 4: Chapter 4: Writing Classes Writing Classes

description

3 Objects b An object has: state - descriptive characteristicsstate - descriptive characteristics behaviors - what it can do (or be done to it)behaviors - what it can do (or be done to it) b For example, consider a coin that can be flipped so that it's face shows either "heads" or "tails" b The state of the coin is its current face (heads or tails) b The behavior of the coin is that it can be flipped b Note that the behavior of the coin might change its state

Transcript of Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our...

Page 1: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Chapter 4:Chapter 4:

Writing ClassesWriting Classes

Page 2: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

2

Writing ClassesWriting Classes We've been using predefined classes. Now we will learn to We've been using predefined classes. Now we will learn to

write our own classes to define new objectswrite our own classes to define new objects

Chapter 4 focuses on:Chapter 4 focuses on:• class declarationsclass declarations• method declarationsmethod declarations• instance variablesinstance variables• encapsulationencapsulation• method overloadingmethod overloading• graphics-based objectsgraphics-based objects

Page 3: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

3

ObjectsObjects An object has:An object has:

• statestate - descriptive characteristics - descriptive characteristics• behaviorsbehaviors - what it can do (or be done to it) - what it can do (or be done to it)

For example, consider a coin that can be flipped so that it's For example, consider a coin that can be flipped so that it's face shows either "heads" or "tails"face shows either "heads" or "tails"

The state of the coin is its current face (heads or tails)The state of the coin is its current face (heads or tails) The behavior of the coin is that it can be flippedThe behavior of the coin is that it can be flipped Note that the behavior of the coin might change its stateNote that the behavior of the coin might change its state

Page 4: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

4

ClassesClasses A A classclass is a blueprint of an object is a blueprint of an object

It is the model or pattern from which objects are createdIt is the model or pattern from which objects are created

For example, the For example, the StringString class is used to define class is used to define StringString objectsobjects

Each Each StringString object contains specific characters (its state) object contains specific characters (its state)

Each Each StringString object can perform services (behaviors) such object can perform services (behaviors) such as as toUpperCasetoUpperCase

Page 5: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

ClassesClasses The The StringString class was provided for us by the Java class was provided for us by the Java

standard class librarystandard class library

But we can also write our own classes that define specific But we can also write our own classes that define specific objects that we needobjects that we need

For example, suppose we wanted to write a program that For example, suppose we wanted to write a program that simulates the flipping of a coinsimulates the flipping of a coin

We could write a We could write a CoinCoin class to represent a coin object class to represent a coin object

Page 6: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

ClassesClasses A class contains data declarations and method declarationsA class contains data declarations and method declarations

int x, y;char ch;

Data declarationsData declarations

Method declarationsMethod declarations

Page 7: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Data ScopeData Scope The The scopescope of data is the area in a program in which that of data is the area in a program in which that

data can be used (referenced)data can be used (referenced)

Data declared at the class level can be used by all methods Data declared at the class level can be used by all methods in that classin that class

Data declared within a method can only be used in that Data declared within a method can only be used in that methodmethod

Data declared within a method is called Data declared within a method is called local datalocal data

Page 8: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Writing MethodsWriting Methods A A method declarationmethod declaration specifies the code that will be specifies the code that will be

executed when the method is invoked (or called)executed when the method is invoked (or called)

When a method is invoked, the flow of control jumps to the When a method is invoked, the flow of control jumps to the method and executes its codemethod and executes its code

When complete, the flow returns to the place where the When complete, the flow returns to the place where the method was called and continuesmethod was called and continues

The invocation may or may not return a value, depending The invocation may or may not return a value, depending on how the method was definedon how the method was defined

Page 9: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

myMethod();

myMethodcompute

Method Control FlowMethod Control Flow The called method could be within the same class, in which The called method could be within the same class, in which

case only the method name is neededcase only the method name is needed

Page 10: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

doIt

helpMe

helpMe();

obj.doIt();

main

Method Control FlowMethod Control Flow The called method could be part of another class or objectThe called method could be part of another class or object

Page 11: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

The Coin ClassThe Coin Class In our In our CoinCoin class we could define the following data: class we could define the following data:

• faceface, an integer that represents the current face, an integer that represents the current face• HEADSHEADS and and TAILSTAILS, integer constants that represent the two , integer constants that represent the two

possible statespossible states

We might also define the following methods:We might also define the following methods:• a a CoinCoin constructor, to set up the object constructor, to set up the object• a a flipflip method, to flip the coin method, to flip the coin• a a getFacegetFace method, to return the current face method, to return the current face• a a toStringtoString method, to return a string description for printing method, to return a string description for printing

Page 12: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

The Coin ClassThe Coin Class See See CountFlipsCountFlips.java .java (page 179)(page 179) See Coin.java (page 180)See Coin.java (page 180)

Once the Once the CoinCoin class has been defined, we can use it again class has been defined, we can use it again in other programs as neededin other programs as needed

Note that the Note that the CountFlipsCountFlips program did not use the program did not use the toStringtoString method method

A program will not necessarily use every service provided A program will not necessarily use every service provided by an objectby an object

Page 13: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Example- - Coin Program 1 of Example- - Coin Program 1 of 44////

****************************************************************************************************************************************

// Coin.java Author: Lewis and Loftus// Coin.java Author: Lewis and Loftus////// Represents a coin with two sides that can be flipped.// Represents a coin with two sides that can be flipped.////

****************************************************************************************************************************************

public class Coinpublic class Coin{{ public final int HEADS = 0;public final int HEADS = 0; public final int TAILS = 1;public final int TAILS = 1;

Page 14: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

2 of 42 of 4private int face;private int face;

//-----------------------------------------------------------------//----------------------------------------------------------------- // Sets up the coin by flipping it initially.// Sets up the coin by flipping it initially. //-----------------------------------------------------------------//----------------------------------------------------------------- public Coin ()public Coin () {{ flip();flip(); }}

//-----------------------------------------------------------------//----------------------------------------------------------------- // Flips the coin by randomly choosing a face.// Flips the coin by randomly choosing a face. //-----------------------------------------------------------------//-----------------------------------------------------------------

Page 15: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

`̀ 3 of 3 of 44public void flip ()public void flip () {{ face = (int) (Math.random() * 2);face = (int) (Math.random() * 2); }}

//-----------------------------------------------------------------//----------------------------------------------------------------- // Returns the current face of the coin as an integer.// Returns the current face of the coin as an integer. //-----------------------------------------------------------------//----------------------------------------------------------------- public int getFace ()public int getFace () {{ return face;return face; }}

Page 16: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

4 of 4 of 44//-----------------------------------------------------------------//----------------------------------------------------------------- // Returns the current face of the coin as a string.// Returns the current face of the coin as a string. //-----------------------------------------------------------------//----------------------------------------------------------------- public String toString()public String toString() {{ String faceName;String faceName;

if (face == HEADS)if (face == HEADS) faceName = "Heads";faceName = "Heads"; elseelse faceName = "Tails";faceName = "Tails";

return faceName;return faceName; }}}}

Page 17: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Instance DataInstance Data The The faceface variable in the variable in the CoinCoin class is called class is called instance datainstance data

because each instance (object) of the because each instance (object) of the CoinCoin class has its own class has its own

A class declares the type of the data, but it does not reserve A class declares the type of the data, but it does not reserve any memory space for itany memory space for it

Every time a Every time a CoinCoin object is created, a new object is created, a new faceface variable is variable is created as wellcreated as well

The objects of a class share the method definitions, but they The objects of a class share the method definitions, but they have unique data spacehave unique data space

That's the only way two objects can have different statesThat's the only way two objects can have different states

Page 18: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Instance DataInstance Data See FlipRace.java (page 182)See FlipRace.java (page 182)

face 0

coin1

int face;

class Coin

face 1

coin2

Page 19: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

19

EncapsulationEncapsulation You can take one of two views of an object:You can take one of two views of an object:

• internal - the structure of its data, the algorithms used by its methodsinternal - the structure of its data, the algorithms used by its methods

• external - the interaction of the object with other objects in the external - the interaction of the object with other objects in the programprogram

From the external view, an object is an From the external view, an object is an encapsulatedencapsulated entity, entity, providing a set of specific servicesproviding a set of specific services

These services define the These services define the interfaceinterface to the object to the object

Recall from Chapter 2 that an object is an Recall from Chapter 2 that an object is an abstractionabstraction, hiding , hiding details from the rest of the systemdetails from the rest of the system

Page 20: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

20

EncapsulationEncapsulation An object should be An object should be self-governingself-governing

Any changes to the object's state (its variables) should be Any changes to the object's state (its variables) should be accomplished by that object's methodsaccomplished by that object's methods

We should make it difficult, if not impossible, for one We should make it difficult, if not impossible, for one object to "reach in" and alter another object's stateobject to "reach in" and alter another object's state

The user, or The user, or clientclient, of an object can request its services, but , of an object can request its services, but it should not have to be aware of how those services are it should not have to be aware of how those services are accomplishedaccomplished

Page 21: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

21

EncapsulationEncapsulation An encapsulated object can be thought of as a An encapsulated object can be thought of as a black boxblack box Its inner workings are hidden to the client, which only Its inner workings are hidden to the client, which only

invokes the interface methodsinvokes the interface methods

ClientClient Methods

Data

Page 22: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

22

Visibility ModifiersVisibility Modifiers In Java, we accomplish encapsulation through the In Java, we accomplish encapsulation through the

appropriate use of appropriate use of visibility modifiersvisibility modifiers

A A modifiermodifier is a Java reserved word that specifies particular is a Java reserved word that specifies particular characteristics of a method or data valuecharacteristics of a method or data value

We've used the modifier We've used the modifier finalfinal to define a constant to define a constant

Java has three visibility modifiers: Java has three visibility modifiers: publicpublic, , privateprivate, , and and protectedprotected

We will discuss the We will discuss the protectedprotected modifier later modifier later

Page 23: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

23

Visibility ModifiersVisibility Modifiers Members of a class that are declared with Members of a class that are declared with public visibilitypublic visibility

can be accessed from anywherecan be accessed from anywhere

Members of a class that are declared with Members of a class that are declared with private visibilityprivate visibility can only be accessed from inside the classcan only be accessed from inside the class

Members declared without a visibility modifier have Members declared without a visibility modifier have default default visibilityvisibility and can be accessed by any class in the same and can be accessed by any class in the same packagepackage

Java modifiers are discussed in detail in Appendix FJava modifiers are discussed in detail in Appendix F

Page 24: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

24

Visibility ModifiersVisibility Modifiers As a general rule, no object's data should be declared with As a general rule, no object's data should be declared with

public visibilitypublic visibility

Methods that provide the object's services are usually Methods that provide the object's services are usually declared with public visibility so that they can be invoked declared with public visibility so that they can be invoked by clientsby clients

Public methods are also called Public methods are also called service methodsservice methods

A method created simply to assist a service method is called A method created simply to assist a service method is called a a support methodsupport method

Since a support method is not intended to be called by a Since a support method is not intended to be called by a client, it should not be declared with public visibilityclient, it should not be declared with public visibility

Page 25: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Method Declarations RevisitedMethod Declarations Revisited A method declaration begins with a A method declaration begins with a method headermethod header

char calc (int num1, int num2, String message)

methodmethodnamename

returnreturntypetype

parameter listparameter list

The parameter list specifies the typeThe parameter list specifies the typeand name of each parameterand name of each parameter

The name of a parameter in the methodThe name of a parameter in the methoddeclaration is called a declaration is called a formal argumentformal argument

Page 26: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Method DeclarationsMethod Declarations The method header is followed by the The method header is followed by the method bodymethod body

char calc (int num1, int num2, String message){ int sum = num1 + num2; char result = message.charAt (sum);

return result;}

The return expression must beThe return expression must beconsistent with the return typeconsistent with the return type

sumsum and and resultresultare are local datalocal data

They are created each They are created each time the method is called, time the method is called, and are destroyed when and are destroyed when it finishes executingit finishes executing

Page 27: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

27

The return StatementThe return Statement The The return typereturn type of a method indicates the type of value that of a method indicates the type of value that

the method sends back to the calling locationthe method sends back to the calling location

A method that does not return a value has aA method that does not return a value has a void void return return typetype

The The return statementreturn statement specifies the value that will be specifies the value that will be returnedreturned

Its expression must conform to the return typeIts expression must conform to the return type

Page 28: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

ParametersParameters Each time a method is called, the Each time a method is called, the actual argumentsactual arguments in the invocation are copied in the invocation are copied

into the formal argumentsinto the formal arguments

char calc (int num1, int num2, String message){ int sum = num1 + num2; char result = message.charAt (sum);

return result;}

ch = obj.calc (25, count, "Hello");

Page 29: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

29

Constructors RevisitedConstructors Revisited Recall that a constructor is a special method that is used to Recall that a constructor is a special method that is used to

set up a newly created objectset up a newly created object

When writing a constructor, remember that:When writing a constructor, remember that:• it has the same name as the classit has the same name as the class• it does not return a valueit does not return a value• it has no return type, not evenit has no return type, not even void void• it often sets the initial values of instance variables it often sets the initial values of instance variables

The programmer does not have to define a constructor for The programmer does not have to define a constructor for a classa class

Page 30: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Writing ClassesWriting Classes See BankAccounts.java (page 188)See BankAccounts.java (page 188) See Account.java (page 189)See Account.java (page 189)

An An aggregate objectaggregate object is an object that contains references to is an object that contains references to other objectsother objects

An An AccountAccount object is an aggregate object because it object is an aggregate object because it contains a reference to a contains a reference to a StringString object (that holds the object (that holds the owner's name)owner's name)

An aggregate object represents a An aggregate object represents a has-a relationshiphas-a relationship A bank account A bank account has ahas a name name

Page 31: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Writing ClassesWriting Classes Sometimes an object has to interact with other objects of Sometimes an object has to interact with other objects of

the same typethe same type For example, we might add two For example, we might add two RationalRational number objects number objects

together as follows:together as follows:

r3 = r1.add(r2);

One object (One object (r1r1) is executing the method and another () is executing the method and another (r2r2) ) is passed as a parameteris passed as a parameter

See RationalNumbers.java (page 196)See RationalNumbers.java (page 196) See Rational.java (page 197)See Rational.java (page 197)

Page 32: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

32

Overloading MethodsOverloading Methods Method overloadingMethod overloading is the process of using the same method is the process of using the same method

name for multiple methodsname for multiple methods

The The signaturesignature of each overloaded method must be unique of each overloaded method must be unique

The signature includes the number, type, and order of the The signature includes the number, type, and order of the parametersparameters

The compiler must be able to determine which version of The compiler must be able to determine which version of the method is being invoked by analyzing the parametersthe method is being invoked by analyzing the parameters

The return type of the method is The return type of the method is notnot part of the signature part of the signature

Page 33: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Overloading MethodsOverloading Methods

float tryMe (int x){ return x + .375;}

Version 1Version 1

float tryMe (int x, float y){ return x*y;}

Version 2Version 2

result = tryMe (25, 4.32)

InvocationInvocation

Page 34: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

34

Overloaded MethodsOverloaded Methods TheThe println println method is overloaded:method is overloaded:

println (String s)println (String s) println (int i)println (int i) println (double d)println (double d)

etc.etc.

The following lines invoke different versions of theThe following lines invoke different versions of the println println method:method:

System.out.println ("The total is:");System.out.println ("The total is:"); System.out.println (total);System.out.println (total);

Page 35: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

35

Overloading MethodsOverloading Methods Constructors can be overloadedConstructors can be overloaded An overloaded constructor provides multiple ways to set up An overloaded constructor provides multiple ways to set up

a new objecta new object

See SnakeEyes.java (page 203)See SnakeEyes.java (page 203) See Die.java (page 204)See Die.java (page 204)

Page 36: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

The StringTokenizer ClassThe StringTokenizer Class The next example makes use of the The next example makes use of the StringTokenizerStringTokenizer

class, which is defined in the class, which is defined in the java.utiljava.util package package

A A StringTokenizerStringTokenizer object separates a string into smaller object separates a string into smaller substrings (tokens)substrings (tokens)

By default, the tokenizer separates the string at white spaceBy default, the tokenizer separates the string at white space

The The StringTokenizerStringTokenizer constructor takes the original constructor takes the original string to be separated as a parameterstring to be separated as a parameter

Each call to the Each call to the nextTokennextToken method returns the next token method returns the next token in the string in the string

Page 37: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Method DecompositionMethod Decomposition A method should be relatively small, so that it can be A method should be relatively small, so that it can be

readily understood as a single entityreadily understood as a single entity

A potentially large method should be decomposed into A potentially large method should be decomposed into several smaller methods as needed for clarityseveral smaller methods as needed for clarity

Therefore, a service method of an object may call one or Therefore, a service method of an object may call one or more support methods to accomplish its goalmore support methods to accomplish its goal

See PigLatin.java (page 207)See PigLatin.java (page 207) See PigLatinTranslator.java (page 208)See PigLatinTranslator.java (page 208)

Page 38: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Applet MethodsApplet Methods In previous examples we've used the In previous examples we've used the paintpaint method of the method of the AppletApplet class to draw on an applet class to draw on an applet

The The AppletApplet class has several methods that are invoked class has several methods that are invoked automatically at certain points in an applet's lifeautomatically at certain points in an applet's life

The The initinit method, for instance, is executed only once when method, for instance, is executed only once when the applet is initially loadedthe applet is initially loaded

The The AppletApplet class also contains other methods that class also contains other methods that generally assist in applet processinggenerally assist in applet processing

Page 39: Chapter 4: Writing Classes. 2 b We've been using predefined classes. Now we will learn to write our own classes to define new objects b Chapter 4 focuses.

Graphical ObjectsGraphical Objects Any object we define by writing a class can have graphical Any object we define by writing a class can have graphical

elementselements The object must simply obtain a graphics context (a The object must simply obtain a graphics context (a GraphicsGraphics object) in which to draw object) in which to draw

An applet can pass its graphics context to another object An applet can pass its graphics context to another object just as it can any other parameterjust as it can any other parameter

See LineUp.java (page 212)See LineUp.java (page 212) See StickFigure.java (page 215)See StickFigure.java (page 215)