Bài 57. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (OOPS) P3 (ENCAPSULATION, POLYMORPHISM)

I. Đóng gói (Encapsulation) trong lập trình hướng đối tượng là gì ?

Sử dụng OOP trong Python, chúng ta có thể hạn chế quyền truy cập vào trạng thái bên trong của đối tượng. Điều này ngăn chặn dữ liệu bị sửa đổi trực tiếp, được gọi là đóng gói. Trong Python, chúng ta biểu thị thuộc tính private này bằng cách sử dụng dấu gạch dưới làm tiền tố: “_” hoặc “__“.

Ví dụ 1:

class Computer:

     def __init__(self):
        # Thuộc tính private ngăn chặn sửa đổi trực tiếp
        self.__maxprice = 900

     def sell(self): 
        print(“Giá bán sản phẩm: {}”.format(self.__maxprice))

     def setMaxPrice(self, price):
        self.__maxprice = price

c = Computer()

# thay đổi giá.
c.__maxprice = 1000
c.sell()

# sử dụng hàm setter để thay đổi giá.
c.setMaxPrice(1000)
c.sell()

Ở ví dụ này, bạn khởi tạo class Computer, sử dụng __init __() để lưu trữ giá bán tối đa của máy tính. Nhưng sau khi sử dụng, bạn có nhu cầu sửa đổi giá, tuy nhiên không thể thay đổi theo cách bình thường vì Python đã coi __maxprice là thuộc tính private. Vậy nên để thay đổi giá trị, ta sử dụng hàm setter setMaxPrice().

II. Đa hình (Polymorphism) trong lập trình hướng đối tượng là gì ?

Tính đ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.

Giả sử, chúng ta cần tô màu một hình khối, có rất nhiều lựa chọn cho hình của bạn như hình chữ nhật, hình vuông, hình tròn. Tuy nhiên, bạn có thể sử dụng cùng một phương pháp để tô màu bất kỳ hình dạng nào.

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

class Toyota:

     def dungxe(self):
        print(“Toyota dừng xe để nạp điện”)

     def nomay(self):
        print(“Toyota nổ máy bằng hộp số tự động”)

class Porsche:

     def dungxe(self):
        print(“Porsche dừng xe để bơm xăng”)

     def nomay(self):
        print(“Porsche nổ máy bằng hộp số cơ”)

# common interface
def kiemtra_dungxe(car): car.dungxe()

# instantiate objects
toyota = Toyota()
porsche = Porsche()

# passing the object
kiemtra_dungxe(toyota)
kiemtra_dungxe(porsche)

Chúng ta sẽ giải thích thêm 1 số câu lệnh:

Ở ví dụ này, bạn vừa tạo hai lớp Toyota và Porsche, cả hai lớp đều có phương thức dungxe(). Truy nhiên hàm của chúng khác nhau. Ta sử dụng tính đa hình để tạo hàm chung cho hai lớp, đó là kiemtra_dungxe(). Tiếp theo, bạn truyền đối tượng toyota và porsche vào hàm vừa tạo, và ta lấy được kết quả như này:

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 *