Skip to content

Commit 5f26f74

Browse files
committed
Initial commit
1 parent b5e8d47 commit 5f26f74

6 files changed

Lines changed: 43 additions & 43 deletions

File tree

docs/01-srp/README.uz.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ permalink: /uz/01-srp/
1010
1111
# Single Responsibility Principle (SRP)
1212

13-
> Har bir class faqat **bitta o'zgarish sababiga** ega bo'lishi kerak.
13+
> Har bir klass faqat **bitta o'zgarish sababiga** ega bo'lishi kerak.
1414
15-
Har bir class yoki modul **bitta vazifani** bajarishi lozim.
16-
Agar bitta class bir nechta vazifani bajara boshlasa (masalan, biznes-logika, ma'lumotlarni saqlash, formatlash), ulardan birortasi o'zgarganda butun class'ni qayta yozish va test qilish kerak bo'ladi.
15+
Har bir klass yoki modul **bitta vazifani** bajarishi lozim.
16+
Agar bitta klass bir nechta vazifani bajara boshlasa (masalan, biznes-logika, ma'lumotlarni saqlash, formatlash), ulardan birortasi o'zgarganda butun klassni qayta yozish va test qilish kerak bo'ladi.
1717

1818
## Diagramma
1919

2020
<p align="center">
21-
<img src="{{ site.baseurl }}/assets/01-srp.png" width="700" alt="SRP class diagramma" style="border-radius: 12px;" />
21+
<img src="{{ site.baseurl }}/assets/01-srp.png" width="700" alt="SRP klass diagrammasi" style="border-radius: 12px;" />
2222
</p>
2323

2424
## Noto'g'ri yondashuv
2525

26-
[`violation.py`](violation.py) dagi `Order` class'i uchta turli vazifani bajaradi:
26+
[`violation.py`](violation.py) dagi `Order` klassi uchta turli vazifani bajaradi:
2727

2828
- **Narxni hisoblash** — buyurtma summasini hisoblash
2929
- **Chegirma** — biznes-qoidalari bo'yicha chegirma qo'llash
@@ -38,13 +38,13 @@ class Order:
3838
self.save()
3939
```
4040

41-
Chegirma qoidalari, narx formulasi yoki saqlash tizimi o'zgarganda — aynan shu bitta class'ni o'zgartirish kerak bo'ladi.
41+
Chegirma qoidalari, narx formulasi yoki saqlash tizimi o'zgarganda — aynan shu bitta klassni o'zgartirish kerak bo'ladi.
4242

4343
## To'g'ri yondashuv
4444

45-
[`correct.py`](correct.py) dagi har bir vazifa alohida class'ga ajratilgan:
45+
[`correct.py`](correct.py) dagi har bir vazifa alohida klassga ajratilgan:
4646

47-
| Class | Vazifasi |
47+
| Klass | Vazifasi |
4848
|-------|----------|
4949
| `Order` | Buyurtma ma'lumotlarini saqlaydi |
5050
| `PriceCalculator` | Umumiy narxni hisoblaydi |
@@ -63,4 +63,4 @@ class Order:
6363
OrderRepository.save(self)
6464
```
6565

66-
Endi har bir class'ning **faqat bitta o'zgarish sababi** bor va ularni mustaqil ravishda test qilish, kengaytirish yoki almashtirish mumkin.
66+
Endi har bir klassning **faqat bitta o'zgarish sababi** bor va ularni mustaqil ravishda test qilish, kengaytirish yoki almashtirish mumkin.

docs/02-ocp/README.uz.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ permalink: /uz/02-ocp/
1313
> Dasturiy tizimlar **kengaytirish uchun ochiq**, lekin **o'zgartirish uchun yopiq** bo'lishi kerak.
1414
1515
Yangi funksionallikni mavjud kodni o'zgartirmasdan qo'shish imkoni bo'lishi kerak.
16-
Bunga odatda **inheritance** (meros olish) va **polymorphism** orqali erishiladi.
16+
Bunga odatda **inheritance** (meros olish) va **polymorphism** (polimorfizm) orqali erishiladi.
1717

1818
## Diagramma
1919

2020
<p align="center">
21-
<img src="{{ site.baseurl }}/assets/02-ocp.png" width="700" alt="OCP class diagramma" style="border-radius: 12px;" />
21+
<img src="{{ site.baseurl }}/assets/02-ocp.png" width="700" alt="OCP klass diagrammasi" style="border-radius: 12px;" />
2222
</p>
2323

2424
## Noto'g'ri yondashuv
@@ -36,11 +36,11 @@ class AreaCalculator:
3636
raise TypeError(f"Unknown shape: {type(shape).__name__}")
3737
```
3838

39-
`Triangle` qo'shish uchun mavjud `AreaCalculator` class'ini o'zgartirish kerak — bu **o'zgartirish uchun yopiq emas**.
39+
`Triangle` qo'shish uchun mavjud `AreaCalculator` klassini o'zgartirish kerak — bu **o'zgartirish uchun yopiq emas**.
4040

4141
## To'g'ri yondashuv
4242

43-
[`correct.py`](correct.py) dagi `Shape` abstract class `area()` metodini belgilaydi.
43+
[`correct.py`](correct.py) dagi `Shape` abstrakt klassi `area()` metodini belgilaydi.
4444
Har bir shakl o'z hisob-kitobini mustaqil bajaradi:
4545

4646
```python
@@ -57,4 +57,4 @@ class Triangle(Shape):
5757
return 0.5 * self.base * self.height
5858
```
5959

60-
Yangi shakl qo'shish — faqat yangi subclass yaratish. **Mavjud kodga hech qanday o'zgartirish kiritilmaydi.**
60+
Yangi shakl qo'shish — faqat yangi subklass yaratish. **Mavjud kodga hech qanday o'zgartirish kiritilmaydi.**

docs/03-lsp/README.uz.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,28 @@ permalink: /uz/03-lsp/
1010
1111
# Liskov Substitution Principle (LSP)
1212

13-
> Subtype'lar o'zining base type'lari **o'rnida ishlatilganda** dasturning to'g'ri ishlashiga ta'sir qilmasligi kerak.
13+
> Quyi turlar (subtype'lar) asosiy turlar (base type'lar) **o'rnida ishlatilganda** dasturning to'g'ri ishlashiga ta'sir qilmasligi kerak.
1414
15-
Agar kod base class bilan ishlasa, uning istalgan subclass'i bilan ham to'g'ri ishlashi shart — kutilmagan xatti-harakatlar bo'lmasligi kerak.
15+
Agar kod asosiy klass bilan ishlasa, uning istalgan subklassi bilan ham to'g'ri ishlashi shart — kutilmagan xatti-harakatlar bo'lmasligi kerak.
1616

1717
## Diagramma
1818

1919
<p align="center">
20-
<img src="{{ site.baseurl }}/assets/03-lsp.png" width="700" alt="LSP class diagramma" style="border-radius: 12px;" />
20+
<img src="{{ site.baseurl }}/assets/03-lsp.png" width="700" alt="LSP klass diagrammasi" style="border-radius: 12px;" />
2121
</p>
2222

2323
## Noto'g'ri yondashuv
2424

25-
[`violation.py`](violation.py) dagi `Square` class'i `Rectangle`'dan meros oladi va setter'larni override qiladi — width va height doimo teng bo'lishi uchun. Bu `Rectangle`'ning xatti-harakat shartnomasini buzadi:
25+
[`violation.py`](violation.py) dagi `Square` klassi `Rectangle`'dan meros oladi va setter'larni override qiladi — width va height doimo teng bo'lishi uchun. Bu `Rectangle`'ning xatti-harakat shartnomasini buzadi:
2626

2727
```python
2828
class Square(Rectangle):
2929
def set_width(self, width: float) -> None:
3030
self._width = width
31-
self._height = width # kutilmagan yon ta'sir!
31+
self._height = width # kutilmagan nojo'ya ta'sir!
3232

3333
def set_height(self, height: float) -> None:
34-
self._width = height # kutilmagan yon ta'sir!
34+
self._width = height # kutilmagan nojo'ya ta'sir!
3535
self._height = height
3636
```
3737

docs/04-isp/README.uz.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ permalink: /uz/04-isp/
1010
1111
# Interface Segregation Principle (ISP)
1212

13-
> Klientlar o'zlari **ishlatmaydigan** interface'larga bog'liq bo'lmasligi kerak.
13+
> Klientlar o'zlari **ishlatmaydigan** interfeyslarga bog'liq bo'lmasligi kerak.
1414
15-
Katta, bir butun interface'larni **kichik va aniq** interface'larga ajratish lozim.
16-
Har bir class faqat o'ziga tegishli metodlarni implement qilishi kerak.
15+
Katta, bir butun interfeyslarni **kichik va aniq** interfeyslarga ajratish lozim.
16+
Har bir klass faqat o'ziga tegishli metodlarni implement qilishi kerak.
1717

1818
## Diagramma
1919

2020
<p align="center">
21-
<img src="{{ site.baseurl }}/assets/04-isp.png" width="700" alt="ISP class diagramma" style="border-radius: 12px;" />
21+
<img src="{{ site.baseurl }}/assets/04-isp.png" width="700" alt="ISP klass diagrammasi" style="border-radius: 12px;" />
2222
</p>
2323

2424
## Noto'g'ri yondashuv
2525

26-
[`violation.py`](violation.py) dagi bitta katta `Worker` interface'i barcha implementor'larni `work()`, `eat()` va `sleep()` metodlarini yozishga majbur qiladi:
26+
[`violation.py`](violation.py) dagi bitta katta `Worker` interfeysi uni implement qiluvchi barcha klasslarni `work()`, `eat()` va `sleep()` metodlarini yozishga majbur qiladi:
2727

2828
```python
2929
class Worker(ABC):
@@ -37,7 +37,7 @@ class Worker(ABC):
3737
def sleep(self) -> str: ...
3838
```
3939

40-
`Robot` ovqatlanmaydi va uxlamaydi, lekin interface uni bu metodlarni yozishga majbur qiladi:
40+
`Robot` ovqatlanmaydi va uxlamaydi, lekin interfeys uni bu metodlarni yozishga majbur qiladi:
4141

4242
```python
4343
class Robot(Worker):
@@ -50,15 +50,15 @@ class Robot(Worker):
5050

5151
## To'g'ri yondashuv
5252

53-
[`correct.py`](correct.py) da esa katta interface uchta kichik interface'ga ajratilgan:
53+
[`correct.py`](correct.py) da esa katta interfeys uchta kichik interfeysga ajratilgan:
5454

55-
| Interface | Metod |
55+
| Interfeys | Metod |
5656
|-----------|-------|
5757
| `Workable` | `work()` |
5858
| `Eatable` | `eat()` |
5959
| `Sleepable` | `sleep()` |
6060

61-
Har bir class **faqat o'ziga kerakli** interface'larni implement qiladi:
61+
Har bir klass **faqat o'ziga kerakli** interfeyslarni implement qiladi:
6262

6363
```python
6464
class Human(Workable, Eatable, Sleepable):
@@ -69,4 +69,4 @@ class Robot(Workable): # eat() va sleep() talab qilinmaydi
6969
return f"Robot {self.model} is working"
7070
```
7171

72-
Faqat ishchi kerak bo'lgan funksiya `Workable` interface'ini qabul qiladi — keraksiz `eat()` yoki `sleep()` metodlariga bog'liq bo'lmaydi.
72+
Faqat ishchi kerak bo'lgan funksiya `Workable` interfeysini qabul qiladi — keraksiz `eat()` yoki `sleep()` metodlariga bog'liq bo'lmaydi.

docs/05-dip/README.uz.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,33 @@ permalink: /uz/05-dip/
1212

1313
> Yuqori darajadagi modullar quyi darajadagi modullarga bog'liq bo'lmasligi kerak. Ikkalasi ham **abstraktsiyalarga** bog'liq bo'lishi kerak.
1414
15-
Konkret class'larni to'g'ridan-to'g'ri ishlatish o'rniga, **dependency injection** orqali abstraktsiyalarni bering.
15+
Konkret klasslarni to'g'ridan-to'g'ri ishlatish o'rniga, **dependency injection** orqali abstraktsiyalarni bering.
1616
Bu komponentlar orasidagi bog'liqlikni kamaytiradi va tizimni test qilish hamda kengaytirishni osonlashtiradi.
1717

1818
## Diagramma
1919

2020
<p align="center">
21-
<img src="{{ site.baseurl }}/assets/05-dip.png" width="700" alt="DIP class diagramma" style="border-radius: 12px;" />
21+
<img src="{{ site.baseurl }}/assets/05-dip.png" width="700" alt="DIP klass diagrammasi" style="border-radius: 12px;" />
2222
</p>
2323

2424
## Noto'g'ri yondashuv
2525

26-
[`violation.py`](violation.py) dagi `PaymentProcessor` constructor'ida `CreditCardPayment`'ni to'g'ridan-to'g'ri yaratadi:
26+
[`violation.py`](violation.py) dagi `PaymentProcessor` konstruktorida `CreditCardPayment`'ni to'g'ridan-to'g'ri yaratadi:
2727

2828
```python
2929
class PaymentProcessor:
3030
def __init__(self) -> None:
31-
self.payment = CreditCardPayment() # qattiq bog'langan dependency
31+
self.payment = CreditCardPayment() # qattiq bog'liqlik
3232

3333
def process(self, amount: float) -> None:
3434
self.payment.pay(amount)
3535
```
3636

37-
Naqd pul yoki kriptovalyutaga o'tish uchun processor'ning o'zini o'zgartirish kerak bo'ladi.
37+
Naqd pul yoki kriptovalyutaga o'tish uchun `PaymentProcessor`'ning o'zini o'zgartirish kerak bo'ladi.
3838

3939
## To'g'ri yondashuv
4040

41-
[`correct.py`](correct.py) da esa processor ham, to'lov usullari ham `Payment` abstraktsiyasiga bog'liq:
41+
[`correct.py`](correct.py) da esa `PaymentProcessor` ham, to'lov usullari ham `Payment` abstraktsiyasiga bog'liq:
4242

4343
```python
4444
class Payment(ABC):
@@ -53,7 +53,7 @@ class PaymentProcessor:
5353
self.payment.pay(amount)
5454
```
5555

56-
Yangi to'lov usulini qo'shish uchun faqat `Payment`'ni implement qilish kifoya — **processor hech qachon o'zgarmaydi**:
56+
Yangi to'lov usulini qo'shish uchun faqat `Payment`'ni implement qilish kifoya — **`PaymentProcessor` hech qachon o'zgarmaydi**:
5757

5858
```python
5959
for method in (CashPayment(), CreditCardPayment(), CryptoPayment()):

docs/index.uz.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,21 @@ permalink: /uz/
1717
SOLID — Robert C. Martin (Uncle Bob) tomonidan taqdim etilgan beshta dizayn tamoyilining qisqartmasi.
1818
Bu tamoyillar dasturchilarga oson kengaytiriladigan, tushunarli va qo'llab-quvvatlanadigan kod yozishga yordam beradi.
1919

20-
Har bir tamoyil **noto'g'ri yondashuv** va **to'g'ri yechim** ko'rinishida, UML class diagramma bilan birga ko'rsatilgan.
20+
Har bir tamoyil **noto'g'ri yondashuv** va **to'g'ri yechim** ko'rinishida, UML klass diagrammasi bilan birga ko'rsatilgan.
2121

2222
## Tamoyillar
2323

2424
| # | Tamoyil | Tavsif |
2525
|---|---------|--------|
26-
| **S** | [Single Responsibility (SRP)]({{ site.baseurl }}/uz/01-srp/) | Har bir class faqat bitta vazifaga ega bo'lishi kerak |
26+
| **S** | [Single Responsibility (SRP)]({{ site.baseurl }}/uz/01-srp/) | Har bir klass faqat bitta vazifaga ega bo'lishi kerak |
2727
| **O** | [Open/Closed (OCP)]({{ site.baseurl }}/uz/02-ocp/) | Kengaytirish uchun ochiq, o'zgartirish uchun yopiq |
28-
| **L** | [Liskov Substitution (LSP)]({{ site.baseurl }}/uz/03-lsp/) | Subtype'lar base type o'rnida ishlatilishi mumkin bo'lishi kerak |
29-
| **I** | [Interface Segregation (ISP)]({{ site.baseurl }}/uz/04-isp/) | Klientlar o'zlariga kerak bo'lmagan interface'larga bog'liq bo'lmasligi kerak |
30-
| **D** | [Dependency Inversion (DIP)]({{ site.baseurl }}/uz/05-dip/) | Konkret class'larga emas, abstraktsiyalarga bog'laning |
28+
| **L** | [Liskov Substitution (LSP)]({{ site.baseurl }}/uz/03-lsp/) | Quyi turlar (subtype'lar) asosiy turlar (base type'lar) o'rnida ishlatilishi mumkin bo'lishi kerak |
29+
| **I** | [Interface Segregation (ISP)]({{ site.baseurl }}/uz/04-isp/) | Klientlar o'zlariga kerak bo'lmagan interfeyslarga bog'liq bo'lmasligi kerak |
30+
| **D** | [Dependency Inversion (DIP)]({{ site.baseurl }}/uz/05-dip/) | Konkret klasslarga emas, abstraktsiyalarga bog'laning |
3131

3232
## Misollarni ishga tushirish
3333

34-
Har bir fayl mustaqil script hisoblanadi. Istalgan misolni to'g'ridan-to'g'ri ishga tushiring:
34+
Har bir fayl mustaqil skript hisoblanadi. Istalgan misolni to'g'ridan-to'g'ri ishga tushiring:
3535

3636
```bash
3737
python docs/01-srp/violation.py

0 commit comments

Comments
 (0)