Biên soạn: ðặng Thanh Dũng, khoa CNTT - ðH SPKT TP.HCM 1 Chương 1: Giới thiệu về lập trình hướng ñối tượng (object oriented programming - oop) . 1.1. Lập trình hướng ñối tượng là gì? • ðể hiểu oop là gì, trước hết chúng ta nhìn lại lịch sử của các kỹ thuật lập trình, ñồng thời xem xét các nhược ñiểm của các kỹ thuật lập trình trước khi oop ra ñời. • Nhìn chung, có thể chia các kỹ thuật lập trình thành 3 loại, sự xuất hiện của các kỹ thuật lập trình này theo thứ tự như sau: o Lập trình tuyến tính (lập trình không cấu trúc) o Lập trình có cấu trúc (lập trình hướng thủ tục). o Lập trình hướng ñối tượng (object oriented programming). • Mỗi kỹ thuật lập trình ñều có nhược ñiểm của nó, và ñể khắc phục các nhược ñiểm ñó, người ta ñã ñưa ra kỹ thuật lập trình mới. 1.1.1. Lp trình tuyn tính (lp trình không cu trúc) 1.1.1.1. ðặc ñiểm: • Mọi dữ liệu trong chương chình ñều là dữliệu toàn cục. • Tất cả các câu lệnh ñều nằm trong chương trình chính và tác ñộng trực tiếp vào dữ liệu toàn cục của chương trình. 1.1.1.2. Nhược ñiểm: • Nếu cùng một chuỗi các câu lệnh ñược sử dụng nhiều lần, phải copy chuỗi các câu lệnh ñó ñến nhiều vị trí khác nhau. • Vì mọi dữ liệu ñều là toàn cục, các dữ liệu này có thể bị thay ñổi ở bất cứ phần nào của chương trình. Do ñó, khi chương trình ñủ lớn, việc kiểm soát sự thay ñổi dữ liệu là rất khó khăn. Global data - statement 1 - statement 2 - … Program Biên soạn: ðặng Thanh Dũng, khoa CNTT - ðH SPKT TP.HCM 2 1.1.2. Lp trình có cu trúc (lp trình hng th tc) 1.1.2.1. ðặc ñiểm: • Chương trình ñược chia nhỏ thành các chương trình con (các thủ tục, các hàm), mỗi chương trình con thực hiện một nhiệm vụ nào ñó. • Các thủ tục này ñộc lập nhau, có dữ liệu riêng và logic riêng. • Thông tin chuyển giao giữa các thủ tục là các giá trị của ñối số. • Các thủ tục có biến ñịa phương (biến cục bộ), không một dòng lệnh nào nằm ngoài thủ tục có thể thay ñổi giá trị của các biến này. • Chương trình chính bao gồm một tập các chương trình con. • Các kiểu dữ liệu ñược dùng chung cho nhiều thủ tục khác nhau. • Ý tưởng cơ bản nhất của lập trình co cấu trúc ñó là sự trừu tượng hóa chức năng (functional abstraction). 1.1.2.2. Ưu ñiểm: • Việc triển khai phần mềm ñơn giản hơn (có thể nhiều người cùng làm). • Dễ bảo trì và sửa chữa hơn so với lập trình tuyến tính. • Chương trình sáng sủa hơn. 1.1.2.3. Nhược ñiểm: • Khi xảy ra một thay ñổi trên các kiểu dữ liệu thì cần phải thay ñổi tất cả các hàm (thủ tục) có làm việc trên các kiểu dữ liệu ñó. ðiều này ñòi hỏi nhiều thời gian ñối với những chương trình cỡ vài trăm hàm, thậm chí vài nghìn hàm. • Trong môi trường làm việc nhóm, việc thay ñổi kiểu dữ liệu và hiệu chỉnh các hàm có thể không ăn khớp nhau, dẫn ñến những sai sót trong chương trình. 1.1.3. Lp trình hng ñi tng (object oriented programming) 1.1.3.1. Sự trừu tượng hoá dữ liệu (data abstraction) • Các cấu trúc dữ liệu ñược sử dụng mà không cần ñể ý ñến các chi tiết bên trong • Ví dụ: o Kiểu số thực chấm ñộng ñã ñược trừu tượng hóa trong tất cả các ngôn ngữ lập trình. Khi sử dụng các số thực, ta không cần quan tâm ñến sự biểu diễn nhị phân cụ thể của chúng. o Kiểu ñiểm (CPoint) trong MFC. 1.1.3.2. Các ñặc ñiểm của lập trình hướng ñối tượng • Lập trình hướng ñối tượng ñược xây dựng trên nền tảng của lập trình có cấu trúc và sự trừu tượng hoá dữ liệu. • Một chương trình hướng ñối tượng ñược xây dựng xoay quanh các dữ liệu mà ta làm việc trên ñó, hơn là theo bản thân các chức năng của chương trình. • Lập trình hướng ñối tượng kết hợp dữ liệu với các thao tác trên các dữ liệu ñó ñể tạo ra một kiểu dữ liệu trừu tượng, ñược gọi là lớp. Biên soạn: ðặng Thanh Dũng, khoa CNTT - ðH SPKT TP.HCM 3 1.1.3.3. Các ưu ñiểm của Lập trình hướng ñối tượng • Dễ bảo trì và sửa chữa. • Có tính kế thừa cao. Dễ sử dụng lại các ñoạn code ñã viết trước ñó. • Dễ mở rộng các tính năng của chương trình. 1.1.3.4. Một số thuật ngữ của lập trình hướng ñối tượng 1.1.3.4.1. Lớp (class) • Lớp là một mô tả về kiểu dữ liệu trừu tượng, nó chứa các thông tin về cấu trúc dữ liệu và các thao tác của kiểu dữ liệu trừu tượng ñó. • Các kiểu dữ liệu ñược cài sẵn trong các ngôn ngữ lập trình có thể ñược xem là các lớp. 1.1.3.4.2. ðối tượng (object) • Một ñối tượng là một thể hiện của một lớp. Khi một phần tử dữ liệu ñược khai báo là phần tử của một lớp thì nó ñược gọi là một ñối tượng. Các ñối tượng còn ñược gọi là các biến thể hiện (instance variables). • Mỗi ñối tượng có riêng cho mình một tập giá trị của các thành phần dữ liệu của một lớp. • Các ñối tượng ñộc lập với nhau, những thay ñổi trên ñối tượng này không ảnh hưởng ñến ñối tượng khác. Việc gửi thông ñiệp cho ñối tượng này cũng không ảnh hưởng gì ñến ñối tượng khác. 1.1.3.4.3. Phương thức (method) • Các hàm (các thao tác) của một lớp ñược gọi là các phương thức của một lớp. • Chỉ có các phương thức của một lớp mới có thể xử lý ñược tất cả các dữ liệu của các ñối tượng của lớp ñó. 1.1.3.4.4. Thông ñiệp (message) • Các phương thức của một lớp có thể ñược gọi thông qua các ñối tượng của lớp ñó. ðiều này ñược gọi là gửi một thông ñiệp cho ñối tượng. • Các thông ñiệp này phụ thuộc vào ñối tượng, chỉ ñối tượng nào nhận ñược thông ñiệp mới phải làm việc theo thông ñiệp ñó. 1.1.3.4.5. Lớp dẫn xuất (derived class) và lớp cơ sở (base class) • ðể xây dựng môt lớp mới, người ta có thể dùng các lớp có sẵn làm nền tảng bằng cách kế thừa từ các lớp có sẵn. Khi ñó lớp mới ñược gọi là lớp con hay lớp dẫn xuất. • Lớp cũ làm nền tảng ñể xây dựng lớp mới ñược gọi là lớp cha hay lớp cơ sở. . các kỹ thuật lập trình này theo thứ tự như sau: o Lập trình tuyến tính (lập trình không cấu trúc) o Lập trình có cấu trúc (lập trình hướng thủ tục). o Lập trình hướng ñối tượng (object. ñặc ñiểm của lập trình hướng ñối tượng • Lập trình hướng ñối tượng ñược xây dựng trên nền tảng của lập trình có cấu trúc và sự trừu tượng hoá dữ liệu. • Một chương trình hướng ñối tượng ñược. Thanh Dũng, khoa CNTT - ðH SPKT TP.HCM 1 Chương 1: Giới thiệu về lập trình hướng ñối tượng (object oriented programming - oop) . 1.1. Lập trình hướng ñối tượng là gì? • ðể hiểu oop là gì, trước