Object-Oriented Programming Flashcards
THE 4 FUNDAMENTAL OOP PRINCIPLES
Abstraction: Về cơ bản có nghĩa là bỏ qua hoặc ẩn đi những chi tiết không quan trọng .
Encapsulation: Về cơ bản có nghĩa là giữ một số thuộc tính và phương thức riêng tư bên trong Class để chúng không thể truy cập từ bên ngoài Class
Inheritance :Kế thừa làm cho tất cả các thuộc tính và phương thức của một lớp nhất định có sẵn cho một lớp con , tất nhiên sau đó tạo thành một hệ thống phân cấp giữa hai lớp này . ( Sử dụng lại logic chung cho cả hai lớp này )
Polymorphism: Tính đa hình có nghĩa là một lớp con có thể ghi đè lên một phương thức mà nó kế thừa từ một lớp cha .
What is Object-Oriented Programming
OOP is a programming paradigm based on the concept of objects
Các đối tượng có thể chứa dữ liệu ( mà chúng ta gọi là thuộc tính ) và code ( mà chúng ta gọi là methods )
Vì vậy, trong các đối tượng OOP là các đoạn mã hoặc khối mã độc lập , giống như các ứng dụng nhỏ của riêng chúng ta
Objects are building blocks of applications, and interact with one another;
Mô hình này được phát triển với mục tiêu tổ chức mã , do đó , để làm cho nó linh hoạt và dễ bảo trì hơn
Setters and Getters
Về cơ bản là các hàm lấy và đặt một giá trị nhưng được thể hiện dưới dạng một giá trị
class PersonCl {
constructor(fullName, birthYear) {
this.fullName = fullName;
this.birthYear = birthYear;
}
calcAge() {
console.log(2037 - this.birthYear);
}
get age() {
return 2037 - this.birthYear;
}
//Set property that already exists
set fullName(name) {
if (name.includes(‘ ‘)) this._fullName = name;
else alert(${name} is not a full name
);
}
get fullName(){
return this._fullName
}
}
Protected Properties and Methods
Sử dụng dấu “ _ “ trước các đối tượng mình muốn bảo vệ
Project Architecture
Kiến trúc là tất cả về việc tạo cho dự án một cấu trúc .
Và do đó , trong cấu trúc đó , chúng ta có thể phát triển chức năng .
Quan trọng nhất của kiến trúc dự án là quyết định vị trí và cách lưu trữ dữ liệu
Private Class Fields and Methods
// 1) Public fields
locale = navigator.language;
// 2) Private fields
#movements = [];
Chú Ý : Phải có dấu chấm phẩy . Và nó không có mặt trên Prototypes
OOP in JavaScript : Prototypes
Trong JavaScript chúng ta có một thứ gọi là nguyên mẫu và tất cả các đối tượng ( Object ) trong JavaScript đều được liên kết với một đối tượng nguyên mẫu nhất định .
Vì vậy , mỗi đối tượng có một nguyên mẫu (prototypes )
Đối tượng nguyên mẫu ( Prototypes Object ) chứa tất cả các đối tượng được liên kết với nguyên mẫu đó có thể truy cập và sử dụng . Và hành vi này thường được gọi là Prototypes inheritance
Prototypes inheritance : Có nghĩa là tất cả các đối tượng được liên kết với một đối tượng nguyên mẫu nhất định có thể sử dụng các phương pháp và thuộc tính được xác định trên nguyên mẫu đó
Inheritance Between “Classes”: Object.create
// Inheritance Between “Classes” : Object.create()
const PersonProto = {
calcAge() {
console.log(2037 - this.birthYear);
},
init(firstName, birthYear) {
this.firstName = firstName;
this.birthYear = birthYear;
},
};
const steven = Object.create(PersonProto);
const StudentProto = Object.create(PersonProto);
StudentProto.init = function (firstName, birthYear, course) {
PersonProto.init.call(this, firstName, birthYear);
this.course = course;
};
StudentProto.introduce = function () {
console.log(My name is ${this.firstName} and I study ${this.course}
);
};
const jay = Object.create(StudentProto);
jay.init(‘Jay’, 2010, ‘Computer Science’);
jay.introduce();
Inheritance Between “Classes”: Constructor Functions
const Person = function (firstName, birthYear) {
// Instance properties
this.firstName = firstName;
this.birthYear = birthYear;
};
Person.prototype.calcAge = function () {
console.log(2037 - this.birthYear);
};
const Student = function (firstName, birthYear, course) {
Person.call(this, firstName, birthYear);
this.course = course;
};
// Linking prototypes
Student.prototype = Object.create(Person.prototype);
Student.prototype.introduce = function () {
console.log(My name is ${this.firstName} and I study ${this.course}
);
};
const mike = new Student(‘Mike’, 2020, ‘Computer Science’);
mike.introduce();
mike.calcAge();
ES6 Classes
Class chỉ là một loại hàm đặc biệt => có class expression và class declaration
Đầu tiên , các lớp không được Hoisted
( có thể sử dụng chúng trước khi chúng được khai báo trong mã )
Nhưng trong Class thì không
2. Class are first-class citizes
- Classes are ecuted in strict mode
Chaining Methods
Thêm
return this
thì việc xâu chuỗi sẽ thực hiện được