Phạm vi của bài viết này là để giúp bạn hiểu các khái niệm về oops một cách nhanh chóng và không phải là hướng dẫn chuyên sâu về viết mã với oops
Hệ thống lập trình hướng đối tượng hay còn gọi là OOPS là một trong những chủ đề nóng cho các cuộc phỏng vấn lập trình. Tôi đã nhiều lần được hỏi về khái niệm này [câu hỏi trực tiếp và gián tiếp] trong cuộc phỏng vấn, và thành thật mà nói, tôi đã không thể trả lời hầu hết các câu hỏi vì tôi chưa bao giờ hiểu rõ về nó. Nhưng khi tôi cố gắng nhìn kỹ những ưu điểm của nó và cố gắng hiểu chúng bằng ngôn ngữ lập trình yêu thích của mình, tôi cảm thấy như mình là một phiên bản cải tiến của chính mình khi viết mã và tôi hy vọng nó cũng giúp bạn cải thiện kỹ năng và kiến thức của mình
Hãy bắt đầu tìm hiểu về OOPS
Có bốn trụ cột
- đóng gói
- Di sản
- đa hình
- trừu tượng
Chúng ta hãy xem xét từng người trong số họ
đóng gói
đóng gói [hành động bao bọc một cái gì đó trong hoặc như thể trong một viên nang. ]
Bây giờ, nếu bạn đã hiểu nghĩa của từ thì bạn có thể liên hệ tương tự với mã của mình, hãy xem ví dụ
class Cat:
def __init__[self]:
self.sound = "meow"
def speak[self]:
print["Cat says: {}".format[self.sound]]
c = Cat[]
c.speak[]
# change the price
c.sound = "bow-wow"
c.speak[]
#OUTPUT
Cat says: meow
Cat says: bow-wow
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Trong ví dụ trên, lớp cat có một biến sound được đặt thành giá trị mặc định trong hàm tạo, và sau đó chúng ta cũng thay đổi giá trị của biến i này. e. c.sound = "bow-wow"
, Bây giờ bạn đã biết ý nghĩa của đóng gói theo định nghĩa trên, hãy coi lớp là một viên nang, bạn có nghĩ mã này tuân theo quy tắc đóng gói không?
Để tránh điều này, chúng ta có thể khai báo các biến riêng tư, trong Python, chúng ta biểu thị các thuộc tính riêng tư bằng cách sử dụng dấu gạch dưới làm tiền tố i. e đơn _ hoặc đôi __
class Cat:
def __init__[self]:
self.__sound = "meow"
def speak[self]:
print["Cat says: {}".format[self.__sound]]
c = Cat[]
c.speak[]
# change the price
c.sound = "bow-wow"
c.speak[]
#OUTPUT
Cat says: meow
Cat says: meow
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, nó đã được đóng gói. Vâng, đây là sự đóng gói.
Do đó, một số ví dụ thực tế về điều này là
- Ứng dụng ngân hàng cấm [hạn chế] khách hàng thay đổi số dư của Tài khoản
- Nó cũng được sử dụng để ẩn dữ liệu - giả sử bạn đăng nhập vào tài khoản email của mình, có rất nhiều quy trình trong phần phụ trợ mà bạn không kiểm soát được. Vì vậy, mật khẩu của bạn, có thể sẽ được truy xuất ở dạng mã hóa, được xác minh và chỉ khi đó bạn mới được cấp quyền truy cập. Bạn không có bất kỳ quyền kiểm soát nào đối với cách xác minh mật khẩu và điều này giúp mật khẩu an toàn khỏi bị lạm dụng. [nguồn. hỏi đáp]
Di sản
Kế thừa [để nhận được chất lượng, đặc tính, v.v.]. từ cha mẹ hoặc gia đình của bạn. ]
Như bạn thấy định nghĩa ở trên, Điều này cho phép chúng ta định nghĩa một lớp kế thừa các phương thức, thuộc tính từ lớp khác. Giả sử bạn cần một lớp mới với ít hoặc không cần sửa đổi thì bạn áp dụng khái niệm này
Lớp cơ sở được gọi là lớp cha và lớp dẫn xuất được gọi là lớp con. Đó là điều hiển nhiên, tôi biết. ]
Hãy để chúng tôi xem một ví dụ
class Family:
def __init__[self, family_name, number_of_members, country]:
self.family_name = family_name
self.number_of_members = number_of_members
self.country=country
def member_says[self]:
print[f"Hey, I am from {self.family_name} family and there are {self.number_of_members} members in family"]
class Family_detailed:
def __init__[self, family_name, number_of_members, country]:
self.family_name = family_name
self.number_of_members = number_of_members
self.country=country
def member_says[self]:
print[f"Hey, I am from {self.family_name} family and there are {self.number_of_members} members in family"]
def which_country[self]:
print[f"The {self.family_name} family has roots from {self.country}" ]
a = Family["Rodrigues",5,"Peru"]
b = Family_detailed["Bezos",15,"United States of America"]
a.member_says[]
b.member_says[]
b.which_country[]
#Output
Hey, I am from the Rodrigues family and there are 5 members in the family
Hey, I am from the Bezos family and there are 15 members in the family
The Bezos family has roots in the United States of America
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Mục đích của lớp đầu tiên là hiển thị tên gia đình và số lượng thành viên nhưng lớp thứ hai muốn hiển thị thông tin tương tự cùng với quốc gia. Như bạn thấy có rất nhiều mã phổ biến ở đây, hãy sử dụng tính kế thừa để làm cho nó đơn giản hơn
class Family:
def __init__[self, family_name, number_of_members, country]:
self.family_name = family_name
self.number_of_members = number_of_members
self.country=country
def member_says[self]:
print[f"Hey, I am from {self.family_name} family and there are {self.number_of_members} members in family"]
class Family_detailed[Family]:
def which_country[self]:
print[f"The {self.family_name} family has roots from {self.country}" ]
a = Family["Rodrigues",5,"Peru"]
b = Family_detailed["Bezos",15,"United States of America"]
a.member_says[]
b.member_says[]
b.which_country[]
#Output
Hey, I am from the Rodrigues family and there are 5 members in the family
Hey, I am from the Bezos family and there are 15 members in the family
The Bezos family has roots in the United States of America
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Wow, như bạn thấy mã đã giảm đáng kể. Vì vậy, đây là tài sản thừa kế, hãy chuyển sang trụ cột tiếp theo
trừu tượng
Trừu tượng [Một ý tưởng chung hơn là một ý tưởng liên quan đến một đối tượng, con người hoặc tình huống cụ thể. ]
Để hiểu rõ hơn, hãy lấy một ví dụ về một chiếc ô tô, mọi người không coi chiếc ô tô là hàng ngàn bộ phận riêng lẻ, thay vào đó, họ xem nó như một đối tượng được xác định rõ ràng với hành vi độc đáo. Họ không cần hiểu sự phức tạp của những phần đó và cách cộng tác với nhau. Điều tương tự cũng xảy ra với máy bán hàng tự động, bạn chỉ muốn bỏ tiền vào và lấy món ăn vặt yêu thích của mình và không cần hiểu hệ thống hoạt động như thế nào
nói một cách đơn giản, Trừu tượng tập trung vào việc ẩn các triển khai bên trong của một quy trình hoặc phương thức khỏi người dùng. Bằng cách này, người dùng biết họ đang làm gì nhưng không biết công việc đang được thực hiện như thế nào
Đây là một chút khác biệt so với các trụ cột khác. Python không cấp các lớp trừu tượng theo mặc định. Thay vào đó, Python đi kèm với một mô-đun phù hợp với cơ sở cho các lớp Cơ sở Trừu tượng [ABC] và tên mô-đun đó là ABC. Một phương thức trở nên trừu tượng khi được trang trí bằng từ khóa @abstractmethod
Hãy lấy một ví dụ đơn giản
from abc import ABC, abstractmethod
class Company[ABC]:
def work[self]:
pass
class Manager[Company]:
def work[self]:
print["I assign work to and manage team"]
class Employee[Company]:
def work[self]:
print["I complete the work assigned to me"]
# Driver code
R = Manager[]
R.work[]
K = Employee[]
K.work[]
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
đa hình
đa hình [điều kiện xảy ra ở một số dạng khác nhau]
Một trong những ví dụ tuyệt vời về sự hiểu biết này sẽ là Ben 10. Anh ấy là một người nhưng anh ấy có thể phục vụ thế giới dưới nhiều hình thức
Quay lại lập trình, nó đề cập đến việc sử dụng một phương thức/toán tử duy nhất để biểu diễn các loại khác nhau trong các tình huống khác nhau