Từ blog của bạn, có vẻ như bạn đã quen thuộc với cả lập trình bắt buộc và lập trình chức năng và bạn đã quen thuộc với các khái niệm cơ bản liên quan đến lập trình hướng đối tượng, nhưng bạn chưa bao giờ thực sự "nhấp chuột" như những gì làm cho nó hữu ích Tôi sẽ cố gắng giải thích theo kiến thức đó và hy vọng rằng nó hữu ích cho bạn.
Về cốt lõi, OOP là một cách sử dụng mô hình bắt buộc để quản lý tốt hơn mức độ phức tạp cao bằng cách tạo các cấu trúc dữ liệu "thông minh" mô hình hóa miền vấn đề. Trong một chương trình (tiêu chuẩn không hướng đối tượng), bạn đã có hai điều cơ bản: biến và mã biết phải làm gì với chúng. Mã này lấy đầu vào từ người dùng và nhiều nguồn khác, lưu trữ nó trong các biến, vận hành trên nó và tạo dữ liệu đầu ra cho người dùng hoặc các vị trí khác.
Lập trình hướng đối tượng là một cách để đơn giản hóa chương trình của bạn bằng cách lấy mẫu cơ bản đó và lặp lại nó ở quy mô nhỏ hơn. Giống như một chương trình là một tập hợp lớn dữ liệu với mã biết phải làm gì với nó, mỗi đối tượng là một phần dữ liệu nhỏ được liên kết với mã để biết phải làm gì với nó.
Bằng cách chia nhỏ miền vấn đề thành các phần nhỏ hơn và đảm bảo càng nhiều dữ liệu càng tốt được liên kết trực tiếp với mã biết phải làm gì với nó, bạn sẽ dễ dàng suy luận về quy trình nói chung và cả về quy trình phụ. các vấn đề tạo nên quá trình.
Bằng cách nhóm dữ liệu vào các lớp đối tượng, bạn có thể tập trung mã liên quan đến dữ liệu đó, làm cho mã có liên quan dễ dàng hơn để tìm và gỡ lỗi. Và bằng cách đóng gói dữ liệu đằng sau các chỉ định truy cập và chỉ truy cập nó thông qua các phương thức, (hoặc thuộc tính, nếu ngôn ngữ của bạn hỗ trợ chúng), bạn sẽ giảm đáng kể khả năng tham nhũng dữ liệu hoặc vi phạm bất biến.
Và bằng cách sử dụng tính kế thừa và đa hình, bạn có thể sử dụng lại các lớp có sẵn, tùy chỉnh chúng để phù hợp với nhu cầu cụ thể của bạn, mà không phải sửa đổi bản gốc hoặc viết lại mọi thứ từ đầu. (Đó là điều bạn không bao giờ nên làm , nếu bạn có thể tránh nó.) Chỉ cần cẩn thận bạn hiểu đối tượng cơ sở của mình, hoặc bạn có thể kết thúc với chuột túi sát thủ .
Đối với tôi, đây là những nguyên tắc cơ bản của lập trình hướng đối tượng: quản lý phức tạp, tập trung mã và mô hình hóa miền vấn đề được cải thiện thông qua việc tạo các lớp đối tượng, kế thừa và đa hình, và tăng tính an toàn mà không mất sức mạnh hoặc kiểm soát thông qua việc sử dụng đóng gói và tính chất. Tôi hy vọng điều này giúp bạn hiểu tại sao rất nhiều lập trình viên thấy nó hữu ích.
EDIT: Trả lời câu hỏi của Joel trong các bình luận,
Bạn có thể giải thích "chương trình hướng đối tượng" chứa gì (ngoài những khiếm khuyết ưa thích mà bạn đã vạch ra) về cơ bản khác với một chương trình bắt buộc không? Làm thế nào để bạn "có được quả bóng lăn?"
Một chút từ chối ở đây. Mô hình "chương trình hướng đối tượng" của tôi về cơ bản là mô hình Delphi, rất giống với mô hình C # /. NET do chúng được tạo bởi các thành viên nhóm Delphi trước đây. Những gì tôi đang nói ở đây có thể không áp dụng, hoặc không áp dụng nhiều như vậy, trong các ngôn ngữ OO khác.
Một chương trình hướng đối tượng là một chương trình trong đó tất cả logic được cấu trúc xung quanh các đối tượng. Tất nhiên điều này phải được bootstrapping ở đâu đó. Chương trình Delphi điển hình của bạn chứa mã khởi tạo tạo một đối tượng singleton được gọi Application
. Khi bắt đầu chương trình, nó gọi Application.Initialize
, sau đó gọi đến Application.CreateForm
mọi hình thức bạn muốn tải vào bộ nhớ từ đầu, sau Application.Run,
đó hiển thị biểu mẫu chính trên màn hình và khởi động vòng lặp đầu vào / sự kiện tạo thành lõi của bất kỳ chương trình máy tính tương tác.
Ứng dụng và biểu mẫu của bạn thăm dò các sự kiện đến từ HĐH và dịch chúng thành các cuộc gọi phương thức trên đối tượng của bạn. Một điều rất phổ biến là việc sử dụng các trình xử lý sự kiện hoặc "đại biểu" trong .NET-speak. Một đối tượng có một phương thức cho biết, "thực hiện X và Y, nhưng cũng kiểm tra xem liệu trình xử lý sự kiện cụ thể này có được chỉ định hay không và gọi nó nếu có." Trình xử lý sự kiện là một con trỏ phương thức - một bao đóng rất đơn giản chứa tham chiếu đến phương thức và tham chiếu đến thể hiện đối tượng - được sử dụng để mở rộng hành vi của các đối tượng. Ví dụ: nếu tôi có một đối tượng nút trên biểu mẫu của mình, tôi sẽ tùy chỉnh hành vi của nó bằng cách đính kèm một trình xử lý sự kiện OnClick, điều này khiến một số đối tượng khác thực thi một phương thức khi nhấp vào nút.
Vì vậy, trong một chương trình hướng đối tượng, hầu hết các công việc được thực hiện bằng cách xác định các đối tượng với một số trách nhiệm nhất định và liên kết chúng với nhau, thông qua các con trỏ phương thức hoặc bằng một đối tượng gọi trực tiếp một phương thức được xác định trong giao diện chung của đối tượng khác. (Và bây giờ chúng tôi quay lại đóng gói.) Đây là một ý tưởng mà tôi không có khái niệm trở lại trước khi tôi tham gia các lớp học OOP ở trường đại học.