Bài giảng Lập trình hướng đối tượng - Bài 9: Lập trình tổng quát - Nguyễn Thị Thu Trang

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

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_bai_9_lap_trinh_tong_qua.pdf