Lập trình hướng đối tượng là sự kết hợp giữa dữ liệu có cấu trúc và các thủ tục cần thiết có thể vận hành trên dữ liệu đó. Đầu tiên chúng ta cần phân biệt giữa khái niệm Lớp và Đối tượng. Nếu nhìn theo góc độ dữ liệu có cấu trúc, một lớp như một bảng (table) dữ liệu, và đối tượng như một hàng (record) dữ liệu.
Name | Role | Age | Salary | Building | Room | Course |
---|---|---|---|---|---|---|
An | GV | 60 | 100000 | block D | 301 | OOP |
Bình | TG | 31 | 30000 | block D | 301 | OOP |
Huy | TG | 29 | 28000 | block D | 301 | OOP |
Đức | KTV | 19 | 14000 | block D | 301 | OOP |
Kiên | KTV | 20 | 15000 | block D | 301 | OOP |
Trong bảng có nhiều người có cùng giá trị dữ liệu, dựa vào đó ta đoán có nhiều thủ tục giống nhau. Qua đó ta có thể xem những người này như là thành viên của một lớp và có cùng thông tin chia sẻ khi thuộc lớp này. Một lớp được định nghĩa như sau:
class <name>:
<thuộc tính lớp thứ 1>
….
<thuộc tính lớp thứ n>
Để mô tả thông tin bản trên ta có lớp
class NV_OOP:
course = ‘OOP’
building = 'block D'
room = 301Điều quan trọng cần phân biệt là môi trường lớp “NV_OOP” và môi trường đối tượng trong lớp này. Ta có thể truy xuất giá trị thuộc tính của lớp, hay đối tượng sau khi định nghĩa bằng cách dùng ký hiệu dấu “.”. Cú pháp như sau:
<envExpr>.<var>Truy xuất giá trị của thuộc tính 'room' trong lớp 'NV_OOP'. Gọi NV_OOP.room, lúc này giá trị 301 được gọi. Thuộc tính 'room' lúc này đang ở trong môi trường lớp 'NV_OOP'
Để tạo một đối tượng của một lớp, ta thực hiện theo cú pháp sau:
<classExpr>(), lúc này một đối tượng được tạo ra với những giá trị khởi tạo mặc nhiên.
Ví dụ: đối tượng “obj1” của lớp “NV_OOP” được tạo như sau:
obj1 = NV_OOP()
đối tượng “obj1” có những giá trị mặc định như sau:
obj1.course = ‘OOP’
obj1.building = 'block D'
obj1.room = 301 #thuộc tính 'room' đang ở trong môi trường đối tượng obj1
và đối tượng “obj1” có những giá trị rỗng cho những thuộc tính đối tượng:
obj1.name = “ ”
obj1.role = “ ”
obj1.salary = “ ”
obj1.age = “ ”
Lúc này chúng ta mới gán giá trị cho những thuộc tính đối tượng:
obj1.name = ‘An’
obj1.role = ‘GV’
obj1.salary = 100000
obj1.age = 60
Khi ta định nghĩa một thủ tục liên quan đến một lớp chuyên biệt, ta gọi đó là phương thức của lớp. Giả sử ta muốn chào những thành viên trong lớp “NV_OOP”, thì ta định nghĩa thêm phương thức “salutation” vào lớp “NV_OOP” như sau:
class NV_OOP:
course = ‘OOP’
building = 'block D'
room = 301
def salutation(self):
return self.role + ‘ ’+self.name
Lúc này phương thức “salutation” cũng có môi trường lớp và môi trường đối tượng.
Tại môi trường lớp 'NV_OOP', ta có thể truy xuất như sau:
NV_OOP.salutation(obj1) #thể hiện việc gọi phương thức “salutation” từ lớp “NV_OOP” để chào đối tượng “obj1”.
Tại môi trường đối tượng 'obj1', ta có thể truy xuất như sau:
obj1.salutation() #không cần truyền tham số đầu vào phương thức “salutation”, vì Python tự hiểu việc này để tránh việc đề cập “obj1” hai lần.
Tiếp theo ta viết thêm phương thức khác để thực hiện việc tăng lương cho một đối tượng của lớp “NV_OOP”.
class NV_OOP:
course = ‘OOP’
building = 'block D'
room = 301
def salutation(self):
return self.role + ‘ ’+self.name
def giveRaise(self, percentage):
self.salary = self.salary * (1.0 + percentage)
Chúng ta có thể gọi phương thức “giveRaise” từ mội trường lớp:
NV_OOP.giveRaise(obj1, 0.2)
Hoặc từ môi trường đối tượng:
obj1.giveRaise(0.2)
Lúc này giá trị lương của đối tượng obj1 được tăng từ 100000 lên 120000.
Leave a Reply