Javascript là một ngôn ngữ hướng đối tượng
Tôi biết, chủ đề này đã được thảo luận rất nhiều lần, quá nhiều lần. Tuy nhiên nó luôn là chủ đề thời sự. Mỗi khi một nhà phát triển ngôn ngữ Java hoặc C# hoặc bất kỳ ngôn ngữ OOP nào khác tiếp xúc với JavaScript, anh ấy đều phàn nàn về điều đó. Anh ấy nói rằng làm việc với nó là một mớ hỗn độn, nó không có kiểu, không có cấu trúc tốt, nó có một số điểm kỳ lạ, hỗ trợ đối tượng của nó rất tầm thường và chắc chắn nó không phải là ngôn ngữ OOP Một số khiếu nại này có thể được chấp nhận, nhưng một số khiếu nại khác là định kiến, chẳng hạn như khiếu nại rằng JavaScript không có loại và nó không phải là ngôn ngữ OOP. Về điểm sau, trước khi khẳng định, bạn nên tự hỏi mình. điều gì làm cho ngôn ngữ lập trình trở thành ngôn ngữ lập trình hướng đối tượng? OOP là gì?Mô hình OOP không dựa trên đặc tả tiêu chuẩn chính thức. Không có tài liệu kỹ thuật nào định nghĩa OOP là gì và không phải là gì. Định nghĩa OOP chủ yếu dựa trên ý nghĩa thông thường được lấy từ các bài báo được xuất bản bởi các nhà nghiên cứu ban đầu như Kristen Nygaard, Alan Kays, William Cook và những người khác. Đã có nhiều nỗ lực để định nghĩa OOP và một định nghĩa được chấp nhận rộng rãi để phân loại ngôn ngữ lập trình là Đối tượng
Để đáp ứng yêu cầu đầu tiên, một ngôn ngữ phải cho phép nhà phát triển mô tả thực tế bằng cách sử dụng các đối tượng và xác định mối quan hệ giữa các đối tượng, chẳng hạn như sau
Thông thường, yêu cầu thứ hai được đáp ứng nếu một ngôn ngữ hỗ trợ các nguyên tắc sau
Đáp ứng các yêu cầu này là điều thường cho phép chúng tôi phân loại một ngôn ngữ là Hướng đối tượng JavaScript và OOPVì vậy, bây giờ chúng ta biết một ngôn ngữ OOP sẽ trông như thế nào. Chúng tôi có thể chứng minh rằng JavaScript là ngôn ngữ OOP không? Cho thấy rằng các đối tượng JavaScript hỗ trợ Hiệp hội, Tổng hợp và Thành phần là tầm thường. Hãy xem xét đoạn mã sau Ở đây chúng tôi có một ví dụ về cách ba mối quan hệ cơ bản có thể được triển khai trong JavaScript Về Đóng gói, các đối tượng JavaScript là các thực thể hỗ trợ dữ liệu và chức năng, nhưng chúng không có hỗ trợ riêng nâng cao để ẩn các chi tiết bên trong. Các đối tượng JavaScript không quan tâm đến quyền riêng tư. Tất cả các thuộc tính và phương thức đều có thể truy cập công khai nếu không thận trọng. Tuy nhiên, chúng ta có thể áp dụng một số kỹ thuật để xác định trạng thái bên trong của đối tượng và bảo vệ nó khỏi sự truy cập từ bên ngoài. từ việc sử dụng getters và setters để khai thác các bao đóng Kế thừa được JavaScript hỗ trợ ở cấp độ cơ bản thông qua cái gọi là Kế thừa nguyên mẫu. Ngay cả khi một số nhà phát triển có thể coi nó hơi thô sơ, thì cơ chế kế thừa JavaScript hoàn toàn hiệu quả và cho phép đạt được kết quả tương tự như các ngôn ngữ OOP được công nhận rộng rãi. Dù bạn nói gì đi nữa, JavaScript có một cơ chế “theo đó một đối tượng có được một số hoặc tất cả các tính năng từ một hoặc nhiều đối tượng khác”, và đây là sự kế thừa Với Đa hình, thử thách có vẻ khó hơn, vì nhiều người liên kết khái niệm này với các kiểu dữ liệu. Trên thực tế, tính đa hình liên quan đến nhiều khía cạnh của ngôn ngữ lập trình và nó không chỉ liên quan đến ngôn ngữ OOP. Thông thường, nó liên quan đến các mục như thuốc generic, quá tải và phân loại cấu trúc. Tất cả những điều này dường như là quá nhiều đối với một ngôn ngữ gõ “đơn giản” và yếu ớt như JavaScript. Đây không phải là sự thật. trong JavaScript, chúng ta có thể triển khai các loại đa hình khác nhau theo nhiều cách và có thể chúng ta đã vô tình làm điều đó nhiều lần OOP không có lớp học“OK, nhưng JavaScript không có lớp học. ” Nhiều nhà phát triển không coi JavaScript là ngôn ngữ hướng đối tượng thực sự do nó thiếu khái niệm lớp và vì nó không bắt buộc tuân thủ các nguyên tắc OOP. Andrea Chiarelli là tác giả của Mastering JavaScript Object Oriented Programming (Packt Publishing) Là đối tượng JavaScriptJavaScript nặng hướng đối tượng . Nó tuân theo một mô hình dựa trên nguyên mẫu, nhưng nó cũng cung cấp một cú pháp lớp để kích hoạt các mô hình OOP điển hình.
Tại sao JavaScript không phải là ngôn ngữ OOP?Tại sao? . Một ngôn ngữ lập trình OO phải có đối tượng, phương thức, thuộc tính, lớp, đóng gói, tập hợp, kế thừa và đa hình . Bạn có thể triển khai tất cả các điểm này, nhưng JavaScript thì không. |