OOP là gì?
OOP được xem là hỗ trợ tăng năng suất, đơn giản hóa khi bảo trì hay mở rộng phần mềm. Vậy OOP là gì? Dưới đây là lời giải đáp từ Gofiber.
Khái niệm về OOP
OOP (Object Oriented Programming - lập trình hướng đối tượng) là kỹ thuật cho phép người lập trình tạo một hoặc nhiều đối tượng trong code. Đối tượng sẽ phải chứa đựng các dữ liệu trên trường (gọi là thuộc tính) và mã nguồn sẽ được tổ chức thành phương thức. Phương thức sẽ giúp đối tượng truy xuất, hiệu chỉnh trường dữ liệu cho đối tượng khác. Đối tượng hiện tại sẽ có tương tác.
Trong OOP, chương trình máy tính sẽ được thiết kế theo cách tách "đối tượng" khỏi phạm vi các đối tượng tương tác cùng nhau. Trong ngôn ngữ lập trình, đối tượng khá đa dạng và phần lớn sẽ là các "ngôn ngữ lập trình theo lớp". Những ngôn ngữ lập trình theo lớp sẽ được coi là một thực thể của một lớp và định nghĩa cho kiểu dữ liệu.
Những tính chất cơ bản của OOP
OOP là phương pháp lập trình đối tượng có 4 tính chất cơ bản chính như sau:
-
Tính trừu tượng (abstraction): khả năng chương trình sẽ bỏ qua và không chú ý đến khía cạnh thông tin mà OOP đang làm việc trực tiếp. Nghĩa là nó có khả năng tập trung vào phần thiết yếu nhất. Mỗi đối tượng sẽ được coi là một "động tử". Tính chất này còn thể hiện qua mỗi đối tượng ban đầu có thể có một số điểm chung cho nhiều đối tượng khác.
-
Tính đóng gói (encapsulation): người dùng không được sử dụng các đối tượng thay đổi trạng thái hiện tại của chính đối tượng đó. Chỉ có phương thức nội tại của đối tượng mới được thay đổi trạng thái chính nó. Nếu môi trường bên ngoài ảnh hưởng đến dữ liệu nội tải của một đối tượng sẽ khiến đối tượng bị phụ thuộc vào người viết mã.
-
Tính đa hình (polymorphism): các thông điệp (message) được gửi đi như việc xem các hàm bên trong đối tượng. Phương thức trả lời sẽ cho thông điệp tùy đối tượng mà thông điệp đó gửi tới. Ví dụ, khi định nghĩa đối tượng "hinh_vuong" và "hinh_tron" thì phương thức chung để mô tả là "chu_vi".
-
Tính kế thừa (inheritance): một đối tượng có thể có một số đặc tính mà đối tượng khác được thừa kế. Khả năng này cho phép các đối tượng chia sẻ, mở rộng đặc tính đã có mà không phải định nghĩa lại một lần nữa. Tuy nhiên, không phải ngôn ngữ của OOP nào cũng có tính chất này.
» Xem thêm
- Flutter là gì? Những ưu điểm vượt trội chỉ có tại Flutter
- Mô hình MVC là gì và ứng dụng trong lập trình
Những khái niệm cần biết về ngôn ngữ OOP
Ngôn ngữ OOP hiện nay được coi là phổ biến nhất. OOP đều tập trung theo phương pháp phân lớp, cụ thể như C++, C# hay Java. Trước khi hiểu sâu hơn về OOP, bạn cần nắm rõ một số khái niệm về OOP như:
Lớp
Lớp là khuôn mẫu để lập trình viên tạo ra đối tượng. Trong một lớp, lập trình viên dùng các biến để diễn tả thuộc tính, các hàm nhằm mô tả về phương thức của đối tượng. Khi đã định nghĩa được lớp rồi, lập trình viên có thể tạo ra nhiều đối tượng từ chính lớp này. Quá trình thực hiện được thông qua hệ thống hàm tạo (constructor).
Lớp con
Lớp con cũng như một lớp thông thường như có thêm tính chất kế thừa một phần hoặc toàn bộ đặc tính của các lớp khác. Lớp sẽ chia sẻ sự kế thừa cho lớp con (parent class/superclass).
Lớp trừu tượng
Lớp trừu tượng của OOP không thể thực thể hóa thành một đối tượng thực dụng. Lớp này được thiết kế để tạo ra một lớp khác có đặc tính chung. Nhưng bản thân lớp đó chưa có hoặc chưa đủ ý nghĩa để tiến hành viết mã và thực thể hóa.
Phương thức
Phương thức là một lớp dùng để mô tả hành vi của đối tượng hoặc của lớp. Điển hình như, đối tượng thuộc lớp điện thoại có hành vi: truyền tín hiệu từ sóng sang dạng nghe được, chuyển tín hiệu dạng giọng nói sang dạng chuẩn,... Khi lập trình viên thiết kế, họ có thể dùng cách mô tả và thực hiện hành vi của đối tượng.
Mỗi phương thức sẽ được định nghĩa như một hàm. Ví dụ, điện thoại truyền tín hiệu giọng nói sang dạng chuẩn tín hiệu trước khi đến tổng đài.
Thuộc tính
Thuộc tính trong một lớp có bao gồm biến, hằng, tham số nội tại của chính lớp đó. Vai trò quan trọng nhất của thuộc tính sẽ là biến. Nguyên nhân là chúng có thể bị biến đổi trong quá trình hoạt động của một đối tượng nào đó. Các thuộc tính được xác điểu kiểu và kiểu định dạng có thể là dạng dữ liệu cổ điện hay là một "lớp" đã được định nghĩa trước đó.
Quan hệ giữa lớp và đối tượng
Theo khái niệm của một số lập trình viên, lớp là cách phân loại thực thể thông qua đặc điểm chung của chính thực thể đó. Vì thế, lớp là khái niệm có tính trừu tượng hóa trong OOP rất cao. Điển hình như lớp "mèo" để chỉ rất nhiều giống mèo khác nhau sống khắp châu lục. Lớp này có những thuộc tính như: có 4 chân, thích bắt chuột, có răng nanh, kêu "meo meo". Khi có hai con mèo cụ thể là A và B, các đối tượng này sẽ thuộc cùng lớp mèo.
Thực thể
Thực thể trong OOP là quá trình khai báo để có tên (có thể coi là một biến) và nó trở thành một đối tượng cho lớp sau. Một lớp sau khi được thực thể hóa sẽ có một đối tượng cụ thể gọi là thực thể. Hai thực thể cùng lớp có trạng thái khác nhau và hoàn toàn độc lập nếu như không có yêu cầu đặc biệt nào từ người lập trình.
Công cộng
Công cộng là tính chất dùng khi gán cho cho các phương thức, biến nội tại hoặc lớp. Khi công cộng được khai báo thì có nghĩa là người lập trình đã cho phép câu câu lệnh bên ngoài và các đối tượng khác dùng đến.
Riêng tư
Riêng tư là chính chất đóng mạnh nhất. Khi dùng đến tính chất riêng tư gán cho một biến, một phương thức thì biến (hoặc phương thức) chỉ được dùng bên trong lớp đã được định nghĩa trước. Những nỗ lực dùng trực tiếp tính chất riêng tư từ bên ngoài thông qua câu lệnh hay từ lớp đều bị phủ nhận hoặc báo lỗi.
Bảo tồn
Tính chất bảo tồn dùng để áp dụng cho các phương thức, lớp hay biến nội tại và chỉ có trong nội bộ lớp (hay các lớp con) được gọi đến và dùng phương pháp, biến đó. Tính bảo tồn rộng hơn về nghĩa chia sẻ dữ liệu, chức năng. Cụ thể, nó cho phép một vài trường hợp dùng tới đặc tính của một lớp (hoặc lớp con).
» Xem thêm: ReactJS và lộ trình chung dành cho người mới
Những ngôn ngữ được dùng trong OOP
Kỹ thuật OOP được dùng phổ biến là vậy, nhưng những ngôn ngữ nào dùng OOP nhiều nhất hiện nay? Thực tế, theo nhu cầu hiện tại, có khoảng 5 ngôn ngữ lập trình OOP đang được nhiều lập trình viên sử dụng nhất, bao gồm:
Java
Java là ngôn ngữ lập trình theo hướng đối tượng, độc lập nền tảng và đa mục đích. Thay vì phải biên dịch mã nguồn thành mã máy dựa trên nền tảng cụ thể thì code của Java được biên dịch thành các bytecode. Bytecode là một định dạng trung gian sẽ được chạy bởi môi trường thực thi (runtime environment).
Về cơ bản, Java là ngôn ngữ có mục đích chung được viết một lần và chạy ở mọi nơi. Mã Java có thể chạy trên các nền tảng có hỗ trợ Java mà không cần phải biên dịch lại lần nữa.
C++
C++ là ngôn ngữ dùng trong OOP hướng đối tượng mang 2 phong cách là lập trình hướng cấu trúc như C và thêm phong cách hướng đối tượng. C++ là ngôn ngữ lập trình ở bậc trung và được coi là phần mở rộng của C. C++ có thêm các tính năng như lập trình tổng quát, lập trình hướng đối tượng, ngôn ngữ đa hình tự do, lập trình đa hình, lập trình thủ tục.
C++ cũng là ngôn ngữ lập trình thương mại phổ biến đối với các lập trình viên. Nó được thiết kế để hướng đến việc tạo hệ thống máy tính và phần mềm nhúng trên mạch vi xử lý.
PHP
PHP là ngôn ngữ lập trình theo phong cách đa mục đích nên rất được các lập trình viên sử dụng. Ngôn ngữ PHP là ngôn ngữ kịch bản mã nguồn mở, chạy phía server nên thường dùng trong tạo ứng dụng website.
Do PHP được tối ưu hóa cho ứng dụng website, tốc độ nhanh, nhỏ gọn, cách dùng gần tương tự như C hay Java nên thời gian để tạo sản phẩm tương đối ngắn.
Python
Python là ngôn ngữ lập trình bậc cao hướng đến những mục đích lập trình đa năng. Ưu điểm lớp nhất của Python là dễ đọc, dễ học và rất dễ nhớ. Cấu trúc ngôn ngữ Python rõ ràng, thuận tiện cho cả người mới học lập trình và trong phát triển trí tuệ nhân tạo.
Javascript
Javascript là ngôn ngữ lập trình thường dùng để tạo website. Mức độ phổ biến của Javascript khá tương tự như PHP trong việc dùng để tạo web. Bởi lẽ, quá trình học Javascript khá dễ dàng do ngôn ngữ dễ hiểu, mức độ phổ biến của ngôn ngữ cao nên dễ tìm tài liệu. Javascript sẽ thích hợp dùng nhất cho những developer mới bắt đầu tìm hiểu về lập trình.
Objective-C
Ngôn ngữ lập trình Objective-C dùng trong OOP là ngôn ngữ có tính đa dụng và hướng đối tượng có bổ sung thêm thông điệu vào ngôn ngữ C. Các chương trình Objective-C phát triển dành cho các hệ điều hành không phải của Apple hoặc không phụ thuộc API của Apple. Vì thế, nó cũng có thể được biên dịch cho bất kỳ nền tảng nào được hỗ trợ bởi GNU, GCC hay LLVM.
Những kiến thức trên đây của Gofiber về OOP chỉ là "phần nổi của tảng băng chìm". Vẫn còn nhiều kiến thức chuyên sâu hơn về OOP lẫn kiến thức lập trình khác mà nếu bạn đang tìm hiểu về lập trình thì sẽ phải tiếp xúc về nó trong thời gian tới. Hãy sẵn sàng học hỏi để hiểu rõ hơn về thủ thuật và ngôn ngữ lập trình nhé!
Gofiber là công ty công nghệ cung cấp dịch vụ máy chủ và cho thuê VPS hàng đầu tại Việt Nam. Giải pháp máy chủ điện toán đám mây (cloud server/cloud VPS) của Gofiber được xây dựng trên nền tảng công nghệ ảo hóa tiên tiến KVM cùng hệ thống hạ tầng mạnh mẽ, Nhiều Data Center, Hỗ trợ đa dạng hệ điều hành, VPS KVM tối ưu hóa cho hiệu năng cao, Miễn phí DirectAdmin chính hãng, VPS SSD - ổ cứng SSD Enterprise hiệu năng đọc ghi cao.