Lập trình hướng đối tượng dành cho người mới bắt đầu
Bài viết này sẽ giúp bạn có những kiến thức tổng quan về các phương pháp lập trình và đặc biệt là những khái niệm liên quan đến lập trình hướng đối tượng, một phương pháp lập trình nền tảng cho các ngôn ngữ lập trình phổ biến hiện nay như Java, Python, C++....
Các phương pháp lập trình
Lập trình tuyến tính
Đây là phương pháp lập trình thời gian đầu. Trong lập trình tuyến tính, chương trình gồm các câu lệnh được viết tuần tự và sẽ được thực hiện từ đầu đến cuối. Lệnh nào viết trước sẽ được thực thi trước, lệnh nào viết sau sẽ thực thi sau cho đến khi kết thúc chương trình, tương tự như cách máy tính xử lý tuần tự từng yêu cầu một.
Tuy nhiên, không phải bài toán nào trong thực tế cũng đơn giản là tập hợp các yêu cầu, chỉ cần giải quyết lần lượt các yêu cầu là giải quyết được bài toán mà sẽ có những điều kiện ràng buộc cho bài toán đó, có những yêu cầu mà nếu thỏa thì mới thực hiện. Lúc đó người ta đưa vào những lệnh goto và nhãn để chương trình có thể thực hiện được.
Bạn sẽ thấy không đơn giản để hiểu được khi chương trình có thêm các yêu cầu điều kiện và nhiều xử lý phức tạp hơn. Chắc ai đã từng lập trình trên ngôn ngữ Assembly sẽ không thể nào quên được những đoạn chương trình mà in ra giấy, dò từng nhãn, từng câu lệnh goto vẫn không biết được là sai ở đâu.
Phương pháp lập trình này kém hiệu quả và người lập trình không thể kiểm soát được khi các phần mềm có nhiều xử lý và phức tạp hơn.
Lập trình cấu trúc
Lập trình cấu trúc cho phép chương trình được viết và thực thi theo cấu trúc logic dễ hiểu, dễ sửa đổi và hiệu quả hơn.
Lập trình được cấu trúc lần đầu tiên được đề xuất bởi Corrado Bohm và Guiseppe Jacopini. Hai nhà toán học này đã chứng minh rằng bất kỳ chương trình máy tính nào cũng có thể được viết chỉ với ba cấu trúc: tuần tự, điều kiện và vòng lặp.
Phương pháp lập trình cấu trúc thường đi đôi với phương pháp phân tích, thiết kế top-down. Trong đó, chương trình được tổ chức thành các hàm. Mỗi hàm đảm nhận xử lý một việc nhỏ trong toàn bộ hệ thống, và mỗi hàm này có thể chia thành các hàm nhỏ hơn. Quá trình phân chia như vậy tiếp tục diễn ra cho đến khi nhận được hàm nhỏ, đơn giản hơn. Các hàm khá độc lập với nhau, do đó có thể phân công cho nhiều nhóm, cá nhân đảm nhận viết các hàm khác nhau.Người ta gọi đó là quá trình làm mịn dần.
Dữ liệu được chuyển đổi qua lại thông qua các tham số gọi hàm. Trong đó, những dữ liệu có tính chất dùng chung cho toàn hệ thống sẽ được khai báo toàn cục (global) để nhiều hàm có thể truy cập, đọc và thay đổi giá trị chung khi cần. Mỗi hàm cũng có các biến dữ liệu riêng gọi là dữ liệu cục bộ (local).
Lập trình hướng cấu trúc rất thông dụng trong những năm 80 và đầu những năm 90, nhưng do chú trọng đến xử lý chức năng, thuật toán mà ít quan tâm đến dữ liệu nên lập trong nhiều trường hợp cần hiểu và xử lý dữ liệu một cách linh động, lập trình cấu trúc bộc lộ những hạn chế và những nhược điểm. Do đó, dần dần lập trình hướng cấu trúc đã bị thay thế bằng phương pháp lập trình hướng đối tượng.
Lập trình hướng đối tượng
Lập trình hướng đối tượng là kiểu lập trình nhằm vào sự tương tác giữa các đối tượng. Mỗi đối tượng có những thuộc tính xác định các đặc điểm, những phương thức xác định những chức năng của đối tượng. Chúng tạo thành cấu trúc của đối tượng.
- Tập trung vào dữ liệu thay cho các phương thức
- Chương trình được chia thành các đối tượng độc lập.
- Cấu trúc dữ liệu được thiết kế sao cho đặc tả được các đối tượng.
- Dữ liệu được che giấu, bao bọc.
- Các đối tượng trao đổi với nhau thông qua các phương thức
Một số khái niệm trong lập trình hướng đối tượng
Đối tượng
Trong thế giới thực, đối tượng là những thực thể tồn tại có trạng thái và hành vi.
- Ví dụ 1: con người (sinh viên Nguyễn Văn An, nhân viên Trần Thị Thảo), đồ vật (phòng học C41, máy in Laser Jet 4300), chứng từ (hóa đơn HD01, đơn đặt hàng DDH_14022008_01).
- Ví dụ 2: Đối tượng là một chiếc xe hơi cụ thể với các thông tin về chiếc xe:
Biển số xe
Hiệu xe
Màu sơn
Hãng sản xuất
Năm sản xuất
Tiếp cận hướng đối tượng: Là kỹ thuật cho phép biểu diễn tự nhiên các đối tượng trong thực tế với các đối tượng bên trong chương trình
Lớp đối tượng
Một lớp được hiểu là một kiểu dữ liệu đặc biệt bao gồm các thuộc tính và các phương thức được định nghĩa từ trước. Đây là sự trừu tượng hóa của đối tượng. Một đối tượng sẽ được xác lập khi nó được thực thể hóa từ một lớp. Khác với kiểu dữ liệu thông thường, một lớp là một đơn vị (trừu tượng) bao gồm sự kết hợp giữa các phương thức và các thuộc tính.
>>> Phân biệt giữa đối tượng (object) và lớp đối tượng (class):
Đối tượng (object): có trạng thái và hành vi.
Lớp đối tượng (class): có thể được định nghĩa như là một template mô tả trạng thái và hành vi mà loại đối tượng của lớp hỗ trợ.
Một đối tượng là một thực thể (instance) của một lớp.
Trừu tượng
Tính trừu tượng Abstraction: Từ những đối tượng giống nhau có thể trừu tượng hóa thành một lớp.
Loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình.
Đóng gói dữ liệu
Tính đóng gói (Encapsulation): Mỗi lớp được xây dựng để thực hiện một nhóm chức năng đặc trưng của riêng lớp đó
Tính đóng gói cho phép dấu thông tin của đối tượng bằng cách kết hợp thông tin và các phương thức liên quan đến thông tin trong đối tượng.
Kế thừa
Tính kế thừa (Inheritance): Cho phép xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã có.
- Lớp đã có gọi là lớp Cha, lớp mới phát sinh gọi là lớp Con
- Lớp Con kế thừa tất cả các thành phần của lớp Cha, có thể mở rộng các thành phần kế thừa và bổ sung thêm các thành phần mới.
Đa hình
Tính đa hình (Polymorphism): cùng hành vi thức có thể được sử dụng cho những mục đích khác nhau.
Ví dụ: cùng một hành vi là lái xe (drive()) nhưng mỗi xe hơi sẽ có những cách lái khác nhau.
Các ưu điểm của lập trình hướng đối tượng
Những ưu điểm chính của lập trình hướng đối tượng:
- Thông qua nguyên lý kế thừa, trong quá trình mô tả các lớp có thể loại bỏ những chương trình bị lặp, dư và có thể mở rộng khả năng sử dụng các lớp mà không cần thực hiện lại.
- Đối tượng sẽ trao đổi với nhau về thiết kế và lập trình được dựng sẵn và phải được thực hiện theo quy trình nhất định chứ không phải dựa vào kinh nghiệm và kỹ thuật như trước. Điều này đảm bảo rút ngắn thời gian xây dựng hệ thống và tăng năng suất thực hiện.
- Nguyên lý đóng gói và che dấu thông tin giúp người lập trình bảo vệ lập trình an toàn hơn và không bị thay đổi bởi những lập trình khác.
- Tiếp cận các đối tượng trọng tâm để thiết kế, xây dựng mô hình chi tiết có liên quan chặt chẽ đến các dạng cài đặt.
- Những hệ thống hướng đối tượng ngày càng được mở rộng và được nâng cấp thành những hệ thống lớn hơn.
- Truyền thông và trao đổi thông tin với các đối tượng giúp cho việc mô tả giao diện trở nên đơn giản hơn với các hệ thống bên ngoài.