Nhập môn Lập trình Hướng đối tượng
Chia sẻ bởi Jenshin Cui Bap |
Ngày 01/05/2019 |
65
Chia sẻ tài liệu: Nhập môn Lập trình Hướng đối tượng thuộc Power Point
Nội dung tài liệu:
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Sự khác nhau giửa lập trình hướng đối tượng và lập trình cấu trúc (truyền thống):
- POP- Procedure Oriented Programming: Lập trình hướng thủ tục
Data structure(CTDL) + Algorithm(Thuật toán) = Program(chương trình)
I. MỞ ĐẦU
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Diễn đạt “thiếu tự nhiên”
Có học sinh x
“Viết lý lịch cho học sinh x”
“x ơi, viết lý lịch đi em”
Diễn đạt nào tự nhiên hơn?
“x ơi, viết lý lịch đi em”
VietLyLich(x);
x.VietLyLich();
NHƯỢC ĐIỂM CỦA POP
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Khó mô tả những quan hệ phức tạp của thế giới tự nhiên. Biểu diễn dạng cấu trúc “phức tạp” không phải là dễ dàng đối với nhiều người.
Quan hệ giữa các dữ liệu được biểu diễn bằng cấu trúc lồng nhau hoặc một pointer.
Tính phân lớp khó được phát hiện, có khó khăn trong biểu diễn lẫn tính dễ hiểu.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Bảo mật kém do không thể giới hạn truy xuất đến một dữ liệu.
struct STUDENT
{ char Name[21];
int Age;
int Score;
};
void main()
{STUDENT x = { “Hoa”, 19, 5};
x.Age=1000;
x.Score=-20;
}
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Cần một phương pháp lập trình khác giúp giải quyết những nhược điểm này.
OOP có những đặc điểm vượt trội so với POP và là hướng lập trình chủ đạo hiện nay.
Diễn đạt hướng đối tượng
Thí dụ 1: Xét hai diễn đạt:
Nhân viên văn phòng viết lý lịch cho sinh viên “Hoàng” ViếtLýLịch(Hoàng);
Hoàng ơi, viết lý lịch đi em.Hoàng.ViếtLýLịch();
Theo bạn, tình huống nào đúng với thực tế?
Thí dụ 2: Xét hai diễn đạt:
Tính tổng mảng a có n phần tử Tổng(a,n);
Mảng a ơi, tình tổng đi em: a.Tổng();
Xem a là một đối tượng.
Diễn đạt hướng đối tượng
Diễn đạt tác vụ theo hướng thủ tục : TênTácVụ(ĐốiTượngDữLiệu); Tổng(a,n);
Diễn đạt tác vụ theo hướng đối tượng : ĐốiTượngDữLiệu.TênTácVụ(); a.Tổng();
Xem dữ liệu là đối tượng làm chương trình
tự nhiên hơn vì giống thực tế hơn.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
II. CÁC KHÁI NIỆM HƯỚNG ĐỐI TƯỢNG CƠ BẢN
Đối tượng-Object
Lớp-Class
Tính thừa kế- Inheritance
Tính đa hình-Polymorphism
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Đối tượng - Object:
Một đối tượng là một khái niệm hoặc nội dung có các biên được định nghĩa có liên quan đến vấn đề mà ta đang giải quyết.
Các thuộc tính: Tính chất/đặc tính riêng.
Các hành động: Các hành động khả dĩ của đối tượng.
Tam giác
Chữ nhật
Em Nga
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Lớp - Class:
Một lớp là một cách gom nhóm các đối tượng có cùng các tính chất, cách ứng xử (hành động) và các mối quan hệ chung.
VD: Hình học, Người, Sinh viên, Nhân viên
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Tính chất/thuộc tính của lớp:
Một đặc tính cần có của một đối tượng hoặc thực thể khi được biểu thị trong một lớp được gọi là một tính chất.
VD: thuộc tính của sinh viên: MSV, Họ tên, Ngày sinh, Lớp học, Điểm TB,…
VD: thuộc tính của nhân viên là gì???!!
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Phương thức/hành động của lớp:
Một hành động cần có của một đối tượng hoặc thực thể khi được biểu thị trong một lớp được gọi là một phương thức.
VD: các phương thức của sinh viên: Viết lý lịch, đăng ký môn học, học,…
VD: các phương thức của nhân viên là gì???!!
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
PHÂN TÍCH CÁC THUỘC TÍNH VÀ PHƯƠNG THỨC CỦA LỚP
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
TÍNH THỪA KẾ
Thừa kế là tính chất cho phép dùng lại một lớp hiện có để xây dựng một lớp mới.
Lớp cha: Là lớp từ đó các lớp khác thừa kế các tính chất.
Lớp con: Là lớp thừa kế các tính chất và phương thức của lớp khác.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Đơn thừa kế: Là tiến trình tạo ra lớp mới từ một lớp hiện có.
Đa thừa kế: Là tiến trình tạo ra lớp mới từ hai hay nhiều lớp hiện có.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
LỚP VÀ CẤU TRÚC CỦA LỚP
class{
private:
;
…
;
public:
;
…
;
};
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
LỚP VÀ CẤU TRÚC CỦA LỚP
Ví dụ:
class Date{
private:
int month, day, year;
public:
void set(int,int,int);
void print();
};
PHÂN TÍCH VÀ THIẾT KẾ LỚP SINH VIÊN
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
CÁC THÀNH VIÊN RIÊNG VÀ CHUNG CỦA LỚP
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
CÁC THÀNH VIÊN RIÊNG VÀ CHUNG CỦA LỚP
# include
class diem // khai báo lớp điểm
{
private :
int x;
int y;
public :
void khoitao(int, int);
void hien();
};
void diem :: khoitao(int h, int t)
{ x=h; y=t ; }
void diem :: hien()
{ cout<< “Dang o diem (“ <}
void main()
{
diem a;
a.khoitao(5,4);
a.hien();
}
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
HÀM THÀNH VIÊN
Một thông điệp cho một đối tượng tương ứng với một lệnh gọi hàm.
Các thông điệp có thể có tham số hoặc không.
Để đáp lại một thông điệp, đối tượng thi hành một phương thức, tương ứng một thân thủ tục.
Một phương thức là một hàm nằm trong lớp.
Trong lập trình hướng đối tượng ta gửi thông điệp thay vì gọi các hàm. <đối tượng>.
Một hàm được khai báo dưới dạng một thành viên của một lớp được gọi là hàm thành viên (member funstions).
Xem lại vd ở slide trước – xác định các hàm thành viên.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
HÀM THÀNH VIÊN
Các hàm thành viên thường nằm trong phần chung của lớp.
Các hàm, các phương thức trong lớp phải được định nghĩa trước khi dùng.
Phần khai báo phải có các gía trị trả về và các đối số của nó (nếu có).
Các hàm thành viên không được trùng tên với bất kỳ một thành viên dữ liệu nào khác trong lớp.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
SỬ DỤNG LỚP
class exampleclass{
private:
object_data is an integer;
public:
member_function1(parameter1, parameter2, …)
{ assign value to object_data }
member_funtion2() { display data }
};
void main()
{ exampleclass object1, object2;
object1.member_function1(200);
object1.member_function2();
object2.member_function1(350);
object2.member_function2(); }
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
SỬ DỤNG LỚP – Định nghĩa đối tượng
Exampleclass object1, object2;
Lớp Exampleclass không tạo đối tượng nào hết, chỉ mô tả đối tượng tạo ra có dạng ra sao.
Định nghĩa một đối tượng cũng tương tự như định nghĩa một biến.
Khi định nghĩa một đối tượng thì không gian sẽ được chừa riêng cho nó trong bộ nhớ.
<đt1, đt2, đt3,…>;
VD: Diem A, B;
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
SỬ DỤNG HÀM – Gọi hàm thành viên
Để liên lạc với các đối tượng, ta gọi các hàm thành viên của chúng.
object1.member_function1(200);
object1.member_function2();
Một hàm thành viên luôn được gọi để tác động lên một đối tượng cụ thể.
Cú pháp truy cập hàm thành viên:
.()
- Truy cập dữ liệu thành viên lớp:
.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
SỬ DỤNG HÀM – Truyền và trả về đối tượng
Việc truyền và trả về đối tượng cũng như truyền và trả kiểu dữ liệu cho hàm.
Việc truyền và trả dữ liệu này không thật hiệu quả.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
CÁC NGÔN NGỮ HƯỚNG ĐỐI TƯỢNG
C++
JAVA
VISUAL BASIC
VISUAL C#
…
Tham khảo thêm thông tin trong bài giảng và internet.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
BÀI TẬP TRÊN LỚP
- Phân tích lớp hinhchunhat (Hình chữ nhật)
- Khai báo lớp hinhchunhat.
- Viết hàm main khai thác lớp hinhchunhat.
+ Tạo một hinhchunhat A.
+ Nhập thông tin cho hình A.
+ In thông tin của hình A.
+ In diện tích của hình A.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
BÀI TẬP TRÊN LỚP
2. Xây dựng lớp Ccircle (Hình tròn)
- Dữ liệu thành viên: bán kính R.
Hàm thành viên:
+ Nhập bán kính hình tròn
+ In bán kính hìn tròn
+ Tính chu vi hình tròn
+ Tính diện tích hình tròn
=> Viết chương trình nhập vào 10 hình tròn và cho biết bán kính của hình tròn có diện tích lớn nhất.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
BÀI TẬP TRÊN LỚP
3. Xây dựng lớp CAccount
- Dữ liệu thành viên: Tên, Mã số tài khoản, Tiền
Hàm thành viên:
+ Nhập thông tin cho tài khoản
+ In thông tin cho tai khoản
+ Lấy thông tin số tiền trong tài khoản.
Viết hàm main để khai thác lớp.
+ Nhập thông tin cho một danh sách TK.
+ Tính tổng số tiền của danh sách.
Một đối tượng sách trong hệ thống quản lý thư viện có các thuộc tính:
- Tên sách
- Tổng số quyển sách
- Số quyển sách đang cho mượn
Xây dựng lớp CSach với các thuộc tính tên và các phương thức sau:
- Phương thức nhập liệu cho đối tượng từ bàn phím. Các thông tin cần nhập là tên sách, tổng số sách, số đang cho mượn
- Phương thức in thông tin đối tượng ra màn hình
- Phương thức tính số sách còn lại trong thư viện (tổng số - số đang cho mượn)
Trên số lớp đã xây dựng, viết chương trình chính thực hiện các công việc:
- Nhập danh sách các quyển sách với số lượng các quyển sách được nhập từ bàn phím
- In ra màn hình các quyển sách hiện có trong thư viện (Số sách còn lại phải lớn hơn 0)
Sự khác nhau giửa lập trình hướng đối tượng và lập trình cấu trúc (truyền thống):
- POP- Procedure Oriented Programming: Lập trình hướng thủ tục
Data structure(CTDL) + Algorithm(Thuật toán) = Program(chương trình)
I. MỞ ĐẦU
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Diễn đạt “thiếu tự nhiên”
Có học sinh x
“Viết lý lịch cho học sinh x”
“x ơi, viết lý lịch đi em”
Diễn đạt nào tự nhiên hơn?
“x ơi, viết lý lịch đi em”
VietLyLich(x);
x.VietLyLich();
NHƯỢC ĐIỂM CỦA POP
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Khó mô tả những quan hệ phức tạp của thế giới tự nhiên. Biểu diễn dạng cấu trúc “phức tạp” không phải là dễ dàng đối với nhiều người.
Quan hệ giữa các dữ liệu được biểu diễn bằng cấu trúc lồng nhau hoặc một pointer.
Tính phân lớp khó được phát hiện, có khó khăn trong biểu diễn lẫn tính dễ hiểu.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Bảo mật kém do không thể giới hạn truy xuất đến một dữ liệu.
struct STUDENT
{ char Name[21];
int Age;
int Score;
};
void main()
{STUDENT x = { “Hoa”, 19, 5};
x.Age=1000;
x.Score=-20;
}
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Cần một phương pháp lập trình khác giúp giải quyết những nhược điểm này.
OOP có những đặc điểm vượt trội so với POP và là hướng lập trình chủ đạo hiện nay.
Diễn đạt hướng đối tượng
Thí dụ 1: Xét hai diễn đạt:
Nhân viên văn phòng viết lý lịch cho sinh viên “Hoàng” ViếtLýLịch(Hoàng);
Hoàng ơi, viết lý lịch đi em.Hoàng.ViếtLýLịch();
Theo bạn, tình huống nào đúng với thực tế?
Thí dụ 2: Xét hai diễn đạt:
Tính tổng mảng a có n phần tử Tổng(a,n);
Mảng a ơi, tình tổng đi em: a.Tổng();
Xem a là một đối tượng.
Diễn đạt hướng đối tượng
Diễn đạt tác vụ theo hướng thủ tục : TênTácVụ(ĐốiTượngDữLiệu); Tổng(a,n);
Diễn đạt tác vụ theo hướng đối tượng : ĐốiTượngDữLiệu.TênTácVụ(); a.Tổng();
Xem dữ liệu là đối tượng làm chương trình
tự nhiên hơn vì giống thực tế hơn.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
II. CÁC KHÁI NIỆM HƯỚNG ĐỐI TƯỢNG CƠ BẢN
Đối tượng-Object
Lớp-Class
Tính thừa kế- Inheritance
Tính đa hình-Polymorphism
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Đối tượng - Object:
Một đối tượng là một khái niệm hoặc nội dung có các biên được định nghĩa có liên quan đến vấn đề mà ta đang giải quyết.
Các thuộc tính: Tính chất/đặc tính riêng.
Các hành động: Các hành động khả dĩ của đối tượng.
Tam giác
Chữ nhật
Em Nga
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Lớp - Class:
Một lớp là một cách gom nhóm các đối tượng có cùng các tính chất, cách ứng xử (hành động) và các mối quan hệ chung.
VD: Hình học, Người, Sinh viên, Nhân viên
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Tính chất/thuộc tính của lớp:
Một đặc tính cần có của một đối tượng hoặc thực thể khi được biểu thị trong một lớp được gọi là một tính chất.
VD: thuộc tính của sinh viên: MSV, Họ tên, Ngày sinh, Lớp học, Điểm TB,…
VD: thuộc tính của nhân viên là gì???!!
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Phương thức/hành động của lớp:
Một hành động cần có của một đối tượng hoặc thực thể khi được biểu thị trong một lớp được gọi là một phương thức.
VD: các phương thức của sinh viên: Viết lý lịch, đăng ký môn học, học,…
VD: các phương thức của nhân viên là gì???!!
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
PHÂN TÍCH CÁC THUỘC TÍNH VÀ PHƯƠNG THỨC CỦA LỚP
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
TÍNH THỪA KẾ
Thừa kế là tính chất cho phép dùng lại một lớp hiện có để xây dựng một lớp mới.
Lớp cha: Là lớp từ đó các lớp khác thừa kế các tính chất.
Lớp con: Là lớp thừa kế các tính chất và phương thức của lớp khác.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
Đơn thừa kế: Là tiến trình tạo ra lớp mới từ một lớp hiện có.
Đa thừa kế: Là tiến trình tạo ra lớp mới từ hai hay nhiều lớp hiện có.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
LỚP VÀ CẤU TRÚC CỦA LỚP
class
private:
…
public:
…
};
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
LỚP VÀ CẤU TRÚC CỦA LỚP
Ví dụ:
class Date{
private:
int month, day, year;
public:
void set(int,int,int);
void print();
};
PHÂN TÍCH VÀ THIẾT KẾ LỚP SINH VIÊN
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
CÁC THÀNH VIÊN RIÊNG VÀ CHUNG CỦA LỚP
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
CÁC THÀNH VIÊN RIÊNG VÀ CHUNG CỦA LỚP
# include
class diem // khai báo lớp điểm
{
private :
int x;
int y;
public :
void khoitao(int, int);
void hien();
};
void diem :: khoitao(int h, int t)
{ x=h; y=t ; }
void diem :: hien()
{ cout<< “Dang o diem (“ <
void main()
{
diem a;
a.khoitao(5,4);
a.hien();
}
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
HÀM THÀNH VIÊN
Một thông điệp cho một đối tượng tương ứng với một lệnh gọi hàm.
Các thông điệp có thể có tham số hoặc không.
Để đáp lại một thông điệp, đối tượng thi hành một phương thức, tương ứng một thân thủ tục.
Một phương thức là một hàm nằm trong lớp.
Trong lập trình hướng đối tượng ta gửi thông điệp thay vì gọi các hàm. <đối tượng>.
Một hàm được khai báo dưới dạng một thành viên của một lớp được gọi là hàm thành viên (member funstions).
Xem lại vd ở slide trước – xác định các hàm thành viên.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
HÀM THÀNH VIÊN
Các hàm thành viên thường nằm trong phần chung của lớp.
Các hàm, các phương thức trong lớp phải được định nghĩa trước khi dùng.
Phần khai báo phải có các gía trị trả về và các đối số của nó (nếu có).
Các hàm thành viên không được trùng tên với bất kỳ một thành viên dữ liệu nào khác trong lớp.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
SỬ DỤNG LỚP
class exampleclass{
private:
object_data is an integer;
public:
member_function1(parameter1, parameter2, …)
{ assign value to object_data }
member_funtion2() { display data }
};
void main()
{ exampleclass object1, object2;
object1.member_function1(200);
object1.member_function2();
object2.member_function1(350);
object2.member_function2(); }
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
SỬ DỤNG LỚP – Định nghĩa đối tượng
Exampleclass object1, object2;
Lớp Exampleclass không tạo đối tượng nào hết, chỉ mô tả đối tượng tạo ra có dạng ra sao.
Định nghĩa một đối tượng cũng tương tự như định nghĩa một biến.
Khi định nghĩa một đối tượng thì không gian sẽ được chừa riêng cho nó trong bộ nhớ.
VD: Diem A, B;
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
SỬ DỤNG HÀM – Gọi hàm thành viên
Để liên lạc với các đối tượng, ta gọi các hàm thành viên của chúng.
object1.member_function1(200);
object1.member_function2();
Một hàm thành viên luôn được gọi để tác động lên một đối tượng cụ thể.
Cú pháp truy cập hàm thành viên:
- Truy cập dữ liệu thành viên lớp:
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
SỬ DỤNG HÀM – Truyền và trả về đối tượng
Việc truyền và trả về đối tượng cũng như truyền và trả kiểu dữ liệu cho hàm.
Việc truyền và trả dữ liệu này không thật hiệu quả.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
CÁC NGÔN NGỮ HƯỚNG ĐỐI TƯỢNG
C++
JAVA
VISUAL BASIC
VISUAL C#
…
Tham khảo thêm thông tin trong bài giảng và internet.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
BÀI TẬP TRÊN LỚP
- Phân tích lớp hinhchunhat (Hình chữ nhật)
- Khai báo lớp hinhchunhat.
- Viết hàm main khai thác lớp hinhchunhat.
+ Tạo một hinhchunhat A.
+ Nhập thông tin cho hình A.
+ In thông tin của hình A.
+ In diện tích của hình A.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
BÀI TẬP TRÊN LỚP
2. Xây dựng lớp Ccircle (Hình tròn)
- Dữ liệu thành viên: bán kính R.
Hàm thành viên:
+ Nhập bán kính hình tròn
+ In bán kính hìn tròn
+ Tính chu vi hình tròn
+ Tính diện tích hình tròn
=> Viết chương trình nhập vào 10 hình tròn và cho biết bán kính của hình tròn có diện tích lớn nhất.
CHƯƠNG I: CÁC KHÁI NIỆM CĂN BẢN
BÀI TẬP TRÊN LỚP
3. Xây dựng lớp CAccount
- Dữ liệu thành viên: Tên, Mã số tài khoản, Tiền
Hàm thành viên:
+ Nhập thông tin cho tài khoản
+ In thông tin cho tai khoản
+ Lấy thông tin số tiền trong tài khoản.
Viết hàm main để khai thác lớp.
+ Nhập thông tin cho một danh sách TK.
+ Tính tổng số tiền của danh sách.
Một đối tượng sách trong hệ thống quản lý thư viện có các thuộc tính:
- Tên sách
- Tổng số quyển sách
- Số quyển sách đang cho mượn
Xây dựng lớp CSach với các thuộc tính tên và các phương thức sau:
- Phương thức nhập liệu cho đối tượng từ bàn phím. Các thông tin cần nhập là tên sách, tổng số sách, số đang cho mượn
- Phương thức in thông tin đối tượng ra màn hình
- Phương thức tính số sách còn lại trong thư viện (tổng số - số đang cho mượn)
Trên số lớp đã xây dựng, viết chương trình chính thực hiện các công việc:
- Nhập danh sách các quyển sách với số lượng các quyển sách được nhập từ bàn phím
- In ra màn hình các quyển sách hiện có trong thư viện (Số sách còn lại phải lớn hơn 0)
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Jenshin Cui Bap
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)