Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005.

Similar presentations


Presentation on theme: "Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005."— Presentation transcript:

1 Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

2 16-18_2 Chapter 6 Method Design Testing

3 16-18_3 Method Design As we've discussed, high-level design issues include: –identifying primary classes and objects –assigning primary responsibilities After establishing high-level design issues, its important to address low-level issues such as the design of key methods For some methods, careful planning is needed to make sure they contribute to an efficient and elegant system design

4 16-18_4 Method Design An algorithm is a step-by-step process for solving a problem Examples: a recipe, travel directions Every method implements an algorithm that determines how the method accomplishes its goals An algorithm may be expressed in pseudocode, a mixture of code statements and English that communicate the steps to take

5 16-18_5 Method Decomposition A method should be relatively small, so that it can be understood as a single entity A potentially large method should be decomposed into several smaller methods as needed for clarity A public service method of an object may call one or more private support methods to help it accomplish its goal Support methods might call other support methods if appropriate

6 16-18_6 Objects as Parameters Another important issue related to method design involves parameter passing Parameters in a Java method are passed by value A copy of the actual parameter (the value passed in) is stored into the formal parameter (in the method header) Therefore passing parameters is similar to an assignment statement When an object is passed to a method, the actual parameter and the formal parameter become aliases of each other

7 16-18_7 Passing Objects to Methods What a method does with a parameter may or may not have a permanent effect (outside the method) See ParameterTester.java (page 327)ParameterTester.java See ParameterModifier.java (page 329)ParameterModifier.java See Num.java (page 330)Num.java Note the difference between changing the internal state of an object versus changing which object a reference points to

8 16-18_8 Method Overloading Method overloading is the process of giving a single method name multiple definitions If a method is overloaded, the method name is not sufficient to determine which method is being called The signature of each overloaded method must be unique The signature includes the number, type, and order of the parameters

9 16-18_9 Method Overloading The compiler determines which method is being invoked by analyzing the parameters float tryMe(int x) { return x +.375; } float tryMe(int x, float y) { return x*y; } result = tryMe(25, 4.32) Invocation

10 16-18_10 Method Overloading The println method is overloaded: println (String s) println (int i) println (double d) and so on... The following lines invoke different versions of the println method: System.out.println ("The total is:"); System.out.println (total);

11 16-18_11 Overloading Methods The return type of the method is not part of the signature That is, overloaded methods cannot differ only by their return type Constructors can be overloaded Overloaded constructors provide multiple ways to initialize a new object

12 16-18_12 Outline Method Design Testing

13 16-18_13 Testing Testing can mean many different things It certainly includes running a completed program with various inputs It also includes any evaluation performed by human or computer to assess quality Some evaluations should occur before coding even begins The earlier we find an problem, the easier and cheaper it is to fix

14 16-18_14 Testing The goal of testing is to find errors As we find and fix errors, we raise our confidence that a program will perform as intended We can never really be sure that all errors have been eliminated So when do we stop testing? –Conceptual answer: Never –Snide answer: When we run out of time –Better answer: When we are willing to risk that an undiscovered error still exists

15 16-18_15 Reviews A review is a meeting in which several people examine a design document or section of code It is a common and effective form of human-based testing Presenting a design or code to others: –makes us think more carefully about it –provides an outside perspective Reviews are sometimes called inspections or walkthroughs

16 16-18_16 Test Cases A test case is a set of input and user actions, coupled with the expected results Often test cases are organized formally into test suites which are stored and reused as needed For medium and large systems, testing must be a carefully managed process Many organizations have a separate Quality Assurance (QA) department to lead testing efforts

17 16-18_17 Defect and Regression Testing Defect testing is the execution of test cases to uncover errors The act of fixing an error may introduce new errors After fixing a set of errors we should perform regression testing – running previous test suites to ensure new errors haven't been introduced It is not possible to create test cases for all possible input and user actions Therefore we should design tests to maximize their ability to find problems

18 16-18_18 Black-Box Testing In black-box testing, test cases are developed without considering the internal logic They are based on the input and expected output Input can be organized into equivalence categories Two input values in the same equivalence category would produce similar results Therefore a good test suite will cover all equivalence categories and focus on the boundaries between categories

19 16-18_19 White-Box Testing White-box testing focuses on the internal structure of the code The goal is to ensure that every path through the code is tested Paths through the code are governed by any conditional or looping statements in a program A good testing effort will include both black-box and white-box tests

20 16-18_20 Arrays Arrays are objects that help us organize large amounts of information Chapter 7 focuses on: –array declaration and use –bounds checking and capacity –arrays that store object references –variable length parameter lists –multidimensional arrays –the ArrayList class

21 16-18_21 Outline Declaring and Using Arrays Arrays of Objects Variable Length Parameter Lists Two-Dimensional Arrays The ArrayList Class Polygons and Polylines Mouse Events and Key Events

22 16-18_22 Arrays An array is an ordered list of values 0 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91 An array of size N is indexed from zero to N-1 scores The entire array has a single name Each value has a numeric index This array holds 10 values that are indexed from 0 to 9

23 16-18_23 Arrays A particular value in an array is referenced using the array name followed by the index in brackets For example, the expression scores[2] refers to the value 94 (the 3rd value in the array) That expression represents a place to store a single integer and can be used wherever an integer variable can be used

24 16-18_24 Arrays For example, an array element can be assigned a value, printed, or used in a calculation : scores[2] = 89; scores[first] = scores[first] + 2; mean = (scores[0] + scores[1])/2; System.out.println ("Top = " + scores[5]);

25 16-18_25 Arrays The values held in an array are called array elements An array stores multiple values of the same type – the element type The element type can be a primitive type or an object reference Therefore, we can create an array of integers, an array of characters, an array of String objects, an array of Coin objects, etc. In Java, the array itself is an object that must be instantiated

26 16-18_26 Arrays Another way to depict the scores array: scores 79 87 94 82 67 98 87 81 74 91

27 16-18_27 Declaring Arrays The scores array could be declared as follows: int[] scores = new int[10]; The type of the variable scores is int[] (an array of integers) Note that the array type does not specify its size, but each object of that type has a specific size The reference variable scores is set to a new array object that can hold 10 integers

28 16-18_28 Declaring Arrays Some other examples of array declarations: float[] prices = new float[500]; boolean[] flags; flags = new boolean[20]; char[] codes = new char[1750];

29 16-18_29 Using Arrays The iterator version of the for loop can be used when processing array elements for (int score : scores) System.out.println (score); This is only appropriate when processing all array elements from top (lowest index) to bottom (highest index) See BasicArray.java (page 372) BasicArray.java

30 16-18_30 Bounds Checking Once an array is created, it has a fixed size An index used in an array reference must specify a valid element That is, the index value must be in range 0 to N-1 The Java interpreter throws an ArrayIndexOutOfBoundsException if an array index is out of bounds This is called automatic bounds checking

31 16-18_31 Bounds Checking For example, if the array codes can hold 100 values, it can be indexed using only the numbers 0 to 99 If the value of count is 100, then the following reference will cause an exception to be thrown: System.out.println (codes[count]); It’s common to introduce off-by-one errors when using arrays for (int index=0; index <= 100; index++) codes[index] = index*50 + epsilon; problem

32 16-18_32 Bounds Checking Each array object has a public constant called length that stores the size of the array It is referenced using the array name: scores.length Note that length holds the number of elements, not the largest index See ReverseOrder.java (page 375) ReverseOrder.java See LetterCount.java (page 376) LetterCount.java

33 16-18_33 Alternate Array Syntax The brackets of the array type can be associated with the element type or with the name of the array Therefore the following two declarations are equivalent: float[] prices; float prices[]; The first format generally is more readable and should be used

34 16-18_34 Initializer Lists An initializer list can be used to instantiate and fill an array in one step The values are delimited by braces and separated by commas Examples: int[] units = {147, 323, 89, 933, 540, 269, 97, 114, 298, 476}; char[] letterGrades = {'A', 'B', 'C', 'D', ’F'};

35 16-18_35 Initializer Lists Note that when an initializer list is used: –the new operator is not used –no size value is specified The size of the array is determined by the number of items in the initializer list An initializer list can be used only in the array declaration See Primes.java (page 381)Primes.java

36 16-18_36 Arrays as Parameters An entire array can be passed as a parameter to a method Like any other object, the reference to the array is passed, making the formal and actual parameters aliases of each other Therefore, changing an array element within the method changes the original An individual array element can be passed to a method as well, in which case the type of the formal parameter is the same as the element type

37 16-18_37 Outline Declaring and Using Arrays Arrays of Objects Variable Length Parameter Lists Two-Dimensional Arrays The ArrayList Class

38 16-18_38 Arrays of Objects The elements of an array can be object references The following declaration reserves space to store 5 references to String objects String[] words = new String[5]; It does NOT create the String objects themselves Initially an array of objects holds null references Each object stored in an array must be instantiated separately

39 16-18_39 Arrays of Objects The words array when initially declared: words - - - - - At this point, the following reference would throw a NullPointerException : System.out.println (words[0]);

40 16-18_40 Arrays of Objects After some String objects are created and stored in the array: “friendship” words - - “loyalty” “honor”

41 16-18_41 Arrays of Objects Keep in mind that String objects can be created using literals The following declaration creates an array object called verbs and fills it with four String objects created using string literals String[] verbs = {"play", "work", "eat", "sleep"};

42 16-18_42 Arrays of Objects The following example creates an array of Grade objects, each with a string representation and a numeric lower bound See GradeRange.java (page 384) GradeRange.java See Grade.java (page 385) Grade.java Now let's look at an example that manages a collection of CD objects See Tunes.java (page 387) Tunes.java See CDCollection.java (page 388) CDCollection.java See CD.java (page 391) CD.java

43 16-18_43 Arrays of Objects A UML diagram for the Tunes program: Tunes + main (args : String[]) : void CDCollection - collection : CD[] - count : int - totalCost : double + addCD (title : String, artist : String, cost : double, tracks : int) : void + toString() : String - increaseSize() : void CD - title : String - artist : String - cost : double - tracks : int + toString() : String * 1

44 16-18_44 Command-Line Arguments The signature of the main method indicates that it takes an array of String objects as a parameter These values come from command-line arguments that are provided when the interpreter is invoked For example, the following invocation of the interpreter passes three String objects into main : > java StateEval pennsylvania texas arizona These strings are stored at indexes 0-2 of the array parameter of the main method See NameTag.java (page 393) NameTag.java

45 16-18_45 Outline Declaring and Using Arrays Arrays of Objects Variable Length Parameter Lists Two-Dimensional Arrays The ArrayList Class

46 16-18_46 Variable Length Parameter Lists Suppose we wanted to create a method that processed a different amount of data from one invocation to the next For example, let's define a method called average that returns the average of a set of integer parameters // one call to average three values mean1 = average (42, 69, 37); // another call to average seven values mean2 = average (35, 43, 93, 23, 40, 21, 75);

47 16-18_47 Variable Length Parameter Lists We could define overloaded versions of the average method –Downside: we'd need a separate version of the method for each parameter count We could define the method to accept an array of integers –Downside: we'd have to create the array and store the integers prior to calling the method each time Instead, Java provides a convenient way to create variable length parameter lists

48 16-18_48 Variable Length Parameter Lists Using special syntax in the formal parameter list, we can define a method to accept any number of parameters of the same type For each call, the parameters are automatically put into an array for easy processing in the method public double average (int... list) { // whatever } element type array name Indicates a variable length parameter list

49 16-18_49 Variable Length Parameter Lists public double average (int... list) { double result = 0.0; if (list.length != 0) { int sum = 0; for (int num : list) sum += num; result = (double)num / list.length; } return result; }

50 16-18_50 Variable Length Parameter Lists The type of the parameter can be any primitive or object type public void printGrades (Grade... grades) { for (Grade letterGrade : grades) System.out.println (letterGrade); }

51 16-18_51 Variable Length Parameter Lists A method that accepts a variable number of parameters can also accept other parameters The following method accepts an int, a String object, and a variable number of double values into an array called nums public void test (int count, String name, double... nums) { // whatever }

52 16-18_52 Variable Length Parameter Lists The varying number of parameters must come last in the formal arguments A single method cannot accept two sets of varying parameters Constructors can also be set up to accept a variable number of parameters See VariableParameters.java (page 396) VariableParameters.java See Family.java (page 397) Family.java

53 16-18_53 Outline Declaring and Using Arrays Arrays of Objects Variable Length Parameter Lists Two-Dimensional Arrays The ArrayList Class

54 16-18_54 Two-Dimensional Arrays A one-dimensional array stores a list of elements A two-dimensional array can be thought of as a table of elements, with rows and columns one dimension two dimensions

55 16-18_55 Two-Dimensional Arrays To be precise, in Java a two-dimensional array is an array of arrays A two-dimensional array is declared by specifying the size of each dimension separately: int[][] scores = new int[12][50]; A array element is referenced using two index values: value = scores[3][6] The array stored in one row can be specified using one index

56 16-18_56 Two-Dimensional Arrays ExpressionTypeDescription tableint[][] 2D array of integers, or array of integer arrays table[5]int[] array of integers table[5][12]int integer See TwoDArray.java (page 399) TwoDArray.java See SodaSurvey.java (page 400) SodaSurvey.java

57 16-18_57 Multidimensional Arrays An array can have many dimensions – if it has more than one dimension, it is called a multidimensional array Each dimension subdivides the previous one into the specified number of elements Each dimension has its own length constant Because each dimension is an array of array references, the arrays within one dimension can be of different lengths –these are sometimes called ragged arrays

58 16-18_58 Outline Declaring and Using Arrays Arrays of Objects Variable Length Parameter Lists Two-Dimensional Arrays The ArrayList Class

59 16-18_59 The ArrayList Class The ArrayList class is part of the java.util package Like an array, it can store a list of values and reference each one using a numeric index However, you cannot use the bracket syntax with an ArrayList object Furthermore, an ArrayList object grows and shrinks as needed, adjusting its capacity as necessary

60 16-18_60 The ArrayList Class Elements can be inserted or removed with a single method invocation When an element is inserted, the other elements "move aside" to make room Likewise, when an element is removed, the list "collapses" to close the gap The indexes of the elements adjust accordingly

61 16-18_61 The ArrayList Class An ArrayList stores references to the Object class, which allows it to store any kind of object See Beatles.java (page 405) Beatles.java We can also define an ArrayList object to accept a particular type of object The following declaration creates an ArrayList object that only stores Family objects ArrayList reunion = new ArrayList This is an example of generics, which are discussed further in Chapter 12

62 16-18_62 ArrayList Efficiency The ArrayList class is implemented using an underlying array The array is manipulated so that indexes remain continuous as elements are added or removed If elements are added to and removed from the end of the list, this processing is fairly efficient But as elements are inserted and removed from the front or middle of the list, the remaining elements are shifted

63 16-18_63 Sorting Sorting is the process of arranging a list of items in a particular order The sorting process is based on specific value(s) –sorting a list of test scores in ascending numeric order –sorting a list of people alphabetically by last name There are many algorithms, which vary in efficiency, for sorting a list of items We will examine two specific algorithms: –Selection Sort –Insertion Sort

64 16-18_64 Selection Sort The approach of Selection Sort: –select a value and put it in its final place into the list –repeat for all other values In more detail: –find the smallest value in the list –switch it with the value in the first position –find the next smallest value in the list –switch it with the value in the second position –repeat until all values are in their proper places

65 16-18_65 Selection Sort An example: original: 3 9 6 1 2 smallest is 1: 1 9 6 3 2 smallest is 2: 1 2 6 3 9 smallest is 3: 1 2 3 6 9 smallest is 6: 1 2 3 6 9 Each time, the smallest remaining value is found and exchanged with the element in the "next" position to be filled

66 16-18_66 Swapping The processing of the selection sort algorithm includes the swapping of two values Swapping requires three assignment statements and a temporary storage location: temp = first; first = second; second = temp;

67 16-18_67 Insertion Sort The approach of Insertion Sort: –pick any item and insert it into its proper place in a sorted sublist –repeat until all items have been inserted In more detail: –consider the first item to be a sorted sublist (of one item) –insert the second item into the sorted sublist, shifting the first item as needed to make room to insert the new addition –insert the third item into the sorted sublist (of two items), shifting items as necessary –repeat until all values are inserted into their proper positions

68 16-18_68 Insertion Sort An example: original: 3 9 6 1 2 insert 9: 3 9 6 1 2 insert 6: 3 6 9 1 2 insert 1: 1 3 6 9 2 insert 2: 1 2 3 6 9 See Sorting.java and SortTest.java Sorting.java

69 16-18_69 Comparing Sorts The Selection and Insertion sort algorithms are similar in efficiency They both have outer loops that scan all elements, and inner loops that compare the value of the outer loop with almost all values in the list Approximately n 2 number of comparisons are made to sort a list of size n We therefore say that these sorts are of order n 2 Other sorts are more efficient: order n log 2 n


Download ppt "Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005."

Similar presentations


Ads by Google