Чотири принципи ООП:
1. Інкапсуляція — приховування внутрішнього стану (#приватні поля)
2. Наслідування — extends, повторне використання коду
3. Поліморфізм — однаковий інтерфейс, різна реалізація
4. Абстракція — приховування складності
Патерн Singleton — один екземпляр на весь застосунок:
1class Config {
2 static #instance = null;
3
4 #settings = {};class Stack {
#items = [];
push(item) { this.#items.push(item); }
pop() { return this.#items.pop(); }
peek() { return this.#items[this.#items.length - 1]; }
isEmpty() { return this.#items.length === 0; }
get size() { return this.#items.length; }
}
const s = new Stack();
s.push(10); s.push(20); s.push(30);
console.log(s.peek());
console.log(s.pop());
console.log(s.size);
class Node { constructor(v) { this.value = v; this.next = null; } }
class LinkedList {
constructor() { this.head = null; }
append(v) {
const node = new Node(v);
if (!this.head) { this.head = node; return; }
let cur = this.head;
while (cur.next) cur = cur.next;
cur.next = node;
}
toArray() {
const arr = []; let cur = this.head;
while (cur) { arr.push(cur.value); cur = cur.next; }
return arr;
}
}
const list = new LinkedList();
[1,2,3,4,5].forEach(n => list.append(n));
console.log(list.toArray());
class Queue {
#items = [];
enqueue(item) { this.#items.push(item); }
dequeue() { return this.#items.shift(); }
front() { return this.#items[0]; }
isEmpty() { return this.#items.length === 0; }
get size() { return this.#items.length; }
toArray() { return [...this.#items]; }
}
const q = new Queue();
q.enqueue('Аліна'); q.enqueue('Богдан'); q.enqueue('Вікторія');
console.log(q.front());
q.dequeue();
console.log(q.toArray());