Trong số các nhà phát triển, lập trình hướng đối tượng đã thu hút được một lượng lớn người theo dõi. Ngôn ngữ máy tính phổ biến Python cũng tuân theo mô hình hướng đối tượng.
Nó đề cập đến việc xác định các đối tượng và lớp trong Python, tạo cơ sở cho các nguyên tắc OOP. Trong hướng dẫn này về “lập trình hướng đối tượng trong Python”, bạn sẽ học cách khai báo các lớp Python, tạo các đối tượng từ chúng và sử dụng bốn kỹ thuật OOP.
Vì vậy, điều đầu tiên đầu tiên.
Lập trình hướng đối tượng là gì?
Trọng tâm chính của lập trình hướng đối tượng (OOP) là việc tạo ra các “đối tượng”. Một tập hợp các biến và hàm được kết nối với nhau tạo nên một đối tượng.
Các biến này thường được gọi là các thuộc tính của đối tượng và các hành vi của nó thường được gọi là các chức năng của nó. Các mục này cung cấp cho ứng dụng một cấu trúc dễ hiểu và hiệu quả hơn. Một chiếc ô tô là một ví dụ về một mặt hàng.
Nếu ô tô là một mặt hàng, các thuộc tính của nó sẽ bao gồm những thứ như màu sắc, kiểu máy, giá cả, nhãn hiệu, v.v. Ngoài ra, nó sẽ tăng tốc, giảm tốc độ và thay đổi bánh răng.
Một minh họa khác: Nếu chúng ta coi chó như một món đồ, thì một số đặc điểm của nó có thể là màu sắc, giống, tên, cân nặng, v.v. Và nó sẽ di chuyển, sủa, chơi, v.v.
Bởi vì nó kết hợp các khái niệm thế giới thực như đối tượng, ẩn, kế thừa, vv vào lập trình, lập trình hướng đối tượng được nhiều người biết đến. Bởi vì nó rất giống với hoàn cảnh trong thế giới thực, việc hình dung được thực hiện đơn giản hơn.
Các khái niệm về lập trình hướng đối tượng
Lớp & Đối tượng trong Python
Giống như tất cả các ngôn ngữ hướng đối tượng khác, Python cho phép bạn thiết kế các lớp để tạo các đối tượng. Các kiểu dữ liệu phổ biến nhất trong Python, bao gồm chuỗi, danh sách, từ điển và các đối tượng khác, là các lớp tích hợp sẵn.
Một lớp là một nhóm các phương thức được liên kết và các biến thể hiện xác định một loại đối tượng nhất định. Một lớp có thể được xem như là mô hình hoặc khuôn mẫu cho một đối tượng. Các biến tạo nên một lớp được gọi là các thuộc tính.
Một đối tượng là một thành viên của một lớp có một tập thuộc tính xác định. Do đó, bất kỳ số lượng đối tượng nào cũng có thể được tạo bằng cách sử dụng cùng một lớp.
Các lớp Python được định nghĩa bằng cách sử dụng lớp từ, sau đó được theo sau bởi tên lớp và dấu hai chấm. Hình minh họa về lớp học vẹt có thể là:
Ở đây, chúng ta khai báo lớp rỗng Parrot bằng cách sử dụng từ khóa class. Chúng tôi tạo các thể hiện từ các lớp. Một cá thể là một đối tượng cụ thể được tạo ra từ một lớp nhất định. 'pass' thường được sử dụng như một mã dự phòng cho mã mà chúng tôi có thể bỏ qua việc triển khai vào lúc này. Chúng tôi có thể thực thi mã Python mà không phát sinh lỗi bằng cách sử dụng từ khóa “pass”.
Việc khởi tạo một lớp dẫn đến một đối tượng (thể hiện). Chỉ mô tả của đối tượng được xác định khi một lớp được tạo. Do đó, không có bộ nhớ hoặc RAM được cấp phát.
Một ví dụ về đối tượng lớp con vẹt là:
Trong trường hợp này, obj là một đối tượng thuộc lớp Parrot.
Giả sử chúng ta biết chi tiết cụ thể về vẹt. Bây giờ chúng ta sẽ trình bày cách tạo lớp vẹt và các đối tượng của nó.
Phương pháp đặc biệt (__init__)
Một phương thức gọi là init xác định các thuộc tính mà mọi đối tượng Parrot phải có (). Khi một đối tượng Parrot mới được hình thành, hàm __init__ tạo ra trạng thái ban đầu của đối tượng bằng cách gán các giá trị mà chúng tôi cung cấp trong các thuộc tính của đối tượng.
Vì vậy, mỗi cá thể mới của lớp được khởi tạo bằng cách sử dụng __init __ (). Mặc dù __init __ () có thể chấp nhận bất kỳ số lượng tham số nào, nhưng self luôn là tham số đầu tiên.
Tham chiếu đến cá thể lớp đang hoạt động được bao gồm trong tự đối số. Tham số self, liên kết đến địa chỉ của đối tượng hiện tại của một lớp và cho phép chúng ta truy cập vào dữ liệu của các biến (đối tượng) của nó, biểu thị điều đó.
Ví dụ 1
Chúng tôi đã thành lập một lớp có tên là Parrot trong đoạn mã trên. Tiếp theo, các thuộc tính được xác định. Đặc điểm của một sự vật là thuộc tính của nó. Hàm __init__ của lớp là nơi các đặc điểm này được chỉ định.
Khi một đối tượng được hình thành, phương thức khởi tạo là phương thức được gọi ban đầu. Sau đó, các thể hiện của lớp Parrot được tạo. Blaze và Wonda trong trường hợp này là các tham chiếu (giá trị) đến các đối tượng mới của chúng ta. __class .species cho phép chúng ta truy cập thuộc tính lớp.
Mọi thể hiện của một lớp đều có các đặc điểm giống nhau. Các đặc điểm của instance cũng có thể được truy cập bằng cách sử dụng blaze.name và blaze.age. Tuy nhiên, tất cả các cá thể của một lớp đều có các thuộc tính cá thể duy nhất.
Ví dụ 2
Phương pháp
Các hàm được định nghĩa bên trong phần thân của một lớp được gọi là các phương thức. Họ được sử dụng để chỉ định cách một mặt hàng sẽ hoạt động như thế nào.
Hai phương thức sing () và dance được định nghĩa trong ứng dụng () đã nói ở trên. Bởi vì chúng được gọi trên một đối tượng thể hiện, chẳng hạn như ngọn lửa, chúng được gọi là các phương thức thể hiện.
Các khoản tài trợ của khái niệm OOPS
Bốn ý tưởng cốt lõi của lập trình hướng đối tượng là:
- di sản
- Đóng gói
- Tính đa hình
- Trừu tượng
di sản
Mọi người thường nói với trẻ sơ sinh rằng chúng có những đặc điểm khuôn mặt giống bố mẹ chúng hoặc chúng được thừa hưởng những nét đặc biệt từ bố mẹ.
Có thể bạn cũng đã quan sát thấy rằng bạn có một vài đặc điểm chung với cha mẹ mình. Tình hình trong thế giới thực cũng khá giống với tình trạng thừa kế.
Tuy nhiên, trong trường hợp này, các đặc tính của "lớp cha" được truyền lại cho "lớp con". Những khía cạnh này được gọi là “thuộc tính” và “phương pháp” trong ngữ cảnh này.
Một lớp có thể lấy các phương thức và thuộc tính của nó từ một lớp khác bằng cách sử dụng kỹ thuật được gọi là kế thừa. Kế thừa là quá trình lớp con nhận các thuộc tính của lớp cha.
Ví dụ:
Lớp cha Human được kế thừa bởi lớp con Boy trong ví dụ trên. Vì Boy kế thừa từ Human, chúng ta có thể truy cập tất cả các phương thức và thuộc tính của nó khi chúng ta tạo một thể hiện của lớp Boy.
Trong lớp Boy, một phương thức gọi là schoolName cũng đã được định nghĩa. Đối tượng lớp cha không thể truy cập vào phương thức schoolName. Tuy nhiên, phương thức schoolName có thể được gọi bằng cách tạo một đối tượng lớp con (Boy).
Đóng gói
Cung cấp cho mọi biến trong chương trình quyền truy cập toàn cục không phải là một động thái khôn ngoan khi làm việc với các lớp và xử lý dữ liệu nhạy cảm.
Không cung cấp cho chương trình quyền truy cập hoàn toàn vào bất kỳ biến nào trong số đó, tính năng đóng gói cung cấp một cơ chế để chúng ta có được các biến cần thiết.
Các phương thức được định nghĩa rõ ràng cho mục đích này có thể được sử dụng để cập nhật, chỉnh sửa hoặc xóa dữ liệu khỏi các biến. Phương pháp lập trình này có ưu điểm là tăng cường bảo mật và kiểm soát dữ liệu đầu vào.
Xem các biến có thể truy cập nhanh như thế nào trong phần minh họa bên dưới:
Tính đa hình
Giả sử bạn đang sử dụng điện thoại của mình để duyệt qua Nguồn cấp dữ liệu Instagram. Khi bạn muốn nghe một số bản nhạc, bạn đã truy cập Spotify và bắt đầu phát bài hát yêu thích của mình.
Sau một thời gian, bạn nhận được một cuộc gọi, vì vậy bạn tạm dừng mọi việc đang làm trong nền để trả lời cuộc gọi đó. Bạn của bạn đã gọi điện và yêu cầu bạn nhắn tin cho họ số điện thoại của một người nào đó.
Vì vậy, bạn đã gửi cho anh ấy số điện thoại qua SMS và tiếp tục thực hiện nhiệm vụ của mình. Bạn đã chọn được gì chưa? Chỉ với một thiết bị — điện thoại di động — bạn có thể lướt qua các nguồn cấp dữ liệu, nghe nhạc, nhận và gọi điện cũng như nhắn tin.
Do đó, tính đa hình có thể so sánh với điều đó. Poly có nghĩa là nhiều, và morph biểu thị các dạng khác nhau. Do đó, tính đa hình nói chung đề cập đến một cái gì đó với nhiều hình thức khác nhau.
Hoặc “cái gì đó”, tùy thuộc vào hoàn cảnh, có thể biểu hiện nhiều hành vi khác nhau. Trong OOPS, tính đa hình mô tả các chức năng có cùng tên nhưng hành vi khác biệt. Ngoài ra, một chữ ký hàm khác có cùng tên hàm (các tham số được truyền cho hàm).
Ví dụ:
Ở đây, chúng ta có thể sử dụng biến động vật để lặp qua các đối tượng Zebra và Rabbit, bằng cách sử dụng các phương thức phiên bản tương ứng của chúng. Do đó, hành vi (màu sắc () và ăn ()) của cả Ngựa vằn và Thỏ đều được thể hiện ở đây bằng một biến duy nhất được gọi là động vật. Do đó, nó tuân thủ các quy tắc đa hình.
Trừu tượng
Bạn rất có thể sử dụng máy tính xách tay, điện thoại hoặc máy tính bảng để đọc nội dung này. Trong khi đọc nó, có lẽ bạn cũng đang ghi chú, gạch chân những đoạn chính và có thể lưu trữ một số thông tin trong các tệp cá nhân của bạn.
Tất cả những gì bạn có thể thấy khi đọc đây là “màn hình” với dữ liệu được hiển thị cho bạn. Bạn chỉ nhìn thấy các phím của bàn phím khi bạn nhập, vì vậy bạn không phải lo lắng về các yếu tố bên trong như cách nhấn một phím có thể khiến từ đó xuất hiện trên màn hình.
Ngoài ra, cách nhấn một nút trên màn hình của bạn có thể khởi chạy một tab mới.
Do đó, bất cứ điều gì chúng ta có thể quan sát trong tình huống này đều là trừu tượng. Chúng ta chỉ có thể nhìn thấy kết quả mà nó đang tạo ra chứ không phải những phức tạp bên trong (điều thực sự quan trọng đối với chúng ta).
Tương tự như vậy, trừu tượng hóa chỉ tiết lộ các chức năng mà mọi thứ sở hữu trong khi che giấu bất kỳ triển khai hoặc chi tiết bên trong nào.
Mục tiêu chính của Abstraction là che giấu thông tin cơ bản và bất kỳ triển khai dữ liệu không liên quan nào để mọi người chỉ nhìn thấy những gì họ cần xem. Nó hỗ trợ trong việc quản lý độ phức tạp của mã.
Ví dụ:
Một lớp trừu tượng liên quan đến phương tiện có mặt ở đây. Bởi vì nó kế thừa từ lớp trừu tượng ABC, nó là trừu tượng. Bởi vì các phương thức trừu tượng không được định nghĩa hoặc để trống, lớp Xe có một phương thức trừu tượng được gọi là không có bánh xe thiếu định nghĩa.
Họ dự đoán các lớp kế thừa các lớp trừu tượng để cung cấp cho việc triển khai của phương thức.
Lợi ích của các khái niệm OOPS
- Bằng cách đóng gói, bảo mật cao và bảo mật dữ liệu đạt được.
- Tính linh hoạt trong việc có nhiều phiên bản đa hình của cùng một lớp.
- Mức độ phức tạp cao của mã đã được giảm bớt bằng cách trừu tượng hóa.
- Thay vì sàng lọc qua hàng trăm dòng mã để xác định một vấn đề duy nhất, tính mô đun của lập trình làm cho việc gỡ lỗi trở nên đơn giản.
- Việc sử dụng lại mã là do lớp con kế thừa các thuộc tính của lớp cha.
- Có thể giải quyết vấn đề hiệu quả bởi vì chúng tôi tạo ra các lớp thực hiện các hành động cần thiết cho mỗi vấn đề nhỏ. Vấn đề sau đây có thể được giải quyết nhanh hơn nữa vì chúng ta có thể sử dụng lại các lớp đó.
Kết luận
Tóm lại, chúng tôi đã tìm hiểu về các ý tưởng OOPS trong Python, mô hình lập trình phổ biến nhất hiện nay.
Sau khi đọc phần này, bạn hẳn đã nhận ra rằng mô hình OOPS hoàn toàn xử lý ý tưởng của các lớp và đối tượng. và các khái niệm OOPS như đóng gói, đa hình, kế thừa và trừu tượng.
Bình luận