Skip to content

Commit 93afa3e

Browse files
committed
Add Union + Some changes
1 parent 1818baa commit 93afa3e

File tree

19 files changed

+587
-361
lines changed

19 files changed

+587
-361
lines changed

Questions/Arrays.md

Lines changed: 0 additions & 10 deletions
This file was deleted.

Questions/DesignPatterns/CallbackDesignPattern.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
# الگوی طراحی Callback در سیستم‌های نهفته
44

5-
این README قراره بهت کمک کنه تا با الگوی طراحی Callback تو سیستم‌های نهفته آشنا بشی. همچنین شامل یه سری تمرین از ساده تا پیچیده‌ است که می‌تونی با انجامشون مهارت‌هات رو تو این زمینه تقویت کنی.
5+
این README قراره بهت کمک کنه تا با الگوی طراحی Callback تو سیستم‌های نهفته آشنا بشی. همچنین شامل یک سری تمرین از ساده تا پیچیده‌ است که می‌تونی با انجامشون مهارت‌هات رو تو این زمینه تقویت کنی.
66

77
## سناریو: مدیریت داده‌های سنسور در سیستم تهویه مطبوع هوشمند
88

9-
فرض کن داری یه سیستم تهویه مطبوع هوشمند برای یه ساختمون طراحی می‌کنی. این سیستم باید بتونه داده‌های مختلفی رو از سنسورها (مثل دما، رطوبت و کیفیت هوا) بگیره و بر اساس اون‌ها تهویه رو کنترل کنه. مثلا وقتی دما میره بالا، تهویه باید سریع‌تر کار کنه تا محیط خنک بشه.
9+
فرض کن داری یک سیستم تهویه مطبوع هوشمند برای یک ساختمون طراحی می‌کنی. این سیستم باید بتونه داده‌های مختلفی رو از سنسورها (مثل دما، رطوبت و کیفیت هوا) بگیره و بر اساس اون‌ها تهویه رو کنترل کنه. مثلا وقتی دما میره بالا، تهویه باید سریع‌تر کار کنه تا محیط خنک بشه.
1010

1111
### پیاده‌سازی بدون استفاده از Callback
1212

13-
اول بیا مسئله رو بدون استفاده از الگوی طراحی Callback پیاده‌سازی کنیم. تو این روش، همه چیز تو یه ماژول متمرکز شده و تصمیم‌گیری‌ها مستقیماً تو کد نوشته می‌شن.
13+
اول بیا مسئله رو بدون استفاده از الگوی طراحی Callback پیاده‌سازی کنیم. تو این روش، همه چیز تو یک ماژول متمرکز شده و تصمیم‌گیری‌ها مستقیماً تو کد نوشته می‌شن.
1414

1515
#### 1. تعریف ساختار مدیریت سنسور
1616

@@ -185,16 +185,16 @@ int main(void) {
185185
### مزایای استفاده از Callback
186186

187187
- **انعطاف‌پذیری بالا:** می‌تونیم به راحتی رفتار سیستم رو تغییر بدیم، بدون اینکه نیاز باشه کد اصلی رو تغییر بدیم.
188-
- **قابلیت گسترش آسان:** اضافه کردن سنسورهای جدید فقط با تعریف یه `SensorManager` جدید و تنظیم Callback مربوطه انجام میشه.
188+
- **قابلیت گسترش آسان:** اضافه کردن سنسورهای جدید فقط با تعریف یک `SensorManager` جدید و تنظیم Callback مربوطه انجام میشه.
189189
- **کد مرتب‌تر و قابل نگهداری‌تر:** تصمیم‌گیری‌ها و واکنش‌ها تو توابع جداگانه مدیریت میشه و کد ساده‌تر میشه.
190190

191191
## تمرین‌ها
192192

193193
| شماره | سوال | بارم |
194194
| ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- |
195-
| 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 |
199199

200200
</div>

Questions/DesignPatterns/FactoryDesignPattern.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22

33
# استفاده از Factory Method برای مدیریت سنسورها تو سیستم‌های نهفته
44

5-
این راهنما قراره بهت نشون بده که چطور با استفاده از الگوی طراحی Factory Method می‌تونی یه سیستم کنترل سنسور خیلی مرتب و انعطاف‌پذیر بسازی. علاوه بر این، آخرش یه سری تمرین هم برات گذاشتم که بتونی مهارت‌هات رو تو این زمینه تقویت کنی.
5+
این راهنما قراره بهت نشون بده که چطور با استفاده از الگوی طراحی Factory Method می‌تونی یک سیستم کنترل سنسور خیلی مرتب و انعطاف‌پذیر بسازی. علاوه بر این، آخرش یک سری تمرین هم برات گذاشتم که بتونی مهارت‌هات رو تو این زمینه تقویت کنی.
66

77
## سناریو: کنترل چندین سنسور مختلف
88

9-
فرض کن داری یه سیستم نهفته طراحی می‌کنی که باید چندین نوع سنسور مختلف رو کنترل کنه. مثلاً سنسورهای دما، فشار و رطوبت که هر کدومشون از یه پروتکل ارتباطی مختلف (مثل I2C، SPI و UART) استفاده می‌کنن. هدفت اینه که این سنسورها رو مدیریت کنی و در عین حال بتونی سنسورهای جدید رو به راحتی اضافه کنی.
9+
فرض کن داری یک سیستم نهفته طراحی می‌کنی که باید چندین نوع سنسور مختلف رو کنترل کنه. مثلاً سنسورهای دما، فشار و رطوبت که هر کدومشون از یک پروتکل ارتباطی مختلف (مثل I2C، SPI و UART) استفاده می‌کنن. هدفت اینه که این سنسورها رو مدیریت کنی و در عین حال بتونی سنسورهای جدید رو به راحتی اضافه کنی.
1010

1111
### مرحله 1: پیاده‌سازی ساده (بدون Factory Method)
1212

1313
اول بیا ببینیم اگه بخوای این مسئله رو بدون Factory Method حل کنی، چه مشکلاتی پیش میاد.
1414

1515
#### 1.1 تعریف توابع برای هر سنسور
1616

17-
فرض کن باید برای هر نوع سنسور، یه سری توابع جداگانه برای مقداردهی اولیه (init) و خواندن داده (read_data) بنویسی. کدش ممکنه این شکلی باشه:
17+
فرض کن باید برای هر نوع سنسور، یک سری توابع جداگانه برای مقداردهی اولیه (init) و خواندن داده (read_data) بنویسی. کدش ممکنه این شکلی باشه:
1818

1919
<div dir="ltr">
2020

@@ -90,15 +90,15 @@ int main(void) {
9090

9191
2. **عدم انعطاف‌پذیری:** اگه بخوای نوع سنسور یا پروتکل ارتباطی رو تغییر بدی، باید کدهای زیادی رو تو برنامه اصلی تغییر بدی.
9292

93-
3. **افزودن سنسور جدید:** اگه بخوای یه سنسور جدید اضافه کنی، باید توابع جدیدی براش تعریف کنی و برنامه اصلی رو هم تغییر بدی. این کار باعث میشه کدت پیچیده و نگهداریش سخت بشه.
93+
3. **افزودن سنسور جدید:** اگه بخوای یک سنسور جدید اضافه کنی، باید توابع جدیدی براش تعریف کنی و برنامه اصلی رو هم تغییر بدی. این کار باعث میشه کدت پیچیده و نگهداریش سخت بشه.
9494

9595
### مرحله 2: استفاده از Factory Method
9696

9797
حالا بیا ببینیم چطور می‌تونیم با استفاده از Factory Method این مشکلات رو حل کنیم.
9898

99-
#### 2.1 تعریف یه ساختار پایه برای سنسورها
99+
#### 2.1 تعریف یک ساختار پایه برای سنسورها
100100

101-
اول یه ساختار پایه برای سنسورها تعریف می‌کنیم که شامل توابعی مثل `init()` و `read_data()` باشه. اینجوری می‌تونیم با هر نوع سنسوری به یه شکل برخورد کنیم.
101+
اول یک ساختار پایه برای سنسورها تعریف می‌کنیم که شامل توابعی مثل `init()` و `read_data()` باشه. اینجوری می‌تونیم با هر نوع سنسوری به یک شکل برخورد کنیم.
102102

103103
<div dir="ltr">
104104

@@ -123,7 +123,7 @@ Sensor* createUARTSensor(void);
123123

124124
#### 2.2 تعریف توابع Factory برای هر سنسور
125125

126-
حالا برای هر نوع سنسور، یه تابع Factory تعریف می‌کنیم که یه شیء `Sensor` بسازه و توابع مربوط به اون سنسور رو بهش اختصاص بده.
126+
حالا برای هر نوع سنسور، یک تابع Factory تعریف می‌کنیم که یک شیء `Sensor` بسازه و توابع مربوط به اون سنسور رو بهش اختصاص بده.
127127

128128
<div dir="ltr">
129129

@@ -223,18 +223,18 @@ int main(void) {
223223

224224
1. **انعطاف‌پذیری بالا:** اضافه کردن سنسورهای جدید یا تغییر پروتکل ارتباطی بدون نیاز به تغییر تو کد اصلی انجام میشه.
225225

226-
2. **کد مرتب‌تر و نگهداری راحت‌تر:** همه سنسورها از یه ساختار پایه استفاده می‌کنن که باعث میشه کد تمیزتر و نگهداریش راحت‌تر باشه.
226+
2. **کد مرتب‌تر و نگهداری راحت‌تر:** همه سنسورها از یک ساختار پایه استفاده می‌کنن که باعث میشه کد تمیزتر و نگهداریش راحت‌تر باشه.
227227

228-
3. **قابلیت گسترش:** به راحتی می‌تونی سنسورهای جدیدی اضافه کنی و فقط باید یه تابع Factory جدید براش تعریف کنی.
228+
3. **قابلیت گسترش:** به راحتی می‌تونی سنسورهای جدیدی اضافه کنی و فقط باید یک تابع Factory جدید براش تعریف کنی.
229229

230230
## تمرین‌ها
231231

232-
| شماره | سوال | بارم |
233-
|-------|------|------|
234-
| 1 | یه سنسور جدید به اسم `createUARTSensor` اضافه کن که از پروتکل UART استفاده می‌کنه. کدهای مربوط به مقداردهی اولیه و خواندن داده از سنسور رو بنویس. | 2 |
235-
| 2 | برنامه اصلی رو طوری تغییر بده که بتونه به صورت پویا سنسور مورد نیاز رو بر اساس ورودی کاربر (مثلاً I2C یا SPI) انتخاب کنه. | 3 |
236-
| 3 | یه سنسور جدید به اسم `createAnalogSensor` درست کن که از ورودی آنالوگ استفاده می‌کنه. | 4 |
237-
| 4 | کد رو طوری بهینه کن که بتونه به راحتی تعداد زیادی سنسور از انواع مختلف رو مدیریت کنه. برای هر سنسور یه نمونه از کلاس پایه ایجاد کن و بهش اضافه کن. | 5 |
232+
| شماره | سوال | بارم |
233+
| ----- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---- |
234+
| 1 | یک سنسور جدید به اسم `createUARTSensor` اضافه کن که از پروتکل UART استفاده می‌کنه. کدهای مربوط به مقداردهی اولیه و خواندن داده از سنسور رو بنویس. | 2 |
235+
| 2 | برنامه اصلی رو طوری تغییر بده که بتونه به صورت پویا سنسور مورد نیاز رو بر اساس ورودی کاربر (مثلاً I2C یا SPI) انتخاب کنه. | 3 |
236+
| 3 | یک سنسور جدید به اسم `createAnalogSensor` درست کن که از ورودی آنالوگ استفاده می‌کنه. | 4 |
237+
| 4 | کد رو طوری بهینه کن که بتونه به راحتی تعداد زیادی سنسور از انواع مختلف رو مدیریت کنه. برای هر سنسور یک نمونه از کلاس پایه ایجاد کن و بهش اضافه کن. | 5 |
238238

239239

240240
</div>

0 commit comments

Comments
 (0)