Lập trình hướng đối tượng
KỸ THUẬT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Thành Viên Nhóm Công Cụ :
Dương Chí Đức ( c), Hoàng Trung Hải , Nguyễn Việt Dũng
Thạch Đăng Sơn, Nguyễn Thị Hoà
Người Trình Bầy
Hoàng Trung Hải
I. Giới thiệu chung
Ngày nay khi tin học ngày càng phát triển mạnh mẽ và thâm nhập vào
mọi lĩnh vực của đời sống việc xây dựng ứng dụng cho các ngành nghiệp vụ
không đơn thuần chỉ bó hẹp trong một vấn đề mà phải sử dụng những kiến
thức, thành quả của nhiều lĩnh vực khác nhau. Sẽ khó khăn nếu tự mình xây
dựng ứng dụng, khái niệm Object(đối tượng) ra đời nhằm giải quyết vấn đề
đó. Để hiểu rõ ưu điểm của lập trình hướng đối tượng chúng ta hãy tìm hiểu
một chút về lập trình có cấu trúc.
Lập trình có cấu trúc được xuất hiện vào những năm 60-70. Chương trình có cấu
trúc được tổ chức theo các phép toán mà nó phải thực hiện. Về bản chất chương
trình được chia thành các thủ tục riêng lẻ(còn gọi là hàm), chúng được thực hiện
các nhiệm vụ riêng rẽ trong một quá trìng lớn và phức tạp hơn. Các thủ tục này
được giữ riêng biệt nhau nhiều nhất có thể được, mỗi quá trình có logic và dữ
liệu riêng. Thông tin được truyền qua các thủ tục bằng cách dùng tham biến, mà
thủ tục có thể có dữ liệu riêng mà bên ngoài phạm vi của nó không thể thâm
nhập được. Nói cách khác hàm như một chường trình chính được thu nhỏ có thể
gắn với nhau để xây dựng một ứng dụng.
Mục tiêu của lập trình có cấu trúc là làm cho việc phát triển phần mềm được dễ
dàng hơn đ/v người lập trình trong khi phẫn tăng cường được độ tin cậy và tính
dễ bảo trì. Chương trình có cấu trúc được xây dựng bằng cách chia nhỏ chương
trình lớn thành các phần cơ bản, các thành phần này lại trở thành hàm bên trong
chương trình. Bằng cách cô lập các quá trình bên trong hàm, chương trình có
cấu trúc làm giảm thiểu cơ may thủ tục nọ ảnh hưởng tới thủ tục kia. Điều này
cũng làm cho việc cô lập vấn đề trở nên dễ dàng hơn. Việc tách bạch hoá
chương trình cũng cho phép bạn viết chương trình dễ dàng hơn và duy trì sự
kiểm soát trên từng hàm. Biến toàn cục bị thay thế bởi biến nội bộ và các tham
biến vốn có phạm vi nhỏ hơn và dễ kiếm soát hơn. Cách tổ chức tốt hơn này bạn
có khả năng hiểu logic chương trình làm cho việc phát triển bảo trì của nó được
hiệu quả hơn.
Người trình bầy: Hoàng Trung Hải – Nhóm công cụ
1
Lập trình hướng đối tượng
Một khái niệm đầy hiệu lực được đưa vào với lập trình có cấu trúc là trừu tượng
Trừu tượng có thể được định nghĩa như là khả năng xét một điều gì đó mà
không quan tâm đến các chi tiết bên trong của nó. Trong một chương trình có
cấu trúc, ta chỉ cần biết rằng thủ tục đã cho thực hiện một nhiệm vị xác định.
Việc nhiệm vụ này thực hiện như thế nào không quan trọng, chừng nào mà thủ
tục còn tin cậy được thì còn có thể dùng nó mà không cần phải biết làm sao nó
hoàn thành đúng đắn chức năng của mình. Điều này được xem như nền tảng của
lập trình có cấu trúc.
Khi độ phức tạp của chương trình tăng lên, sự phụ thuộc của nó vào các kiểu dữ
liệu cơ bản mà nó sử lý cũng tăng theo. Vấn đề trở nên rõ ràng rằng cấu trúc dữ
liệu trong chương trình quan trọng không kém các phép toán thực hiện trên
chúng. Điều này trở nên hiển nhiên hơn khi chương trình càng tăng về kích
thước. Các kiểu dữ liệu xử lý trong nhiều thủ tục bên trong một chương trình có
cấu trúc, và khi có sự thay đổi trong các kiểu dữ liệu này thì cũng phải thực hiện
cả những thay đổi ở mọi nơi có các tác động lên kiểu dữ liệu đó. Đây là một
công việc tốn thời gian và hiệu quả đối với các chương trình có hàng nghìn dòng
lệnh và hàng trăm hàm.
Một nhược điểm nữa của lập trình có cấu trúc lộ ra khi cần phải dùng nhiều
người để lập trình cho một ứng dụng. Trong một chương trình có cấu trúc, từng
người được giao xây dựng một tập các hàm và kiểu dữ liệu dùng chung cho lẫn
nhau cho nên những thay đổi về cấu trúc dữ liệu của người này sẽ ảnh hương tới
công việc của người khác, những sai sót trong liên lạc giữa các thành viên trong
nhóm có thể dẫn tới việc mất thời gian để viết lại.
Ngược lại, lập trình hướng đối tượng làm cho chương trình gọn hơn, dễ dàng kết
hợp với các chương trình khác. OOP là phương pháp đóng gói từng phần của
chương trình thành các đối tượng để có thể tái sử dụng cũng như duy trì bảo
dưỡng dễ dàng hơn. Lập trình viên có thể tập trung sâu hơn vào công việc cần
phải giải quyết, tiết kiệm thời gian công sức xây dựng chương trình mà vẫn sử
dụng được các chức năng đã có.
II.Lập trình hướng đối tượng
1. Đối tượng:
- Đối tượng là sự kết hợp của chương trình với dữ liệucó thể sử dụng như một
đơn vị độc lập.
Người trình bầy: Hoàng Trung Hải – Nhóm công cụ
2
Lập trình hướng đối tượng
- Đối tượng là phần dữ liệu được khai báo thuộc lớp. Khái niệm về lớp sẽ
được giới thiệu ở phần sau
3 thành phần đặc trưng của đối tượng :
- Thuộc tính: là các thông tin về bản thân đối tượng, có thể lây ra từ chúng
hoặc thay đổi chúng.
Ví dụ: đối tượng xe thì có thuộc tính số xe, màu sơn, số máy, . . .
- Phương pháp: Có thể là công việc mà đối tượng đó phải thực hiện.
Ví dụ: Xe thì phương pháp là đi, ngoặt, . . .
- Sự kiện : là hoạt động xẩy ra mà đối tượng nhận biết được
Vd: ở Windows khi ta nhấp chuột vào một form nào đó thì sự kiện nhâp
chuột xảy ra.
2. Lập trình hướng đối tượng
- Lập trình hướng đối tượng gắn câu trúc dữ liệu với cac phép toán.
- Lập trình hướng đối tượng là phương pháp mới được tiếp cận việc lập trình
Nó được xây dựng trên nền tảng của các khái niệm lập trình có cấu trúc và
sự trừu tượng hoá dữ liệu. Sự thay đổi cơ bản là OOP được thiết kế thiết kế
xoay quanh dữ liệu mà nó thao tác chứ không theo bản thân các thao tác
- OOP cho phép ta dùng các quá trình trí tuệ này với các khái niệm trừu tượng
được dùng trong chương trình máy tính.
VD: không thể viết số phức lên bản ghi nhân sự hoặc không được cộng
hai bản ghi với nhau.
- OOP cho phép ta chia bài toán thành các bài toán nhỏ quan hệ với nhau. Mỗi
bài toán là một đối tượng chứa dũ liệu và lệnh có quan hệ với có quan hệ với
đối tượng đó.
- Phương pháp trong lập trình hướng đối tượng mô phỏng sự phân lớp trong tự
nhiên
III Kỹ thuật lập trình OOP :
Trong mục này chúng sẽ tìm hiểu các khái niệm như sự đóng gói, lớp, thực thể,
tình kế thừa của đối tượng, tính đa hình, phương thức ảo. Đây là những khái
niệm căn bản và là nền tảng trong lập trình hương đối tượng.
Người trình bầy: Hoàng Trung Hải – Nhóm công cụ
3
Lập trình hướng đối tượng
Sự đóng gói :
Máy tính là một ngành khoa học nghiên cứu về việc lưu trữ và xử lý
thông tin, thực chất đó là việc xử lí dữ liệu. Vì vậy sẽ hoàn toàn tự nhiên nếu
một chương trình được thiết kế xoay quanh dữ liệu hơn là theo bản thân các
chức năng của chương trình. Dữ liệu và thao tác trên dữ liệu được lên kết với
nhau, cái này đòi hỏi các kia chính vì thế OOP làm cho các quan hệ hỗ trợ được
thể hiện rõ ràng nhất.
Trong quá trình một chương trình OOP thực hiện, chúng ta có gửi cùng một
thông điệp đến các đối tượng khác nhau. Để làm được điều đó cấu trúc chương
trình đã được tổ chức sao cho có sự tương ứng, sự đồng nhất giữa dữ liệu và các
thao tác tác động đến dữ liệu. Khi đó chúng ta quan tâm đến vấn đề " phải làm
công việc cụ thể gì " mà chỉ điều khiển bằng mệnh lệnh "làm việc" có nghĩa là
cùng với một mệnh lệnh một thông điệp chương trình vẫn nhận biết để thực
hiện. Sự đóng gói chính là khả năng cất giữ riêng biệt dữ liệu và phương thức
tác động lên dữ liệu đó, " tất cả thông tin của một hệ thống định hướng đối
tượng được lưu giữ bên trong các đối tượng và nó chỉ có thể hành động khi các
đối tượng đó được ra lệnh thực hiện các thao tác.
Như vậy sự đóng gói không đơn thuần chỉ sự gom chung dữ liệu và chương
trình vào bên trong một khối, chúng còn được hiểu thêm theo nghĩa đó là sự
đồng nhất dữ liệu và các thao tác tác động lên giữ liệu đó.
**vd: với vật liệu xi măng, sắt thép. . . được đồng nhất với thao tác làm móng,
xây tường khi đó người điều hành chỉ với một mệnh lệnh "hãy làm đi" người
thợ sẽ biết công việc của mình. Tất cả những gì thấy được của đối tượng đã
được đóng gói đó là các phương thức giao tiếp của đối tượng.
Lớp và thực thể :
Khi được đề cập đến hệ thống được tổ chức xung quanh các cấu trúc dữ liệu, rõ
ràng chúng ta quan tâm đến các lớp các cấu trúc dữ liệu hơn là bản thân từng dữ
liệu, từng đối tượng. Phấn quan tâm trong một hệ thống không phải là một mô tả
dữ liệu riêng, một cú pháp đơn lẻ, mà là tất cả các bộ mô tả tập hợp cấu trúc dữ
liệu được đặt trưng bởi các tính chất chung.
Lớp ( Class ) thực chất là một kiểu dữ liệu được định nghĩa trong chương trình.
Tuy nhiên khái niệm về lớp còn xa hơn, nó chứa bên trong sự cài đặt về đặc tính
Người trình bầy: Hoàng Trung Hải – Nhóm công cụ
4
Lập trình hướng đối tượng
cũng như những thao tác có thể có trên dữ liệu. Một cách tổng quát, lớp đặc
trưng cho một mẫu của một vài đối tượng và mô tả cấu trúc bên trong của những
đối tượng này. Những đối tượng của cùng một lớp có cùng định nghĩa về các
thao tác và cùng cấu trúc dữ liệu của chúng.
VD: chúng ta tạo một lớp POINT hai thành phần là toạ độ và điểm
trong mặt phẳng và thao tác như gán giá trị cho toạ độ, hiển thị toạ đọ của điểm.
class point
{ int x // toạ độ của điểm
int y
voidsetXY (int a, int b)
{ x:=a; // thủ tục gán giá trị cho toạ độ
y:=b;
}
voidDisplay (void)
{
printf("hoành độ: %d\n", x); // in hoành độ và tung độ
printf ("tung độ : %d\n", y);
}
}
Thực thể (instance) là một vật thể có thực bên trong bộ nhớ, thực chất đó là đối
tượng, nói cách khác thực thể là một biến (variable) được khai báo thuộc kiểu
lớp. Một thực thể là một đối tượng được tạo ra từ một lớp. Lớp môt tả cấu trúc
(hành vi và thông tin ) của thực thể, trong khi đó tình trạnh hiện hành (curent
state) của thực thể được xác định bởi những thao tác tác động lên thực thể.
Vd:
class point
{ int x // toạ độ của điểm
int y
voidsetXY (int a, int b)
{ x:=a; // thủ tục gán giá trị cho toạ độ
y:=b;
}
voidDisplay (void)
{
printf("hoành độ: %d\n", x); // in hoành độ và tung độ
printf ("tung độ : %d\n", y);
}
}
Voidmain(void)
{
printf (" gan cho p hai toa do (0, 1) va (4, 5) \n");
point p; // tạo ra đối tượng P
p. setXY(0, 1); // cho thực thể p giá trị là (0, 1)
p. display () ;
p. setXY(4, 5); // cho thực thể p giá trị là (4, 5)
p. display;
Người trình bầy: Hoàng Trung Hải – Nhóm công cụ
5