230 likes | 239 Views
This guide covers computing concepts, adding methods, creating accessors and modifiers, and using the SlideShow class.
E N D
Learning Goals • Computing concepts • Adding a method • To show the pictures in the slide show • Creating accessors and modifiers • That protect the fields in the object • Using our class
What methods will we want to add? • A method to show the slide show • A method to add a picture to the slide show • One or more constructors • To initialize the class variables, as well as doing other class initialization • Required by Java
The Constructor • Is a method • Named the same as the class name • We do not specify • public/private/protected • The return type
What will our constructor initialize? • The size of the array • The array itself • And, maybe some other things as well • We can continue adding initialization instructions to the constructor later
A default constructor • No parameters • How big should the array be? Some default value, say 10 • What will we initialize? • The size • The array • This we need to declare 2 class-level variables to represent these values!
Default constructor class SlideShow { int size; Picture [] cells; SlideShow() { this.size = 10; this.cells = new picture [size]; } // ends the default constructor } // ends the class
Adding a second constructor, to specify the size of the array class SlideShow { int size; Picture [] cells; SlideShow() { this.size = 10; this.cells = new Picture [size]; } // ends the default constructor SlideShow (int howManyPictures) { this.size = howManyPictures; this.cells = new Picture [size]; } // ends constructor } // ends the class Note that the two methods have the same name! The book calls this “overloading constructors” Other methods may be overloaded as well
What if we also wanted to be able to initialize the wait time? class SlideShow { int size; Picture [] cells; int waitTime; // specified in msec SlideShow() { this.size = 10; this.waitTime = 2000; this.cells = new Picture [size]; } // ends the default constructor SlideShow (int howManyPictures) { this.size = howManyPictures; this.cells = new Picture [size]; this.waitTime = 2000; } // ends constructor SlideShow (int howLongToWait) { this.size = 10; this.cells = new Picture [size]; this.waitTime = howLongToWait; } // ends constructor } // ends the class What is the problem with our class? How can we fix it?
Creating a method to add a picture to our slide show • What extra class variables do we need? • The number of the cell • Writing this method • Make sure we don’t add more pictures than can fit in the array • How do we handle trying to add more pictures? • Not allowing it • Resizing the array (using a second private method)
A method for showing the slide show • Now that a slide show has an array of slides we would like to • Show the pictures in the array • We can loop through the elements of the array • And show the current picture • And wait for the wait time • Then hide the current picture
Create a Method Exercise • Create a method show that will loop through the pictures in the array • Showing the current picture • Waiting till the wait time has passed • Hiding the current picture
Accessing Fields from Other Classes • Fields are usually declared to be private • So that code in other classes can’t directly access and change the data • Try this in the main • System.out.println(showObj.cells); • You will get an exception • Short for exceptional event – error • Outside classes can not use object.field to access the field value • Unless it is declared with public visibility
Accessors and Modifiers • Accessors • Are public methods that return data • In such a way as to protect the data for this object • Syntax public fieldType getFieldName() • Example public String getName() { return this.name;} • Modifiers • Are public methods that modify data • In such a way as to protect the data for this object • Syntax public returnType setFieldName(type name); • Example public void setName(String theName) {this.name = theName; }
Naming Conventions • Accessors – also called Getters • Use getFieldName for non boolean fields • Use isFieldName for boolean fields • Modifiers – also called Setters and Mutators • Use setFieldName • Sometimes return a boolean value to indicate if the value was set successfully • Examples • getName and setName
Creating SlideShow Accessors • Add a method to get the wait time public int getWaitTime() • What about a method to get the array of pictures? • If someone gets the array s/he can directly change the pictures in the array • It is safer to return the picture at an index • Then other classes can’t directly change the array of pictures
Exercise • Create a method that returns the wait time • Create a method that returns the picture at a given index in the array • If the index isn't valid return null
Creating Slide Show Modifiers • We need public methods • That let other classes set the time to wait between pictures • Our class is responsible for making sure this only happens in such a way • as to keep the data valid and not cause errors • Setting the wait time • The wait time must be > 0
Wait Time Modifier public void setWaitTime(int time) { // check that it is a valid wait time if (time >= 0) this.waitTime = time; }
Add a Field Exercise • Add a title field to the SlideShow class • Add an accessor to get the value of this field • Add a modifier to set the value of this field • Modify the show method to first create a blank picture with the title on it (if the title is non-null) and show that as the first picture in the slide show
Testing the class • Add a class and containing a main method public static void main(String[] args) throws Exception { SlideShow vacShow = new SlideShow(); vacShow.addPicture(“23beach.jpg“); vacShow.addPicture(“23blueShrub.jpg“); vacShow.addPicture(“23butterfly.jpg“); vacShow.addPicture(“23church.jpg“); vacShow.addPicture(“23redDoor.jpg“); String title = “My vacation”; vacShow.addTitle(title); vacShow.show(); }
Summary • Classes have fields, constructors, and methods • Constructors are used to initialize fields in the object • Fields are usually declared to be private • To protect the data from misuse by other classes • So you need to provide public accessor (getter) and modifier (setter) methods • That still protect the data • Use a main method to begin execution • public static void main(String[] args) {} • The book places the main method into the SlideShow class – while this is ok to do, we’ll generally keep the main in a separate class
Assignment • Read Media Computation Chapter 11, Sections 3-6, 8 • Please read the text, as it uses different examples!