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
Catie Welsh March 2, 2011 Program 3 due tonight by 11:59pm Lab 5 due Friday by 1pm Sample Midterm is posted on course website ◦ Solutions will be posted after class on Friday Midterm is Monday, March 14th 2 3 Objects and references More on Classes 4 Classes Objects Instance variables Methods ◦ Return types ◦ Parameters and arguments Information hiding and encapsulation ◦ public/private ◦ accessors/mutators 5 Behave differently from variables of a primitive type 6 When declaring a variable, a certain amount of memory is assigned based on the declared primitive type int age; double length; char letter; What goes inmemor this memory? y 7 A data value is stored in the location assigned to a variable of a primitive type 8 What goes in these variables? Student jack; String inputString; memor y 9 Contain the memory address of the object named by the variable ◦ NOT the object itself What is an address? Object is stored in some other location in memory The address to this other location is called a reference to the object Class types are also called reference types 10 Assume we have a class named Book Book jacksBook = new Book(“Java”); Book apusBook = new Book(“Java”); vs. Book jacksBook = new Book(“Java”); Book apusBook = jacksBook; 11 Memory jacksBook 207 ? 8 apusBook ? ? 105 207 6 8 ? 1056 ? Java ? 253 ? 2078 ? Java ? 137 509 Book jacksBook; Book apusBook; jacksBook = new Book(“Java”); apusBook = new Book(“Java”); jacksBook.setPage(137); apusBook.setPage(253); apusBook = jacksBook; apusBook.setPage(509); jacksBook is now on p. 509! 12 Variables of a class type contain memory addresses ◦ NOT objects themselves 13 String is a class type What happens when you have String s1 = new String(“Hello”); String s2 = new String(“Hello”); boolean strEqual = (s1 == s2); strEqual is false! Why? s1 and s2 store different addresses! 14 What happens when you have String s1 = new String(“Hello”); String s2 = new String(“Hello”); boolean strEqual = (s1.equals(s2)); strEqual is true! Why? String’s .equals() method checks if all the characters in the two Strings are the same 15 public class Book { private String name; private int page; public boolean equals(Book book) { return (this.name.equals(book.name) && this.page == book.page); } } 16 Every class has a default .equals() method if it is not explicitly written ◦ Does not necessarily do what you want You decide what it means for two objects of a specific class type to be considered equal ◦ Perhaps books are equal if the names and page numbers are equal ◦ Perhaps only if the names are equal ◦ Put this logic inside .equals() method 17 public void increaseNum(int num) { num++; } public void doStuff() { int x = 5; increaseNum(x); System.out.println(x); } Prints 5. Why? num is local to increaseNum method; does not change x 18 public void changeBook(Book book) { book = new Book(“Biology”); } public void doStuff() { Book jacksBook = new Book(“Java”); changeBook(jacksBook); System.out.println(jacksBook.getName()); } Prints Java. Why? book is local to changeBook, does not change jacksBook 19 public void changeBook(Book book) { book.setName(“Biology”); } public void doStuff() { Book jacksBook = new Book(“Java”); changeBook(jacksBook); System.out.println(jacksBook.getName()); } Prints Biology. Why? book contains the same address as jacksBook! 20 Write a bank account class for Harry Potter It needs to have the ability to track ◦ ◦ ◦ ◦ # # # 3 of galleons of sickles of knuts transaction types Deposit Withdrawal Inquiry 21 Would you like to make a transaction? y/n y Would you like to make a deposit (d), withdrawal (w), or inquire (i)? d How many galleons, sickles, and knuts would you like to deposit? Galleons: 5 Sickles: 6 Knuts: 4 Would you like to make a transaction? y/n y Would you like to make a deposit (d), withdrawal (w), or inquire (i)? w How many galleons, sickles, and knuts would you like to withdrawal? Galleons: 4 Sickles: 0 Knuts: 0 Would you like to make a transaction? y/n y Would you like to make a deposit (d), withdrawal (w), or inquire (i)? i You now have: 1 galleons 6 sickles 4 knuts 22 What are instance variables? Why private? What are the instance variables for our bank account program? ◦ What do we need to keep track of? 23 public class Account { private int galleons = 0; private int sickles = 0; private int knuts = 0; 24 getGalleons: int getSickles: int getKnuts: int setGalleons(int) setSickles(int) setKnuts(int) 25 public static void main(String[] args) { Account potter = new Account(); . . . potter.deposit(5, 7, 9); public void deposit(int g, int s, int k) { galleons+=g; sickles+=s; knuts+=k; } 26 public static void main(String[] args) { Account potter = new Account(); . . . potter.withdrawal(5, 7, 9); public void withdrawal(int g, int s, int k) { if((g > galleons) || (s > sickles) || (k > knuts)) { System.out.println("You do not have enough money"); } else { galleons -= g; sickles -= s; knuts -= k; } } 27 public static void main(String[] args) { Account potter = new Account(); . . . potter.inquire(); public void inquire() { System.out.println("You now have: " + galleons + " galleons " + sickles + " sickles " + knuts + " knuts"); } 28 Midterm Review Bring questions about the Sample Midterm 29