We Share Knowledge

Môi trường Lớp và Đối tượng

May 5, 2020

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

avatar
  Subscribe  
Notify of
{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}