![Page 1: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/1.jpg)
Big JavaBig JavaChapter 7-8Chapter 7-8
(ArrayList / Class Design)(ArrayList / Class Design)
2009.OOP.r12009.OOP.r1
![Page 2: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/2.jpg)
Chapter 7Arrays and ArrayLists
![Page 3: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/3.jpg)
Array BasicsArray Basics
• Similar to C++, but always allocated:double [] data = new double[10];
• Can also have arrays of objects:BankAccount[] accounts = new BankAccount[MAX];
• Access is similar to C++, but if code goes beyond array bounds an exception is thrown:for (int i=0; i<=10; ++i)
System.out.println(data[i]);
// ArrayIndexOutOfBoundsException on data[10]
• Arrays have built-in field named lengthfor (int i=0; i < data.length; ++i)
System.out.println(data[i]);
![Page 4: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/4.jpg)
Array InitializationArray Initialization
• Common to forget to allocate spacedouble[] data;
data[0] = 29.5;
• Can initialize in declaration, like C++:int[] primes = {2, 3, 5, 7, 11};
• Can use an anonymous array as parameter:new int[] {2, 3, 5, 7, 11}
![Page 5: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/5.jpg)
ArrayListsArrayLists• Array lists can grow and shrink as needed• ArrayList is a generic class (similar to C++ template)• ArrayList has variety of methods for common tasks, for
example:ArrayList<BankAccount> accounts = new
ArrayList<BankAccount>();accounts.add(new BankAccount(1001));accounts.add(new BankAccount(2010));BankAccount anAccount = accounts.get(1); int count = accounts.size(); // 0 to size-1 are validBankAccount account2 = new BankAccount(3000);accounts.set(1, account2); // overwritesaccounts.add(0, new BankAccount(1200)); // index < sizeaccounts.remove(1);for (int i=0; i<accounts.size(); ++i)
System.out.println(accounts.get(i).getBalance());
![Page 6: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/6.jpg)
ArrayList (continued)ArrayList (continued)
• With an unparameterized ArrayList, any type of object may be stored, but the object must be cast when retrieved:ArrayList accounts = new ArrayList();
accounts.add(new BankAccount(1500));
BankAccount acct = (BankAccount) accounts.get(0);
• Exception will occur if cast is incorrect. Much better practice to use generic class (warning in Eclipse if use unparameterized)
![Page 7: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/7.jpg)
Wrappers and Auto-boxingWrappers and Auto-boxing• Not in C++ (C++ evolved
from C, Java designed from scratch as OO)
• Numbers are not objects, can’t place directly in ArrayLists
• All primitive types have “wrapper” classes
• Wrapper contains one value of corresponding primitive type
• Also have useful static methods
Primitive Wrapper
byte Byte
boolean Boolean
char Character
double Double
float Float
int Integer
long Long
short Short
![Page 8: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/8.jpg)
Wrappers and Auto-boxing (continued)Wrappers and Auto-boxing (continued)• Starting with Java 5.0, conversion between
primitive types and wrapper classes is automatic, called auto-boxing (auto-wrapping would be more consistent!)
• Examples:Double d = 29.95; // Double d = new Double(29.95);double x = 5; // auto-unbox, same as double x = d.doubleValue();Double e = d + 1; // auto-unbox, add 1, auto-box
ArrayList<Double> data = new ArrayList<Double>();data.add(32.14);double x = data.get(0);
![Page 9: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/9.jpg)
Efficiency NoteEfficiency Note
• Even though you don’t have to write the code, if you have a long sequence of primitive types (numbers or chars), use an array rather than an ArrayList for efficiency
![Page 10: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/10.jpg)
Enhanced for loopEnhanced for loop• Convenient new syntax for iterating an array or
ArrayList:double[] data = { . . . };double sum = 0;for (double e : data){sum = sum + e;
}
• With ArrayLists:ArrayList<BankAccount> accounts; . . . add, create sumfor (BankAccount a : accounts){sum += a.getBalance();
}
![Page 11: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/11.jpg)
2D Arrays2D Arrays
• Similar to C++, but must always allocate memoryfinal int ROWS = 3;
final int COLS = 3;
String[][] board = new String[ROWS][COLS];
![Page 12: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/12.jpg)
More on Arrays etc.More on Arrays etc.
• First choice will normally be ArrayList, unless storing large collection of primitives OR need 2D
• Use “for each” loop pattern when processing all elements
• To make a copy, use the clone method:double [] data = new double[10];
. . .
double [] prices = (double []) data.clone();
• Or use System.arraycopy if not copying the entire array (see book or API for details)
![Page 13: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/13.jpg)
On to Chapter 8
Designing Classes
![Page 14: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/14.jpg)
Choosing ClassesChoosing Classes• Common: class names are nouns, methods
names are verbs– class BankAccount, methods deposit, withdraw etc.– class CashRegister, methods enterPayment,
recordPurchase, etc.
• Classes may also be actors that do some type of work for you– Scanner scans stream for numbers and strings– Random generates random numbers
• Utility class may have no objects, but exists to provide static methods and constants– Math class
• Some classes just exist to start a program (degenerate classes)
![Page 15: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/15.jpg)
Choosing Classes (continued)Choosing Classes (continued)
• Which of the following are good classes?– ComputePaycheck– PaycheckProgram– Paycheck– ChessBoard– MoveChessPiece
• A class should represent a single concept
![Page 16: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/16.jpg)
Cohesion and CouplingCohesion and Coupling
• Cohesion: All public methods (i.e., the public interface) should be closely related to the single concept the class represents
• Coupling: Number of dependencies between classes
![Page 17: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/17.jpg)
UML Dependency RelationshipUML Dependency Relationship
CashRegister
Coin
Unified Modeling LanguageBooch, Jacobson, RumbaughIn a class diagram,
dependency is a dashed line with a shaped open arrow that points to dependent class. (i.e., CashRegister depends on Coin)
![Page 18: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/18.jpg)
CouplingCoupling
low coupling high coupling
![Page 19: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/19.jpg)
Static MethodsStatic Methods
• Also known as class method• Does not operate on an object, so it has only
explicit parameters• Example:
public class Financial
{public static double percentOf(double p, double a)
{return (p/100) * a;
}
}
double tax = Financial.percentOf(taxRate, total);
![Page 20: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/20.jpg)
Static FieldsStatic Fields
• Used to store values outside any particular object
public class BankAccount
{
private double balance;
print int lastAssignedNumber = 1000; // No
…
}
• should be:print static int lastAssignedNumber = 1000;
![Page 21: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/21.jpg)
Static Field InitializationStatic Field Initialization
• 3 options1. Do nothing. Get default values. 2. Use explicit initializer (like example).
Initialization executed when class is loaded.3. Use static initialization block (rarely used)
public class BankAccount {
. . .
private static int lastAssignedNumber;
static
{
lastAssignedNumber = 1000;
}
![Page 22: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/22.jpg)
PackagesPackages• A java package is a set of related classes (similar
to C++ namespace)• Common packages:
Package Purpose Sample Class
java.lang Language support Math
java.util utilities Random
java.io input/output PrintStream
java.awt AbstractWindowing Toolkit
Color
java.applet Applets Applet
java.net Networking Socket
java.sql Database access ResultSet
![Page 23: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/23.jpg)
Create your own PackageCreate your own Package• Put a package statement on first line:
package com.horstmann.bigjava
• To avoid name clashes, common to use domain names
• Can import an entire package or a single class:import java.util.*;import java.util.ArrayList;
• Directory structure on disk will match package (e.g., com/horstmann/bigjava)
• Directories containing packages should be added to the classpath (depends on OS/IDE)
• In Eclipse, you can use the New Package icon to create a package, and the directory structure will be created for you.
![Page 24: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/24.jpg)
Unit Test FrameworksUnit Test Frameworks
• Good to create a test suite• Goal: relieve human from task of comparing
expected and actual values• JUnit framework available from http://junit.org• Also included in Eclipse• Idea: design companion test class for each class
– In JUnit 3, test class must extend class TestCase from junit.framework
– define a method whose name starts with test, e.g., testSimpleCase
– If all tests pass, JUnit shows a green bar
![Page 25: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/25.jpg)
JUnit Framework ClassesJUnit Framework Classes
• Test Case. Collects a set of test methods. Name starts with test. Has no arguments.
• Test Suite. Collection of tests run at the same time. May be just a single test method.
• Test Runner. Utility used to run a test suite. In Eclipse, shows a graphical presentation. May also be a command-line version.
![Page 26: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/26.jpg)
Setting up Eclipse projectsSetting up Eclipse projects
• JUnit tests are generally separate from application source code
• File > New > Source Folder test• Put your classes that extend TestCase in
the new source Folder (JUnit v3)• Need to add junit.jar to build path
![Page 27: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/27.jpg)
Directory StructureDirectory Structure
class
related test class
![Page 28: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/28.jpg)
Build PathBuild PathSelect Project > PropertiesOn dialog, select Java Build Path, Add External JarBrowse to find junit.jar (normally under plugins) and press Add
![Page 29: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/29.jpg)
Run as JUnit TestRun as JUnit Test
![Page 30: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/30.jpg)
JUnit v3 ExecutionJUnit v3 Execution
All is well!
![Page 31: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/31.jpg)
JUnit v4JUnit v4
• New Java Feature: annotations• Places a “marker” in code that is
interpreted by another tool• For JUnit, marker/annotation is @Test• No need to extend TestCase
![Page 32: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/32.jpg)
Need different Build PathNeed different Build Path
![Page 33: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/33.jpg)
Slight Modification to Test classSlight Modification to Test class
different import
@Test annotation
Assert
![Page 34: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/34.jpg)
JUnit 4 ExecutionJUnit 4 Execution
Same as version 3
![Page 35: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1](https://reader030.vdocument.in/reader030/viewer/2022032607/56649ec95503460f94bd685f/html5/thumbnails/35.jpg)
ExerciseExercise• Work with a partner• Download CashRegister and the associated test classes
from Blackboard• Set up and run in Eclipse using both version 3 and version 4
of JUnit• Write a program that uses JOptionPane dialogs to prompt
the user for a temperature and wind speed, displays the wind chill, then asks whether the user wants to do more temperatures.
• The formula for wind chill is:– 35.74 + 0.6215T - 35.75V (**0.16) + 0.4275TV(**0.16)
• In the formula, V is in the wind speed in statute miles per hour, and T is the temperature in degrees Fahrenheit.
• Write a test class to accompany your wind chill calculator• NOTE: See
http://www.weatherimages.org/data/windchill.html for important information