Bài 56. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (OOPS) P2 (METHOD, INHERITANCE)

I. Method trong lập trình hướng đối tượng là gì ?

Phương thức (Method) là các hàm được định nghĩa bên trong phần thân của một lớp. Chúng được sử dụng để xác định các hành vi của một đối tượng.

Ví dụ 1:

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

     #Trong bài này ta không tạo thuộc tính lớp

     # thuộc tính đối tượng
     def __init__(self, tenxe, mausac, nguyenlieu):
        self.tenxe = tenxe
        self.mausac = mausac
        self.nguyenlieu = nguyenlieu

 

     # phương thức
     def dungxe(self, mucdich):
        return “{} đang dừng xe để {}”.format(self.tenxe,mucdich)

 

     def chayxe(self):
        return “{} đang chạy trên đường”.format(self.tenxe)

 

     def nomay(self): 
        return “{} đang nổ máy”.format(self.tenxe)

 

# instantiate the Car class / khởi tạo các ví dụ cho class Car
toyota = Car(“Toyota”, “Đỏ”, “Điện”)
lamborghini = Car(“Lamborghini”, “Vàng”, “Deisel”)
porsche = Car(“Porsche”, “Xanh”, “Gas”)

 

# call our instance methods / gọi ra các phương thức của ví dụ
print(toyota.dungxe(“nạp điện”))
print(lamborghini.chayxe())
print(porsche.nomay())

Ở ví dụ này, có ba phương thức là dungxe(), chayxe() và nomay(). Chúng được gọi là phương thức instance bởi vì chúng được gọi trên một đối tượng instance (toyota, lamborghini, porsche).

II. Inheritance trong lập trình hướng đối tượng là gì ?

Tính kế thừa 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. Lớp đã có gọi là lớp cha, lớp mới phát sinh gọi là lớp con. Lớp con kế thừa tất cả thành phần của lớp cha, có thể mở rộng các thành phần kế thừa và bổ sung thêm các thành phần mới.

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

# Lớp cha
class Car:

     # Constructor/ Khởi tạo thuộc tính
     def __init__(self, hangxe, tenxe, mausac):
        # Lớp Car có 3 thuộc tính: tenxe, mausac, hang xe
        self.hangxe = hangxe
        self.tenxe = tenxe
        self.mausac = mausac

     # phương thức
     def chayxe(self):
        print (“{} đang chạy trên đường”.format(self.tenxe))

     def dungxe(self, mucdich):
        print (“{} đang dừng xe để {}”.format(self.tenxe, mucdich))

# Lớp Toyota mở rộng từ lớp Car.
class Toyota(Car):

     def __init__(self, hangxe, tenxe, mausac, nguyenlieu):
        # Gọi tới constructor của lớp cha (Car) 
        # để gán giá trị vào thuộc tính của lớp cha.
        super().__init__(hangxe, tenxe, mausac)

        self.nguyenlieu = nguyenlieu

     # Kế thừa phương thức cũ
     def chayxe(self):
        print (“{} đang chạy trên đường”.format(self.tenxe))

     # Ghi đè (override) phương thức cùng tên của lớp cha.
     def dungxe(self, mucdich):
        print (“{} đang dừng xe để {}”.format(self.tenxe, mucdich))
        print (“{} chạy bằng {}”.format(self.tenxe, self.nguyenlieu))

     # Bổ sung thêm thành phần mới 
     def nomay(self):
        print (“{} đang nổ máy”.format(self.tenxe))

toyota1 = Toyota(“Toyota”, “Toyota Hilux”, “Đỏ”, “Điện”)
toyota2 = Toyota(“Toyota”, “Toyota Yaris”, “Vàng”, “Deisel”)
toyota3 = Toyota(“Toyota”, “Toyota Vios”, “Xanh”, “Gas”)

toyota1.dungxe(“nạp điện”)
toyota2.chayxe()
toyota3.nomay()

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

Chương trình này tạo hai lớp kế thừa: lớp cha Car và lớp con Toyota.

Khai báo constructor mới để gán giá trị vào thuộc tính của lớp cha. Hàm super() đứng trước phương thức __init __ để gọi tới nội dung __init __ của Car.

Class Toyota kế thừa hàm chayxe() và dungxe() của class Car đồng thời sửa đổi một hành vi thể hiện ở phương thức dungxe(). Sau đó lớp con bổ sung thêm thành phần mới là nomay() để mở rộng kế thừa.

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 *