Bài 55. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (OOPS) P1 (GIỚI THIỆU, CLASS, OBJECT)

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG LÀ GÌ?

Lập trình hướng đối tượng (tiếng Anh: Object-oriented programming, viết tắt: OOP) là một kỹ thuật hỗ trợ, cho phép lập trình viên trực tiếp làm việc với các đối tượng mà họ định nghĩa lên. Hiệu quả của kĩ thuật này giúp tăng năng suất, đơn giản hoá độ phức tạp khi bảo trì cũng như mở rộng phần mềm. 

Khái niệm về OOP trong Python tập trung vào việc tạo code sử dụng lại. Khái niệm này còn được gọi là DRY (Don’t Repeat Yourself).

Các nguyên lý

Trong Python, khái niệm về OOP tuân theo một số nguyên lý cơ bản là tính đóng gói, tính kế thừa và tính đa hình.

Tính kế thừa (Inheritance): cho phép một lớp (class) có thể kế thừa các thuộc tính và phương thức từ các lớp khác đã được định nghĩa.

Tính đóng gói (Encapsulation): 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 (tức là code bên ngoài không thể trực tiếp nhìn thấy và thay đổi trạng thái của đối tượng đó).

Tính đa hình (Polymorphism): 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.

Tính trừu tượng (Abstraction)
Trừu tượng có nghĩ là tổng quát hóa một cái gì đó lên, không cần chú ý chi tiết bên trong. Nó không màng đến chi tiết bên trong là gì và người ta vẫn hiểu nó mỗi khi nghe về nó.

II. Lớp (Class) và Đối tượng (Object)

Đối tượng (Object) là những thực thể tồn tại có hành vi.

Ví dụ đối tượng là một xe ô tô có tên hãng, màu sắc, loại nguyên liệu, hành vi đi, dừng, đỗ, nổ máy…

Lớp (Class) là một kiểu dữ liệu đặc biệt do người dùng định nghĩa, tập hợp nhiều thuộc tính đặc trưng cho mọi đối tượng được tạo ra từ lớp đó.

Thuộc tính là các giá trị của lớp. Sau này khi các đối tượng được tạo ra từ lớp, thì thuộc tính của lớp lúc này sẽ trở thành các đặc điểm của đối tượng đó.

Phân biệt giữa Đối tượng (Object) và Lớp (Class):

Đối tượng (Object): có trạng thái và hành vi.

Lớp (Class): có thể được định nghĩa như là một template mô tả trạng thái và hành vi mà loại đối tượng của lớp hỗ trợ. Một đối tượng là một thực thể (instance) của một lớp

Ví dụ 1: (ví dụ về class và object)
Bây giờ chúng ta sẽ thử 1 ví dụ đơn giản:

#Khởi tạo class (lớp) Car
class Car:

# Khai báo biến loaixe, đại diện cho thuộc tính lớp (class)
loaixe = “Ô tô”

# Khai báo hàm __init__, đại diện cho thuộc tính đối tượng
def __init__(self, tenxe, mausac, nguyenlieu):
self.tenxe = tenxe
self.mausac = mausac
self.nguyenlieu = nguyenlieu

# Khởi tạo 1 số ví dụ về lớp Car 
toyota = Car(“Toyota”, “Đỏ”, “Điện”)
lamborghini = Car(“Lamborghini”, “Vàng”, “Deisel”)
porsche = Car(“Porsche”, “Xanh”, “Gas”)

# Truy cập các thuộc tính của lớp
# Ta dùng __class__.loaixe để truy cập thuộc tính class
print(“Porsche là {}.”.format(porsche.__class__.loaixe))
print(“Toyota là {}.”.format(toyota.__class__.loaixe))
print(“Lamborghini cũng là {}.”.format(lamborghini.__class__.loaixe))

# Truy xuất các thuộc tính trong các ví dụ.
#Ta sử dụng biến.tenxe,… để truy cập thuộc tính đối tượng
print(“Xe {} có màu {}. {} là nguyên liệu vận hành.”.format( toyota.tenxe, toyota.mausac, toyota.nguyenlieu))
print(“Xe {} có màu {}. {} là nguyên liệu vận hành.”.format( lamborghini.tenxe, lamborghini.mausac,lamborghini.nguyenlieu))
print(“Xe {} có màu {}. {} là nguyên liệu vận hành.”.format( porsche.tenxe, porsche.mausac, porsche.nguyenlieu))

Chúng ta sẽ giải thích thêm 1 số câu lệnh:
+ Hàm def __init__() dùng để thay thế cho biến khi gọi ra.
vd: toyota = Car(“Toyota”,”Đỏ”,”Điện”)
Tức là biến toyota thuộc class Car.
Khi ta sử dụng biến này, ta dùng hàm toyota.tenxe để gọi ra tên xe. Tên xe đã được định nghĩa là “Toyota” ở dòng code thứ 13.

III. Kết Luận

Như vậy, chúng tôi đã giới thiệu tới các bạn về lập trình hướng đối tượng trong python. Nếu có vấn đề gì thắc mắc, các bạn hãy liên hệ với chúng tôi tại phần liên hệ. Rất vui lòng chào đón các bạn tham gia cộng đồng lập trình cho người không chuyên tại Pyan.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *