Chương 1. GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Lập trình hướng đối tượng (Object-Oriented Programming-OOP), hay còn gọi là lập trình định hướng đối tượng, là kỹ thuật lập trình hỗ trợ công nghệ đối tượng. OOP được xem là là cách tiếp cận mới, hiệu quả hơn trong việc giải quyết các vấn đề. Nó giúp tăng năng suất, đơn giản hoá độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn.
Mục đích của OOP là giúp người lập trình giảm nhẹ các thao tác viết mã, cho phép tạo ra các ứng dụng mà các yếu tố bên ngoài có thể tương tác với các ứng dụng đó như là tương tác với các đối tượng vật lý. Lập trình hướng đối tượng dễ học bởi nó dựa trên một vài khái niệm đơn giản nhưng hết sức mạnh. Trước khi tìm hiểu về kỹ thuật lập trình hướng đối tượng là gì chúng ta hãy tìm hiểu về lịch sử của các kỹ thuật lập trình. Tổng quan về các kỹ thuật lập trình 1.
Lập trình tuyến tính Lập trình tuyến tính thường dùng để viết các chương trình nhỏ và đơn giản trong đó chỉ gồm một chương trình chính. Chương trình chính gồm một dãy tuần tự các câu lệnh dùng để thay đổi dữ liệu. Các ngôn ngữ lập trình thời kỳ này được thiết kế để giải các bài tính toán tương đối đơn giản. Phần lớn các chương trình này ngắn, ít hơn 100 dòng.
Cũng theo thời gian các ngôn ngữ này không đáp ứng được việc triển khai phần mềm do các khuyết điểm của lập trình tuyến tính: - Các ngôn ngữ này không có khả năng sử dụng lại các đoạn mã - Không có khả năng kiểm soát phạm vi truy xuất của dữ liệu - Mọi dữ liệu trong chương trình đều là toàn cục (global) Hình 1.1 Lập trình tuyến tính 1. Lập trình cấu trúc Lập trình cấu trúc ra đời vào những cuối năm 1970. Các chương trình cấu trúc thường được tổ chức theo công việc mà chúng thường thực hiện. Chương trình được chia nhỏ thành các chương trình con riêng rẽ, mỗi chương trình con thực hiện một Trang 6 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG nhiệm vụ.
Các chương trình con này thường được gọi là hàm hoặc thủ tục. Các hàm thường độc lập với nhau, mỗi hàm có dữ liệu riêng. Thông tin được chuyển giao giữa các hàm thông qua các tham số và các biến toàn cục. Các biến cục bộ trong hàm thì không thể truy xuất bởi hàm khác.
Ở lập trình cấu trúc đã bắt đẫu xuất hiện khái niệm trừu tượng hoá (Abstraction). Sự trừu tượng hoá có thể xem như khả năng quan sát các sự vật mà không quan tâm tới chi tiết bên trong nó. Trong một chương trình có cấu trúc ta chỉ quan tâm xem hàm hoặc thủ tục đó là được gì, cần tham số gì chứ không quan tâm tới việc hàm đó thực hiện các lệnh gì. Các ngôn ngữ hiện nay đều hỗ trợ kỹ thuật lập trình có cấu trúc bởi các chương trình có cấu trúc dễ viết, dễ bảo dưỡng hơn so với chương trình không có cấu trúc.
Một số ngôn ngữ cấu trúc điển hình là C, Pascal, Foxpro… Hình 1.2 Lập trình cấu trúc 1. Lập trình mô đun hoá Với lập trình mô đun, các thủ tục có chung một chức năng được nhóm lại với nhau thành các môđun riêng lẻ. Lúc này một chương trình không chỉ là một phần đơn mà bây giờ nó được chia thành một số phần nhỏ hơn. Các phần này tương tác với nhau thông qua việc gọi thủ tục.
Trang 7 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Hình 1.3 Lập trình mô đun hóa Mỗi môđun có thể có dữ liệu của riêng nó. Điều này cho phép mỗi môđun quản lý một dữ liệu trong nó, dữ liệu này được sửa đổi bởi việc gọi các thủ tục. Nhược điểm của lập trình hướng thủ tục Một hệ thống phần mềm theo cách tiếp cận lập trình truyền thống được xem như là dãy các công việc cần thực hiện như đọc dữ liệu, tính toán, xử lý, lập báo cáo và in ấn kết quả … Mỗi công việc đó sẽ được thực hiện bằng một hàm hoặc thủ tục nhất định. Đó chính là các tiếp cận lập trình hướng thủ tục.
Ta có thể thấy trọng tâm của cách tiếp cận này là các hàm chức năng. Lập trình hướng thủ tục sử dụng kỹ thuật phân ra hàm chức năng theo cách tiếp cận từ trên xuống để tạo ra cấu trúc phân cấp. Các ngôn ngữ lập trình bậc cao như COBOL, FORTRAN, PASCAL, C. là những ngôn ngữ lập trình hướng thủ tục.
Những nhược điểm chính của lập trình hướng thủ tục là: Chương trình khó kiểm soát và khó khăn trong việc bổ sung, nâng cấp. Chương trình được xây dựng theo cách tiếp cận hướng thủ tục thực chất là danh sách các câu lệnh mà theo đó máy tính cần thực hiện. Danh sách các lệnh đó được tổ chức thành từng nhóm theo đơn vị cấu trúc của ngôn ngữ lập trình và được gọi là hàm/thủ tục. Trong chương trình có nhiều hàm/thủ tục, thường thì có nhiều thành phần dữ liệu quan trọng sẽ được khai báo là toàn cục (global) để các hàm có thể truy nhập, đọc và làm thay đổi giá trị của biến toàn cục.
Điều này làm cho chương trình khó kiểm soát, nhất là đối với các chương trình lớn, phức tạp thì vấn đề càng trở nên khó khăn hơn. Khi ta Trang 8 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG muốn thay đổi, bổ sung cấu trúc dữ liệu dùng chung cho một số hàm/thủ tục thì phải thay đổi hầu như tất cả các hàm/thủ tục liên quan tới dữ liệu đó. Chương trình chưa loại bỏ được các đoạn mã lặp lại. Mô hình được xây dựng theo cách hướng thủ tục không mô tả đầy đủ, trung thực hệ thống trong thực tế.
Phương pháp tổ chức hướng thủ tục đặt trọng tâm vào hàm là hướng tới hoạt động sẽ không thực sự tương ứng với các thực thể trong hệ thống của thế giới thực. Lập trình hướng đối tượng Tiếp cận hướng đối tượng Trong thế giới thực xung quanh chúng ta là những đối tượng, đó là những thực thể có mối quan hệ với nhau. Ví dụ các phòng trong một công ty kinh doanh được xem như những đối tượng. Các phòng ở đây có thể là: phòng quản ký, phòng bán hàng, phòng kế toán, phòng tiếp thị….
Mỗi phòng ngoài những cán bộ đảm nhiệm công việc cụ thể, còn có những dữ liệu riêng về thông tin nhân viên, doanh số bán hàng, hoặc các dữ liệu khác có liên quan tới bộ phận đó. Việc phân chia các phòng chức năng trong công ty sẽ tạo điều kiện dễ dàng cho việc quản lý. Mỗi nhân viên trong phòng sẽ điều khiển và xử lý dữ liệu của phòng đó. Ví dụ phòng kế toán phụ trách về lương bổng của nhân viên trong công ty.
Nếu bạn đang ở bộ phận tiếp thị và cần thông tin chi tiết về lương của đơn vị mình thì bạn gửi yêu cầu về phòng kế toán. Với cách làm việc này bạn đảm bảo là chỉ có nhân viên của bộ phận kế toán được quyền truy cập dữ liệu và cung cấp thông tin cho bạn. Điều này cũng cho thấy rằng, không có người nào thuộc bộ phận khác có thể truy cập và thay đổi dữ liệu của bộ phận kế toán. Khái niệm như thế về đối tượng hầu như có thể được mở rộng trong mọi lĩnh vực đời sống xã hội và hơn thế nữa – đối với việc tổ chức chương trình.
Mọi ứng dụng có thể được định nghĩa như một tập các thực thể hoặc các đối tượng, sao cho quá trình tái tạo những suy nghĩ của chúng ta là gần sát với thế giới thực. Lập trình hướng đối tượng là phương pháp lập trình lấy đối tượng làm nền tảng để xây dựng thuật giải, xây dựng chương trình. Đối tượng được xây dựng trên cơ sở gắn cấu trúc dữ liệu với các phương thức (hàm/thủ tục) sẽ thể hiện được đúng cách mà chúng ta suy nghĩ, bao quát về thế giới thực. Lập trình hướng đối tượng cho phép ta kết hợp những tri thức bao quát về các quá trình với những khái niệm trừu tượng được sử dụng trong máy tính.
Điểm căn bản của phương pháp lập trình hướng đối tượng là thiết kế xoay quanh dữ liệu của hệ thống. Nghĩa là các thao tác xử lý của hệ thống được gắn liền với dữ liệu và như vậy khi có sự thay đổi cấu trúc dữ liệu thì chỉ ảnh hưởng tới một số ít các phương thức xử lý liên quan. Trang 9 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Lập trình hướng đối tượng không cho phép dữ liệu chuyển động tự do trong hệ thống. Dữ liệu được gắn chặt với từng phương thức thành các vùng riêng mà các phương thức đó tác động lên và nó được bảo vệ cấm việc truy nhập tuỳ tiện từ bên ngoài.
Lập trình hướng đối tượng cho phép phân tính bài toán thành lập các thực thể được gọi là các đối tượng và sau đó xây dựng các dữ liệu cũng với các phương thức xung quanh các đối tượng đó. Lập trình OOP cho phép bạn tạo đối tượng, các đối tượng này được lưu trữ trong các thư viện và được sử dụng lại trong một công việc khác. Nó tiết kiệm thời gian cho người lập trình, nhiều công ty phần mềm xây dựng các thư viện này và bán ra thị trường, từ đó giúp cho người lập trình dễ dàng tạo ra các ngôn ngữ lập trình hướng đối tượng sử dụng "OPC" (Other People's Code). OOP cho phép bạn định nghĩa đối tượng trong đó bao gồm cấu trúc dữ liệu và các phương thức xử lý dữ liệu.
Một phương thức có thể được định nghĩa như là một chương trình có cấu trúc nhỏ bên trong đối tượng. Các phương thức này xác định đối tượng sẽ hoạt động ra sao. Một lớp lại định nghĩa một đối tượng, khái niệm đóng kín dữ liệu và phương thức trong một đối tượng được gọi là sự đóng kín hay đóng gói. Lập trình hướng đối tượng bao gồm kỹ thuật lập trình cấu trúc và cấu trúc dữ liệu nâng cao.
Nó giúp cho người phát triển có thể kết hợp dữ liệu và các phương thức vào một thành phần gọi là đối tượng. Nói cách khác, một đối tượng bao gồm mọi thứ cần thiết cho việc thực thi một tập hợp các hàm, bao gồm cả dữ liệu.4 Lập trình hướng đối tượng Lập trình hướng đối tượng là kỹ thuật lập trình mới. Nó được thiết kế nhằm tiết kiệm thời gian và tiền bạc thông qua việc cho phép người lập trình sử dụng lại các đoạn mã chương trình. Khả năng tái sử dụng này được hoàn thiện qua tính kế thừa.