Quá trình tiến hóa của lập trình hướng đối tượng năm 2024
Chúng ta đang sử dụng các ngôn ngữ lập trình để giải quyết các vấn đề trong cuộc sống hàng ngày. Vì thế sẽ không lý gì chúng ta lại không thể mô hình các vấn đề này sang các ngôn ngữ lập trình hướng đối tượng. Đây chính là nơi mà lập trình hướng đối tượng (Object-oriented programming) phát huy vai trò của nó. Show 1. OOP là gìOOP là viết tắt của Object-oriented programming (lập trình hướng đối tượng). OOP là một mô hình lập trình dựa trên khái niệm Object (đối tượng), mà trong đó thường chứa 2 thành phần: data và code.
2. Các thành phần chính trong OOPTrong OOP sẽ bao gồm 2 thành phần chính là Class và Object: 2.1 Class (lớp) trong OOP:Class (lớp) trong OOP là các template hay cấu trúc để phục vụ cho việc xây dựng nên các Object (đối tượng). Trong đó sẽ bao gồm một tập hợp các Attribute và Methods đẻ định nghĩa các đặc tính và hành vi cho các Object.
Ví dụ ta có Class Person với các attributes là: Họ tên, tuổi tác, nghề nghiệp và methods là: ăn, ngủ, đi làm. 2.2 Object (đối tượng) trong OOP:Object (đối tượng) là một instance của Class, có thể hiểu là một hiện thực hay ví dụ cụ thể của một Class. Vì thế Object khi khởi tạo sẽ mang đầy đủ thông tin cụ thể mà Class đã định nghĩa. 3. 4 tính chất cơ bản trong OOP3.1 Encapsulation (tính đóng gói)Encapsulation là một kỹ thuật lập trình nền tảng được sử dụng để gom nhóm các attributes và methods cần thiết vào một Object. Kỹ thuật này còn được biết với tên gọi khác là Data/Information Hiding. Data Hiding trong lập trình hướng đối tượng OOP thường dùng để bảo vệ các thành phần bên trong của Object (thường gọi là private). Các thành phần bên ngoài sẽ không được can thiệp và sử dụng các thành phần này trực tiếp mà phải thông qua các phương thức công khai (public). 3.1.1 Ví dụ cho EncapsulationTa có Class Account bao gồm 2 attributes cơ bản là
Từ đó phía bên ngoài chỉ có thể sử dụng được các public methods trên. Bên ngoài cũng không cần biết các method trong Account chạy như thế nào. Tương lai nếu logic các method trên thay đổi cũng không ảnh hưởng. 3.2 Abstraction (tính trừu tượng)Abstraction trong lập trình hướng đối tượng OOP là một kỹ thuật lập trình dùng để đơn giản hoá cấu trúc của chương trình, tập trung vào những phần quan trọng và có ý nghĩa. Những phần phức tạp sẽ được loại bỏ hay ẩn giấu đi (hiding). 3.2.1 Ví dụ cho AbstractionChúng ta có class UIElement đại diện cho tất cả các thành phần trong UI (User Interface - giao diện người dùng). Mỗi element có phương thức Vấn đề ở đây là phương thức render được viết như thế nào trong class UIElement?! Không thể viết được!! Vì ta không biết element này là Button, hay Link, hay Image,... Vì thế Các element cụ thể sẽ kế thừa class UIElement và viết logic hiển thị cho bản thân chúng. 3.3 Inheritance (tính kế thừa)Inheritance trong lập trình hướng đối tượng OOP là một cơ chế xây dựng class mới dựa trên các class đã có. Các class kế thừa sẽ bao gồm toàn bộ các attributes và methods từ base class (lớp cơ sở) hay parent class (lớp cha). Sử dụng Inheritance sẽ giúp các nhà phát triển tái sử dụng được các class đã có, giảm thiểu các duplication (sự trùng lặp) không cần thiết. Inheritance trong OOP bao gồm 2 loại chính:
Đa số các ngôn ngữ lập trình hướng đối tượng OOP chỉ hỗ trợ Single Inheritance. 3.3.1 "Is-a" relationship trong Single Inheritance"Is-a" relationship là một phương hướng để chúng ta có thể xác định khi nào nên sử dụng kế thừa trong OOP. Ví dụ một số trường hợp cho "is-a" relationship:
3.3.2 "Has-a" relationship"Has-a" relationship là một kỹ thuật nhằm thay thế cho kế thừa. Thay vì kế thừa, chúng ta sẽ phối hợp hay tổng hợp các class hiện có để tạo thành các class lớn hơn. Trên thực tế, "Has-a" relationship giúp chúng ta vượt qua giới hạn Single Inheritance và thêm linh hoạt cho việc thiết kế các class trong OOP. Kỹ thuật này thường được biết với tên khác là Composition hoặc Aggregation. Ví dụ một số trường hợp cho "Has-a" relationship:
3.4 Polymorphism (tính đa hình)Polymorphism trong lập trình hướng đối tượng OOP cho phép một Object có thể có nhiều hình dạng và hành vi khác nhau. Bản chất từ Polymorphism cấu tạo từ 2 chữ Hy Lạp: "poly" nghĩa là nhiều và "morph" nghĩa là hình dạng. Từ đó Polymorphism có thể tạm dịch là "đa hình". Polymorphism trong OOP được chia làm 2 loại:
Sự khác biệt lớn nhất giữa Static và Dynamic Polymorphism là: Static Polymorphism được xử lý tại thời điểm biên dịch (compile-time). Dynamic Polymorphism được xử lý tại thời điểm chạy chương trình (runtime). 4. Vì sao nên học OOPCó một sự thật hiển nhiên rằng dù cho chúng ta có đang sử dụng ngôn ngữ lập trình OOP hay không thì việc nắm vững OOP vẫn luôn cần thiết. |