Xem mẫu
- Bộ môn Công nghệ Phần mềm
Viện CNTT & TT
Trường Đại học Bách Khoa Hà Nội
om
.c
ng
IT3100
co
an
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
th
o ng
du
Bài 09. Lập trình tổng quát
u
cu
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Mục tiêu
om
◼ Giới thiệu về lập trình tổng quát và cách thực
.c
hiện trong các ngôn ngữ lập trình
ng
Giới thiệu về collection framework với các
co
◼
cấu trúc tổng quát: List, HashMap, Tree, Set,
an
th
Vector,… ng
Định nghĩa và sử dụng Template và ký tự đại
o
◼
du
diện (wildcard)
u
cu
◼ Ví dụ và bài tập về các vấn đề trên với ngôn
ngữ lập trình Java
2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Nội dung
om
1. Giới thiệu về lập trình tổng quát
.c
2. Lập trình tổng quát trong Java
ng
Giới thiệu về collection framework
co
◼
an
◼ Giới thiệu về các cấu trúc tổng quát List,
th
HashMap, Tree, Set, Vector ng
Định nghĩa và sử dụng Template
o
3.
du
Ký tự đại diện (Wildcard)
u
4.
cu
5. Ví dụ và bài tập
3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- om
.c
1. Giới thiệu về lập trình tổng quát
ng
(Generic programming)
co
an
th
o ng
du
u
cu
4
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Giới thiệu về lập trình tổng quát
om
◼ Tổng quát hóa chương trình để có thể hoạt động
với các kiểu dữ liệu khác nhau, kể cả kiểu dữ liệu
.c
trong tương lai
ng
Tổng quát hoá
co
◼ Thuật toán đã xác định chương trình
an
◼ Ví dụ: • Số nguyên int
th
• Xâu ký tự String
ng Thuật toán giống nhau,
Phương thức sort() • Đối tượng số phức chỉ khác về kiểu dữ liệu
o
Complex object
du
• ...
u
• Lớp IntegerStack → đối Các lớp có cấu
cu
tượng Integer trúc tương tự,
Lớp lưu trữ kiểu • Lớp StringStack → đối khác nhau về
tượng String kiểu đối tượng
ngăn xếp (Stack)
• Lớp AnimalStack → đối xử lý
5
CuuDuongThanCong.com
tượng animal,… https://fb.com/tailieudientucntt
- 1. Giới thiệu về lập trình tổng quát
Lập trình Generic có nghĩa là lập trình mà có thể
om
◼
tái sử dụng cho nhiều kiểu dữ liệu
.c
ng
◼ Cho phép trừu tượng hóa kiểu dữ liệu
co
◼ Giải pháp trong các ngôn ngữ lập trình:
an
C: dùng con trỏ không định kiểu (con trỏ void)
th
◼
C++: dùng template
ng
◼
o
◼ Java 1.5 trở về trước: lợi dụng upcasting và kiểu tổng
du
quát object
u
cu
◼ Java 1.5: đưa ra khái niệm về template
6
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Giới thiệu về lập trình tổng quát
om
◼ Ví dụ C: hàm memcpy() trong thư viện string.h
.c
void* memcpy(void* region1, const void* region2, size_t n);
ng
◼ Hàm memcpy() bên trên được khai báo tổng
co
quát bằng cách sử dụng các con trỏ void*
an
Điều này giúp cho hàm có thể sử dụng với nhiều
th
◼
kiểu dữ liệu khác nhau
o ng
Dữ liệu được truyền vào một cách tổng quát thông
du
◼
qua địa chỉ và kích thước kiểu dữ liệu
u
cu
◼ Hay nói cách khác, để sao chép dữ liệu, ta chỉ cần địa
chỉ và kích cỡ của chúng
7
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Giới thiệu về lập trình tổng quát
om
◼ Ví dụ: Lập trình Generic từ trước Java 1.5
public class ArrayList {
.c
public Object get(int i) { . . . }
ng
public void add(Object o) { . . . }
co
. . .
private Object[] elementData;
an
}
th
Lớp Object là lớp cha tổng quát nhất → có thể chấp nhận
ng
◼
các đối tượng thuộc lớp con của nó
o
du
List myList = new ArrayList(); Các đối tượng
u
myList.add("Fred"); trong một danh
cu
myList.add(new Dog()); sách khác hẳn
myList.add(new Integer(42)); nhau
◼ Hạn chế: Phải ép kiểu ➔ có thể ép sai kiểu (run-time error)
String name = (String) myList.get(1); //Dog!!! 8
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Giới thiệu về lập trình tổng quát
om
◼ Ví dụ: Lập trình Generic từ Java 1.5
.c
◼ Java 1.5 Template
ng
co
an
Danh sách chỉ chấp nhận
các đối tượng có kiểu là
th
Integer
o ng
du
List myList =
u
new LinkedList();
cu
myList.add(new Integer(0));
Integer x = myList.iterator().next(); //Không cần ép kiểu
myList.add(new String("Hello")); //Compile Error 9
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- om
.c
2. Lập trình tổng quát trong Java
ng
(Collection framework)
co
an
th
o ng
du
u
cu
10
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2. Lập trình tổng quát trong Java
om
◼ Collection – tập hợp: Nhóm các đối tượng lại thành
một đơn vị duy nhất
.c
ng
◼ Java Collections Framework:
co
◼ Biểu diễn các tập hợp
an
Cung cấp giao diện tiêu chuẩn cho hầu hết các tập hợp
th
◼
cơ bản
ng
Xây dựng dựa trên
o
◼
du
◼ Interface: thể hiện tính chất của các kiểu tập hợp khác nhau như
u
List, Set, Map
cu
◼ Class: các lớp cụ thể thực thi các giao diện
◼ Thuật toán: cài đặt một số thao tác đơn giản, là các phương thức
tĩnh để xử lý trên collection như tìm kiếm, sắp xếp…
11
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2. Lập trình tổng quát trong Java
om
◼ Java Collections Framework:
.c
◼ List: Tập các đối tượng tuần tự, kế tiếp nhau, có
ng
thể lặp lại
co
◼ Set: Tập các đối tượng không lặp lại
an
Map: Tập các cặp khóa-giá trị (key-value) và
th
◼
không cho phép khóa lặp lại
ng
Liên kết các đối tượng trong tập này với đối các đối
o
◼
du
tượng trong tập khác như tra từ điển/danh bạ điện
thoại.
u
cu
12
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2. Lập trình tổng quát trong Java
om
◼ Cây cấu trúc giao diện Collection >
.c
> Map
Collection HashMap
ng
co
HashTable >
an
Sorted Map
th
> >
Set List
ng
Tree Map
o
du
HashSet >
u
Array List Vector LinkedList
cu
Sorted Set
Tree Set
13
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2. Lập trình tổng quát trong Java
om
◼ So sánh Tập hợp và mảng
.c
Tập hơp Mảng
ng
Tập hợp (có thể) truy xuất theo Mảng truy xuất 1 cách tuần tự
co
dạng ngẫu nhiên
an
Tập hợp có thể chứa nhiều loại Mảng chứa 1 loại đối tượng/dữ
th
đối tượng/dữ liệu khác nhau liệu nhất định
ng
Dùng theo kiểu tập hợp xây Dùng tổ chức dữ liệu theo
o
du
dựng sẵn của Java chỉ khai báo mảng phải lập trình hoàn toàn
và gọi những phương thức đã
u
cu
được định nghĩa
Duyệt các phần tử tập hợp Duyệt các phần tử mảng tuần
thông qua Iterator tự thông qua chỉ số mảng
14
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2. Lập trình tổng quát trong Java
om
◼ Các giao diện và lớp thực thi trong Collection
framework của Java đều được xây dựng theo
.c
template
ng
co
◼ → cho phép xác định tập hợp các phần tử cùng kiểu nào
an
đó bất kỳ
th
◼ Cho phép chỉ định kiểu dữ liệu của các Collection ➔ hạn
ng
chế việc thao tác sai kiểu dữ liệu
o
du
u
cu
15
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2. Lập trình tổng quát trong Java
om
◼ Ví dụ
.c
public interface List {
ng
void add(E x);
co
Iterator iterator();
an
}
Ví dụ th
ng
◼
o
List myList = new ArrayList();
du
myList.add("Fred"); // OK
u
cu
myList.add(new Dog()); //Compile error!
String s = myList.get(0);
16
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Giao diện Collection
om
◼ Xác định giao diện cơ bản cho
các thao tác với một tập các đối
.c
tượng
ng
◼ Thêm vào tập hợp
co
◼ Xóa khỏi tập hợp
an
th
◼ Kiểm tra có là thành viên ng
◼ Chứa các phương thức thao tác
o
trên các phần tử riêng lẻ hoặc
du
theo khối
u
cu
◼ Cung cấp các phương thức cho
phép thực hiện duyệt qua các
phần tử trên tập hợp (lặp) và
chuyển tập hợp sang mảng 17
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Giao diện Collection
public interface Collection {
om
// Basic Operations
.c
int size();
boolean isEmpty();
ng
boolean contains(Object element);
co
boolean add(Object element);
an
boolean remove(Object element);
Iterator iterator();
th
ng
// Bulk Operations
o
boolean addAll(Collection c);
du
boolean removeAll(Collection c);
u
boolean retainAll(Collection c);
cu
….
// Array Operations
Object[] toArray();
Object[] toArray(Object a[]);
} 18
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- om
◼ Các giao diện
con kế thừa giao
.c
diện Collection
ng
co
an
th
o ng
du
u
cu
19
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Giao diện Set
om
◼ Set kế thừa từ Collection, hỗ trợ các thao tác xử lý
trên collection kiểu tập hợp
.c
ng
◼ Ví dụ:
co
◼ Set of cars:
an
{BMW, Ford, Jeep, Chevrolet, Nissan, Toyota, VW}
th
◼
Nationalities in the class
ng
◼
{Chinese, American, Canadian, Indian}
o
◼
du
◼ Một tập hợp các phần tử không được trùng lặp.
u
cu
◼ Set không có thêm phương thức riêng ngoài các
phương thức kế thừa từ Collection.
20
CuuDuongThanCong.com https://fb.com/tailieudientucntt
nguon tai.lieu . vn