Hướng Đối Tượng Trong Javascript

     

Trước lúc đọc nội dung bài viết này, chúng ta nên ôn lại kỹ năng về object cùng prototype vào Javacript.Trước khi đối chiếu về OOP vào JavaScript, mình sẽ nhắclại sơ 1 số đặc thù trongOOP.

Bạn đang xem: Hướng đối tượng trong javascript

Các đặc điểm của OOP

*

Trong xây dựng hướng đối tượng (OOP) có 4 tính chất là tính gói gọn (Encapsulation), tính kế thừa (Inheritance), tính nhiều hình (Polymorphism) cùng tính trừu tượng (Abstraction)

1.Encapsulation (Tính đóng gói):

Tính đóng là kỹ thuật khiến cho bạn che cất được số đông thông tin phía bên trong đối tượng. Mục đích chính của tính đóng gói là giúp hạn chế các lỗi khi cải cách và phát triển chương trình.Tính chất này không chất nhận được người sử dụng những đối tượng đổi khác trạng thái nội tại của một đối tượng. Chỉ có các phương thức nội tại của đối tượng người sử dụng cho phép đổi khác trạng thái của nó. Việc cho phép môi trường bên phía ngoài tác đụng lên những dữ liệu nội trên của một đối tượng người tiêu dùng theo biện pháp nào là hoàn toàn tùy nằm trong vào fan viết mã. Đây là tính chất đảm bảo sự trọn vẹn của đối tượng.

Các lợi ích chính nhưng mà tính đóng gói với lại:

Hạn chế được những truy xuất chưa hợp lệ tới các thuộc tính của đối tượng.Giúp đến trạng thái của đối tượng luôn đúng.Giúp ẩn đi những tin tức không quan trọng về đối tượng.Cho phép bạn biến hóa cấu trúc bên phía trong lớp nhưng mà không ảnh hưởng tới lớp khác.

2.Inheritance(Tính kế thừa):

Kế vượt trong lập trình hướng đối tượng chính là thừa hưởng lại phần nhiều thuộc tính và cách thức của một lớp. Có nghĩa là nếu lớp A thừa kế lớp B thì lớp A sẽ sở hữu những trực thuộc tính và phương thức của lớp B.Lớp được thừa hưởng những ở trong tính và cách tiến hành từ lớp không giống được điện thoại tư vấn là dẫn xuất (Derived Class) xuất xắc lớp bé (Subclass) với lớp bị lớp khác thừa kế được call là lớp các đại lý (Base Class) hoặc lớp phụ thân (Parent Class).

Các ích lợi của tính kế thừa:

Giúp tái áp dụng lại code.Tăng tài năng mở rộng của chương trình.

3.Polymorphism(Tính nhiều hình):

Tính đa hình thể hiện thông qua việc gửi những thông điệp (message). Bài toán gửi những thông điệp này hoàn toàn có thể so sánh như việc gọi các hàm bên trong của một đối tượng. Những phương thức dùng trả lời cho một thông điệp đang tùy theo đối tượng mà thông điệp này được gửi tới sẽ sở hữu phản ứng khác nhau. Tín đồ lập trình có thể định nghĩa một đặc tính (chẳng hạn trải qua tên của những phương thức) cho 1 loạt các đối tượng người sử dụng gần nhau nhưng mà khi thực hiện thì cần sử dụng cùng một tên thường gọi mà sự thi hành của mỗi đối tượng sẽ auto xảy ra tương ứng theo tính năng của từng đối tượng người tiêu dùng mà không bị nhầm lẫn.

4. Abstraction(Tính trừu tượng):

Tính trừu tượng là 1 trong những tính chất mà chỉ triệu tập vào những công dụng của đối tượng người tiêu dùng và ẩn đi những thông tin không phải thiết. đặc thù này giúp đỡ bạn trọng chổ chính giữa hơn vào những khả năng thay vị phải thân thương tới bí quyết mà nó được thực hiện.

Trong phạm vi nội dung bài viết này, họ sẽ bàn về 3đặc tính củaOOP (tính đóng gói, tính kế thừa, tính đa hình), đối chiếu cách hiện nay thựcchúng trong Java vàJavaScript.

OOP vào Java

Như các bạn đã biết, Java là một trong ngôn ngữ phía đối tượng, cho nên việc hiện tại thực các đặc tính OOP rất dễ dàng và nhanh gọn, dễ dàng hiểu.

1. Tính đóng gói

Tính bao đóng góp trong Java thể hiện bằng cách để phạm vi truy cập của những thuộc tính là private cùng truy xuất tới những thuộc tính này trải qua phương thức public (gọi là các setter, getter).

Xem thêm: Hướng Dẫn Cách Đọc Thông Số Block Điều Hòa, Hướng Dẫn Cách Kiểm Tra Block Điều Hòa

Ví dụ:

class Student private String name; private int age; private double gpa; public String getName() return name; public void setName(String name) this.name = name; public int getAge() return age; public void setAge(int age) this.age = age; public double getGpa() return gpa; public void setGpa(double gpa) this.gpa = gpa; Với giải pháp làm này tin tức của đối tượng đã được ẩn đi, các bạn chỉ hoàn toàn có thể giao tiếp với đối tượng người sử dụng thông qua các phương thức. Điều này cũng giống với thực tế. Ví dụ khi bạn chạm chán một bạn lạ thì các bạn không thể biết được những thuộc tính của bạn này (số năng lượng điện thoại, sở thích, ...), đề cập cả khi bạn hỏi thì tín đồ này cũng chưa chắc chắn đã trả lời cho bạn đúng sự thật (giống như cách làm không trả về quý hiếm thực trực thuộc tính cơ mà trả về một cực hiếm khác).

2. Tính kế thừa

Trong Java, để kế thừa một lớp chúng ta dùng từ bỏ khóa extends.

Ví dụ:

class Person private String name; private int age; public void setName(String name) this.name = name; public String getName() return name; public void setAge(int age) this.age = age; public int getAge() return age; class Student extends Person private double gpa; public void setGpa(double gpa) this.gpa = gpa; public double getAge() return gpa; class Entry public static void main(String<> args) Student s = new Student(); s.setName("Khoa"); s.setAge(19); s.setGpa(10); System.out.println("Name: " + s.getName()); System.out.println("Age: " + s.getAge()); System.out.println("GPA: " + s.getGpa()); Kết quả lúc chạy chương trình:

Name: KhoaAge: 19GPA: 10.0Có thể thấy rằng lớp Student sẽ được thừa kế những cách thức của lớp Person.

3. Tính đa hình

Tính đa hình vào code bên dưới 3 hình thức: nạp ông chồng phương thức, ghi đè cách làm và đa hình thông qua các đối tượng người sử dụng đa hình(polymorphic objects).

Ví dụ về tính chất đa hình cùng với nạp ông chồng phương thức:Phương thức cộng sẽ có các "forms" là cộng 2 số nguyên, cộng 2 số thực, cùng 3 số nguyên, v.v.. Rất có thể thấy thuộc là thủ tục cộng nhưng lại có nhiểu kiểu không giống nhau nên đó chính là bộc lộ của tính đa hình.

package OOP;class Calculator public int add(int a, int b) return a + b; public double add(double a, double b) return a + b; public int add(int a, int b, int c) return a + b + c; public class Entry public static void main(String<> args) Calculator s = new Calculator(); System.out.println(s.add(1, 2)); System.out.println(s.add(2.1, 2.4)); System.out.println(s.add(1, 2, 3)); Kết quả lúc chạy chương trình:

34.56

OOP trong Javascript

Javascript thì khác, không như Java, chúng ta cần phải áp dụng một vài mẹo nhỏ để thực hiện các tính năng này.

1. Tính đóng gói

Trong Javascript, để triển khai tính bao đóng, ta hoàn toàn có thể tạo ra 1 Constructor Function,đóng gói toàn bộ các trường với hàm vào 1 object. Thông thường, chúng ta hay khai báo như sau:

function Person(firstName, lastName) this.firstName = firstName; this.lastName = lastName; this.showName = function() console.log(this.firstName + " " + this.lastName); ;var psn1 = new Person("Khoa", "Nguyen");// những property khai báo vào vươn lên là this có thể bị truy hỏi xuất từ mặt ngoài// object không còn bao đóng nữapsn1.firstName = "changed";console.log(ps1.firstName); // changedVới các khai báo này, tính bao đóng không được đảm bảo. Các property có thể bị tầm nã cập, thayđổi từ bên ngoài. Ở đây, ta phảisử dụng đổi mới cục bộ.

function Person(firstName, lastName) var fstName = firstName; var lstName = lastName; this.setFirstName = function(firstName) fstName = firstName; ; this.getFirstName = function() return fstName; ; this.setLastName = function(lastName) lstName = lastName; ; this.getLastName = function() return lstName; ;var person1 = new Person("Khoa", "Nguyen");console.log(person1.fstName); // Undefined, ko thể truy cập đượcconsole.log(person1.getFirstName()); // KhoaCác biến cục bộ này chỉ hoàn toàn có thể truy xuất trong Constructor Function, nó tương tự với những trường private trong Java.

Trong javascript, không tồn tại cách làm sao để tạo thành các ngôi trường protected (Chỉ rất có thể truy cập trường đoản cú class kế thừa) như JavaC#được.

2. Tính kế thừa

Trong Javascript không có từ khóa extends cũng giống như class, vậy nênPrototype (and Prototype chains) là sự việc triển khai tính kế thừa đối tượng của Javascript.

Xem thêm: Hướng Dẫn Đọc Và Viết Thứ, Ngày, Tháng, Năm Trong Tiếng Anh Chính Xác Nhất

Ví dụ:

function Person() this.firstName = "Per"; this.lastName = "son"; this.sayName = function() return this.firstName + " " + this.lastName ;// Viết một Constructor Function khácfunction SuperMan(firstName, lastName) this.firstName = firstName; this.lastName = lastName;// Ta muốn anh kiệt sẽ kế thừa những thuộc tính của Person// thực hiện prototype để kế thừaSuperMan.prototype = new Person();// tạo một object mới bởi Constructor Function var sm = new SuperMan("Khoa", "Nguyen");sm.sayName(); // Khoa Nguyen. Hàm này thừa kế từ prototype của PersonKhi trình thông dịch JS đánh giá thuộc tính đối tượng định nghĩa đến nó, trước hết nó kiểm đánh giá object trước. Trường hợp object không có thuộc tính được định nghĩa, nó đang kiểm traprototypecủa đối tượng người sử dụng với cùng thuộc tính, nếu như nó được tìm thấy, nó đã trả về thuộc tính đó.Nó không giống với OOP trong Java là prototype object rất có thể truy cập vào đối tượng người tiêu dùng tạo ra trước vào sau bất kể lúc nào có sự thay đổi nào bên trên prototype

function Bread() ; // constructor functionlet brownBread = new Bread(); // object of type "Bread"let sodaBread = new Bread(); // object of type "Bread"Bread.prototype.toast = function() console.log("I am toasting!"); ; // mix the function on a toast property on the prototype// inherited prototype is accessible!brownBread.toast(); // I am toasting!sodaBread.toast(); // I am toasting!

3. Tính đa hình với trừu tượng

Đối cùng với tính đa hình và tính trừu tượng, việc áp dụng 2 đặc thù này vào Javascript là không rõ ràng. Cho nên vì vậy mình vẫn không trình diễn trong nội dung bài viết này

Việc vận dụng lập trình hướng đối tượng người sử dụng vào JavaScript là tương đối khó. Tuy nhiên, nếu bạn nắm vững những kỹ năng và kiến thức cơ bản mà mình đã trình bày trên đây, thì bản thân tin chắc rằng bạn sẽ dễ dàng xem thêm và vận dụng lập trình hướng đối tượng người tiêu dùng trong JavaScript.

Tạm kết

Như vậy trong bài viết này, họ đã cùng tò mò vềOOP trongjavascript.Bạn thấy chũm nào về JS, hãy giới thiệu những chủ kiến trong quá trình sử dụng js nhé. Nếu chúng ta thấy nội dung bài viết hữu ích hãy rate 5* và giới thiệu cho mọi fan tham khảo!

Hãy nhằm lại bình luận để mình rất có thể hoàn thiện bạn dạng thân hơn trong tương lai. Cám ơn những bạn!