A few basic things about OOP in Python

  1. Lập trình hướng đối tượng (OOP) là gì?

Lập trình hướng đối tượng, hay gọi tắt là OOP, là một mô hình lập trình cung cấp một phương tiện để các thuộc tính và hành vi được gói vào các đối tượng riêng lẻ.

Chẳng hạn, một đối tượng có thể đại diện cho một người có thuộc tính tên, tuổi, địa chỉ, v.v., với các hành vi như đi bộ, nói chuyện, thở và chạy. Hoặc một email có các thuộc tính như danh sách người nhận, chủ đề, nội dung, v.v. và các hành vi như thêm tệp đính kèm và gửi.

Nói cách khác, lập trình hướng đối tượng là một cách tiếp cận để mô hình hóa các thứ cụ thể, trong thế giới thực như ô tô cũng như các mối quan hệ giữa các công ty và nhân viên, sinh viên và giáo viên, v.v. OOP mô hình các thực thể trong thế giới thực như các đối tượng phần mềm, có một số dữ liệu liên quan đến chúng và có thể thực hiện các chức năng nhất định.

Một mô hình lập trình phổ biến khác là lập trình thủ tục, cấu trúc một chương trình giống như một công thức trong đó nó cung cấp một tập hợp các bước, dưới dạng các hàm và khối mã, chảy tuần tự để hoàn thành một nhiệm vụ.

  1. Classes
  • Để xác định một lớp, sử dụng lớp từ khóa, theo sau là tên của lớp và dấu hai chấm (:).
  • Dòng đầu tiên trong phần thân của lớp là một chuỗi mô tả ngắn gọn về lớp này (Tùy chọn), bạn có thể truy cập chuỗi này thông qua “ClassName.__ doc__.”
  • Trong thân của lớp bạn có thể khai báo các thuộc tính, phương thức (method) và các phương thức khởi tạo (Constructor)

Thuộc tính:

  • Là các biến thuộc về lớp (Ví dụ như Hình vuông thì sẽ có cạnh và các hình vuông khác nhau có thể khác nhau về độ dài cạnh).

Phương thức (Method):

  • Phương thức của class nó tương tự như một hàm thông thường, nhưng nó là một hàm của class, để sử dụng nó bạn cần phải gọi thông qua đối tượng.
  • Tham số đầu tiên của phương thức luôn là self (Một từ khóa ám chỉ chính class đó).
  • “self” trong Python gần như giống với “this” trong một số ngôn ngữ lập trình khác.

Phương thức khởi tạo (Constructor):

  • Phương thức khởi tạo (Constructor) là một phương thức đặc biệt của lớp (class), nó luôn có tên là init
  • Tham số đầu tiên của constructor luôn là self (Một từ khóa ám chỉ chính class đó).
  • Constructor được sử dụng để tạo ra một đối tượng.
  • Constructor gán các giá trị từ tham số vào các thuộc tính của đối tượng sẽ được tạo ra.
  • Bạn chỉ có thể định nghĩa nhiều nhất một phương thức khởi tạo (constructor) trong class.
  • Nếu class không được định nghĩa constructor, Python mặc định coi rằng nó thừa kết từ constructor của lớp cha.

Ví dụ về khai báo một class:

Khi bạn tạo một đối tượng của lớp Ractangle trên thì Constructor sẽ được gọi đến và lưu các tham số vào các thuộc tính tương ứng được khai báo.

Ví dụ:

Khi bạn khởi tạo r1 như hình trên thì Constructor được gọi đến và lưu giá trị tương với hai thuộc tính “width” và “height” là “10” và “5”.

  1. Inheritance

Kế thừa(Inheritance) là quá trình một lớp này thừa hưởng các thuộc tính và phương thức của lớp khác. Các lớp mới này được thừa hưởng từ lớp khác được gọi là các lớp con của lớp đó và các lớp mà các lớp con thừa hưởng được gọi là các lớp cha.

Điều quan trọng cần lưu ý là các lớp con ghi đè hoặc mở rộng chức năng (ví dụ: thuộc tính và hành vi) của các lớp cha.Nếu lớp con không có phương thức khởi tạo (Constructor) thì nó sẽ lấy Constructor của lớp cha để sử dụng. Nói cách khác, các lớp con kế thừa tất cả các thuộc tính và hành vi của cha mẹ nhưng cũng có thể chỉ định các hành vi khác nhau để tuân theo.

Ví dụ:

Tiếp tục với ví dụ ban đầu khi ta khai báo thêm lớp con là abcd kế thừa từ lớp Rectangle thì khi tạo một đối tượng r3 thì cũng giống với r2 nó có hai thuộc tính width và height cùng các phương thức trong lớp Rectangle, bên cạnh đó nó có thêm phương thức getPerimeter() được thêm mới khi khởi tạo lớp abcd.

Và bạn có thể ghi đè lại phương thức getArea() như trên hình.

5 Likes

Chúc mừng, chúc mừng @anon51455413 đã có bài viết đầu tiên rất đầy đủ về OOP trên Stories :wink: :wink: :wink:
Mặc dù tuần vừa qua, team mình “yếu đuối” quá toàn các bạn “đau ốm”, “bệnh tật”, trong đó có cả em. Nhưng anh thấy @Lynn vẫn nỗ lực để hoàn thành và theo kịp mục tiêu tuần cùng với nhóm. Đó là điều anh cảm thấy rất vui và đáng khen dành cho em đó @@@
Về mặt nôi dung trong bài viết này, anh thấy khá dễ hiểu và có được sự tổng hợp từ em.
Còn về mặt trình bày, anh thấy chưa ổn lắm đâu nhé. Em nên chú ý hơn ở những điểm anh note sau nhé:

  1. Cách lề cho phần tiêu mục và phần paragraph bên trong chưa cân xứng và còn lộn xộn (phần paragraph phải nằm sâu bên trong hơn so với dòng tiêu đề)
  2. Các tiêu đề em nên có cách làm nổi bật như bôi đậm nó, giúp người xem dễ quan sát được cấu trúc của bài viết
  3. Không nên để một bức ảnh có kích thước quá lớn trong bài viết. Em có thể cắt nhỏ phần nội dung cần tới, chứ không nên chụp full màn hình nhé.
  4. Khi em muốn viết code ngay tại đây thì trong Markdown có hỗ trợ em cách chèn code vào trong bài viết. Em tham khảo link hướng dẫn này nhé: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code-and-syntax-highlighting

:wink: :wink: :wink: Hầu hết đó cũng đều là những lỗi mà ngày trước giáo sư của anh hay nhắc anh khi trình bày báo cáo. Và bây giờ anh truyền hết lại cho em đó @@@
Rồi, rất cố gắng !!!
Bài viết tiếp theo em nhớ phải viết hay hơn đó nhé.
Viết làm sao để mấy anh chị trong công ty sau khi đọc xong phải “Ồ”, “À”, “Wow” thật to nhé :rofl: :rofl: :rofl:

4 Likes

@anon51455413
Anh chưa thấy cái tiêu đề vs nội dung nó khớp vs nhau nhé! Em đang nêu tổng quan OOP chứ chưa đi vào cái đặc trưng của nó vs Python, liệu nó có hay không có? Trả lời giúp anh nhé

1 Like

Em có câu hỏi same với huynh. Đây chỉ là 4 tiêu chuẩn của lập trình OOP, chưa có thấy cái implementation nào của 4 tính chất này trong Python. @anon51455413 trả lời cho bọn a nhé

À dạ thưa anh, theo em thì cái tiêu đề nó sẽ được hiểu theo kiểu là những thứ cơ bản của OOP và sẽ thể hiện qua một số ví dụ nhỏ của nó bằng Python chứ chưa đi vào sự đặc trưng ạ. Dạ do lần đầu tiên viết bài nên em vẫn có nhiều lỗi mắc phải ạ. Em cảm ơn sự góp ý của hai anh ạ @anon19898721, @walter

1 Like

Ok em ơi. K phải lỗi làm gì đâu, em trả lời ở loạt bài sau thì tag bọn a vào review nhé

1 Like

Thôi anh xin em, anh sợ rồi, lần sau không cần dư lày nhé. Anh hay giật mình lắm =))

1 Like

Hóng bài của Tommy với loạt kiến thức của Retail và Assistant mà anh em chưa được chiêm ngưỡng

Da?? Là sao vậy anh??

Với tay này, em phải xưng hô như sau mới phải phép: Thằng kia, mày muốn gì?

3 Likes

Dài mà chưa biết bắt đầu từ đâu a ê

thật sự muốn react haha :rofl: mà ko có emoticon ấy anh ạ

Thế bây giờ nó thưa anh thì chả sợ à :))) mai sau tới công ty nó xúc cho hết ăn cháo ấy chứ bộ

Bắt đầu từ ngay thứ đang làm :smiley:

3 Likes

@anon51455413 Ơ thế bài này chưa edit lại thêm các phần mọi người còm men à em?

1 Like

Em nghĩ bọn em cần một cái ghi lại cho phần mình mở đầu như thế nào và quá trình viết bài thì bản thân đã được cải thiện những gì và khi nhìn lại e thấy được rằng em thiếu, sai sót ở đâu một cách dễ dàng hơn ạ. Nên e k sửa lại theo ý mọi người góp mà sẽ để lại và sửa đổi ở các bài khác . Em cảm ơn ạ! ^^

1 Like