Lập trình hướng đối tượng là gì? OPP là gì?

Đối với lập trình viên thì thuật ngữ lập trình hướng đối tượng - Object Oriented Programming (OOP) đã quá đỗi quen thuộc. Nó là một trong những kỹ thuật lập trình rất quan trọng hiện nay. Vậy oop là gì?

oop là gì

Vậy oop là gì, hãy cùng tìm hiểu qua bài viết dưới đây nhé!

Lập trình hướng đối tượng - oop là gì?

Lập trình hướng đối tượng - Object Oriented Programming (OOP) là một kỹ thuật lập trình cho phép lập trình viên tạo ra các đối tượng trong code trừu tượng hóa các đối tượng thực tế trong cuộc sống. Hướng tiếp cận này hiện đang rất thành công và đã trở thành một trong những khuôn mẫu phát triển phần mềm, đặc biệt là các phần mềm cho doanh nghiệp.

Nhìn vào tên của nó bạn cũng có thể hình dung ra được. Ngôn ngữ lập trình này giải quyết các bài toán từ nhỏ đến lớn bằng cách quan sát và tưởng tượng những hành động, đặc điểm của thực thể thật ngoài đời sống và đem vào lập trình như một đối tượng ảo. Thể hiện qua các lớp (class), đối tượng (Object) mà hành động là các hàm(method) còn đặc điểm chính là các biến(variable).

Lập trình hướng đối tượng - oop là gì?

OOP có 3 nguyên lý cơ bản

Tính đóng gói (Encapsulation)

Tính đóng gói tức là quy tắc yêu cầu trạng thái bên trong của một đối tượng được bảo vệ và tránh truy cập được từ code bên ngoài. Bất cứ truy cập nào tới trạng thái bên trong này bắt buộc phải thông qua một public API để đảm bảo trạng thái của đối tượng luôn hợp lệ bởi vì các public API chịu trách nhiệm thực hiện kiểm tra tính hợp lệ cũng như trình tự cập nhật trạng thái của đối tượng đó.

Nguyên lý đóng gói như thế này ở đâu ta cũng có thể bắt gặp ví dụ như thiết kế viên thuốc, chúng ta chỉ biết nó chữa bệnh này, bệnh kia và một số thành phần chính còn cụ thể bên trong nó có những gì thì hoàn toàn không biết.

Tính kế thừa (Inheritance)

Khi bắt đầu xây dựng ứng dụng chúng ta sẽ bắt đầu việc thiết kế các lớp, thông thường chúng ta sẽ thấy có trường hợp một số lớp dường như có quan hệ với những lớp khác, chúng có những đặc tính khá giống nhau.

VD: 3 lớp AndroidPhone, IPhone, WindowsPhone ở hình dưới:

Mỗi lớp đều đại diện cho một loại smartphone khác nhau nhưng lại có những thuộc tính giống nhau. Thay vì sao chép những thuộc tính này, sẽ hay hơn nếu ta đặt chúng ở một nơi có thể dùng bởi những lớp khác. Điều này được thực hiện bởi tính kế thừa trong OOP: chúng ta có thể định nghĩa lớp cha – base class (trong trường hợp này là Smartphone ) và có những lớp con kế thừa từ nó (derived class), tạo ra một mối quan hệ cha/con.

Các lớp con có thể kế thừa 3 thuộc tính từ lớp cha. Nếu các chức năng của lớp cha đã được định nghĩa đầy đủ thì lập trình viên sẽ không phải làm bất cứ việc gì ở lớp con. Còn nếu một lớp con muốn chức năng khác so với định nghĩa ở lớp cha thì nó có thể ghi đè (override) chức năng đã được định nghĩa trên lớp cha này.

OOP có 3 nguyên lý cơ bản

Tính đa hình (Polymorphism)

Với đa số lập trình viên thì tính Kế thừa và Đóng gói trong OOP khá dễ hiểu còn tính đa hình khi mới tiếp cận sẽ thấy khó hiểu hơn một chút. Tuy nhiên đây lại là một tính chất có thể nói là chứa đựng hầu hết sức mạnh của lập trình hướng đối tượng.

Hiểu một cách đơn giản: Đa hình là khái niệm mà hai hoặc nhiều lớp có những phương thức giống nhau nhưng có thể thực thi theo những cách thức khác nhau.

Ví dụ như ở phần trên, mỗi một smartphone kế thừa từ lớp Smartphone nhưng có thể lưu trữ dữ liệu trên cloud theo những cách khác nhau:

  • AndroidPhone lưu trữ bằng Google Drive

  • Iphone lưu trên iCloud

  • WindowsPhone sử dụng SkyDrive.

Bởi vì tất cả đều là Smartphone nên nếu ta viết một hàm dùng kiểu Smartphone làm tham số thì khi gọi hàm ta có thể truyền vào một đối tượng kiểu AndroidPhone, Iphone hoặc WindowsPhone bởi vì chúng đều kế thừa từ lớp Smartphone nên được chấp nhận (hiểu nôm na một AndroidPhone, Iphone, WindowsPhone cũng là một Smartphone).

Tính Đa hình như trên là một tính chất rất mạnh mẽ bởi vì nó mang lại cho code khả năng tổng quát hóa cao. Chúng ta không cần tạo ra phương thức cho mỗi kiểu kế thừa từ lớp cha Smartphone mà chỉ cần nhận một biến kiểu Smartphone và có thể làm việc với bất cứ lớp nào kế thừa từ nó.

Điều duy nhất không làm được ở đây là sử dụng những phương thức mà chỉ được khai báo trên các lớp con. VD: nếu ta có một phương thức trên lớp IPhone gọi là OpenSiri() nhưng không được khai báo trên lớp Smartphone, khi đó muốn gọi nó sẽ bắt buộc phải ép kiểu từ Smartphone sang IPhone trước khi gọi.

Đặc điểm của lập trình hướng đối tượng C++

  • Ngôn ngữ lập trình hướng đối tượng kết hợp dữ liệu và các hàm thao tác trên dữ liệu này; gọi là đối tượng.

  • Các hàm của đối tượng – gọi là các hàm thành viên (member function), cung cấp phương thức để truy nhập dữ liệu của đối tượng.

  • Các thành phần dữ liệu thường được gọi là các thuộc tính (attribute hoặc instance variable).

  • Việc gọi hàm thành viên của một đối tượng được xem như việc gửi thông điệp tới đối tượng đó (sending a mesage).

  • Trong một chương trình C++ thường chứa một số các đối tượng, chúng giao tiếp với nhau thông qua việc gửi thông điệp.

Lập trình hướng đối tượng Java

Java cũng là một ngôn ngữ lập trình hướng đối tượng vì vậy nó cũng hỗ trợ các đặc tính của lập trình hướng đối tượng: Đa hình (Polymorphism), Thừa kế (Inheritance), Đóng gói (Encapsulation), Trừu tượng (Abstraction)

Đối tượng trong lập trình Java:

Nếu xem xét thực tế chúng ta có thể tìm thấy nhiều đồ vật xung quanh chúng ta: ô tô, chó, con người, v.v... Tất cả các đối tượng này đều có thuộc tính và hành vi.

Nếu chúng ta xem xét một con chó, thuộc tính của nó sẽ là - tên, giống, màu sắc, và các hành vi là: sủa, vẫy, chạy, cắn...Nếu bạn so sánh các đối tượng trong phần mềm với một đối tượng trong thế giới thực, chúng sẽ có đặc điểm rất giống nhau: thuộc tính đối tượng trong phần mềm được lưu trữ trong trường (field) và hành vi được lưu trữ trong phương thức (method).

Class: Chúng ta có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object). Trong đó bao gồm dữ liệu của đối tượng (fields hay properties) và các phương thức(methods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp.

Lập trình hướng đối tượng Java

Excel nâng cao (Excel VBA) có phải là ngôn ngữ lập trình hướng đối tượng không?

Hầu hết các ngôn ngữ lập trình ngày nay đều được gọi là ngôn ngữ lập trình hướng đối tượng. Tuy nhiên Excel VBA không phải là ngôn ngữ lập trình hướng đối tượng thực sự. Đối tượng trong VBA là một cái gì đó giống như một công cụ có các phương thức và thuộc tính.

Ví dụ, một Worksheet Excel là một đối tượng, Cell trong một bảng tính là một đối tượng, Rang là một đối tượng, phông chữ của cell là một đối tượng, nút lệnh là một đối tượng, và Một hộp văn bản là một đối tượng và nhiều hơn nữa