Bản thân OOP đã không thay đổi nhiều kể từ khi thành lập. Một vài góc độ mới cho nó đã được khám phá, nhưng các nguyên tắc cốt lõi vẫn giống nhau. Nếu bất cứ điều gì, kiến thức tập thể được thu thập qua nhiều năm làm cho cuộc sống của lập trình viên dễ dàng hơn thay vì khó khăn hơn. Các mẫu thiết kế không phải là một trở ngại; họ cung cấp một hộp công cụ giải pháp cho các vấn đề tiêu chuẩn, được chắt lọc từ nhiều năm và nhiều năm kinh nghiệm.
Vậy tại sao bạn nhận thấy OOP ngày nay phức tạp hơn so với khi bạn bắt đầu sử dụng nó?
Một lý do có thể là mã bạn đang tiếp xúc trở nên phức tạp hơn - không phải vì OOP trở nên phức tạp hơn, mà bởi vì bạn đã tiến lên nấc thang học tập và đọc các cơ sở mã lớn hơn và phức tạp hơn.
Một lý do khác có thể là trong khi mô hình phức tạp không thay đổi, kích thước và độ phức tạp của một dự án phần mềm trung bình rất có thể có. Với sức mạnh xử lý có sẵn trên các điện thoại di động cấp khách hàng từng là giấc mơ ướt của nhà phát triển trên máy chủ cách đây chưa đầy hai thập kỷ, công chúng nói chung về cơ bản mong đợi GUI hoạt hình mượt mà cho ứng dụng vứt bỏ rẻ nhất và máy tính để bàn cấp thấp mạnh hơn so với "siêu máy tính" năm 1980, chỉ có điều tự nhiên là thanh này đã được nâng lên từ những ngày đầu của Smalltalk và C ++.
Và sau đó, có một thực tế là trong các ứng dụng hiện đại, đồng thời và song song là chuẩn mực chứ không phải là ngoại lệ, và các ứng dụng thường cần phải giao tiếp giữa các máy khác nhau, xuất ra và phân tích toàn bộ sở giao thức. Mặc dù OOP là một mô hình tổ chức tuyệt vời, nhưng nó cũng có những hạn chế của nó, giống như bất kỳ mô hình nào khác: ví dụ, nó không cung cấp nhiều sự trừu tượng cho đồng thời (hầu hết các triển khai đều ít nhiều được đưa ra ngoài hoặc hoàn toàn cho các thư viện) và đó không phải là cách tiếp cận tốt nhất có thể để xây dựng trình phân tích cú pháp và chuyển đổi dữ liệu. Lập trình hiện đại thường xuyên gặp phải những hạn chế của mô hình OOP và các mẫu thiết kế chỉ có thể đưa bạn đến nay. (Cá nhân, Tôi coi thực tế là chúng ta cần các mẫu thiết kế là một dấu hiệu của điều này - nếu mô hình cung cấp các giải pháp này vượt trội, nó sẽ có ý nghĩa hơn đối với các vấn đề này và các giải pháp tiêu chuẩn sẽ rõ ràng. Không có mẫu thiết kế để mô tả kế thừa phương thức, bởi vì nó là một tính năng cốt lõi của OOP; nhưng có một Mô hình Nhà máy, vì OOP không cung cấp một cách tự nhiên rõ ràng để xây dựng các đối tượng đa hình và trong suốt.)
Bởi vì điều này, hầu hết các ngôn ngữ OOP hiện đại kết hợp các tính năng từ các mô hình khác, khiến chúng trở nên biểu cảm hơn và mạnh mẽ hơn, nhưng cũng phức tạp hơn. C # là ví dụ điển hình cho việc này: nó có nguồn gốc OOP rõ ràng, nhưng các tính năng như đại biểu, sự kiện, suy luận kiểu, kiểu dữ liệu biến thể, thuộc tính, hàm ẩn danh, biểu thức lambda, tổng quát, v.v., bắt nguồn từ các mô hình khác, đáng chú ý nhất là Lập trình hàm .