+ All Categories
Home > Documents > Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

Date post: 01-Jan-2016
Category:
Upload: jesse-blake-bailey
View: 224 times
Download: 2 times
Share this document with a friend
35
Big Java Big Java Chapter 7-8 Chapter 7-8 (ArrayList / Class Design) (ArrayList / Class Design) 2009.OOP.r1 2009.OOP.r1
Transcript
Page 1: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

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.

Chapter 7Arrays and ArrayLists

Page 3: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

On to Chapter 8

Designing Classes

Page 14: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

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.

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.

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.

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.

CouplingCoupling

low coupling high coupling

Page 19: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

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.

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.

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.

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.

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.

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.

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.

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.

Directory StructureDirectory Structure

class

related test class

Page 28: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

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.

Run as JUnit TestRun as JUnit Test

Page 30: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

JUnit v3 ExecutionJUnit v3 Execution

All is well!

Page 31: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

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.

Need different Build PathNeed different Build Path

Page 33: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

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.

JUnit 4 ExecutionJUnit 4 Execution

Same as version 3

Page 35: Big Java Chapter 7-8 (ArrayList / Class Design) 2009.OOP.r1.

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


Recommended