“JavaScript gồm phải ngữ điệu lập trình hướng đối tượng người sử dụng không?” Tôi biết, chủ thể này vẫn được bàn bạc rất nhiều lần, không ít lần. Mặc dù nó vẫn là một chủ đề “thời sự” rét hổi. Mỗi lúc một lập trình sẵn viên Java hoặc C# hoặc ngẫu nhiên lập trình viên ngữ điệu lập trình hướng đối tượng người sử dụng (OOP) nào khác tiếp xúc với JavaScript, anh ta phần đa phàn nàn về điều đó.

Bạn đang xem: Lập trình hướng đối tượng javascript

Anh ấy nói rằng thao tác với JavaScript là một trong mớ lếu láo độn, rằng nó không có kiểu, nó không được cấu tạo tốt, nó có một trong những điểm kỳ lạ, cung ứng đối tượng của chính nó là bình thường và chắc chắn nó không hẳn là ngôn ngữ OOP.

Rất nhiều ý kiến nảy ra, có người thì đồng tình, có fan thì phản bội đối. Tuy nhiên theo tôi, trước khi xác minh nó, bạn nên tự hỏi: điều gì làm cho một ngôn ngữ lập trình trở nên một ngôn từ lập trình hướng đối tượng?

OOP là gì?


*
*

OOP viết tắt của Object Oriented Programing tuyệt lập trình hướng đối tượng người tiêu dùng là một mẫu mã hình lập trình dựa trên khái niệm “công nghệ đối tượng”, cơ mà trong đó, đối tượng chứa đựng những dữ liệu, những trường, thường được hotline là các thuộc tính và mã nguồn được tổ chức triển khai thành các phương thức kèm theo các yêu cầu:

Khả năng mô hình hóa một vấn đề thông qua các đối tượngHỗ trợ một số nguyên tắc cho phép tái thực hiện mô-đun và mã nguồn

Để đáp ứng yêu mong đầu tiên, một ngôn từ phải được cho phép lập trình mô tả thực tế bằng phương pháp sử dụng các đối tượng và xác định các quan hệ giữa các đối tượng người tiêu dùng như sau:

Quan hệ liên kết: Đây là kĩ năng của đối tượng người dùng để tham chiếu cho một đối tượng độc lập khácQuan hệ tổng hợp: Đây là kỹ năng của đối tượng người dùng để nhúng một hoặc nhiều đối tượng người dùng độc lậpQuan hệ thành phần: Đây là kỹ năng của đối tượng để nhúng một hoặc nhiều đối tượng người sử dụng phụ thuộc

Thông thường, yêu mong thứ hai được thỏa mãn nhu cầu nếu một ngôn ngữ cung ứng các hiệ tượng sau:

Tính đóng gói: Đây là kĩ năng tập trung vào một dữ liệu thực thể duy nhất với ẩn những chi tiết bên phía trong của nóTính kế thừa: Đây là phương pháp mà một đối tượng người dùng có được một số trong những hoặc tất cả các trực thuộc tính, phương thức từ một hoặc nhiều đối tượng người sử dụng khácTính đa hình: Đây là kỹ năng xử lý các đối tượng người tiêu dùng khác nhau dựa vào kiểu dữ liệu hoặc cấu tạo của chúngTính trừu tượng: Đây là khả năng của chương trình làm lơ hay không chú ý đến một trong những khía cạnh của tin tức mà nó đang trực tiếp làm việc lên, tức thị nó có công dụng tập trung vào phần đông cốt lõi đề xuất thiết.

Việc đáp ứng những yêu ước này thường cho phép chúng ta phân loại một ngữ điệu là Hướng đối tượng.

JavaScript gồm phải ngữ điệu lập trình hướng đối tượng người tiêu dùng không?

Vì vậy, bây chừ chúng ta biết ngữ điệu OOP sẽ trông như thế nào. Bạn cũng có thể chứng minh rằng JavaScript là một trong những ngôn ngữ OOP không?

Hãy xem lấy ví dụ như sau:


var johnSmith = firstName: "John", lastName: "Smith", address: street: "123 Duncannon Street", city: "London", country: "United Kingdom" ;var nickSmith = firstName: "Nick", lastName: "Smith", address: //Composition street: "321 Oxford Street", city: "London", country: "United Kingdom" ;johnSmith.parent = nickSmith; var company = name: "ACME Inc.", employees: <>;company.employees.push(johnSmith);company.employees.push(nickSmith);
Code language: PHP (php)Đây là 1 ví dụ về phong thái ba mối quan hệ cơ bản có thể được xúc tiến trong JavaScript.

Về tính đóng gói, các đối tượng JavaScript không lưu ý đến quyền private. Toàn bộ các ở trong tính và cách thức đều có thể truy cập public còn nếu không cẩn thận.

Tuy nhiên, bạn có thể áp dụng một vài kỹ thuật để khẳng định trạng thái bên phía trong của đối tượng người sử dụng và bảo đảm an toàn nó khỏi sự truy vấn từ mặt ngoài: từ việc sử dụng getters cùng setters đến khai thác các closure.


*
*

Tính thừa kế được cung cấp bởi JavaScript ở lever cơ bản của nó trải qua cái gọi là kế thừa Prototype. Ngay cả khi một vài lập trình viên có thể coi nó là 1 chút thô sơ, cơ chế thừa kế JavaScript trả toàn kết quả và cho phép nhận được kết quả tương từ bỏ như những ngôn ngữ OOP được thừa nhận rộng rãi.

Dù bạn nói gì, JavaScript bao gồm một phép tắc “mà một đối tượng người tiêu dùng có được một số trong những hoặc toàn bộ các tính năng từ một hoặc nhiều đối tượng người sử dụng khác”, và đấy là kế thừa.

Với tính đa hình, thách thức có vẻ khó khăn hơn, bởi vì nhiều người liên kết khái niệm này với những kiểu dữ liệu. Bên trên thực tế, tính nhiều hình tương quan đến nhiều khía cạnh của một ngữ điệu lập trình, với nó không chỉ có liên quan lại đến các ngôn ngữ OOP.

Xem thêm: Tổng Hợp 11 Phim Việt Nam Chiếu Rạp 2020, Top 14 Phim Chiếu Rạp Việt Nam Hay Nhất Năm 2020

Thông thường xuyên nó tương quan đến các mục như generics,overloadingstructural subtyping. Tất cả những điều này ngoài ra quá nhiều so với một ngôn ngữ đơn giản dễ dàng và yếu ớt như JavaScript. Điều này không đúng: trong JavaScript, bạn có thể triển khai những kiểu nhiều hình không giống nhau theo vô số phương pháp và gồm thể chúng ta đã vô tình làm điều này nhiều lần.

Và tính trừu tượng cũng vậy, nó cũng không ví dụ như tính nhiều hình.

OOP mà không tồn tại class à?

“JavaScript ban sơ thực sự không có class”. Các lập trình viên không coi JavaScript là một ngôn ngữ hướng đối tượng người tiêu dùng thực sự bởi thiếu định nghĩa lớp và vị nó ko thực thi tuân thủ các hiệ tượng OOP.

Tuy nhiên, bạn cũng có thể thấy rằng khái niệm không bằng lòng của chúng ta không tất cả tham chiếu ví dụ đến những lớp. Những tính năng và chính sách được yêu thương cầu so với các đối tượng. Những lớp ko phải là 1 trong những yêu ước thực sự, nhưng đôi lúc chúng là một trong những cách dễ dãi để trừu tượng hóa các tập đối tượng người tiêu dùng có những thuộc tính chung.

Vì vậy, một ngôn ngữ rất có thể là Hướng đối tượng nếu nó cung cấp các đối tượng ngay cả khi không có lớp, như trong JavaScript.


*
*

Hơn nữa, các nguyên tắc OOP cần thiết cho một ngữ điệu sẽ được hỗ trợ. Thiết kế viên có thể chọn áp dụng các kết cấu cho phép anh ta tạo thành mã Hướng đối tượng người dùng hoặc không. Nhiều người chỉ trích JavaScript vì các lập trình viên rất có thể viết mã vi phạm những nguyên tắc OOP.

Nhưng trên đây chỉ là việc lựa lựa chọn của xây dựng viên, không hẳn ràng buộc về ngôn ngữ. Nó cũng xẩy ra với những ngôn ngữ lập trình khác, ví dụ như C++.

Kể tự ES6, cú pháp JavaScript OOP là cú pháp tương đồng như C++, Java cùng C #. Tôi biết điều này rất có thể gây ngạc nhiên cho một số trong những người thực hiện JavaScript dẫu vậy nó thiệt tuyệt. Nó trong khi đã xoá bỏ những định con kiến cũ của mọi bạn về một ngôn ngữ không hẳn ngôn ngữ lập trình sẵn hướng đối tượng người tiêu dùng như JavaScript.

Kết luận

Câu chuyện đó chỉ là trước đây mà thôi, các bạn đừng để những định loài kiến cũ gây hình ảnh hướng đến quan tâm đến của phiên bản thân về một ngôn ngữ lập trình làm sao nhé. Nếu như ai đó hỏi tôi rằng “JavaScript có phải ngôn từ lập trình hướng đối tượng người dùng không?”, tất nhiên tôi sẽ xác minh một cách ví dụ là bao gồm nhé.

Mặc mặc dù OOP của JavaScript chẳng thể bằng những ngôn ngữ thuần OOP như Java, C# tuy thế tôi vẫn có thể code bình thường mà không bị ảnh hưởng. Cảm ơn ES6 đã mang lại cho JavaScript một hương vị biến đổi quý giá.