Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
ISYE 7210--Simulation of Real-Time Systems Fall 2005 Classes & Objects Note: See zip file on class Web page for examples used in class www.chmsr.gatech.edu/ISyE7210/ www.horstmann.com/corejava.html Q: 5.day.5 9/20/2005 9:13 PM Christine M. Mitchell Center for Human-Machine Systems Research (chmsr) School of Industrial and Systems Engineering (chmsr lab) ISyE Main, Room 426, 404 385-0363 (office) ISyE Groseclose, Room 334, 404 894-4321 {cm}@chmsr.gatech.edu (9.7.05) CHMSR 1 StringOverload API Class Name StringOverload() Class Body Class Declaration public class StringOverload Variables private long quantity { private long quantity = 0; public StringOverload () { quantity = 0; } public StringOverload (long newQuant) { quantity = newQuant; } public long getQuantity() { return quantity; } public void setQuantity(long newQuantity) { quantity = newQuantity; return; //optional } public String toString() { String msg = new String("Local toString(): Current value of quantity is " + getQuantity()+ "\n") return msg; } Variable Constructor Constructor public class StringOverload() Methods Methods public long getQuantity() --returns value of quantity public long setQuantity(long newQuant) --set private variable, quantity, public String toString() --returns string representation of the object (9.7.05) } 2 Variable Scope Scope Region of a program within which the variable can be referred to by simple name Determines if variable can be used from outside of the class Location of the variable declaration establishes its scope & category Local variable Data item known within a block Inaccessible to code outside the block. Member variable Field of a class Default is not static Method parameter Exception-handler parameter Distinct from visibility Set (9.7.05) with an access modifier 3 Basic Java Syntax & Classes Plus our Coding Conventions (cont’d) (Example 1: Part.java) A Java class has two components 1. A class declaration 2. A class body A Java class declaration includes specification of scope & class name public Part (for class Part) //first line of class definition Class scope (access modifier): public, private, protected, … Note: An access modifier controls which other parts of a Java program can see the Java class (9.7.05) A public scope means any other part of the Java program can “see” the class 4 Overview: Classes A Java class is a template that describes the form of a variable: an object (instance) of that class Class objects (instances): name & yourName String name; String yourName; Class template 1. Class declaration a. Class scope b. Attributes of the class access level: public, private, protected abstract: cannot be instantiated final: cannot have a subclass extends: descends from a superclass implements: includes specification of variable and method details defined in an interface c. Class name d. Class defaults: nonpublic, nonabstract, nonfinal subclass of Object that implements no interfaces. (9.7.05) 5 Overview: Classes (cont’d) (9.7.05) A Java class template (cont’d) 2. Class body a. Variables of the class: may not be defined within the body of a method Types of variables in a class: Instance variables: one for every instance of a class class variables: exactly one for each class Access: public, private, protected Type: variable (int, float, ….) or an instance of another class static: a class variable final: a constant static final: a class constant static final double INTEREST_RATE = .04; 6 Class Definition Summary (cont’d) A Java class template (cont’d) 2. class body b. Constructors Special “functions” that create an instance (an object) of the class Must have the same name as the class Do not have a return type Qualifiers access level: public, private, protected arguments (type anArgumentName, …..) Default constructor Java creates a default constructor that sets all the variables of the class to their “natural” defaults, if the user does not create ANY constructor!!!!! (9.7.05) If the user creates one or more constructors, then Java does NOT create a default constructor; the user may create a default constructor 7 Class Definition Summary (cont’d) A Java class template (cont’d) 2. class body b. constructors Use of constructors One step method: declare & initialize an instance of ClassName, objectName, simultaneously ClassName objectName = new ClassName(…); Two step method (1) Declare a reference variable of type ClassName, objectName (2) Initialize (and create memory) for the instance (1) ClassName objectName = null; //initialization is optional (2) objectName = new ClassName(…); //allocate memory (1) Integer anInt = 0; //declare an instance (2) anInt = new Integer (700); //initialize (9.7.05) 8 Class Definition Summary (cont’d) A Java class template (cont’d) 2. class body c. (9.7.05) Destructors Java does not have destructor methods for a class Java reclaims memory with garbage collection Garbage collection happens in the background Users are rarely aware of garbage collection If speed is an issue (almost never!!), the programmer can force garbage collection Do not do without thinking In ten years, I never had to explicitly call Java garbage collection explicitly 9 Example: Part (a more sophisticated class) Part.2a—Test a Java-Created Default Constructor //Part.java (Part.2a--with Java created default constructor) /** A more complicated Part class. */ public class Part { /** instance variables */ private int numParts = 25; //good to initialize /** Constructors (special class members) Create an instance (object) of a class Constructors must have the same name as the class */ /** Default constructor: automatically created by Java IF no other constructor exists. Good style to create a default constructor */ (9.7.05) //public Part()//created by Java IF no other constructor exists //{ //numParts = 0; //} 10 Example: Part (a more sophisticated class) Part.2a—Test a Java-Created Default Constructor //Part.java (Part.2a--with Java created default constructor) /** Constructor sets initial value of numParts */ //public Part (int newParts) //must have the same name as the class //{ //numParts = numParts; //sets the instance variable to numParts //} /** Accessor methods return the values of variables in a class Accessor methods are typically called, getVariableName() <p> Returns the value of private instance variable numParts */ public int getNumParts() { return numParts; } (9.7.05) 11 Example: Part (a more sophisticated class) Part.2a—Test a Java-Created Default Constructor //Part.java (Part.2a--with Java created default constructor) /** Mutator methods change the values of variables in a class Mutator methods are typically called, setVariableName(int aNumber.) <p> Changes the value of private instance variable _numParts */ public void setNumParts(int newNum) { numParts = newNum; return; //optional } /** Other instance methods change the values of variables in a class <p> Increments the value of numParts by 10 */ public void incrementNumParts() { numParts = numParts + 10; } (9.7.05) 12 Example: Part.2a (a more sophisticated class) Test a Java-Created Default Constructor //Part.java (Part.2a--with Java created default constructor) /** Increments the value of numParts by anIncrease */ public void incrementNumParts(int anIncrease) { numParts = numParts + anIncrease; } /** Overload toString() method of class Object */ public String toString() { String s = new String(numParts + " parts in this batch" ); return s; } (9.7.05) 13 Example: Part (a more sophisticated class) Part.2a—Test a Java-Created Default Constructor //Part.java (Part.2a--with Java created default constructor) public static void main (String[ ] args) { //create two instance of Part //test default constructor Part testPart = new Part(); //the one line method of creating an instance of Part System.out.println ("testPart: Has " + testPart.toString() + "."); //Part myPart; //reference to a Part object //myPart = new Part(85000); //now give it memory & a value //Part yourPart = new Part(2000); //the one line method of creating an instance of Part //System.out.println ("myPart: Has " + myPart.toString() + "."); //System.out.println ("yourPart: Has " + yourPart.toString() + "."); //System.out.println ("yourPart Has " + yourPart.toString() + ".") //yourPart.setNumParts(2500); //System.out.println ("yourPart has " + yourPart.toString() + "."); //yourPart.incrementNumParts(1000); //System.out.println ("Now yourPart has " + yourPart.toString() + "."); }//end main } //end of class Part Output testPart: Has 25 parts in this batch. (9.7.05) 14 Example: Part (a more sophisticated class) Part.2b: Overloaded & Default Constructors & Other Methods //Part.java (Part.2b--constuctors: default & overloaded) /** A second, more complicated Part class. */ public class Part { /** instance variables */ private int numParts = 25; //good to initialize /** Constructors (special class members) Create an instance (object) of a class Constructors must have the same name as the class */ /** Default constructor: automatically created by Java IF no other constructor exists. Good style to create a default constructor */ (9.7.05) 15 Example: Part (a more sophisticated class) Part.2b: Overloaded & Default Constructors & Other Methods //Part.java (Part.2b--constuctors: default & overloaded) public Part ( ) //user-created default constructor no argument { numParts = 25; //sets a default instance variable to four for numPart } /** Overloaded constructor sets initial value of numParts */ public Part (int newParts) //must have the same name as the class { numParts = newParts; //sets the instance variable numParts } /** Accessor methods return the values of variables in a class Accessor methods are typically called, getVariableName() <p> Returns the value of private instance variable numParts */ public int getNumParts() { return numParts; } (9.7.05) 16 Example: Part (a more sophisticated class) Part.2b: Overloaded & Default Constructors & Other Methods //Part.java (Part.2b--constuctors: default & overloaded) /** Mutator methods change the values of variables in a class Mutator methods are typically called, setVariableName(int aNumber.) <p> Changes the value of private instance variable numParts */ public void setNumParts(int newNum) { numParts = newNum; return; //optional } /** Other instance methods change the values of variables in a class <p> Increments the value of numParts by 10 */ public void incrementNumParts() { numParts = numParts + 10; } (9.7.05) 17 Example: Part (a more sophisticated class) Part.2b: Overloaded & Default Constructors & Other Methods //Part.java (Part.2b--constuctors: default & overloaded) /** Increments the value of numParts by anIncrease */ public void incrementNumParts(int anIncrease) { numParts = numParts + anIncrease; } /** Overload toString() method of class Object */ public String toString() { String s = new String(numParts + " parts in this batch" ); return s; } (9.7.05) 18 Example: Part (a more sophisticated class) Part.2b: Overloaded & Default Constructors & Other Methods //Part.java (Part.2b--constuctors: default & overloaded) public static void main (String[ ] args) { //create two instance of Part //test default constructor //Part testPart = new Part(); //the one line method of creating an instance of Part //System.out.println ("testPart: Has " + testPart.toString() + "."); Part myPart; //reference to a Part object, myPart myPart = new Part(85000); //now give it memory & a value System.out.println ("myPart: Has " + myPart.toString() + "."); Part yourPart = new Part(2000); //the one line method of creating an instance of Part System.out.println ("yourPart: Has " + yourPart.toString() + "."); yourPart.setNumParts(2500); System.out.println ("yourPart now has " + yourPart.toString() + "."); yourPart.incrementNumParts(1000); System.out.println ("Now yourPart has " + yourPart.toString() + "."); }//end main } //end of class Part Output myPart: Has 85000 parts in this batch. yourPart: Has 2000 parts in this batch. yourPart now has 2500 parts in this batch. Now yourPart has 3500 parts in this batch. (9.7.05) 19 Example: Part.2c (multiple Java files) Part.2c contains two Java source files Part.java // same file as in 2b TestApp.java //new TestApp.java TestApp tests the functionality of Part class TestApp has one method, main(…), Alternative to Example 2b in which the main() contained in Part was used to test Part Compiling multiple files in Java Remove all class files in folder Part.2c Compile TestApp Look in folder, Part.2c You will see a Part.class as well as a TestPart.class Java compiler is smart enough to see it needs a Part class & looks for one & compiles it as well Like a “make” command in Unix (9.7.05) 20 Example: Part.2c (multiple Java files) //TestApp.java (Part.2c: multiple Java files) /** This is a standard testing program class. <p> It can be used with any class or set of classes. <p> Testing Part from with two files: Part.java & TestApp.java and the main() is in class TestPart */ public class TestPart { public static void main (String[ ] args) { //create two instances of Part with default constructor Part myPart = new Part( ); //the one line method of creating an instance System.out.println ("yourPart: " + myPart.toString() + "."); Part yourPart = new Part(350); System.out.println ("yourPart: " + yourPart.toString() + "."); //use accessor methods (required for private instance variables) System.out.println ("I have " + myPart.getNumParts( ) + " parts."); System.out.println ("You have " + yourPart.getNumParts( ) + " parts."); (9.7.05) 21 Example: Part.2c (multiple Java files) //TestApp.java (Part.2c: multiple Java files) //use mutator methods to change the instance variables for both objects myPart.setNumParts(1000); yourPart.setNumParts(-50); System.out.println ("I have " + myPart.getNumParts( ) + " parts."); System.out.println ("You have " + yourPart.getNumParts( ) + " parts."); //increment the value of private instance variable, numParts in myPart myPart.incrementNumParts(); yourPart.incrementNumParts(2000); System.out.println ("I have " + myPart.getNumParts( ) + " parts."); System.out.println ("You have " + yourPart.getNumParts( ) + " parts."); Part hisPart; //create a reference (2) line method of construction hisPart = new Part(85000); //overloaded constructor that initialize instance var. Part herPart = new Part(2000); // (1) line method of creating an instance of Part System.out.println ("herPart:" + herPart.toString() + "."); System.out.println ("hisPart: " + hisPart.toString() + "."); }//end of main method } //class TestApp (9.7.05) 22 Example: Part.2c (multiple Java files) //TestApp.java (Part.2c: multiple Java files) Output yourPart: 25 parts in this batch. yourPart: 350 parts in this batch. I have 25 parts. You have 350 parts. I have 1000 parts. You have -50 parts. I have 1010 parts. You have 1950 parts. herPart:2000 parts in this batch. hisPart: 85000 parts in this batch. (9.7.05) 23