Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Intro_Java_brief_Liang2011.pdf
Скачиваний:
195
Добавлен:
26.03.2016
Размер:
10.44 Mб
Скачать

10.8 Designing the Course Class 355

private Person supervisor;

...

}

If a person may have several supervisors, as shown in Figure 10.8(a), you may use an array to store supervisors, as shown in Figure 10.8(b).

 

 

1

 

public class Person {

Person

 

 

 

 

 

 

 

 

...

 

m

 

 

 

Supervisor

}

private Person[] supervisors;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(a)

 

(b)

FIGURE 10.8 A person may have several supervisors.

Note

Since aggregation and composition relationships are represented using classes in similar ways,

aggregation or composition

many texts don’t differentiate them and call both compositions.

 

10.8 Designing the Course Class

This book’s philosophy is teaching by example and learning by doing. The book provides a wide variety of examples to demonstrate object-oriented programming. The next three sections offer additional examples on designing classes.

Suppose you need to process course information. Each course has a name and has students enrolled. You should be able to add/drop a student to/from the course. You can use a class to model the courses, as shown in Figure 10.9.

Course

-courseName: String -students: String[] -numberOfStudents: int

+Course(courseName: String) +getCourseName(): String +addStudent(student: String): void +dropStudent(student: String): void +getStudents(): String[] +getNumberOfStudents(): int

The name of the course.

An array to store the students for the course. The number of students (default: 0).

Creates a course with the specified name. Returns the course name.

Adds a new student to the course. Drops a student from the course. Returns the students for the course.

Returns the number of students for the course.

FIGURE 10.9 The Course class models the courses.

A Course object can be created using the constructor Course(String name) by passing a course name. You can add students to the course using the addStudent(String student) method, drop a student from the course using the dropStudent(String student) method, and return all the students for the course using the getStudents() method. Suppose the class is available; Listing 10.5 gives a test class that creates two courses and adds students to them.

356 Chapter 10

 

Thinking in Objects

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LISTING 10.5

TestCourse.java

 

1

public class TestCourse {

 

2

 

public static void main(String[] args) {

create a course

3

 

 

Course course1 = new Course("Data Structures");

 

 

4

 

 

Course course2 = new Course("Database Systems");

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

add a student

6

 

 

course1.addStudent("Peter Jones");

 

 

 

 

 

 

7

 

 

course1.addStudent("Brian Smith");

 

8

 

 

course1.addStudent("Anne Kennedy");

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

course2.addStudent("Peter Jones");

 

 

 

 

 

 

11

 

 

course2.addStudent("Steve Smith");

 

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

 

 

System.out.println("Number of students in course1: "

number of students

14

+

course1.getNumberOfStudents()

);

 

 

 

 

return students

15

 

 

String[] students =

course1.getStudents()

;

 

 

 

16

 

 

for (int i = 0; i <

course1.getNumberOfStudents()

; i++)

 

17

 

 

System.out.print(students[i] + ", ");

 

18

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

19

 

System.out.println();

 

20

 

System.out.print("Number of students in course2: "

 

21

 

 

+ course2.getNumberOfStudents());

 

22

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Number of students in course1: 3

 

 

 

 

 

Peter Jones, Brian Smith, Anne Kennedy,

 

 

 

 

 

 

 

 

 

Number of students in course2: 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

The Course class is implemented in Listing 10.6. It uses an array to store the students for the

 

 

 

 

 

course. For simplicity, assume that the maximum course enrollment is 100. The array is cre-

 

 

 

 

 

ated using new String[100] in line 3. The addStudent method (line 10) adds a student to

 

 

 

 

 

the array. Whenever a new student is added to the course, numberOfStudents is increased

 

 

 

 

 

(line 12). The getStudents method returns the array. The dropStudent method (line 27)

 

 

 

 

is left as an exercise.

 

 

 

 

 

LISTING 10.6

Course.java

 

1

public class Course {

 

2

 

private String courseName;

create students

3

 

private String[] students =

new String[100];

 

4

 

private int numberOfStudents;

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

add a course

6

 

public Course(String courseName) {

 

7

 

 

this.courseName = courseName;

 

8

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

public void addStudent(String student) {

 

 

 

11

 

 

students[numberOfStudents] = student;

 

12

 

 

numberOfStudents++;

 

13

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return students

15

 

public String[] getStudents() {

 

 

 

 

16

 

 

return students;

 

17

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10.9

Designing a Class for Stacks 357

 

 

 

19

public int getNumberOfStudents() {

 

number of students

20

return numberOfStudents;

 

21

}

 

 

22

 

 

 

23public String getCourseName() {

24return courseName;

25}

26

27public void dropStudent(String student) {

28// Left as an exercise in Exercise 10.9

29}

30}

The array size is fixed to be 100 (line 3) in Listing 10.6. You can improve it to automatically increase the array size in Exercise 10.9.

When you create a Course object, an array object is created. A Course object contains a reference to the array. For simplicity, you can say that the Course object contains the array.

The user can create a Course and manipulate it through the public methods addStudent, dropStudent, getNumberOfStudents, and getStudents. However, the user doesn’t need to know how these methods are implemented. The Course class encapsulates the internal implementation. This example uses an array to store students. You may use a different data structure to store students. The program that uses Course does not need to change as long as the contract of the public methods remains unchanged.

10.9 Designing a Class for Stacks

Recall that a stack is a data structure that holds data in a last-in, first-out fashion, as shown in Figure 10.10.

Data1

Data2

 

Data3

 

 

 

 

 

Data3

 

 

 

Data2

Data2

 

 

Data1

Data1

Data1

Data3

Data2

 

Data1

 

 

 

 

 

Data2

Data1

 

 

 

Data1

 

 

FIGURE 10.10 A stack holds data in a last-in, first-out fashion.

Stacks have many applications. For example, the compiler uses a stack to process method invocations. When a method is invoked, its parameters and local variables are pushed into a stack. When a method calls another method, the new method’s parameters and local variables are pushed into the stack. When a method finishes its work and returns to its caller, its associated space is released from the stack.

You can define a class to model stacks. For simplicity, assume the stack holds the int values. So, name the stack class StackOfIntegers. The UML diagram for the class is shown in Figure 10.11.

Suppose that the class is available. Let us write a test program in Listing 10.7 that uses the class to create a stack (line 3), stores ten integers 0, 1, 2, Á , and 9 (line 6), and displays them in reverse order (line 9).

stack

Video Note

The StackOfInteger class

358 Chapter 10 Thinking in Objects

create a stack

push to stack

pop from stack

FIGURE 10.11 The StackOfIntegers class encapsulates the stack storage and provides the operations for manipulating the stack.

LISTING 10.7 TestStackOfIntegers.java

1 public class TestStackOfIntegers {

2public static void main(String[] args) {

3 StackOfIntegers stack = new StackOfIntegers();

4

5for (int i = 0; i < 10; i++)

6

stack.push(i);

7

 

8while (!stack.empty())

9 System.out.print(stack.pop() + " ");

10}

11}

9 8 7 6 5 4 3 2 1 0

How do you implement the StackOfIntegers class? The elements in the stack are stored in an array named elements. When you create a stack, the array is also created. The no-arg constructor creates an array with the default capacity of 16. The variable size counts the number of elements in the stack, and size – 1 is the index of the element at the top of the stack, as shown in Figure 10.12. For an empty stack, size is 0.

The StackOfIntegers class is implemented in Listing 10.8. The methods empty(), peek(), pop(), and getSize() are easy to implement. To implement push(int value), assign value to elements[size] if size < capacity (line 24). If the stack is full (i.e.,

elements[capacity 1]

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

elements[size 1]

 

top

 

 

 

 

capacity

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

size

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

elements[1]

 

 

 

 

 

 

 

 

 

 

elements[0]

 

bottom

 

 

 

 

 

 

FIGURE 10.12 The StackOfIntegers class encapsulates the stack storage and provides the operations for manipulating the stack.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]