Xem mẫu
- 9/18/17
Nội dung
Bộ môn Công nghệ Phần mềm 1. Upcasting và Downcasting
Viện CNTT & TT 2. Liên kết tĩnh và Liên kết động
om
Trường Đại học Bách Khoa Hà Nội
3. Đa hình (Polymophism)
4. Lập trình tổng quát (generic prog.)
.c
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Bài 07. Đa hình (Polymophism)
ng
co
2
an
Nội dung
th 1.1. Upcasting
o ng
1. Upcasting và Downcasting n Moving up the inheritance hierarchy
du
2. Liên kết tĩnh và Liên kết động n Up casting là khả năng nhìn nhận đối tượng
thuộc lớp dẫn xuất như là một đối tượng
3. Đa hình (Polymophism)
u
thuộc lớp cơ sở.
Lập trình tổng quát (generic prog.)
cu
4. n Tự động chuyển đổi kiểu
3 4
1
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
Ví dụ Ví dụ (2)
class Manager extends Employee {
Employee assistant;
// ...
public void setAssistant(Employee e) {
om
assistant = e;
}
public class Test1 { // ...
public static void main(String arg[]){
.c
}
Person p; public class Test2 {
Employee e = new Employee(); public static void main(String arg[]){
Manager junior, senior;
p = e;
ng
// ...
p.setName(“Hoa”); senior.setAssistant(junior);
p.setSalary(350000); // compile error }
co
} }
5 6
an
Ví dụ (3)
th 1.2. Downcasting
o ng
public class Test3 {
String static teamInfo(Person p1, Person p2){ n Move back down the inheritance hierarchy
du
return "Leader: " + p1.getName() +
", member: " + p2.getName();
n Down casting là khả năng nhìn nhận một đối
} tượng thuộc lớp cơ sở như một đối tượng
u
public static void main(String arg[]){
thuộc lớp dẫn xuất.
cu
Employee e1, e2;
Manager m1, m2;
n Không tự động chuyển đổi kiểu
// ... à Phải ép kiểu.
System.out.println(teamInfo(e1, e2));
System.out.println(teamInfo(m1, m2));
System.out.println(teamInfo(m1, e2));
}
}
7 8
2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
Ví dụ Nội dung
public class Test2 {
public static void main(String arg[]){ 1. Upcasting và Downcasting
Employee e = new Employee();
Person p = e; // up casting 2. Liên kết tĩnh và Liên kết động
om
Employee ee = (Employee) p; // down casting
3. Đa hình (Polymophism)
Manager m = (Manager) ee; // run-time error
4. Lập trình tổng quát (generic prog.)
.c
Person p2 = new Manager();
Employee e2 = (Employee) p2;
ng
Person p3 = new Employee();
Manager e3 = (Manager) p3;
co
}
9 10
}
an
2.1. Liên kết tĩnh (Static Binding)
th Ví dụ
o ng
public class Test {
n Liên kết tại thời điểm biên dịch public static void main(String arg[]){
du
n Early Binding/Compile-time Binding Person p = new Person();
n Lời gọi phương thức được quyết định khi biên p.setName(“Hoa”);
p.setSalary(350000); //compile-time error
dịch, do đó chỉ có một phiên bản của phương
u
}
thức được thực hiện
cu
}
n Nếu có lỗi thì sẽ có lỗi biên dịch
n Ưu điểm về tốc độ
11 12
3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
2.2. Liên kết động (Dynamic binding) Ví dụ
public class Test {
n Lời gọi phương thức được quyết định khi public static void main(String arg[]){
thực hiện (run-time) Person p = new Person();
// ...
om
n Late binding/Run-time binding Employee e = new Employee();
// ...
n Phiên bản của phương thức phù hợp với đối Manager m = new Manager();
tượng được gọi. // ...
.c
Person pArr[] = {p, e, m};
n Java mặc định sử dụng liên kết động for (int i=0; i< pArr.length; i++){
System.out.println(
ng
pArr[i].getDetail());
}
}
co
}
13 14
an
Nội dung
th 3. Đa hình (Polymophism)
o ng
1. Upcasting và Downcasting n Ví dụ: Nếu đi du lịch, bạn có thể chọn ô tô, thuyền, hoặc
máy bay
du
2. Liên kết tĩnh và Liên kết động n Dù đi bằng phương tiện gì, kết quả cũng giống nhau là
bạn đến được nói cần đến
3. Đa hình (Polymophism)
u
n Cách thức đáp ứng các dịch vụ có thể khác nhau
Lập trình tổng quát (generic prog.)
cu
4.
15 16
4
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
3. Đa hình (2) 3. Đa hình (3)
n Các lớp khác nhau có thể đáp ứng danh sách các thông điệp n Polymorphism: Nhiều hình thức thực hiện,
giống nhau, vì vậy cung cấp các dịch vụ giống nhau nhiều kiểu tồn tại
n Cách thức đáp ứng
Đa hình trong lập trình
om
thông điệp, thực hiện n
dịch vụ khác nhau n Đa hình phương thức:
n Chúng có thể tráo đổi
n Phương thức trùng tên, phân biệt bởi danh sách tham
cho nhau mà không
.c
số.
ảnh hưởng đến đối
tượng gửi thông điệp n Đa hình đối tượng
n à Đa hình n Nhìn nhận đối tượng theo nhiều kiểu khác nhau
ng
n Các đối tượng khác nhau cùng đáp ứng chung danh
sách các thông điệp có giải nghĩa thông điệp theo
cách thức khác nhau.
co
17 18
an
3. Đa hình (4)
th 3. Đa hình (5)
ng
Nhìn nhận đối tượng theo nhiều
o
n n Các đối tượng khác nhau giải nghĩa các
kiểu khác nhau à Upcasting và
du
thông điệp theo các cách thức khác nhau à
Downcasting Liên kết động
public class Test3 { Ví dụ:
u
n
public static void main(String
Person p1 = new Person();
cu
args[]){
Person p1 = new Employee(); Person p2 = new Employee();
Person p2 = new Manager(); Person p3 = new Manager();
// ...
Employee e = (Employee) p1;
System.out.println(p1.getDetail());
Manager m = (Manager) p2;
} System.out.println(p2.getDetail());
} System.out.println(p3.getDetail());
19 20
5
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
Ví dụ khác Toán tử instanceof
class EmployeeList { public class Employee extends Person {}
Employee list[]; public class Student extends Person {}
...
public void add(Employee e) {...}
om
public void print() { public class Test{
for (int i=0; i
- 9/18/17
Nội dung 4. Lập trình tổng quát
1. Upcasting và Downcasting n 4.1. Giới thiệu
2. Liên kết tĩnh và Liên kết động n 4.2. Java generic data structure
om
n 4.2.1. Data structure
3. Đa hình (Polymophism) n 4.2.2. Java collection framework
4. Lập trình tổng quát (generic 4.2.3. Các interface trong Java collection framework
.c
n
prog.) n 4.2.4. Các cài đặt cho các interface – implementation
n 4.3. Định nghĩa và sử dụng Template
ng
n 4.4. Ký tự đại diện (Wildcard)
co
25 26
an
4. Lập trình tổng quát
th 4. 1. Giới thiệu về lập trình tổng quát
o ng
n 4.1. Giới thiệu n Tổng quát hóa chương trình để có thể hoạt
du
n 4.2. Java generic data structure động với các kiểu dữ liệu khác nhau, kể cả
n 4.2.1. Data structure
kiểu dữ liệu trong tương lai
thuật toán đã xác định
u
n
n 4.2.2. Java collection framework
Ví dụ:
cu
n 4.2.3. Các interface trong Java collection framework n
n 4.2.4. Các cài đặt cho các interface – implementation n C: dùng con trỏ void
n 4.3. Định nghĩa và sử dụng Template n C++: dùng template
n Java: lợi dụng upcasting
n 4.4. Ký tự đại diện (Wildcard)
n Java 1.5: template
27 28
7
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
Ví dụ: C dùng con trỏ void Ví dụ: C++ dùng template
template
n Hàm memcpy: void sort(ItemType A[], int count
Khi sử dụng,có thể thay thế
) {
ItemType bằng int, string,… hoặc
void* memcpy(void* region1, // Sort count items in the array,
bất A, intođối
kỳ một increasing order
tượng của một lớp
// The algorithm that is used here is nào selection
đó sort
const void* region2, size_t n){
om
for (int i = count-1; i > 0; i--) {
const char* first = (const char*)region2; int index_of_max = 0;
const char* last = ((const char*)region2) + n; for (int j = 1; j A[index_of_max]) index_of_max = j;
.c
char* result = (char*)region1; if (index_of_max != i) {
while (first != last) ItemType temp = A[i];
*result++ = *first++; A[i] = A[index_of_max];
ng
A[index_of_max ] = temp;
return result; }
} }
co
}
29 30
an
Ví dụ: Java dùng upcasting và Object
th Nhắc lại – equals của lớp tự viết
o ng
class MyStack { class MyValue {
... int i;
du
public void push(Object obj) {...} }
public Object pop() {...} public class EqualsMethod2 {
} public static void main(String[] args) {
u
MyValue v1 = new MyValue();
public class TestStack{
cu
MyValue v2 = new MyValue();
MyStack s = new MyStack();
v1.i = v2.i = 100;
Point p = new Point(); System.out.println(v1.equals(v2));
Circle c = new Circle(); System.out.println(v1==v2);
s.push(p); s.push(c); }
Circle c1 = (Circle) s.pop(); }
Point p1 = (Point) s.pop();
}
31 32
8
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
Bài tập class MyValue {
int i;
public boolean equals(Object obj) {
n Viết lại phương thức equals cho lớp MyValue return (this.i == ((MyValue) obj).i);
(phương thức này kế thừa từ lớp Object) }
}
om
public class EqualsMethod2 {
public static void main(String[] args) {
MyValue v1 = new MyValue();
.c
MyValue v2 = new MyValue();
v1.i = v2.i = 100;
ng
System.out.println(v1.equals(v2));
System.out.println(v1==v2);
co
}
} 34
an
Ví dụ: Java 1.5: Template
th Ví dụ: Java 1.5: Template (2)
o ng
n Dùng Template:
du
List myList = new LinkedList();
myList.add(new Integer(0));
Integer x = myList.iterator().next();
u
cu
//myList.add(new Long(0)); à Error
n Không dùng Template
List myList = new LinkedList();
myList.add(new Integer(0));
Integer x = (Integer)
myList.iterator().next();
35 36
9
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
4. Lập trình tổng quát 4.2.1. Cấu trúc dữ liệu-data structure
n 4.1. Giới thiệu n Cấu trúc dữ liệu là cách tổ chức dữ liệu để
n 4.2. Java generic data structure giải quyết vấn đề.
Một số cấu trúc dữ liệu phổ biến:
om
n 4.2.1. Data structure n
n 4.2.2. Java collection framework n Mảng (Array)
n 4.2.3. Các interface trong Java collection framework Danh sách liên kết (Linked List)
.c
n
n 4.2.4. Các cài đặt cho các interface – implementation n Ngăn xếp (Stack)
n 4.3. Định nghĩa và sử dụng Template n Hàng đợi (Queue)
ng
n 4.4. Ký tự đại diện (Wildcard) n Cây (Tree)
co
37 38
an
a. Linked List
th a. Linked List (2)
ng
Linked list là cấu trúc gồm các node liên kết với nhau
o
n
n Thể hiện Node thông qua lớp tự tham chiếu (self-
thông qua các mối liên kết. Node cuối linked list
du
referential class)
được đặt là null để đánh dấu kết thúc danh sách. class Node
n Linked list giúp tiết kiệm bộ nhớ so với mảng trong {
các bài toán xử lý danh sách.
u
private int data;
private Node nextNode;
Khi chèn/xoá một node trên linked list, không phải
cu
n
// constructors and methods ...
dãn/dồn các phần tử như trên mảng. }
n Việc truy nhập trên linked list luôn phải tuần tự.
15 10
39 40
10
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
a. Linked List (3) b. Stack
n Một linked list được quản lý bởi tham chiếu tới node n Stack là một cấu trúc theo kiểu LIFO (Last In
đầu và node cuối. First Out), phần tử vào sau cùng sẽ được lấy ra
trước.
om
firstNode lastNode n Hai thao tác cơ bản trên Stack
n Chèn phần tử: Luôn chèn vào đỉnh Stack
.c
(push)
H D ... Q n Lấy ra phần tử: Luôn lấy ra từ đỉnh Stack
(pop)
ng
co
41 42
an
c. Tree
th d. Queue
ng
Tree là một cấu trúc phi tuyến (non-linear).
o
n
n Queue (Hàng đợi) là cấu trúc theo kiểu FIFO
Mỗi node trên cây có thể có nhiều liên kết tới node (First In First Out), phần tử vào trước sẽ được
du
n
khác. lấy ra trước.
Nút gốc
n Hai thao tác cơ bản trên hàng đợi
u
n Chèn phần tử: Luôn chèn vào cuối hàng đợi
cu
Nút trong
(enqueue)
n Lấy ra phần tử: Lấy ra từ đầu hàng đợi
(dequeue)
Nút lá
43 44
11
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
e. Binary Search Tree e. Binary Search Tree (2)
n Cây nhị phân là cây mà mỗi node không có quá 2
node con.
n Ví dụ về Binary Search Tree
n Cây tìm kiếm nhị phân là cây nhị phân mà:
om
47
n Giá trị các nút thuộc cây con bên trái nhỏ hơn giá trị của
nút cha.
Cây con trái Cây con phải
n Giá trị các nút thuộc cây con bên phải lớn hơn giá trị của
25 77
.c
nút cha.
n Duyệt cây nhị phân 11 43 65 93
n Inorder traversal
ng
n Preorder traversal 7 17 31 44 68
n Postorder traversal
co
45 46
an
4. Lập trình tổng quát
th 4.2.2. Java Collection Framework
ng
Collection là đối tượng có khả năng chứa
o
n
n 4.1. Giới thiệu
các đối tượng khác.
du
n 4.2. Java generic data structure
n 4.2.1. Data structure n Các thao tác thông thường trên collection
Thêm/Xoá đối tượng vào/khỏi collection
u
n 4.2.2. Java collection framework n
Kiểm tra một đối tượng có ở trong collection
cu
n 4.2.3. Các interface trong Java collection framework n
n 4.2.4. Các cài đặt cho các interface – implementation không
n 4.3. Định nghĩa và sử dụng Template n Lấy một đối tượng từ collection
n 4.4. Ký tự đại diện (Wildcard) n Duyệt các đối tượng trong collection
n Xoá toàn bộ collection
47 48
12
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
4.2.2. Java Collection Framework (2) 4.2.2. Java Collection Framework (3)
n Các collection đầu tiên của Java: n Một số lợi ích của Collections Framework
n Mảng n Giảm thời gian lập trình
om
n Vector: Mảng động n Tăng cường hiệu năng chương trình
n Hastable: Bảng băm n Dễ mở rộng các collection mới
Collections Framework (từ Java 1.2) Khuyến khích việc sử dụng lại mã chương trình
.c
n n
n Là một kiến trúc hợp nhất để biểu diễn và thao
tác trên các collection.
ng
n Giúp cho việc xử lý các collection độc lập với biểu
diễn chi tiết bên trong của chúng.
co
49 50
an
4.2.2. Java Collection Framework (4)
th 4. Lập trình tổng quát
o ng
n Collections Framework bao gồm n 4.1. Giới thiệu
du
n Interfaces: Là các giao tiếp thể hiện tính chất n 4.2. Java generic data structure
của các kiểu collection khác nhau như List, Set, n 4.2.1. Data structure
Map.
u
n 4.2.2. Java collection framework
Implementations: Là các lớp collection có sẵn
cu
n n 4.2.3. Các interface trong Java collection
được cài đặt các collection interfaces. framework
n Algorithms: Là các phương thức tĩnh để xử lý n 4.2.4. Các cài đặt cho các interface – implementation
trên collection, ví dụ: sắp xếp danh sách, tìm n 4.3. Định nghĩa và sử dụng Template
phần tử lớn nhất...
n 4.4. Ký tự đại diện (Wildcard)
51 52
13
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
4.2.3. Interfaces a. Giao diện Collection
n List: Tập các đối tượng tuần tự, kế tiếp nhau, có thể lặp lại n Xác định giao diện cơ bản cho các
n Set: Tập các đối tượng không lặp lại thao tác với một tập các đối tượng
n Map: Tập các cặp khóa-giá trị (key-value) và không cho n Thêm vào tập hợp
om
phép khóa lặp lại n Xóa khỏi tập hợp
n Kiểm tra có là thành viên
Collection Map Chứa các phương thức thao tác
.c
n
trên các phần tử riêng lẻ hoặc theo
khối
Cung cấp các phương thức cho
ng
n
Set List SortedMap
phép thực hiện duyệt qua các
phần tử trên tập hợp (lặp) và
co
chuyển tập hợp sang mảng
SortedSet 53 54
an
b. Giao diện List
th c. Giao diện Set
o ng
n List kế thừa từ Collection, nó cung cấp thêm các n Set kế thừa từ Collection, hỗ trợ các thao tác xử lý trên
du
phương thức để xử lý collection kiểu danh sách (Danh collection kiểu tập hợp (Một tập hợp yêu cầu các phần
sách là một collection với các phần tử được xếp theo tử phải không được trùng lặp).
chỉ số). n Set không có thêm phương thức riêng ngoài các
u
n Một số phương thức của List phương thức kế thừa từ Collection.
cu
n Object get(int index);
n Object set(int index, Object o);
n void add(int index, Object o);
n Object remove(int index);
n int indexOf(Object o);
n int lastIndexOf(Object o);
55 56
14
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
d. Giao diện SortedSet
n SortedSet kế thừa từ Set, nó hỗ trợ thao tác trên tập
hợp các phần tử có thể so sánh được. Các đối tượng
đưa vào trong một SortedSet phải cài đặt giao tiếp
Collection,
om
Comparable hoặc lớp cài đặt SortedSet phải nhận một Set và List
Comparator trên kiểu của đối tượng đó.
Một số phương thức của SortedSet:
.c
n
n Object first(); // lấy phần tử đầu tiên (nhỏ nhất)
n Object last(); // lấy phần tử cuối cùng (lớn nhất)
SortedSet subSet(Object e1, Object e2); // lấy một tập các phần tử
ng
n
nằm trong khoảng từ e1 tới e2.
co
57 58
an
e. Duyệt collection
th e. Duyệt collection (2)
ong
n Các phần tử trong collection có thể được duyệt thông n Iterator cho phép duyệt tuần tự một collection.
du
qua Iterator. n Các phương thức của Iterator:
n Các lớp cài đặt Collection cung cấp phương thức trả về n boolean hasNext();
iterator trên các phần tử của chúng. n Object next();
u
n void remove();
cu
Collection c; n Ví dụ:
Iterator it = c.iterator();
while ( it.hasNext() ) {
Point p = (Point) it.next();
System.out.println( p.toString() );
}
Iterator it = c.iterator(); ...
59 60
15
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
f. Giao diện Iterator f. Giao diện Iterator (2) - Ví dụ
n Cung cấp cơ chế thuận tiện để Collection c;
duyệt (lặp) qua toàn bộ nội // Some code to build the
dung của tập hợp, mỗi lần là
om
collection
một đối tượng trong tập hợp
Giống như SQL cursor
.c
n
Iterator i = c.iterator();
n ListIterator thêm các phương
while (i.hasNext()) {
thức đưa ra bản chất tuần tự
ng
của danh sách cơ sở Object o = i.next();
Iterator của các tập hợp đã sắp // Process this object
co
n
xếp duyệt theo thứ tự tập hợp 61
} 62
an
g. Giao diện Map
th g. Giao tiếp Map (2)
ng
Xác định giao diện cơ bản để thao tác với một
o
n n Map cung cấp 3 cách view dữ liệu:
tập hợp bao gồm cặp khóa-giá trị
du
n View các khoá:
n Thêm một cặp khóa-giá trị
n Xóa một cặp khóa-giá trị Set keySet(); // Trả về các khoá
Lấy về giá trị với khóa đã có View các giá trị:
u
n
n
n Kiểm tra có phải là thành viên
Collection values(); // Trả về các giá trị
cu
(khóa hoặc giá trị)
n Cung cấp 3 cách nhìn cho n View các cặp khoá-giá trị
nội dung của tập hợp: Set entrySet(); // Trả về các cặp khoá-giá trị
n Tập các khóa n Sau khi nhận được kết quả là một collection, ta có
n Tập các giá trị thể dùng iterator để duyệt các phần tử của nó.
n Tập các ánh xạ khóa-giá trị
63 64
16
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
h. Giao diện SortedMap 4. Lập trình tổng quát
n Giao diện SortedMap kế thừa từ Map, nó cung cấp thao n 4.1. Giới thiệu
tác trên các bảng ánh xạ với khoá có thể so sánh được.
n 4.2. Java generic data structure
n Giống như SortedSet, các đối tượng khoá đưa vào
om
n 4.2.1. Data structure
trong SortedMap phải cài đặt giao tiếp Comparable
hoặc lớp cài đặt SortedMap phải nhận một Comparator n 4.2.2. Java collection framework
trên đối tượng khoá. 4.2.3. Các interface trong Java collection framework
.c
n
n 4.2.4. Các cài đặt cho các interface –
implementation
ng
n 4.3. Định nghĩa và sử dụng Template
n 4.4. Ký tự đại diện (Wildcard)
co
65 66
an
4.2.4. Implementations
th 4.2.4. Implementations (2)
ng
LinkedList
o
n Các cài đặt trong Collections Framework chính là các List
du
lớp collection có sẵn trong Java. Chúng cài đặt các ArrayList
collection interface ở trên để thể hiện các cấu trúc dữ
HashSet
liệu cụ thể. Ví dụ: mảng động, danh sách liên kết, cây
u
đỏ đen, bảng băm... Set LinkedHashSet
cu
SortedSet TreeSet
HashMap
Map LinkedHashMap
SortedMap TreeMap
67 68
17
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
4.2.4. Implementations (3) -Mô tả các cài 4.2.4. Implementations (3) -Mô tả các cài
đặt đặt
n ArrayList: Mảng động, nếu các phần tử thêm vào vượt n HashMap: Bảng băm (cài đặt của Map).
quá kích cỡ mảng, mảng sẽ tự động tăng kích cỡ. n LinkedHashMap: Bảng băm kết hợp với linked list nhằm
n LinkedList: Danh sách liên kết 2 chiều. Hỗ trợ thao tác đảm bảo thứ tự các phần tử (cài đặt của Map).
om
trên đầu và cuối danh sách. n TreeMap: Cây đỏ đen (cài đặt của Map).
n HashSet: Bảng băm.
.c
n LinkedHashSet: Bảng băm kết hợp với linked list nhằm
đảm bảo thứ tự các phần tử.
n TreeSet: Cây đỏ đen (red-black tree).
ng
co
69 70
an
th
public class MapExample {
public static void main(String args[]) {
4.2.4. Implementations (3) – Tổng kết
ng
Map map = new HashMap();
Integer ONE = new Integer(1);
o
for (int i=0, n=args.length; i
- 9/18/17
4. Lập trình tổng quát 4.3. Định nghĩa và sử dụng Template
n 4.1. Giới thiệu
n 4.2. Java generic data structure class MyStack {
om
n 4.2.1. Data structure ...
n 4.2.2. Java collection framework public void push(T x) {...}
n 4.2.3. Các interface trong Java collection framework public T pop() {
.c
n 4.2.4. Các cài đặt cho các interface – implementation ...
n 4.3. Định nghĩa và sử dụng Template }
ng
}
n 4.4. Ký tự đại diện (Wildcard)
co
73 74
an
th
Nhắc lại ví dụ: Lập trình tổng quát trên
Java dùng upcasting và Object Sử dụng template
o ng
class MyStack { public class Test {
... public static void main(String args[]) {
du
public void push(Object obj) {...} MyStack s1 = new MyStack();
public Object pop() {...} s1.push(new Integer(0));
} Integer x = s1.pop();
u
public class TestStack{
cu
MyStack s = new MyStack(); //s1.push(new Long(0)); à Error
Point p = new Point();
MyStack s2 = new MyStack();
Circle c = new Circle(); s2.push(new Long(0));
s.push(p); s.push(c); Long y = s2.pop();
Circle c1 = (Circle) s.pop();
Point p1 = (Point) s.pop(); }
}
}
75 76
19
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 9/18/17
Định nghĩa Iterator 4. Lập trình tổng quát
public interface List{ n 4.1. Giới thiệu
void add(E x);
n 4.2. Java generic data structure
Iterator iterator();
om
}
n 4.2.1. Data structure
n 4.2.2. Java collection framework
public interface Iterator{ 4.2.3. Các interface trong Java collection framework
.c
n
E next(); n 4.2.4. Các cài đặt cho các interface – implementation
boolean hasNext(); n 4.3. Định nghĩa và sử dụng Template
ng
}
n 4.4. Ký tự đại diện (Wildcard)
class LinkedList implements List {
co
// implementation
} 77 78
an
4.4. Ký tự đại diện (Wildcard)
th Ví dụ: Sử dụng Wildcards
ng
public class Test {
o
public class Test { void printList(List lst) {
public static void main(String args[]) {
du
Iterator it = lst.iterator();
List lst0 = new LinkedList(); while (it.hasNext())
//List lst1 = lst0; à Error System.out.println(it.next());
//printList(lst0); à Error }
u
}
cu
public static void main(String args[]) {
void static printList(List lst) { List lst0 =
Iterator it = lst.iterator(); new LinkedList();
while (it.hasNext()) List lst1 =
System.out.println(it.next()); new LinkedList();
}
} printList(lst0); // String
printList(lst1); // Employee
79 } 80
}
20
CuuDuongThanCong.com https://fb.com/tailieudientucntt
nguon tai.lieu . vn