You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Questions/DesignPatterns/CallbackDesignPattern.md
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,15 +2,15 @@
2
2
3
3
# الگوی طراحی Callback در سیستمهای نهفته
4
4
5
-
این README قراره بهت کمک کنه تا با الگوی طراحی Callback تو سیستمهای نهفته آشنا بشی. همچنین شامل یه سری تمرین از ساده تا پیچیده است که میتونی با انجامشون مهارتهات رو تو این زمینه تقویت کنی.
5
+
این README قراره بهت کمک کنه تا با الگوی طراحی Callback تو سیستمهای نهفته آشنا بشی. همچنین شامل یک سری تمرین از ساده تا پیچیده است که میتونی با انجامشون مهارتهات رو تو این زمینه تقویت کنی.
6
6
7
7
## سناریو: مدیریت دادههای سنسور در سیستم تهویه مطبوع هوشمند
8
8
9
-
فرض کن داری یه سیستم تهویه مطبوع هوشمند برای یه ساختمون طراحی میکنی. این سیستم باید بتونه دادههای مختلفی رو از سنسورها (مثل دما، رطوبت و کیفیت هوا) بگیره و بر اساس اونها تهویه رو کنترل کنه. مثلا وقتی دما میره بالا، تهویه باید سریعتر کار کنه تا محیط خنک بشه.
9
+
فرض کن داری یک سیستم تهویه مطبوع هوشمند برای یک ساختمون طراحی میکنی. این سیستم باید بتونه دادههای مختلفی رو از سنسورها (مثل دما، رطوبت و کیفیت هوا) بگیره و بر اساس اونها تهویه رو کنترل کنه. مثلا وقتی دما میره بالا، تهویه باید سریعتر کار کنه تا محیط خنک بشه.
10
10
11
11
### پیادهسازی بدون استفاده از Callback
12
12
13
-
اول بیا مسئله رو بدون استفاده از الگوی طراحی Callback پیادهسازی کنیم. تو این روش، همه چیز تو یه ماژول متمرکز شده و تصمیمگیریها مستقیماً تو کد نوشته میشن.
13
+
اول بیا مسئله رو بدون استفاده از الگوی طراحی Callback پیادهسازی کنیم. تو این روش، همه چیز تو یک ماژول متمرکز شده و تصمیمگیریها مستقیماً تو کد نوشته میشن.
14
14
15
15
#### 1. تعریف ساختار مدیریت سنسور
16
16
@@ -185,16 +185,16 @@ int main(void) {
185
185
### مزایای استفاده از Callback
186
186
187
187
-**انعطافپذیری بالا:** میتونیم به راحتی رفتار سیستم رو تغییر بدیم، بدون اینکه نیاز باشه کد اصلی رو تغییر بدیم.
188
-
-**قابلیت گسترش آسان:** اضافه کردن سنسورهای جدید فقط با تعریف یه`SensorManager` جدید و تنظیم Callback مربوطه انجام میشه.
188
+
-**قابلیت گسترش آسان:** اضافه کردن سنسورهای جدید فقط با تعریف یک`SensorManager` جدید و تنظیم Callback مربوطه انجام میشه.
189
189
-**کد مرتبتر و قابل نگهداریتر:** تصمیمگیریها و واکنشها تو توابع جداگانه مدیریت میشه و کد سادهتر میشه.
| 1 |یه تابع Callback تعریف کن که یه پیام متنی رو دریافت کنه و چاپش کنه. بعد یه تابع دیگه بنویس که این Callback رو به عنوان آرگومان دریافت کنه و اون رو فراخوانی کنه. | 1 |
196
-
| 2 |یه آرایه از اعداد صحیح تعریف کن و یه تابع Callback بنویس که اعداد رو پردازش کنه (مثلاً هر عدد رو یه واحد اضافه کنه). بعد این Callback رو به هر عنصر آرایه اعمال کن. | 2 |
197
-
| 3 |یه برنامه ساده بنویس که دو رویداد "کلید A فشرده شده" و "کلید B فشرده شده" رو مدیریت کنه. برای هر رویداد یه Callback تعریف کن و اونها رو به توابع مربوطه متصل کن. | 3 |
198
-
| 4 |یه سناریوی ساده با سه نوع سنسور (دما، رطوبت و نور) تعریف کن. برای هر سنسور یه Callback بنویس که وقتی به یه حد مشخص رسید، اقدامات لازم رو انجام بده. سیستم باید بتونه هر کدوم از این توابع Callback رو جداگانه مدیریت کنه. | 5 |
195
+
| 1 |یک تابع Callback تعریف کن که یک پیام متنی رو دریافت کنه و چاپش کنه. بعد یک تابع دیگه بنویس که این Callback رو به عنوان آرگومان دریافت کنه و اون رو فراخوانی کنه. | 1 |
196
+
| 2 |یک آرایه از اعداد صحیح تعریف کن و یک تابع Callback بنویس که اعداد رو پردازش کنه (مثلاً هر عدد رو یک واحد اضافه کنه). بعد این Callback رو به هر عنصر آرایه اعمال کن. | 2 |
197
+
| 3 |یک برنامه ساده بنویس که دو رویداد "کلید A فشرده شده" و "کلید B فشرده شده" رو مدیریت کنه. برای هر رویداد یک Callback تعریف کن و اونها رو به توابع مربوطه متصل کن. | 3 |
198
+
| 4 |یک سناریوی ساده با سه نوع سنسور (دما، رطوبت و نور) تعریف کن. برای هر سنسور یک Callback بنویس که وقتی به یک حد مشخص رسید، اقدامات لازم رو انجام بده. سیستم باید بتونه هر کدوم از این توابع Callback رو جداگانه مدیریت کنه. | 5 |
Copy file name to clipboardExpand all lines: Questions/DesignPatterns/FactoryDesignPattern.md
+15-15Lines changed: 15 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,19 +2,19 @@
2
2
3
3
# استفاده از Factory Method برای مدیریت سنسورها تو سیستمهای نهفته
4
4
5
-
این راهنما قراره بهت نشون بده که چطور با استفاده از الگوی طراحی Factory Method میتونی یه سیستم کنترل سنسور خیلی مرتب و انعطافپذیر بسازی. علاوه بر این، آخرش یه سری تمرین هم برات گذاشتم که بتونی مهارتهات رو تو این زمینه تقویت کنی.
5
+
این راهنما قراره بهت نشون بده که چطور با استفاده از الگوی طراحی Factory Method میتونی یک سیستم کنترل سنسور خیلی مرتب و انعطافپذیر بسازی. علاوه بر این، آخرش یک سری تمرین هم برات گذاشتم که بتونی مهارتهات رو تو این زمینه تقویت کنی.
6
6
7
7
## سناریو: کنترل چندین سنسور مختلف
8
8
9
-
فرض کن داری یه سیستم نهفته طراحی میکنی که باید چندین نوع سنسور مختلف رو کنترل کنه. مثلاً سنسورهای دما، فشار و رطوبت که هر کدومشون از یه پروتکل ارتباطی مختلف (مثل I2C، SPI و UART) استفاده میکنن. هدفت اینه که این سنسورها رو مدیریت کنی و در عین حال بتونی سنسورهای جدید رو به راحتی اضافه کنی.
9
+
فرض کن داری یک سیستم نهفته طراحی میکنی که باید چندین نوع سنسور مختلف رو کنترل کنه. مثلاً سنسورهای دما، فشار و رطوبت که هر کدومشون از یک پروتکل ارتباطی مختلف (مثل I2C، SPI و UART) استفاده میکنن. هدفت اینه که این سنسورها رو مدیریت کنی و در عین حال بتونی سنسورهای جدید رو به راحتی اضافه کنی.
اول بیا ببینیم اگه بخوای این مسئله رو بدون Factory Method حل کنی، چه مشکلاتی پیش میاد.
14
14
15
15
#### 1.1 تعریف توابع برای هر سنسور
16
16
17
-
فرض کن باید برای هر نوع سنسور، یه سری توابع جداگانه برای مقداردهی اولیه (init) و خواندن داده (read_data) بنویسی. کدش ممکنه این شکلی باشه:
17
+
فرض کن باید برای هر نوع سنسور، یک سری توابع جداگانه برای مقداردهی اولیه (init) و خواندن داده (read_data) بنویسی. کدش ممکنه این شکلی باشه:
18
18
19
19
<divdir="ltr">
20
20
@@ -90,15 +90,15 @@ int main(void) {
90
90
91
91
2.**عدم انعطافپذیری:** اگه بخوای نوع سنسور یا پروتکل ارتباطی رو تغییر بدی، باید کدهای زیادی رو تو برنامه اصلی تغییر بدی.
92
92
93
-
3.**افزودن سنسور جدید:** اگه بخوای یه سنسور جدید اضافه کنی، باید توابع جدیدی براش تعریف کنی و برنامه اصلی رو هم تغییر بدی. این کار باعث میشه کدت پیچیده و نگهداریش سخت بشه.
93
+
3.**افزودن سنسور جدید:** اگه بخوای یک سنسور جدید اضافه کنی، باید توابع جدیدی براش تعریف کنی و برنامه اصلی رو هم تغییر بدی. این کار باعث میشه کدت پیچیده و نگهداریش سخت بشه.
94
94
95
95
### مرحله 2: استفاده از Factory Method
96
96
97
97
حالا بیا ببینیم چطور میتونیم با استفاده از Factory Method این مشکلات رو حل کنیم.
98
98
99
-
#### 2.1 تعریف یه ساختار پایه برای سنسورها
99
+
#### 2.1 تعریف یک ساختار پایه برای سنسورها
100
100
101
-
اول یه ساختار پایه برای سنسورها تعریف میکنیم که شامل توابعی مثل `init()` و `read_data()` باشه. اینجوری میتونیم با هر نوع سنسوری به یه شکل برخورد کنیم.
101
+
اول یک ساختار پایه برای سنسورها تعریف میکنیم که شامل توابعی مثل `init()` و `read_data()` باشه. اینجوری میتونیم با هر نوع سنسوری به یک شکل برخورد کنیم.
حالا برای هر نوع سنسور، یه تابع Factory تعریف میکنیم که یه شیء `Sensor` بسازه و توابع مربوط به اون سنسور رو بهش اختصاص بده.
126
+
حالا برای هر نوع سنسور، یک تابع Factory تعریف میکنیم که یک شیء `Sensor` بسازه و توابع مربوط به اون سنسور رو بهش اختصاص بده.
127
127
128
128
<divdir="ltr">
129
129
@@ -223,18 +223,18 @@ int main(void) {
223
223
224
224
1.**انعطافپذیری بالا:** اضافه کردن سنسورهای جدید یا تغییر پروتکل ارتباطی بدون نیاز به تغییر تو کد اصلی انجام میشه.
225
225
226
-
2.**کد مرتبتر و نگهداری راحتتر:** همه سنسورها از یه ساختار پایه استفاده میکنن که باعث میشه کد تمیزتر و نگهداریش راحتتر باشه.
226
+
2.**کد مرتبتر و نگهداری راحتتر:** همه سنسورها از یک ساختار پایه استفاده میکنن که باعث میشه کد تمیزتر و نگهداریش راحتتر باشه.
227
227
228
-
3.**قابلیت گسترش:** به راحتی میتونی سنسورهای جدیدی اضافه کنی و فقط باید یه تابع Factory جدید براش تعریف کنی.
228
+
3.**قابلیت گسترش:** به راحتی میتونی سنسورهای جدیدی اضافه کنی و فقط باید یک تابع Factory جدید براش تعریف کنی.
229
229
230
230
## تمرینها
231
231
232
-
| شماره | سوال | بارم |
233
-
|-------|------|------|
234
-
| 1 |یه سنسور جدید به اسم `createUARTSensor` اضافه کن که از پروتکل UART استفاده میکنه. کدهای مربوط به مقداردهی اولیه و خواندن داده از سنسور رو بنویس. | 2 |
235
-
| 2 | برنامه اصلی رو طوری تغییر بده که بتونه به صورت پویا سنسور مورد نیاز رو بر اساس ورودی کاربر (مثلاً I2C یا SPI) انتخاب کنه. | 3 |
236
-
| 3 |یه سنسور جدید به اسم `createAnalogSensor` درست کن که از ورودی آنالوگ استفاده میکنه. | 4 |
237
-
| 4 | کد رو طوری بهینه کن که بتونه به راحتی تعداد زیادی سنسور از انواع مختلف رو مدیریت کنه. برای هر سنسور یه نمونه از کلاس پایه ایجاد کن و بهش اضافه کن. | 5 |
| 1 |یک سنسور جدید به اسم `createUARTSensor` اضافه کن که از پروتکل UART استفاده میکنه. کدهای مربوط به مقداردهی اولیه و خواندن داده از سنسور رو بنویس. | 2|
235
+
| 2 | برنامه اصلی رو طوری تغییر بده که بتونه به صورت پویا سنسور مورد نیاز رو بر اساس ورودی کاربر (مثلاً I2C یا SPI) انتخاب کنه. | 3|
236
+
| 3 |یک سنسور جدید به اسم `createAnalogSensor` درست کن که از ورودی آنالوگ استفاده میکنه. | 4|
237
+
| 4 | کد رو طوری بهینه کن که بتونه به راحتی تعداد زیادی سنسور از انواع مختلف رو مدیریت کنه. برای هر سنسور یک نمونه از کلاس پایه ایجاد کن و بهش اضافه کن. | 5|
0 commit comments