OOP — asosiy 4 ta tamoyil

DarslarWeb dasturlash

OOP — asosiy 4 ta tamoyil

Encapsulation, Inheritance, Polymorphism, Abstraction — dasturlashning asosiy tamoyillari.

55 daqiqa
JavaScript — Dars 15

OOP 4 tamoyili

Katta loyihalarni puxta qurish uchun kerak bo'lgan to'rt ustun. Bugun real misollar bilan.

encapsulationinheritancepolymorphismabstraction

4 ta tamoyil

5 ta mavzu
  1. 011. Encapsulation — inkapsulyatsiya
  2. 022. Inheritance — meros olish
  3. 033. Polymorphism — ko'p shakllilik
  4. 044. Abstraction — mavhumlashtirish
  5. 05Hammasi birga — amaliy misol

1. Encapsulation — inkapsulyatsiya

Ma'lumot va uni boshqaradigan metodlarni bitta obyekt ichida saqlash. Ichki ma'lumotni tashqaridan yashirish — faqat ruxsat berilgan metodlar orqali o'zgartirish.

1class BankHisobi {
2 #balans = 0; // # — maxfiy maydon (private)
3
4 kirim(summa) {
5 if (summa <= 0) throw new Error("Summa musbat bo'lishi kerak");
6 this.#balans += summa;
7 }
8
9 chiqim(summa) {
10 if (summa > this.#balans) throw new Error("Yetarli mablag' yo'q");
11 this.#balans -= summa;
12 }
13
14 get balans() {
15 return this.#balans;
16 }
17}
18
19const h = new BankHisobi();
20h.kirim(100000);
21console.log(h.balans); // 100000
22
23// h.#balans = 999999; // XATO — tashqaridan ochib bo'lmaydi
24// h.balans = 999999; // XATO — setter yo'q

2. Inheritance — meros olish

Umumiy funksionallikni ota sinfga chiqarib, bola sinflar uni qayta yozmaslik. Kod takrorlanishini kamaytiradi.

1class Transport {
2 constructor(nom, tezlik) {
3 this.nom = nom;
4 this.tezlik = tezlik;
5 }
6
7 yur() {
8 return `${this.nom} ${this.tezlik} km/s tezlikda harakatda`;
9 }
10}
11
12class Mashina extends Transport {
13 constructor(nom, tezlik, yoqilgi) {
14 super(nom, tezlik);
15 this.yoqilgi = yoqilgi;
16 }
17
18 tozala() {
19 return this.nom + " yuvildi";
20 }
21}
22
23class Velosiped extends Transport {
24 // constructor kerak emas — ota'niki ishlatiladi
25 tepki() {
26 return this.nom + "ning tepkisi aylanmoqda";
27 }
28}
29
30const m = new Mashina("Cobalt", 120, "benzin");
31const v = new Velosiped("Giant", 25);
32
33console.log(m.yur()); // meros olingan
34console.log(v.yur()); // meros olingan

3. Polymorphism — ko'p shakllilik

Bir nomli metod — har xil sinflarda o'zicha ishlaydi. Chaqiruvchi tafsilotni bilmasligi mumkin.

1class Hayvon {
2 ovoz() {
3 return "Ba'zi ovoz";
4 }
5}
6
7class It extends Hayvon {
8 ovoz() { // bir xil nomli metod
9 return "Vov-vov!";
10 }
11}
12
13class Mushuk extends Hayvon {
14 ovoz() { // yana qayta yozilgan
15 return "Miyov!";
16 }
17}
18
19class Sigir extends Hayvon {
20 ovoz() {
21 return "Muu!";
22 }
23}
24
25// Hammasini bir xil interfeys bilan ishlatamiz
26const hayvonlar = [new It(), new Mushuk(), new Sigir()];
27
28hayvonlar.forEach(h => console.log(h.ovoz()));
29// Vov-vov!
30// Miyov!
31// Muu!

4. Abstraction — mavhumlashtirish

Foydalanuvchiga faqat kerakli narsalarni ko'rsatib, ichki murakkablikni yashirish. Mashina haydovchisi dvigatel ichini bilishi shart emas.

1class Kofemashina {
2 // Ichki murakkablik — maxfiy
3 #suvQizdir() {
4 console.log("[ichki] Suv 95°C ga qizidi");
5 }
6
7 #qahvaTortir() {
8 console.log("[ichki] Qahva donalari maydalandi");
9 }
10
11 #filtrdanOtkaz() {
12 console.log("[ichki] Suyuqlik filtrdan o'tdi");
13 }
14
15 // Tashqi — oddiy interfeys
16 kofeTayyorla() {
17 this.#suvQizdir();
18 this.#qahvaTortir();
19 this.#filtrdanOtkaz();
20 return "Bir chashka kofe tayyor!";
21 }
22}
23
24const k = new Kofemashina();
25console.log(k.kofeTayyorla());
26
27// Foydalanuvchi faqat bitta tugmani bilsa yetarli
28// Ichkarida 10 ta ish bajarilishi mumkin

5. Hammasi birga — amaliy misol

1// 4 ta tamoyil bir loyihada
2
3// ABSTRACTION — umumiy «shakl»
4class Shakl {
5 constructor(nom) {
6 this.nom = nom;
7 }
8
9 yuzi() {
10 throw new Error("Bola sinf yuzi() metodini yozishi shart");
11 }
12
13 // POLYMORPHISM ga asos — bola sinflar qayta yozadi
14 tavsif() {
15 return `${this.nom} yuzi: ${this.yuzi().toFixed(2)}`;
16 }
17}
18
19// INHERITANCE + POLYMORPHISM
20class Doira extends Shakl {
21 #r; // ENCAPSULATION — maxfiy radius
22
23 constructor(r) {
24 super("Doira");
25 this.#r = r;
26 }
27
28 yuzi() { // Polimorfik qayta yozish
29 return Math.PI * this.#r ** 2;
30 }
31}
32
33class Kvadrat extends Shakl {
34 #tomon;
35
36 constructor(t) {
37 super("Kvadrat");
38 this.#tomon = t;
39 }
40
41 yuzi() {
42 return this.#tomon ** 2;
43 }
44}
45
46const shakllar = [new Doira(5), new Kvadrat(4)];
47shakllar.forEach(s => console.log(s.tavsif()));
48// "Doira yuzi: 78.54"
49// "Kvadrat yuzi: 16.00"
Hayvonot bog'i
Natijajonli

Yakuniy test

0 / 5

1.Ma'lumotni obyekt ichida yashirish — qaysi tamoyil?

2.extends kalit so'zi qaysi tamoyilga tegishli?

3.Bitta metod nomi, turli sinflarda har xil ishlaydi — bu?

4.Class ichida #balans qanday maydon?

5.Murakkab ichki ishni yashirib, oddiy interfeys berish?

Yakuniy loyiha

0 / 6