Khái Niệm Lập Trình Hướng Đối Tượng

Lập Trình Theo Quá Trình

Trọng tâm của lập trình theo quá trình là hai từ "quá trình", tức là làm gì trước, làm gì sau, và làm gì cuối cùng. Cách tư duy cơ khí.

Lập trình theo quá trình không phải là một kỹ thuật, mà là một cách tư duy để giải quyết vấn đề

Ví dụ: Các bước để đặt một con voi vào tủ lạnh:

  1. Mở cửa tủ lạnh,
  2. Đặt con voi vào tủ lạnh
  3. Đóng cửa tủ lạnh

Ưu điểm: Giúp đơn giản hóa các vấn đề phức tạp, quy trình hóa Nhược điểm: Khả năng mở rộng kém, thay đổi một phần ảnh hưởng đến toàn bộ Ứng dụng: Ở những nơi không yêu cầu cao về khả năng mở rộng Ví dụ 2: Viết một chức năng đăng ký

Khái Niệm Lập Trình Hướng Đối Tượng

Trọng tâm của lập trình hướng đối tượng là hai từ "đối tượng"

Trong Python, mọi thứ đều là đối tượng

  1. Trong chương trình: Đối tượng là nơi chứa dữ liệu và chức năng
  2. Trong thực tế Đối tượng là sự kết hợp giữa đặc điểm và kỹ năng

Ưu điểm: Khả năng mở rộng cao Nhược điểm: Làm phức tạp hóa các vấn đề đơn giản Ứng dụng: Ở những nơi yêu cầu cao về khả năng mở rộng

Ví dụ: Hệ thống sinh viên chọn môn học

def chon_mon_hoc(thong_tin_sinh_vien, mon_hoc):
    thong_tin_sinh_vien['mon_hoc_da_chon'].append(mon_hoc)
    print('%s đã chọn môn %s' % (thong_tin_sinh_vien['ho_ten'], thong_tin_sinh_vien['mon_hoc_da_chon']))

sv1 = {
    'ho_ten': 'Tom',
    'tuoi': 19,
    'gioi_tinh': 'nam',
    'mon_hoc_da_chon': [],
    'chon_mon_hoc': chon_mon_hoc
}

sv2 = {
    'ho_ten': 'Kevin',
    'tuoi': 20,
    'gioi_tinh': 'nam',
    'mon_hoc_da_chon': [],
    'chon_mon_hoc': chon_mon_hoc
}

sv1['chon_mon_hoc'](sv1, 'Python')
sv2['chon_mon_hoc'](sv2, 'Python')

Định Nghĩa Lớp và Tạo Đối Tượng

Đối tượng: Sự kết hợp giữa đặc điểm và kỹ năng

Từ các góc độ khác nhau, việc phân loại sẽ khác nhau

Lớp: Sự kết hợp giữa các đặc điểm và kỹ năng tương đồng của một loạt đối tượng

Câu hỏi nảy sinh? Liệu có phải lớp có trước hay đối tượng có trước?

  1. Trong thực tế: Chắc chắn là đối tượng có trước, sau đó mới có lớp
  2. Trong chương trình: Phải định nghĩa lớp trước, sau đó mới gọi lớp để tạo đối tượng

Lưu ý: Tên lớp, tuân theo quy tắc đặt tên biến, tên lớp thường viết hoa chữ cái đầu

Nếu tên lớp có nhiều từ, nên sử dụng kiểu PascalCase

class SinhVien():
    # Định nghĩa thuộc tính lớp
    truong = 'ĐH Quốc Gia'
    
    # Trong lớp, hàm được gọi là phương thức
    def chon_mon_hoc(thong_tin_sinh_vien, mon_hoc):
        thong_tin_sinh_vien['mon_hoc_da_chon'].append(mon_hoc)
        print('%s đã chọn môn %s' % (thong_tin_sinh_vien['ho_ten'], thong_tin_sinh_vien['mon_hoc_da_chon']))
    print(12233333)
    
'''
    Khi định nghĩa lớp, những việc xảy ra?
        1. Sau khi định nghĩa lớp, mã trong thân lớp sẽ được thực thi ngay lập tức
        2. Khi thực thi mã trong thân lớp, các tên trong lớp sẽ được đưa vào không gian tên của lớp
        3. Không gian tên của lớp được gán cho __dict__, tên_lớp.__dict__
'''

# Cách xem không gian tên của lớp
print(SinhVien.__dict__)

# Tạo đối tượng, gọi lớp, tên_lớp()
sv1 = SinhVien()  # Gọi lớp để nhận một đối tượng rỗng
sv2 = SinhVien()

# Cách xem không gian tên của đối tượng
print(sv1.__dict__)  # Từ điển rỗng
print(sv2.__dict__)  # Từ điển rỗng

Tùy Ch Thuộc Tính Riêng Của Đối Tượng

class SinhVien():
    # Định nghĩa thuộc tính lớp
    truong = 'ĐH Quốc Gia'

    # Khởi tạo, phương pháp đặc biệt
    def __init__(thong_tin_sinh_vien, ho_ten, tuoi, gioi_tinh, mon_hoc_da_chon=[]):
        thong_tin_sinh_vien.ho_ten = ho_ten  # thong_tin_sinh_vien.__dict__['ho_ten'] = 'Tom'
        thong_tin_sinh_vien.tuoi = tuoi  # thong_tin_sinh_vien.__dict__['tuoi'] = 19
        thong_tin_sinh_vien.gioi_tinh = gioi_tinh  # thong_tin_sinh_vien.__dict__['gioi_tinh'] = 'nam'
        thong_tin_sinh_vien.mon_hoc_da_chon = mon_hoc_da_chon  # thong_tin_sinh_vien.__dict__['mon_hoc_da_chon'] = []

    # Trong lớp, hàm được gọi là phương thức
    def chon_mon_hoc(thong_tin_sinh_vien, mon_hoc):
        thong_tin_sinh_vien['mon_hoc_da_chon'].append(mon_hoc)
        print('%s đã chọn môn %s' % (thong_tin_sinh_vien['ho_ten'], thong_tin_sinh_vien['mon_hoc_da_chon']))


# SinhVien()
# sv = SinhVien(sv, 'Tom', 19, 'nam')
sv = SinhVien('Tom', 19, 'nam')  # Khi gọi lớp, phương thức __init__ sẽ được tự động kích hoạt, và đối tượng chính sẽ được truyền làm tham số đầu tiên cho hàm
sv1 = SinhVien('Kevin', 19, 'nam')  # Khi gọi lớp, phương thức __init__ sẽ được tự động kích hoạt, và đối tượng chính sẽ được truyền làm tham số đầu tiên cho hàm

# print(sv.__dict__)
# print(sv1.__dict__)

'''
    Quá trình gọi lớp còn được gọi là quá trình thực thể hóa, đối tượng nhận được được gọi là một thực thể
'''

Thứ Tự Tìm Kiếm Thuộc Tính

print(sv1.__dict__)
# 1. Thuộc tính lớp
# Đọc
# print(SinhVien.__dict__['truong'])
# print(SinhVien.truong)
#
# # Sửa
# SinhVien.truong = 'xxx'
#
#
# del SinhVien.truong
# # Xóa
#
# # Thêm
# SinhVien.aaa = 'xxx'
# print(SinhVien.__dict__)

# 2. Thêm, sửa, xóa thuộc tính của đối tượng
# print(sv.ho_ten)
# print(sv.tuoi)
# print(sv.gioi_tinh)

# print(sv1.ho_ten)
# print(sv1.tuoi)
# print(sv1.gioi_tinh)

# Thứ tự tìm kiếm thuộc tính của đối tượng: Tìm trong không gian tên của chính đối tượng trước, nếu không tìm thấy, hãy tìm trong lớp tạo ra đối tượng
print(sv.truong)
# print(sv.__dict__['truong'])

# Thêm
sv.x = 'aaa'
print(sv.__dict__)

# Sửa
sv.x = 'bbb'

# Xóa
del  sv.x

Thẻ: Lập trình hướng đối tượng oop python

Đăng vào ngày 15 tháng 7 lúc 15:05