Lập trình hướng đối tượng – Như tên gợi ý sử dụng các đối tượng trong lập trình. Lập trình hướng đối tượng nhằm mục đích thực hiện các thực thể trong thế giới thực như kế thừa, ẩn, đa hình, v.v. trong lập trình. Mục đích chính của OOP là liên kết dữ liệu và các chức năng hoạt động trên chúng với nhau để không phần nào khác của mã có thể truy cập dữ liệu này ngoại trừ chức năng đó.
Có một số khái niệm cơ bản hoạt động như các khối xây dựng của OOP, tức là
- Lớp học
- Các đối tượng
- đóng gói
- trừu tượng
- đa hình
- Di sản
- Liên kết động
- Thông qua
Đặc điểm của ngôn ngữ lập trình hướng đối tượng
Lớp học
Khối xây dựng của C++ dẫn đến lập trình Hướng đối tượng là Lớp. Nó là kiểu dữ liệu do người dùng định nghĩa, chứa các thành viên dữ liệu và hàm thành viên riêng, có thể được truy cập và sử dụng bằng cách tạo một thể hiện của lớp đó. Một lớp giống như một bản thiết kế cho một đối tượng. Ví dụ: Hãy xem xét loại Ô tô. Có thể có nhiều xe ô tô với các tên gọi và nhãn hiệu khác nhau nhưng tất cả chúng sẽ chia sẻ một số đặc điểm chung như tất cả chúng sẽ có 4 bánh, Giới hạn tốc độ, Quãng đường đi được, v.v. Vì vậy, ở đây, Ô tô là lớp và bánh xe, giới hạn tốc độ , và số dặm là tài sản của họ.
- Lớp là kiểu dữ liệu do người dùng định nghĩa có các thành viên dữ liệu và các hàm thành viên.
- Các thành viên dữ liệu là các biến dữ liệu và các hàm thành viên là các hàm được sử dụng để thao tác các biến này cùng với nhau. Các thành viên dữ liệu này và các hàm thành viên xác định các thuộc tính và hành vi của các đối tượng trong một Lớp.
- Trong ví dụ trên về lớp Car, thành viên dữ liệu sẽ là giới hạn tốc độ, số dặm, v.v. và các chức năng thành viên có thể áp dụng phanh, tăng tốc độ, v.v.
Chúng ta có thể nói rằng Lớp trong C++ là một bản thiết kế đại diện cho một nhóm đối tượng chia sẻ một số thuộc tính và hành vi chung.
Sự vật
Đối tượng là một thực thể có thể nhận dạng với một số đặc điểm và hành vi. Một đối tượng là một thể hiện của một lớp. Khi một lớp được định nghĩa, không có bộ nhớ nào được cấp phát nhưng khi nó được khởi tạo (tức là một đối tượng được tạo) thì bộ nhớ được cấp phát.
- C++
// C++ Program to show the syntax/working of Objects as a // part of Object Oriented PProgramming #include <iostream> using namespace std; class person { char name[20]; int id; public : void getdetails() {} }; int main() { person p1; // p1 is a object return 0; } |
Các đối tượng chiếm không gian trong bộ nhớ và có một địa chỉ được liên kết như một bản ghi trong pascal hoặc cấu trúc hoặc liên kết. Khi một chương trình được thực thi, các đối tượng tương tác bằng cách gửi tin nhắn cho nhau. Mỗi đối tượng chứa dữ liệu và mã để thao tác dữ liệu. Các đối tượng có thể tương tác mà không cần biết chi tiết về dữ liệu hoặc mã của nhau, chỉ cần biết loại thông báo được chấp nhận và loại phản hồi được trả về bởi các đối tượng.
Để biết thêm về Đối tượng và Lớp C++, hãy tham khảo bài viết này – Lớp và Đối tượng C++
đóng gói
Theo thuật ngữ thông thường, Đóng gói được định nghĩa là gói dữ liệu và thông tin dưới một đơn vị. Trong Lập trình hướng đối tượng, Đóng gói được định nghĩa là liên kết dữ liệu với nhau và các hàm thao tác với chúng. Xem xét một ví dụ thực tế về đóng gói, trong một công ty, có các phần khác nhau như phần tài khoản, phần tài chính, phần bán hàng, v.v. Phần tài chính xử lý tất cả các giao dịch tài chính và lưu giữ hồ sơ của tất cả dữ liệu liên quan đến tài chính. Tương tự, bộ phận bán hàng xử lý tất cả các hoạt động liên quan đến bán hàng và lưu giữ hồ sơ của tất cả các lần bán hàng. Bây giờ có thể nảy sinh tình huống khi vì lý do nào đó, một quan chức từ bộ phận tài chính cần tất cả dữ liệu về doanh số bán hàng trong một tháng cụ thể. Trong trường hợp này, anh ta không được phép truy cập trực tiếp vào dữ liệu của phần bán hàng. Trước tiên, anh ta sẽ phải liên hệ với một số nhân viên khác trong bộ phận bán hàng và sau đó yêu cầu anh ta cung cấp dữ liệu cụ thể. Đây là những gì đóng gói là. Ở đây, dữ liệu của bộ phận bán hàng và những nhân viên có thể thao tác với chúng được gói gọn dưới một tên duy nhất “bộ phận bán hàng”.
Đóng gói cũng dẫn đến trừu tượng hóa dữ liệu hoặc ẩn dữ liệu . Sử dụng đóng gói cũng ẩn dữ liệu. Trong ví dụ trên, dữ liệu của bất kỳ phần nào như bán hàng, tài chính hoặc tài khoản bị ẩn khỏi bất kỳ phần nào khác.
Để biết thêm về đóng gói, hãy tham khảo bài viết này – Đóng gói trong C++
trừu tượng
Trừu tượng hóa dữ liệu là một trong những tính năng cần thiết và quan trọng nhất của lập trình hướng đối tượng trong C++. Trừu tượng có nghĩa là chỉ hiển thị thông tin cần thiết và ẩn các chi tiết. Trừu tượng hóa dữ liệu đề cập đến việc chỉ cung cấp thông tin cần thiết về dữ liệu cho thế giới bên ngoài, ẩn các chi tiết cơ bản hoặc triển khai. Hãy xem xét một ví dụ thực tế về một người đàn ông đang lái ô tô. Người đàn ông chỉ biết rằng nhấn ga sẽ tăng tốc độ của xe hoặc đạp phanh sẽ dừng xe nhưng anh ta không biết khi nhấn ga tốc độ thực sự tăng lên như thế nào, anh ta không biết về cơ chế bên trong của xe hay việc thực hiện chân ga, phanh, v.v. trên ô tô. Đây là những gì trừu tượng là.
- Trừu tượng hóa bằng cách sử dụng các Lớp : Chúng ta có thể triển khai Trừu tượng hóa trong C++ bằng cách sử dụng các lớp. Lớp này giúp chúng ta nhóm các thành viên dữ liệu và các hàm thành viên bằng cách sử dụng các chỉ định truy cập có sẵn. Một Lớp có thể quyết định thành viên dữ liệu nào sẽ hiển thị với thế giới bên ngoài và thành viên nào không.
- Trừu tượng hóa trong các tệp Tiêu đề : Một loại trừu tượng nữa trong C++ có thể là các tệp tiêu đề. Ví dụ: hãy xem xét phương thức pow() có trong tệp tiêu đề math.h. Bất cứ khi nào chúng ta cần tính lũy thừa của một số, chúng ta chỉ cần gọi hàm pow() có trong tệp tiêu đề math.h và chuyển các số đó làm đối số mà không cần biết thuật toán cơ bản theo đó hàm thực sự tính toán lũy thừa của các số .
Để biết thêm về tính trừu tượng của C++, hãy tham khảo bài viết này – Trừu tượng trong C++
đa hình
Từ đa hình có nghĩa là có nhiều dạng. Nói một cách đơn giản, chúng ta có thể định nghĩa tính đa hình là khả năng một thông báo được hiển thị ở nhiều dạng. Một người đồng thời có thể có những đặc điểm khác nhau. Một người đàn ông đồng thời là một người cha, một người chồng và một nhân viên. Vì vậy, cùng một người sở hữu hành vi khác nhau trong các tình huống khác nhau. Điều này được gọi là đa hình. Một hoạt động có thể thể hiện các hành vi khác nhau trong các trường hợp khác nhau. Hành vi phụ thuộc vào các loại dữ liệu được sử dụng trong hoạt động. C++ hỗ trợ nạp chồng toán tử và nạp chồng hàm.
- Nạp chồng toán tử : Quá trình làm cho một toán tử thể hiện các hành vi khác nhau trong các trường hợp khác nhau được gọi là nạp chồng toán tử.
- Nạp chồng hàm : Nạp chồng hàm là sử dụng một tên hàm duy nhất để thực hiện các loại tác vụ khác nhau. Đa hình được sử dụng rộng rãi trong việc thực hiện kế thừa.
Ví dụ : Giả sử chúng ta phải viết hàm cộng một số số nguyên, có lúc là 2 số nguyên, có lúc là 3 số nguyên. Chúng ta có thể viết Phương thức bổ sung có cùng tên nhưng có các tham số khác nhau, phương thức liên quan sẽ được gọi theo các tham số.
Để biết thêm về tính đa hình, hãy tham khảo bài viết này – Đa hình trong C++
Di sản
Khả năng của một lớp lấy được các thuộc tính và đặc điểm từ một lớp khác được gọi là Kế thừa . Kế thừa là một trong những tính năng quan trọng nhất của Lập trình hướng đối tượng.
- Lớp phụ : Lớp kế thừa các thuộc tính từ một lớp khác được gọi là Lớp phụ hoặc Lớp dẫn xuất.
- Siêu lớp : Lớp có các thuộc tính được kế thừa bởi một lớp phụ được gọi là Lớp cơ sở hoặc Lớp siêu cấp.
- Khả năng sử dụng lại : Kế thừa hỗ trợ khái niệm “khả năng sử dụng lại”, tức là khi chúng ta muốn tạo một lớp mới và đã có một lớp bao gồm một số mã mà chúng ta muốn, chúng ta có thể lấy lớp mới của mình từ lớp hiện có. Bằng cách này, chúng tôi đang sử dụng lại các trường và phương thức của lớp hiện có.
Ví dụ : Chó, Mèo, Bò có thể là Lớp Dẫn xuất của Lớp Cơ sở Động vật.
Để biết thêm về Kế thừa, hãy tham khảo bài viết này – Kế thừa trong C++
Liên kết động
Trong liên kết động, mã sẽ được thực thi để đáp ứng lệnh gọi hàm được quyết định trong thời gian chạy. C++ có các chức năng ảo để hỗ trợ việc này. Bởi vì liên kết động linh hoạt, nên nó tránh được những nhược điểm của liên kết tĩnh, liên kết giữa lời gọi hàm và định nghĩa tại thời điểm xây dựng.
Ví dụ:
- C++
// C++ Program to Demonstrate the Concept of Dynamic binding // with the help of virtual function #include <iostream> using namespace std; class GFG { public : void call_Function() // function that call print { print(); } void print() // the display function { cout << "Printing the Base class Content" << endl; } }; class GFG2 : public GFG // GFG2 inherit a publicly { public : void print() // GFG2's display { cout << "Printing the Derived class Content" << endl; } }; int main() { GFG geeksforgeeks; // Creating GFG's pbject geeksforgeeks.call_Function(); // Calling call_Function GFG2 geeksforgeeks2; // creating GFG2 object geeksforgeeks2.call_Function(); // calling call_Function // for GFG2 object return 0; } |
đầu ra
In nội dung lớp cơ sở In nội dung lớp cơ sở
Như chúng ta có thể thấy, hàm print() của lớp cha được gọi ngay cả từ đối tượng của lớp dẫn xuất. Để giải quyết vấn đề này, chúng tôi sử dụng các chức năng ảo.
Thông qua
Các đối tượng giao tiếp với nhau bằng cách gửi và nhận thông tin. Một thông báo cho một đối tượng là một yêu cầu thực hiện một thủ tục và do đó sẽ gọi một hàm trong đối tượng nhận để tạo ra kết quả mong muốn. Truyền thông báo liên quan đến việc chỉ định tên của đối tượng, tên của chức năng và thông tin sẽ được gửi.