Bài giảng Lập trình hướng đối tượng - Chương 3: Các khái niệm chính của lập trình hướng đối tượng

Chương 3  
Các khái niệm chính của lập trình hướng ₫ối tượng  
3.0 Dẫn nhập  
3.1 Cấu trúc của 1 ứng dụng hướng ₫ối tượng  
3.2 Đối tượng, thuộc tính, tác vụ  
3.3 Abstract type  
3.4 Class  
3.5 Tính bao ₫óng  
3.6 Tính thừa kế & cơ chế 'override'  
3.7 Tính bao gộp  
3.8 Thông ₫iệp, tính ₫a xạ và kiểm tra kiểu  
3.9 Tính tổng quát hóa  
3.10 Kết chương  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 1  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.0 Dẫn nhập  
Chương này giới thiệu cấu trúc của chương trình ₫ược lập trình  
theo kỹ thuật hướng ₫ối tượng (OOP – Objects Oriented  
Programming), các phương tiện ₫ặc tả ₫ối tượng như phát biểu  
interface, phát biểu class.  
Chương này cũng giới thiệu các tính chất liên quan ₫ến việc ₫ặc tả  
và sử dụng ₫ối tượng như thừa kế, bao ₫óng, bao gộp, tổng quát  
hóa.  
Chương này cũng giới thiệu phương tiện giao tiếp duy nhất giữa  
các ₫ối tượng là thông ₫iệp, nhu cầu cần phải có tính ₫a xạ trong  
việc thực hiện lệnh gởi thông ₫iệp.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 2  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.1 Cấu trúc chương trình OOP  
Chương trình = tập các ₫ối tượng sống ₫ộc lập, tương tác nhau khi  
cần thiết ₫ể hoàn thành nhiệm vụ của chương trình (ứng dụng).  
Đối tượng  
(object)  
dữ liệu cục  
bộ trong  
₫ối tượng  
Điểm nhập  
chương  
trình (hàm  
Main)  
dữ liệu cục  
bộ trong  
từng hàm  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 3  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.1 Cấu trúc chương trình OOP  
Chương trình  
Đối tượng  
(object)  
dữ liệu cục  
bộ trong  
₫ối tượng  
Điểm nhập  
chương  
trình (hàm  
Main)  
dữ liệu cục  
bộ trong  
từng hàm  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 4  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.1 Cấu trúc chương trình OOP  
. Cấu trúc chương trình hướng ₫ối tượng rất thuần nhất, chỉ chứa 1  
loại thành phần : ₫ối tượng.  
. Các ₫ối tượng có tính ₫ộc lập rất cao quản lý, kiểm soát chương  
trình rất dễ (cho dù chương trình có thể rất lớn) dễ nâng cấp,  
bảo trì.  
. Không thể tạo ra dữ liệu toàn cục của chương trình ₫iểm yếu  
nhất của chương trình cấu trúc không tồn tại nữa.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 5  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.2 Đối tượng (Object)  
Đối tượng là nguyên tử cấu thành ứng dụng.  
Đối tượng bao gồm 2 loại thành phần chính yếu :  
. Tập các tác vụ (operation) : mỗi tác vụ thực hiện 1 chức năng  
rõ ràng ₫ơn giản nào ₫ó.  
. Tập các thuộc tính dữ liệu (attribute) : mỗi thuộc tính có kiểu  
dữ liệu cụ thể, và chứa 1 giá trị cụ thể thuộc kiểu tương ứng tại  
từng thời ₫iểm. Các thuộc tính phục vụ cho các tác vụ và là ₫ối  
tượng xử lý bởi các tác vụ.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 6  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.2 Đối tượng (Object)  
Viết phần mềm hướng ₫ối tượng là qui trình ₫ặc tả các loại ₫ối  
tượng cấu thành ứng dụng.  
Đặc tả một loại ₫ối tượng là ₫ặc tả 2 góc nhìn khác nhau về ₫ối  
tượng :  
. Góc nhìn sử dụng : dùng phát biểu interface.  
. Góc nhìn hiện thực cụ thể : dùng phát biểu class.  
Implementation  
(class)  
Interface  
(abstract type)  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 7  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.3 Kiểu trừu tượng (Abstract type) hay interface  
Phát biểu interface ₫ịnh nghĩa thông tin sử dụng ₫ối tượng mà bên  
ngoài thấy, kết hợp các thông tin này với 1 tên gọi, tên này ₫ược  
gọi là tên kiểu trừu tượng (Abstract type) hay ngắn gọn là type.  
Interface là tập hợp các ₫iểm nhập (entry) mà bên ngoài có thể  
giao tiếp với ₫ối tượng. C# cho phép ₫ịnh nghĩa nhiều loại ₫iểm  
nhập, nhưng phổ biến nhất là tác vụ chức năng (operation).  
Ta dùng chữ ký (signature) ₫ể ₫ịnh nghĩa và phân biệt mỗi ₫iểm  
nhập. Chữ ký của 1 tác vụ gồm :  
1. tên tác vụ (operation)  
2. danh sách tham số hình thức, mỗi tham số ₫ược ₫ặc tả bởi 3  
thuộc tính : tên, type và chiều di chuyển (IN, OUT, INOUT).  
3. ₫ặc tả chức năng của tác vụ (thường ở dạng chú thích).  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 8  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.3 Kiểu trừu tượng (Abstract type) hay interface  
Muốn làm việc với 1 ₫ối tượng nào ₫ó, ta thường dùng biến ₫ối  
tượng. Biến ₫ối tượng nên ₫ược ₫ặc tả kiểu bằng tên interface, hạn  
chế dùng tên class cụ thể.  
Biến ₫ối tượng là biến tham khảo, nó không chứa trực tiếp ₫ối  
tượng, nó chỉ chứa các thông tin ₫ể truy xuất ₫ược ₫ối tượng, bất  
chấp ₫ối tượng ₫ang nằm ở ₫âu.  
Biến ₫ối tượng thuộc kiểu interface có thể tham khảo ₫ến nhiều  
₫ối tượng thuộc các class cụ thể khác nhau miễn sao các ₫ối tượng  
này hỗ trợ ₫ược interface tương ứng.  
Như vậy, nếu ta dùng ₫ối tượng thông qua biến thuộc kiểu  
interface thì ta không cần biết bất kỳ thông tin hiện thực chi tiết  
nào về ₫ối tượng mà mình ₫ang dùng, nhờ vậy code ứng dụng sẽ  
₫ộc lập hoàn toàn với class hiện thực của ₫ối tượng ₫ược sử dụng  
trong ứng dụng.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 9  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Thí dụ interface  
Thí dụ sau ₫ây miêu tả 1 interface của ₫ối tượng mà hỗ trợ 2 tác  
vụ chuẩn hóa chuỗi tiếng Việt về dạng tổ hợp và dựng sẵn. Thông  
qua interface, người dùng không hề thấy và biết chi tiết về hiện  
thực của các tác vụ, nhưng ₫iều này không hề ngăn cản họ trong  
việc dùng ₫ối tượng nào ₫ó có interface IVietLib.  
interface IVietLib {  
//tác vụ chuẩn hóa chuỗi tiếng Việt về dạng tổ hợp  
int VnPre2Comp(String src, int len, ref String dst);  
//tác vụ chuẩn hóa chuỗi tiếng Việt về dạng dựng sẵn  
int VnComp2Pre(String src, int len, ref String dst);  
}
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 10  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.4 Class (Implementation)  
Phát biểu class ₫ịnh nghĩa chi tiết hiện thực ₫ối tượng :  
. ₫ịnh nghĩa các thuộc tính, mỗi thuộc tính ₫ược ₫ặc tả bởi các  
thông tin về nó như tên nhận dạng, kiểu dữ liệu, tầm vực truy  
xuất,... Kiểu của thuộc tính có thể là type cổ ₫iển (kiểu giá trị :  
số nguyên, thực, ký tự, chuỗi ký tự,...) hay kiểu ₫ối tượng (kiểu  
tham khảo), trong trường hợp sau thuộc tính sẽ là tham khảo  
₫ến ₫ối tượng khác. Trạng thái của ₫ối tượng là tập giá trị của  
tất cả thuộc tính của ₫ối tượng tại thời ₫iểm tương ứng.  
. 'coding' các tác vụ (miêu tả giải thuật chi tiết về hoạt ₫ộng của  
tác vụ), các hàm nội bộ trong class và các thành phần khác.  
Ngoài các thành phần chức năng, ta còn phải ₫ịnh nghĩa các tác vụ  
quản lý ₫ối tượng như : khởi tạo trạng thái ban ₫ầu (constructor),  
dọn dẹp các phần tử liên quan ₫ến ₫ối tượng khi ₫ối tượng bị xóa  
(destructor).  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 11  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Thí dụ về class  
Thí dụ sau ₫ây miêu tả 1 class hiện thực interface IVietLib :  
class MyVietLib : IVietLib {  
//₫ịnh nghĩa các thuộc tính cần dùng cho 2 tác vụ  
...  
//₫ịnh nghĩa 2 tác vụ quản lý ₫ối tượng  
MyVietLib() {…}  
~MyVietLib() {…}  
//₫ịnh nghĩa thuật giải tác vụ chuẩn hóa chuỗi tiếng Việt về dạng tổ hợp  
int VnPre2Comp(String src, int len, ref String dst) {….}  
//₫ịnh nghĩa thuật giải tác vụ chuẩn hóa chuỗi tiếng Việt về dạng dựng  
sẵn  
int VnComp2Pre(String src, int len, ref String dst) {…}  
}
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 12  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.5 Tính ₫óng gói (encapsulation)  
Tính ₫óng gói gồm 2 ý :  
Mỗi ₫ối tượng chỉ nên thực hiện một công việc nhỏ, ₫ơn giản, rõ  
ràng. Các thành phần cần thiết ₫ể thực hiện công việc của ₫ối  
tượng có mối quan hệ rất mật thiết với nhau và ₫ược ₫óng gói  
thành ₫ối tượng sao cho tính kết dính (cohesion) cao nhất.  
Mỗi ₫ối tượng chỉ cung cấp cho khách hàng bên ngoài (client) một  
tập ₫ủ nhỏ các tác vụ chức năng có nghĩa và phải che dấu mọi chi  
tiết hiện thực của ₫ối tượng, không cho bên ngoài thấy và truy  
xuất các chi tiết hiện thực này, nhờ vậy, tạo ₫ộ ₫ộc lập cao giữa  
các ₫ối tượng, giảm thiểu tính nối ghép (coupling) hay phụ thuộc  
giữa các ₫ối tượng xuống thấp nhất có thể có, ₫ể cuối cùng thì việc  
quản lý, hiệu chỉnh và nâng cấp từng ₫ối tượng ₫ược dễ dàng,  
không ảnh hưởng ₫ến các ₫ối tượng khác.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 13  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.5 Tính ₫óng gói (encapsulation)  
Trong 2 ý về tính ₫óng gói thì việc ẩn thông tin là quyết ₫ịnh nhất,  
cụ thể :  
. che dấu các thuộc tính dữ liệu : nếu cần cho phép bên ngoài  
truy xuất 1 thuộc tính vật lý, ta tạo 1 thuộc tính luận lý (2 tác  
vụ get/set tương ứng) ₫ể giám sát và kiểm soát việc truy xuất.  
. che dấu chi tiết hiện thực các tác vụ.  
. che dấu các local function và sự hiện thực của chúng.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 14  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.6 Tính thừa kế (inheritance)  
Tính thừa kế cho phép giảm nhẹ công sức ₫ịnh nghĩa  
interface/class : ta có thể ₫ịnh nghĩa các interface/class không  
phải từ ₫ầu mà bằng cách kế thừa interface/class có sẵn nhưng  
gần giống với mình :  
. Miêu tả tên cha : mọi thành phần của cha trở thành của mình.  
. override 1 số method của class cha, kết quả override chỉ tác  
dụng trên ₫ối tượng của class con.  
. ₫ịnh nghĩa thêm các chi tiết mới (thường khá ít).  
Đa thừa kế hay ₫ơn thừa kế. C# cho phép ₫a thừa kế interface (₫a  
hiện thực), nhưng chỉ hỗ trợ ₫ơn thừa kế class.  
Thừa kế tạo ra mối quan hệ cha/con : phần tử ₫ã có là cha, phần  
tử thừa kế cha ₫ược gọi là con. Cha/con có thể là trực tiếp hay  
gián tiếp.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 15  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.6 Tính thừa kế (inheritance)  
Với các tính chất về thừa kế như slide trước, ta rút ra ₫ược 1 số ý  
tưởng :  
. Đối tượng của class con luôn lớn hay hay ít nhất bằng ₫ối  
tượng class cha.  
. Và như thế, ₫ối tượng class con hoàn toàn có thể ₫óng vai trò  
của ₫ối tượng class cha và thay thế ₫ối tượng class cha khi cần  
thiết, nhưng ngược lại thường không ₫ược.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 16  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.7 Tính bao gộp (aggregation)  
1 ₫ối tượng có thể chứa nhiều ₫ối tượng khác tạo nên mối quan  
hệ bao gộp 1 cách ₫ệ quy giữa các ₫ối tượng. Thí dụ ₫ối tượng  
quốc gia chứa nhiều ₫ối tượng tỉnh, ₫ối tượng tỉnh chứa nhiều ₫ối  
tượng quận/huyện,…  
Có 2 góc nhìn về tính bao gộp : ngữ nghĩa & hiện thực.  
Góc nhìn ngữ nghĩa  
Góc nhìn hiện thực  
O2  
O1  
O3  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 17  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Ví dụ về bao gộp  
//₫ịnh nghĩa class miêu tả ₫ối tượng ₫ồ họa cơ bản  
abstract class Geometry {  
// abstract base class  
public abstract void Draw (Graphics g); // abstract operation  
protected int xPos, yPos;  
protected COLORREF color;  
};  
//₫ịnh nghĩa class ₫ồ họa phức hợp = tập các ₫ối tượng ₫ồ họa ₫ã có  
class GeoGroup : Geometry {  
public override void Draw (Graphics g) {...} ; // override  
private Geometry [] objList; //danh sách các ₫ối tượng thành phần;  
int count; //số lượng các ₫ối tượng thành phần  
};  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 18  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.8 Thông ₫iệp (Message), ₫a xạ (Polymorphism)  
Thông ₫iệp là phương tiện giao tiếp (hay tương tác) duy nhất giữa  
các ₫ối tượng, nó cho phép gọi 1 tác vụ chức năng của 1 ₫ối tượng  
từ 1 tham khảo ₫ến ₫ối tượng.  
Thông ₫iệp bao gồm 3 thành phần :  
. tham khảo ₫ến ₫ối tượng cần nhờ.  
. tên tác vụ muốn gọi.  
. danh sách tham số thực cần truyền cho (hay nhận về từ) tác  
vụ.  
public override void Draw (Graphics g) {  
for (int i=0; i < count; i++)  
objList[i].Draw(g); //gởi thông ₫iệp nhờ ₫ối tượng objList[i]  
// tự hiển thị mình lên ₫ối tượng vẽ g  
}
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 19  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
3.8 Thông ₫iệp (Message), ₫a xạ (Polymorphism)  
Xét ₫oạn lệnh sau :  
C1 obj = new C1();  
obj.func(); //lần 1  
obj = new C2();  
obj.func(); //lần 2  
Lệnh gởi thông ₫iệp obj.func() kích hoạt tác vụ func() của class  
C1 hay tác vụ func() của class C2 ?  
1. Dùng kỹ thuật xác ₫ịnh hàm và liên kết tĩnh : Dựa vào thông  
tin tại thời ₫iểm dịch, biến obj thuộc kiểu C1 và máy dịch lời  
gởi thông ₫iệp obj.func() thành lời gọi hàm C1_func(). Như  
vậy mỗi khi máy chạy lệnh này, hàm C1_func() sẽ chạy, bất  
chấp tại thời ₫iểm chạy, obj ₫ang tham khảo ₫ối tượng của  
class khác (C2). Điều này không ₫úng với ý muốn người lập  
trình.  
Môn : Lập trình hướng ₫ối tượng  
Chương 3 : Các khái niệm chính của lập trình hướng ₫ối tượng  
Slide 20  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Tải về để xem bản đầy đủ
pdf 26 trang myanh 25060 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 - Chương 3: Các khái niệm chính của lập trình hướng đối tượng", để 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_chuong_3_cac_khai_niem_c.pdf