OOP là từ viết tắt của cụm từ Object Oriented Programming. Nó có nghĩa là lập trình hướng đối tượng. Đây là một phương pháp lập trình dựa trên những khái niệm về đối tượng và lớp. OOP thường tập trung vào những đối tượng thao tác hơn là tập trung vào logic để có thể thao tác chúng.
OOP chính là một nền tảng quen thuộc của những mẫu thiết kế phần mềm hiện nay. OOP đặt ra những mục tiêu quản lý source code giúp gia tăng được khả năng tái sử dụng. Và quan trọng hơn hết chính là nó có thể tóm gọn được những thủ tục đã biết trước tính chất thông qua quá trình sử dụng các đối tượng này.

Đối tượng (Object)
Mỗi một đối tượng sẽ gồm có 2 thông tin là thuộc tính và phương thức;
- Thuộc tính: là những thông tin, đặc điểm của đối tượng mà những lập trình viên hướng đến.
- Phương thức: Chính là những thao tác, hành động mà đối tượng lập trình có thể thực hiện.
Lớp (Class)
Mỗi một lớp sẽ là một kiểu dữ liệu và nó sẽ bao gồm nhiều thuộc tính cũng như phương thức đã được định nghĩa ở phần trước. Nó được xem là sự trừu tượng hóa của nhiều đối tượng. Lớp hoàn toàn khác với những kiểu dữ liệu thông thường. Mỗi một lớp sẽ là một đơn vị gồm những sự kết hợp giữa phương thức và thuộc tính.
Sự khác nhau giữa đối tượng và lớp
Để dễ hiểu hơn thì hãy tưởng tượng Lớp (Class) giống như một “Khuôn đúc”, còn Đối tượng (Object) là “Sản phẩm thực tế” được đúc ra từ khuôn đó.
Ví dụ: Để nói về loài mèo, bạn có thể hiểu nó là lớp mèo có:
- Các thông tin và đặc điểm: Tên, cân nặng, màu lông, giống mèo,…
- Các hành động như: kêu, bắt chuột, trèo cây, ăn, ngủ,…
Đối tượng được hiểu ví dụ như đó chính là mèo tam thể cũng mang đặc tính của lớp mèo.
Ưu điểm của lập trình hướng đối tượng OOP là gì?
OOP được sử dụng phổ biến được xem là một trong những kỹ thuật lập trình quan trọng nhờ vào sở hữu nhiều đặc điểm nổi bật như:
- Hoàn toàn có thể được sử dụng lại code nên sẽ tiết kiệm được tài nguyên cho các lập trình viên. Giúp tối ưu và tái sử dụng code một cách hiệu quả.
- OOP mô hình chuyển hóa được các thứ phức tạo dưới dạng những cấu trúc đơn giản.
- Giúp cho quá trình sửa lỗi trở nên dễ dàng hơn. So với quá trình tìm lỗi ở nhiều vị trí khác ở trong code, thì tìm lỗi ở trong các lớp sẽ đơn giản và ít tốn thời gian hơn.
- Sở hữu tính bảo mật cao, nó có khả năng bảo vệ các thông tin thông qua việc đóng gói.
- Dựa trên nguyên lý về kế thừa trong quá trình mô tả các lớp, nó sẽ có thể giúp loại bỏ các chương trình bị lặp, dư.
- Đảm bảo rút ngắn thời gian trong quá trình xây dựng hệ thống và giúp tăng năng suất thực hiện.
- Sự xuất hiện của 2 khái niệm lớp và đối tượng được xem là đặc trưng của phương pháp lập trình hướng đối tượng. Nó đã giải quyết được những khuyết điểm của phương pháp lập trình hướng cấu trúc đã để lại. Ngoài ra 2 khái niệm còn giúp biểu diễn tốt hơn về thế giới thực trên máy tính.
Bốn Trụ cột của OOP trong Dart
Tính đóng gói (Encapsulation)
Mọi dữ liệu cũng như phương thức có liên quan sẽ được đóng gói thành các lớp để tạo sự tiện lợi cho quá trình sử dụng cũng như quản lý. Nhờ quá trình này mà mỗi lớp đều sẽ được xây dựng nhằm thực hiện một nhóm chức năng đặc trưng riêng của lớp đó. Tính đóng gói sẽ giúp ẩn đi một số các thông tin và chi tiết cài đặt nội bộ mà bên ngoài không thể nhìn thấy.
Trong trường hợp bạn nhìn thấy trạng thái đối tượng không hợp lệ là do: Nó chưa được kiểm tra tính hợp lệ hoặc những bước thực hiện không đúng quy trình hay đã bị bỏ qua. Do vậy, bạn cần lưu ý trong OOP có nguyên tắc là luôn phải khai báo những trạng thái bên trong của đối tượng là private và nó chỉ cho quy cập qua: public/protected method/property
Ví dụ : Ta thấy một viên thuốc chữa cảm. Chúng ta chỉ có thể biết nó chữa cảm sổ mũi nhức đầu và một số thành phần chính của nó. Còn cụ thể bên trong nó có hoạt chất gì thì ta hoàn toàn không biết.
Tính năng kế thừa (Inheritance)
Tính kế thừa cho phép xây dựng một lớp mới dựa vào những định nghĩa của lớp đã có. Có nghĩa là các lớp cha có thể chia sẻ những dữ liệu cũng như các phương thức cho lớp con. Các lớp con sẽ không cần thực hiện định nghĩa lại. Bên cạnh đó, nó có thể mở rộng những thành phần kế thừa cũng như bổ sung thêm những thành phần mới. Tái sử dụng mã nguồn chính là một cách tối ưu, giúp tận dụng được mã nguồn. Một số loại kế loại kế thừa phổ biến là: đơn kế thừa, đa kế thừa, và kế thừa đa cấp, hay kế thừa thứ bậc.
Ví dụ: 2 lớp Android và iPhone
Mỗi lớp trên đều sẽ đại diện cho một loại smartphone khác nhau. Tuy nhiên, chúng có những thuộc tính giống nhau như gọi điện, nhắn tin, hay chụp hình. Thay vì phải sao chép những thuộc tính này, ta có thể đặt chúng vào một lớp chung gọi chính là lớp cha. Có thể định nghĩa lớp cha – trong trường hợp này chính là Smartphone và có những lớp con kế thừa của nó, tạo ra mối quan hệ cha/con.
Tính đa hình (Polymorphism)
Tính đa hình chính là hành động có thể thực hiện được bằng nhiều cách khác. Đây lại là một tính chất có thể được nói là nó chứa đựng hầu hết sức mạnh của lập trình hướng đối tượng (OOP).
Hiểu theo một cách đơn giản, tính đa hình chính là khái niệm mà hai hoặc nhiều lớp có các phương thức giống nhau nhưng có thể được thực thi theo những cách thức khác nhau.
Ví dụ như ở phần trên có đề cập, mỗi một smartphone sẽ kế thừa từ lớp cha Smartphone nhưng nó có thể lưu trữ dữ liệu ở trên cloud theo những cách khác nhau. Cụ thể là Android lưu trữ bằng Google Drive, iPhone lưu trên iCloud.
Tính trừu tượng (Abstraction)
Tính trừu tượng được thể hiện tổng quát hóa lên một cái gì đó mà không cần chú ý đến các chi tiết bên trong. Nó sẽ không quan tâm đến các chi tiết bên trong là gì nhưng ta vẫn có thể hiểu nó ngay khi nó được nhắc đến.
Ví dụ : Khi kiểm tra thông tin trong danh sách hồ sơ thì bạn sẽ cần xem tên, ngày sinh, giới tính chư không cần phải xem thông tin chi tiết khác như chiều cao, cân nặng,…
Các từ khóa OOP quan trọng trong Dart
Khai báo Lớp và Thành phần
- class: Dùng để định nghĩa một lớp.
- abstract: Khai báo lớp trừu tượng hoặc phương thức trừu tượng.
- mixin / mixin class: Dùng để định nghĩa hoặc kết hợp các lớp mixin giúp tái sử dụng mã nguồn qua nhiều hệ thống phân cấp.
- extension: Dùng để mở rộng thêm tính năng/phương thức cho một lớp sẵn có mà không cần sửa code gốc hay tạo lớp con
Kế thừa và Triển khai
- extends: Dùng để kế thừa từ một lớp cha (đơn kế thừa).
- implements: Dùng để triển khai interface (giao diện) của một lớp khác; bắt buộc lớp con phải viết lại (override) toàn bộ thuộc tính và phương thức.
- with: Dùng để gắn (mix in) một hoặc nhiều mixin vào lớp hiện tại.
- on: Dùng trong khai báo mixin để giới hạn các lớp có thể sử dụng mixin đó (chỉ các lớp kế thừa hoặc tương thích với kiểu được chỉ định).
- @override: Chú thích báo hiệu phương thức đang ghi đè lại từ lớp cha hoặc interface.
Từ khóa liên quan đến đối tượng
- this: Tham chiếu đến chính đối tượng hiện tại của lớp.
- super: Tham chiếu đến lớp cha (dùng để gọi constructor hoặc phương thức của lớp cha).
- new: Dùng để khởi tạo đối tượng mới (trong các phiên bản Dart hiện đại, từ khóa này là tùy chọn và thường bị lược bỏ).
- factory: Dùng cho constructor nhà máy (dùng khi muốn kiểm soát việc tạo instance, ví dụ trả về instance cũ đã có hoặc trả về từ lớp con).
- static: Đánh dấu các thuộc tính hoặc phương thức thuộc về chính lớp đó thay vì thuộc về từng đối tượng cụ thể.





Khoá học lập trình game con rắn cho trẻ em




