Tuy nhiên, gần đây thế giới phần mềm dường như đang nghiêng về các mô hình khác như lập trình chức năng.
Đó là tranh cãi. Đầu tiên, tôi không thấy bất kỳ mô hình nào khác ngoài OOP và lập trình chức năng được thảo luận rộng rãi, vì vậy tôi đoán chúng ta có thể quên cụm từ "mô hình khác như" , chúng ta hãy nói về FP, không có gì khác.
Những lý do tại sao lập trình chức năng trở nên phổ biến trong những năm qua đã được thảo luận trong các câu hỏi khác ở đây, tôi sẽ không lặp lại điều này ( ví dụ ở đây hoặc ở đây ). Nhưng, theo tôi, đây không phải là vì "OOP là một sai lầm lớn" hay "Chức năng so với OOP là loại trừ lẫn nhau", nó giống như mọi người mở rộng hộp công cụ của họ và cố gắng tận dụng tốt nhất cả hai thế giới. Ok, chắc chắn có những chuyên gia là những người cứng rắn ủng hộ người này hơn người kia, nhưng bạn sẽ tìm thấy những kẻ đó ở cả hai phía.
Nó làm tôi suy nghĩ, còn về đóng gói và các nguyên lý OOP khác thì sao? Họ có sai không?
Đóng gói có nhiều hương vị khác nhau. Các ngôn ngữ lập trình chức năng và các cấu trúc ngôn ngữ cung cấp các hình thức đóng gói nhất định, các đối tượng khác hướng đối tượng. Nếu bạn đang tìm kiếm các ví dụ về đóng gói với các phương tiện chức năng, hãy bắt đầu với các bao đóng .
Liên quan đến "các nguyên lý khác": không, chúng không sai, nhưng đối với các kịch bản nhất định như song song hóa quy mô cao, các phương pháp tiếp cận chức năng có thể mở rộng tốt hơn. Đối với các kịch bản khác, như tạo các khung UI được thiết kế tốt, OOP tiếp cận tỷ lệ có thể tốt hơn (YMMV, tôi không có ví dụ tốt hơn trong tay). Hơn nữa, tôi chắc chắn đối với hầu hết các kịch bản trong thế giới thực, nó phụ thuộc vào kiến thức và kinh nghiệm của nhóm với mô hình lập trình yêu thích của nó như thế nào một hệ thống nhất định sẽ mở rộng.
Có phải OOP được áp dụng sai? Chẳng hạn, Alan Kay được chú ý khi nói trong Bài phát biểu OOPSLA'97: "Tôi đã phát minh ra thuật ngữ hướng đối tượng và tôi có thể nói với bạn rằng tôi không có C ++ trong đầu."
Chắc chắn OOP thường được áp dụng sai bởi nhiều người, nhưng tôi chắc chắn điều tương tự cũng đúng với FP. Và tôi sẽ ngạc nhiên nếu John Mc Carthy (nhà thiết kế của Lisp) có một cái gì đó giống như Javascript khi anh ấy nghĩ về lập trình chức năng (thương xót tôi, đừng châm chọc tôi quá nhiều cho sự so sánh đó ;-)
Joe Armstrong - "Các đối tượng liên kết các chức năng và cấu trúc dữ liệu với nhau thành các đơn vị không thể chia tách. Tôi nghĩ đây là một lỗi cơ bản vì các chức năng và cấu trúc dữ liệu thuộc về các thế giới hoàn toàn khác nhau."
Tôi đoán nhà phát minh của Erlang có một số lập luận tốt, nhưng anh ta cũng có quan điểm rất riêng của mình, vì vậy hãy để anh ta có ý kiến và xây dựng ý kiến của riêng bạn. Có rất nhiều chuyên gia khác có ý tưởng khác về việc này.