Class trong lập trình hướng đối tượng là gì

OOP [viết tắt của Object Oriented Programming] – lập trình hướng đối tượng là một phương pháp lập trình dựa trên khái niệm về lớp và đối tượng. OOP tập trung vào các đối tượng thao tác hơn là logic để thao tác chúng, giúp code dễ quản lý, tái sử dụng được và dễ bảo trì.

Bất kỳ developer nào muốn đi trên con đường lập trình cũng đều phải biết về OOP.

Đọc bài viết này để biết:

  • OOP là gì? Đối tượng và lớp trong OOP là gì?
  • Các đặc tính cơ bản của OOP là gì?
  • Các ngôn ngữ OOP phổ biến và tài liệu tham khảo

Tham khảo việc làm OOP Developer trên ITviec.

Lập trình hướng đối tượng [OOP] là gì? OOP được dùng để làm gì?

OOP [viết tắt của Object Oriented Programming] – lập trình hướng đối tượng là một phương pháp lập trình dựa trên khái niệm về lớp và đối tượng. OOP tập trung vào các đối tượng thao tác hơn là logic để thao tác chúng.

OOP là nền tảng của các design pattern hiện nay.

Đọc thêm: Design pattern là gì? Vì sao nên học design pattern?

Mục tiêu của OOP là tối ưu việc quản lý source code, giúp tăng khả năng tái sử dụng và quan trọng hơn hết là giúp tóm gọn các thủ tục đã biết trước tính chất thông qua việc sử dụng các đối tượng.

Đối tượng [Object] và Lớp [Class] trong OOP là gì?

Đối tượng [Object]

Đối tượng trong OOP bao gồm 2 thành phần chính:

  • Thuộc tính [Attribute]: là những thông tin, đặc điểm của đối tượng
  • Phương thức [Method]: là những hành vi mà đối tượng có thể thực hiện

Để dễ hình dung, ta có một ví dụ thực tế về đối tượng là smartphone. Đối tượng này sẽ có:

  • Thuộc tính: màu sắc, bộ nhớ, hệ điều hành…
  • Phương thức: gọi điện, chụp ảnh, nhắn tin, ghi âm…

Lớp [Class]

Lớp là sự trừu tượng hóa của đối tượng. Những đối tượng có những đặc tính tương tự nhau sẽ được tập hợp thành một lớp. Lớp cũng sẽ bao gồm 2 thông tin là thuộc tính và phương thức.

Một đối tượng sẽ được xem là một thực thể của lớp.

Tiếp nối ví dụ ở phần đối tượng [object] phía trên, ta có lớp [class] smartphone gồm 2 thành phần:

  • Thuộc tính: màu sắc, bộ nhớ, hệ điều hành…
  • Phương thức: gọi điện, chụp ảnh, nhắn tin, ghi âm…

Các đối tượng của lớp này có thể là: iPhone, Samsung, Oppo, Huawei…

Ưu điểm của lập trình hướng đối tượng OOP

  • OOP mô hình hóa những thứ phức tạp dưới dạng cấu trúc đơn giản.
  • Code OOP có thể sử dụng lại, giúp tiết kiệm tài nguyên.
  • Giúp sửa lỗi dễ dàng hơn. So với việc tìm lỗi ở nhiều vị trí trong code thì tìm lỗi trong các lớp [được cấu trúc từ trước] đơn giản và ít mất thời gian hơn.
  • Có tính bảo mật cao, bảo vệ thông tin thông qua đóng gói.
  • Dễ mở rộng dự án.

4 đặc tính cơ bản của OOP

Tính đóng gói [Encapsulation]

Tính đóng gói cho phép che giấu thông tin và những tính chất xử lý bên trong của đối tượng. Các đối tượng khác không thể tác động trực tiếp đến dữ liệu bên trong và làm thay đổi trạng thái của đối tượng mà bắt buộc phải thông qua các phương thức công khai do đối tượng đó cung cấp.

Tính chất này giúp tăng tính bảo mật cho đối tượng và tránh tình trạng dữ liệu bị hư hỏng ngoài ý muốn.

Tính kế thừa [Inheritance]

Đây là tính chất được sử dụng khá nhiều. Tính kế thừa cho phép xây dựng một lớp mới [lớp Con], kế thừa và tái sử dụng các thuộc tính, phương thức dựa trên lớp cũ [lớp Cha] đã có trước đó. 

Các lớp Con kế thừa toàn bộ thành phần của lớp Cha và không cần phải định nghĩa lại. Lớp Con có thể mở rộng các thành phần kế thừa hoặc bổ sung những thành phần mới.

Ví dụ: 

  • Lớp Cha là smartphone, có các thuộc tính: màu sắc, bộ nhớ, hệ điều hành…
  • Các lớp Con là iPhone, Samsung, Oppo cũng có các thuộc tính: màu sắc, bộ nhớ, hệ điều hành…

Tính đa hình [Polymorphism]

Tính đa hình trong lập trình OOP cho phép các đối tượng khác nhau thực thi chức năng giống nhau theo những cách khác nhau.

Ví dụ: 

  • Ở lớp smartphone, mỗi một dòng máy đều kế thừa các thành phần của lớp cha nhưng iPhone chạy trên hệ điều hành iOS, còn Samsung lại chạy trên hệ điều hành Android.
  • Chó và mèo cùng nghe mệnh lệnh “kêu đi” từ người chủ. Chó sẽ “gâu gâu” còn mèo lại kêu “meo meo”.

Tính trừu tượng [Abstraction]

Tính trừu tượng giúp loại bỏ những thứ phức tạp, không cần thiết của đối tượng và chỉ tập trung vào những gì cốt lõi, quan trọng.

Ví dụ: Quản lý nhân viên thì chỉ cần quan tâm đến những thông tin như:

  • Họ tên
  • Ngày sinh
  • Giới tính

Chứ không cần phải quản lý thêm thông tin về:

  • Chiều cao
  • Cân nặng
  • Sở thích
  • Màu da

Những ngôn ngữ OOP phổ biến nhất

Java

Java là ngôn ngữ lập trình hướng đối tượng [OOP], đa mục đích và độc lập nền tảng. Thay vì biên dịch mã nguồn thành mã máy trên nền tảng cụ thể, code Java được biên dịch thành bytecode – một định dạng trung gian. Bytecode sau đó sẽ được chạy bởi môi trường thực thi [runtime environment].

Code Java “viết một lần, chạy mọi nơi” nên khá lý tưởng cho những người mới tìm hiểu.

Tham khảo: 12 tài liệu học lập trình Java chọn lọc

C++

Là một ngôn ngữ lập trình hướng đối tượng được phát triển bởi Bjarne Stroustrup nhưng C++ mang cả 2 phong cách: lập trình hướng cấu trúc giống C và có thêm phong cách hướng đối tượng. Nếu đã quen với lập trình hướng cấu trúc trước đó thì việc học C++ không phải là điều quá khó khăn.

Tham khảo: Tài liệu học C++ hoàn toàn miễn phí

PHP

PHP là ngôn ngữ lập trình đa mục đích, được rất nhiều Developer sử dụng. Đây là ngôn ngữ kịch bản mã nguồn mở, chạy ở phía server và được dùng để tạo ra các ứng dụng web.

Tham khảo: 10+ sách lập trình PHP hay nhất mọi cấp độ

JavaScript

JavaScript là ngôn ngữ lập trình được sử dụng trong việc xây dựng các website có tính tương tác cao, với mức độ phổ biến được xếp hạng bậc nhất. Học JavaScript khá dễ dàng và đặc biệt phù hợp cho những developer mới bắt đầu học lập trình.

Tham khảo: 20+ tài liệu học JavaScript hay nhất hiện nay

Python

Python là ngôn ngữ lập trình hướng đối tượng bậc cao, dùng để phát triển website và nhiều ứng dụng khác nhau. Python được tạo ra bởi Guido van Rossum và được phát triển trong một dự án mã mở [open source].

Với cú pháp cực kì đơn giản và thanh lịch, Python là lựa chọn hoàn hảo cho những ai lần đầu tiên học lập trình. 

Tham khảo: 20 tài liệu lập trình Python từ cơ bản đến nâng cao

Bạn thấy bài viết hay và cần thiết với nhiều người? Đừng ngại nhấn nút Share bên dưới nhé.

Và đừng quên tham khảo việc làm OOP Developer trên ITviec.

Trong lập trình hướng đối tượng, lớp [class] là một chương trình-mã-khuôn mẫu có thể mở rộng được để tạo các đối tượng, cung cấp giá trị khởi tạo cho trạng thái [biến thành viên] và hiện thực của hàn vi [hàm thành viên hay phương thức].[1][2] Trong nhiều ngôn ngữ, tên lớp được dùng như là tên của lớp [chính bản thân khuôn mẫu], tên của hàm tạo mặc định của lớp [một chương trình con tạo ra các đối tượng], và như kiểu của đối tượng được sinh ra bằng cách khởi tạo lớp; những khái niệm riêng lẽ này dễ dàng được kết hợp với nhau.[2]

Khi một đối tượng được tạo ra bởi hàm tạo của lớp, đối tượng kết quả được gọi là một thực thể của lớp, và biến thành viên cụ thể của đối tượng được gọi là biến thực thể [instance variable], để tương phản với biến lớp [class variable] vốn được chia sẻ giữa các lớp.

Trong một số ngôn ngữ, lớp chỉ là tính năng khi biên dịch [lớp mới không thể được khai báo trong thời gian chạy], trong khi ở các ngôn ngữ khác lớp là công dân hạng nhất, và nói chung là các đối tượng [điển hình là kiểu Class hay tương tự]. Ở các ngôn ngữ đó, một lớp mà tạo ra các lớp được gọi là siêu lớp [metaclass].

Mục lục

  • 1 Lớp và kiểu
  • 2 Thiết kế và hiện thực
    • 2.1 Cấu trúc
    • 2.2 Hành vi
    • 2.3 Khái niệm giao diện lớp
      • 2.3.1 Ví dụ
    • 2.4 Khả năng truy cập thành viên
  • 3 Các mối quan hệ giữa các lớp
    • 3.1 Sự hợp thành
    • 3.2 Sự phân cấp
      • 3.2.1 Định nghĩa lớp con
  • 4 Phân loại lớp
    • 4.1 Trừu tượng và cụ thể
    • 4.2 Cục bộ và nội bộ
    • 4.3 Siêu lớp
    • 4.4 Non-subclassable
    • 4.5 Mixins
    • 4.6 Partial
    • 4.7 Không khởi tạo
    • 4.8 Không tên
  • 5 Lợi ích
  • 6 Thể hiện trong thời gian chạy
  • 7 Xem thêm
  • 8 Ghi chú
  • 9 Tham khảo
  • 10 Đọc thêm
  • 11 Liên kết ngoài

Lớp và kiểuSửa đổi

Trong trường hợp ngẫu nhiên, người ta thường tham khảo đến "lớp" của một đối tượng, nhưng trong nghĩa hẹp, đối tượng có kiểu: giao diện, kiểu của các biến thành viên, chữ kí của hàm thành viên [phương thức], và đặc tính. Đồng thời, một lớp các một hiện thực [cụ thể là hiện thực các phương thức], và có thể tạo ra đối tượng của một kiểu nhất định, với một hiện thực nhất định.[3] Về mặt lý thuyết kiểu, lớp là một hiện thực—‌một cấu trúc dữ liệu cụ thể và tập hợp của các chương trình con—‌ trong khi kiểu là một giao diện. Các lớp khác nhau [cụ thể] có thể sinh ra các đối tượng có cùng kiểu [trừu tượng] [tùy thuộc vào hệ thống loại]; ví dụ như, kiểu Stack có thể được hiện thực bởi hai lớp– SmallStack [nhanh cho ngăn xếp nhỏ, nhưng khả năng mở rộng kém] và ScalableStack [khả năng mở rộng tốt nhưng phí tổn cao cho ngăn xếp nhỏ]. Tương tự, một lớp nhất định có thể có nhiều hàm tạo khác nhau.

Kiểu thường được thể hiện bằng danh từ, ví dụ như người, địa điểm hay vật, hoặc cái gì được chỉ định, và một lớp thể hiện một hiện thực của những thứ đó. Ví dụ, một kiểu Chuối thể hiện đặc tính và tính năng của chuối nói chung, trong khi lớp Chuối ACB và Chuối XYZ thể hiện cách sản xuất chuối [như, nhà cung cấp chuối hay cấu trúc dữ liệu và hàm để thể hiện và vẽ trái chuối trong video game]. Lớp Chuối ACB có thể sản xuất chuối đặc biệt: thực thể của lớp Chuối ACB sẽ là đối tượng có kiểu Chuối. Thông thường chỉ duy nhất một hiện thực của kiểu, trong trường hợp này tên lớp thường được đồng nhất với tên kiểu.

Thiết kế và hiện thựcSửa đổi

Lớp được tạo thành từ các phần tử cấu trúc và hành vi.[4] Ngôn ngữ lập trình mà bao gồm lớp như hàm tạo lập trình thường cung cấp hỗ trợ cho nhiều tính năng liên quan đến lớp, và cú pháp cần thiết.

Cấu trúcSửa đổi

Kí hiệu UML cho lớp

Một lớp chứa các mô tả trường dữ liệu [data], hay đặc tính [property], trường [field], thành viên dữ liệu [member variable], hay thuộc tính [attribute]. Thường thì các trường kiểu và tên sẽ được gắn với trạng thái biến trong thời gian chạy chương trình; các biến trạng thái này thuộc về lớp hay thực thể của lớp.

Hành viSửa đổi

Bài chi tiết: Phương thức [lập trình máy tính]

Hành vi của lớp hay thực thể của nó được định nghĩa bằng cách sử dụng phương thức. Phương thức là chương trình con với khả năng hoạt động trên đối tượng hoặc lớp.

Khái niệm giao diện lớpSửa đổi

Bài chi tiết: Giao diện [điện toán]

Mỗi lớp hiện thực [implement, hay nhận ra] một giao diện bằng cách cung cấp cấu trúc và hành vi. Cấu trúc bao gồm dữ liệu và trạng thái, và hành vi gồm đoạn mã để diễn tả cách phương thức được hiện thực.[5]

Ví dụSửa đổi

Khả năng truy cập thành viênSửa đổi

"thành viên riêng tư [private member]" đổi hướng tới đây. Đối với cách dùng khác, xem Private members club. Đối với and, xem Private member's bill.

Xem thêm thông tin: Che giấu thông tin

Đây là một số tập chỉ định truy cập thông dụng:[6]

  • Riêng tư [private, hay class-private] hạn chế quyền truy cập cho chỉ trong nội bộ lớp. Chỉ có phương thức là thành phần của cùng lớp mới có thể truy cập thanh viên private.
  • Được bảo vệ [protected, hay class-protected] cho phép chính lớp đó và các lớp con của nó truy cập tới thành viên.
  • Công cộng [public] có nghĩa bất cứ đoạn mã nào cũng có thể truy cập thành viên đó thông qua tên của nó.

Các mối quan hệ giữa các lớpSửa đổi

Ngoài thiết kế các lớp độc lập, ngôn ngữ lập trình còn hỗ trợ nhiều thiết kế lớp nâng cao dựa trên quan hệ giữa các lớp. Khả năng thiết kế mối quan hệ giữa các lớp thường được cung cấp là sự hợp thành and sự phân cấp.

Sự hợp thànhSửa đổi

Sự phân cấpSửa đổi

Định nghĩa lớp conSửa đổi

Phân loại lớpSửa đổi

Có nhiều phân loại lớp, một số có thể trùng lắp nhau.

Trừu tượng và cụ thểSửa đổi

Bài chi tiết: Loại trừu tượng

Cục bộ và nội bộSửa đổi

Trong một số ngôn ngữ, lớp có thể được định nghĩa theo tầm vực thay vì tầm vực toàn cục. Có nhiều loại lớp như vậy: lớp nội bộ [inner class] và lớp cục bộ [local class]

Siêu lớpSửa đổi

Bài chi tiết: Siêu lớp

Siêu lớp [metaclass] là lớp mà thực thể của nó là lớp.[7]

Non-subclassableSửa đổi

MixinsSửa đổi

PartialSửa đổi

Không khởi tạoSửa đổi

Lớp không khởi tạo [uninstantiable class] cho phép lập trình viên nhóm các trường và phương thức vào cùng một lớp để có thể truy xuất trong thời gian chạy mà không phải khởi tạo thực thể cho lớp đó. Thật vậy, tính năng khởi bị bị cấm đối với loại lớp này.

Ví dụ, trong C#, một lớp được đánh dấu là "tĩnh" [static] không thể được khởi tạo, chỉ có các thành viên tĩnh [trường, phương thức...], không có hàm tạo thực thể, và bị niêm phong [seal]. [8]

Không tênSửa đổi

Lớp không tên [unnamed class] hay lớp vô danh [anonymous class] là lớp mà không có ràng buộc với tên hay định danh nào. Điều này tương tự như hàm có tên với hàm vô danh [anonymous function].

Lợi íchSửa đổi

Lợi ích của việc tổ chức phần mềm vào các lớp đối tượng được chia thành ba loại:[9]

  • Phát triển nhanh
  • Dễ bảo trì
  • Sử dụng lại mã và thiết kế

Thể hiện trong thời gian chạySửa đổi

Xem thêmSửa đổi

  • Cổng thông tin Lập trình máy tính

  • Lập trình dựa trên lớp
  • Sơ đồ lớp [UML]
  • Danh sách ngôn ngữ lập trình hướng đối tượng
  • Mixin
  • Lập trình hướng đối tượng
  • Lập trình dựa trên nguyên mẫu

Ghi chúSửa đổi

  1. ^ Gamma và đồng nghiệp 1995, tr.14.
  2. ^ a b Bruce 2002, 2.1 Objects, classes, and object types, //books.google.com/books?id=9NGWq3K1RwUC&pg=PA18.
  3. ^ Gamma và đồng nghiệp 1995, tr.17.
  4. ^ Gamma et al. 1995, tr.14.Lỗi sfn: không có mục tiêu: CITEREFGamma_et_al.1995 [trợ giúp]
  5. ^ Booch 1994, tr.105.
  6. ^ “Controlling Access to Members of a Class”. The Java Tutorials. Oracle. Truy cập ngày 19 tháng 4 năm 2012.
  7. ^ Booch 1994, tr.133-134.
  8. ^ “Static Classes and Static Class Members [C# Programming Guide]”. C# Programming Guide. Microsoft. Truy cập ngày 8 tháng 5 năm 2012.
  9. ^ “What is an Object?”. oracle.com. Oracle Corporation. Truy cập ngày 13 tháng 12 năm 2013.

Tham khảoSửa đổi

  • Booch, Grady [1994]. Objects and Design with Applications, Second Edition. Benjamin/Cummings.
  • Gamma; Helm; Johnson; Vlissides [1995]. Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley.
  • Bruce, Kim B. [2002]. Foundations of Object-Oriented Languages: Types and Semantics. Cambridge, MA: MIT Press. ISBN978-0-262-02523-2.

Đọc thêmSửa đổi

  • Abadi; Cardelli: A Theory of Objects
  • ISO/IEC 14882:2003 Programming Language C++, International standard
  • Class Warfare: Classes vs. Prototypes, by Brian Foote
  • Meyer, B.: "Object-oriented software construction", 2nd edition, Prentice Hall, 1997, ISBN 0-13-629155-4
  • Rumbaugh et al.: "Object-oriented modeling and design", Prentice Hall, 1991, ISBN 0-13-630054-5

Liên kết ngoàiSửa đổi

  • Dias, Tiago [tháng 10 năm 2006]. “Programming demo -.NET using Partial Types for better code”. Hyper/Net. Youtube.

Video liên quan

Chủ Đề