Object Oriented Programming trong Python

Object Oriented Programming

Đa số các đoạn code mà chúng ta tham khảo ở các bài học trước đây được viết theo kiểu hướng thủ tục. Lập trình hướng thủ tục (procedure programming) là một phương pháp lập trình mà trong đó các câu lệnh được chạy một cách độc lập hoặc được nhóm vào trong một hàm.

Python là một ngôn ngữ hỗ trợ lập trình hướng đối tượng (object oriented programming hay OOP). Trong bài học này chúng ta sẽ tìm hiểu về phương pháp lập trình hướng đối tượng và các thuật ngữ liên quan.

Lập Trình Hướng Đối Tượng Là Gì

Hướng đối tượng (object oriented) là một phương pháp lập trình mà trong đó source code được tổ chức để mô phỏng theo các đối tượng của thế giới thực.

class Student():
    def __init__(self, f_name, l_name):
        self.first_name = f_name
        self.last_name = l_name
    def intro():
        print("Hi, my name is %s!" %(l_name))
    def getFullname(self):
        return self.first_name + " " + self.last_name

superMan = Student("Kent", "Clark") # Hi, my name is Kent Clark
print(superMan.getFullname()) # Kent Clark

Ở đoạn code trên, chúng ta có một class có tên là Student được dùng để mô phỏng các đối tượng (hay object) sinh viên trong thế giới thực. Class và Object là hai khái niệm cốt lõi trong lập trình hướng đối tượng. Chúng ta sẽ tìm hiểu về hai khái niệm này ngay ở phần tiếp sau đây.

Object và Class

Object Là Gì

Để hiểu được object trong lập trình hướng đối tượng là gì trước tiên chúng ta cần hiểu một object trong thế giới thực là gì.

Từ điển Oxford định nghĩa object như sau:

a thing that can be seen and touched, but is not alive

Như vậy object là bất cứ thứ gì bạn nhìn thấy và chạm được nhưng không phải là thực thể sống. Bàn làm việc, ghế, đèn bàn, điện thoại, laptop của bạn, bàn phím, ổ cứng, RAM... tất cả đều là object.

Mỗi một object là thực thể riêng biệt.

Bạn có thể có hai chiếc laptop của cùng một nhãn hiệu được sản xuất cùng một ngày, tuy nhiên chúng vẫn là hai chiếc laptop riêng biệt.

Object có thể chứa bên trong nó object khác, tuy nhiên chúng vẫn là hai thực thể riêng biệt.

Laptop của bạn chứa bên trong nó ổ cứng, bàn phím, RAM... Tất cả những thứ này cũng đều là những object khác nhau. Như vậy object Laptop chứa các object ổ cứng, object RAM, object bàn phím... Tuy nhiên điều này không có nghĩa object Laptop và object ổ cứng là một. Chúng vẫn là hai thực thể riêng biệt.

Object có các thuộc tính (cũng như đặc tính)

Mỗi chiếc bàn có thể có các thuộc tính như màu sắc, chiều cao, cân nặng khác nhau. Mỗi chiếc laptop có thể có các thuộc tính như nhãn hiệu, giá cả, năm sản xuất... khác nhau.

Mỗi object có các hành vi (hay tính năng) riêng
Mỗi chiếc điện thoại có thể rung chuông, báo thức... Mỗi chiếc đèn bàn có thể được bật hoặc tắt. Hành vi của mỗi object khác nhay là khác nhau. Một chiếc điện thoại rung chuông báo thức không có nghĩa là tất cả các điện thoại khác cũng đồng loạt rung chuông. Bạn tắt chiếc đèn bàn trên bàn làm việc của bạn thì không có nghĩa tất cả đèn bàn trên thế giới này đều tắt.

Object trong lập trình hướng đối tượng mô phỏng object trong thế giới thực.

Tất cả những gì chúng ta đã tìm hiểu về object ở trên đây được áp dụng triệt để với object trong lập trình hướng đối tượng.

Lưu ý: Object trong lập trình có thể được dùng để mô phỏng cả những thực thể sống trong thế giới thực. Ví dụ như một học sinh, một khách hàng...

Class Là Gì

Một class là một bản thiết kế (hoặc kế hoạch) để tạo (xây dựng) object.

Để sản xuất một chiếc Laptop, một chiếc điện thoại, một ngôi nhà, một chiếc đèn bàn thì nhà sản xuất cần có một bản thiết kế (hoặc bản vẽ kỹ thuật).

Bản thiết kế (hoặc bản vẽ kỹ thuật) trong trường hợp này đóng vai trò là một class trong lập trình hướng đối tượng.

Với mỗi một class chúng ta có thể tạo được nhiều object khác nhau.

Với cùng một bản vẽ kỹ thuật xây dựng chúng ta có thể xây dựng được nhiều ngôi nhà khác nhau. Tương tự cùng một bản thiết kế chúng ta cũng có thể sản xuất ra hàng loạt chiếc điện thoại khác nhau.

Một class có thể kế thừa một class khác.

Bản thiết kế một mẫu laptop đời 2016 của hãng Dell có thể sử dụng lại các chi tiết có trong bản thiết kế mẫu laptop đời 2015. Trong lập trình hướng đối tượng chúng ta nói bản thiết kế năm 2016 kế thừa (inherite) bản thiết kế năm 2015.

Tới đây sau khi đã tìm hiểu về object và class trong lập trình nói chung, chúng ta sẽ xem xem các kiến thức này được áp dụng như thế nào trong ngôn ngữ Python.

Tạo Class và Object với Python

Trong python để định nghĩa một class:

class <class name >(<parent class name>):
    <methods>

Trong đó:

  • class_name: Tên của class.
  • parent_class: Tên của class cha mà class hiện tại kế thừa.
  • methods: Các method đóng vai trong như các hàm của object, chúng định nghĩa các hành vi (hay tính năng) của object (được tạo từ class).

Ví dụ dưới đây định nghĩa một class có tên là Student với 3 method __init__()intro() và getFullname():

class Student():
    def __init__(self, f_name, l_name):
        self.first_name = f_name
        self.last_name = l_name
    def intro():
        print("Hi, my name is %s!" %(l_name))
    def getFullname(self):
        return self.first_name + " " + self.last_name

Trong ví dụ trên method __init__() là một method đặc biệt trong Python. Method này sẽ được tự động gọi khi chúng ta khởi tạo object từ class:

superMan = Student("Kent", "Clark") # Hi, my name is Kent Clark

## Hiển thị thuộc tính "first_name" của object
print(superMan.first_name) # Hiển thị: Kent

Trong đoạn code trên, chúng ta khởi tạo object superMan từ class Student với hai đối số truyền vào cho method __init__() là Kent và Clark. Với tham số đầu tiên self thì Python sẽ tự động truyền vào giá trị cho tham số này là chính object hiện tại. Do đó khi khởi tạo object từ class Student chúng ta chỉ truyền vào 2 tham số thay vì 3 đối số.

10 bình luận


Đăng bình luận