اگر به برنامه نویسی و تکنیکهای استاندارد توسعه ی نرم افزار علاقه مند باشید، ممکن است عبارت "برنامه نویسی ماژولار" به گوش تان خورده باشد. زمانی که سایز یک برنامه کوچک میباشد، به راحتی میتوانیم کلیه ی جزییات آن را به یک باره حفظ کنیم؛ اما، برنامههای کاربردی دنیای واقعی، صد تا هزار برابر بزرگتر از برنامه هایی هستند که احتمالاً شما تا کنون نوشته اید (یا شاید حتی روی آن کار کرده باشید). آنها به حدی بزرگ و پیچیده هستند که به خاطر سپردن تمامی جزییات این گونه برنامهها امکان پذیر نیست. هم چنین، باید در نظر داشت که آنها توسط برنامه نویسان متعدد و به صورت هم زمان نوشته شده اند. اما آیا پیچیدگی و وسعت برنامههای بزرگ شما را به وحشت میاندازد و نگران هستید که مبادا جزیی از آن را از قلم بیندازید و از عهده ی خطایابی و نگهداری آن برنیایید؟ خوش بختانه دیگر جای نگرانی باقی نیست زیرا راهکاری کلیدی که برای مدیریت پیچیدگی نرم افزارهای بزرگ در سرتاسر دنیا و توسط شرکتهای برنامه نویسی استفاده میشود، تکنیکی به نام برنامه نویسی ماژولار است. در ادامهی این مقاله با برنامه نویسی ماژولار، مزایا و قوانین این روش استاندارد بیشتر آشنا میشویم.
برنامه نویسی ماژولار چیست؟
برنامه نویسی ماژولار با برنامه نویسی ساختارگرا و برنامه نویسی شی گرا ارتباط نزدیکی دارد و هدف مشترکی که در تمامی این تکنیکها وجود دارد، تسهیل ساخت برنامهها و سیستمهای بزرگ نرم افزاری با تجزیه ی آن به قطعات کوچکتر است. در برنامه نویسی ماژولار کد برنامه از ماژولها یا واحدهای مختلفی تشکیل شده است که هر کدام از آنها به طور جداگانه تهیه میشوند. این امر به توسعه دهندگان مختلف این امکان را میدهد تا قطعات گسسته ای از سیستم را در دست بگیرند و بدون نیاز به درک بقیه، آنها را طراحی و پیاده سازی کنند. ایده ی اصلی برنامه نویسی ماژولار این است که پس از ساخت ماژولهای مستقل و قابل تعویض، میتوان آنها را به یکدیگر متصل کرد تا یک برنامه ی کامل را ایجاد کنند؛ بدون این که هر توسعه دهنده نیاز به درک همه ی کارهای انجام شده توسط سایر توسعه دهندگان تیم، داشته باشد.
ماهیت وجودی برنامه نویسی ماژولار چیست؟
برنامه نویسی ماژولار به دلیل جنبه ی انسانی توسعه ی برنامه به وجود آمده است. کامپیوترها برای اجرای کد نیازی به واضح بودن کدها ندارند؛ بلکه محدودیتهای شناختی انسان هاست که برنامه نویسان را وادار میکند که در قطعات کوچکتر کد بنویسند.
مزایای استفاده از تکنیک برنامه نویسی ماژولار
همان طور که پیشتر گفتیم، گاهی اوقات، پروژههای بزرگ برنامه نویسان بسیاری را درگیر نوشتن هزاران خط کد میکنند. با کمک برنامه نویسی ماژولار، پیگیری موارد خاص کد، رفع اشکال، سازماندهی و مدیریت و جلوگیری از نوشتن کدهای تکراری در قسمتهای مختلف برنامه با نوشتن کدهایی با قابلیت استفاده مجدد آسانتر میشود. در ادامه مهمترین مزایای ماژولار کردن برنامه را بررسی میکنیم.
اشکال زدایی آسان تر
هنگام اشکال زدایی برنامههای بزرگ، پی بردن به این که باگ موردنظر چه زمانی و چگونه رخ میدهد، دشوار و رمزآلود است. اشکال زدایی در این گونه برنامهها ممکن است زمان زیادی به طول بینجامد زیرا در صورت ماژولار نبودن برنامه، برنامه نویسان ناچارند که کد تمامی خطهای برنامه را بررسی کنند تا منبع ایجاد باگ را بیابند. اما در صورتی که برنامه از ماژولهای مختلفی تشکیل شده باشد، اگر مشکل خاصی در عملکرد برنامه ایجاد شود، برنامه نویسان به راحتی متوجه میشوند که باید کجا به دنبال باگ مورد نظر جست وجو کنند و این کار در زمان کوتاهی انجام خواهد شد.
قابلیت استفاده ی مجدد
کدهای ماژولار قابلیت استفاده ی مجدد از کد را به برنامه نویسان میدهند. در صورت طبقه بندی اعمال خاص در قالب توابع یا کلاسهای خاص، برنامه نویسان میتوانند هر وقت که لازم باشد دوباره آن عمل را انجام دهند و از آن کد خاص استفاده کنند. اگر کد برنامههای بزرگ به قسمتهای مشخصی سازماندهی نشده باشند، ارجاع به آن، جداسازی یا تکمیل آن کد، دشوارتر و حتی غیرممکن خواهد بود.
خوانایی کد
کد ماژولار یک کد بسیار سازمان یافته است. اما منظور از سازماندهی کد با در نظر گرفتن وظایف چیست؟ این بدان معناست که برنامه نویسان میتوانند با در نظر گرفتن کارهایی که انجام میدهند، هر قسمت از کد را سازماندهی کنند. در نتیجه، آنها میتوانند براساس طرح کلی سازمان خود، کد مورد نظر خود را به راحتی پیدا کرده یا به آن اشاره کنند. اما این همه چیز نیست، سایر برنامه نویسانی که روی کد کار میکنند نیز هنگام خواندن کد، شانس پیروی از طرح اصلی سازمان را دارند. این روش برنامه نویسی، کد شما را برای قابلیت استفاده در بین چندین توسعه دهنده بهینه سازی کرده و سطح سختی آن را کاهش میدهد.
قابلیت اطمینان
تمام مزایایی که تاکنون ذکر کردیم زمانی که در کنار یکدیگر قرار میگیرند، مزیت دیگری به نام قابلیت اطمینان را ایجاد میکنند. کدی که خواناست و اشکال زدایی، نگهداری و اشتراک گذاری آن به راحتی انجام میشود، در آینده با خطاهای کمتری مواجه خواهد شد. قابلیت اطمینان در مورد پروژههای بزرگی که صدها توسعه دهنده روی آن کار میکنند، ضروری است. همه ی توسعه دهندگان باید بتوانند با کدهایی که توسط سایر توسعه دهندگان نوشته میشود، به راحتی و سادگی ارتباط برقرار کرده و کار کنند. در واقع میتوان گفت که ماژولارسازی کد و ایجاد قابلیت اطمینان هنگام توسعه ی نرم افزارهای پیچیده و بزرگ یک ضرورت است.
قابلیت نگهداری
همان طور که گفتیم استراتژی برنامه نویسی ماژولار، فرآیند توسعه ی نرم افزار را به بخشهای قابل کنترلتری تقسیم میکند. گاهی اوقات، هنگام ساخت نرم افزارهای بزرگ، تمرکز روی تک تک بخشهای برنامه دشوار است؛ اما اگر به وظایف کوچکتر فردی تقسیم شود، روند توسعه و نگهداری آن چندان پیچیده و هزینه بر نخواهد بود و اصلاح خطاها و افزودن ویژگیهای جدید به نرم افزار فرآیندی آسان خواهد بود. در واقع به لطف برنامه نویسی ماژولار، برنامه نویسان هنگام نگهداری نرم افزار دچار سردرگمی نمیشوند.
کیفیت و تست نرم افزار
یکی دیگر از مزایای ماژولارسازی برنامه، ارتقاء کیفیت بخشهای تشکیل دهنده ی برنامه است. برنامه نویسان در این شرایط، نیازی به نگرانی درمورد برنامه ی کلی ندارند و تنها بر کیفیت اجزای خود تمرکز میکنند. در پایان و هنگامی که کد تمامی قسمتها با یکدیگر ترکیب میشوند نیز احتمال بروز خطا کمتر خواهد بود. ماژولار بودن یک نرم افزار، زمان موردنیاز برای تست آن را نیز کاهش میدهد و با تست ماژولهای جدید، نیازی به تست ماژولهای قبلی نیست.
برنامه نویسی گروهی
برنامه نویسی ماژولار با تقسیم کار بین برنامه نویسان متعددی که به صورت موازی فعالیت میکنند، امکان برنامه نویسی گروهی و پیش روی سریعتر فرآیند توسعه را فراهم میکند. در این روش، مدیر پروژه وظایف خاصی را برای هر برنامه نویس مشخص میکند و در پایان اجزای مختلف را برای ایجاد یک برنامه ی کامل به یکدیگر متصل میکند.
خصوصیات نرم افزارهای ماژولار – ماژول خوش ساخت
بسیاری از برنامه نویسان، استفاده از تکنیک برنامه نویسی ماژولار را به علت مزایایی که پیشتر در مورد آنها صحبت کردیم، ترجیح میدهند. برخی خصوصیات نرم افزارهای ماژولار عبارتند از:
پیش از کدنویسی، برنامه ریزی و طراحی برنامه توسط مدیر پروژه یا تحلیل گر سیستم انجام میشود.
کدها در چندین فایل ذخیره میشود.
کدها طولانی نیستند.
کدها به راحتی قابل درک و ساده هستند.
کدهای هر بخش، به راحتی قابل استفاده در برنامههای دیگر نیز هستند.
کنترل کردن متغیرها بسیار ساده است.
نام متغیرها و ماژول ها، منطقی و مرتبط انتخاب میشود.
توسعه دهنده میتواند یک متد واحد را ایجاد کرده و از آن در قسمتهای مختلف برنامه، بدون نیاز به کدنویسی مجدد، استفاده کند.
بیشتر بدانیم: Clean Code چیست؟ آشنایی با اصول کدنویسی تمیز در برنامه نویسی
یک مثال از برنامه نویسی ماژولار
زبان C به عنوان یک زبان ساخت یافته شناخته میشود؛ چرا که یک مشکل بزرگ را حل کرده است. زبان برنامه نویسی C، مسئله را به ماژولهای کوچکتری که تابع(function) یا رویه ی(procedure) نامیده میشوند، تقسیم کرده است و هر کدام از آنها مسئولیت بخش خاصی از برنامه را بر عهده دارند. برنامه ای که یک مسئله ی بزرگ را حل میکند، مجموعه ای از چندین تابع است. در واقع، ماژولها جزییات اجرا را با یکدیگر به اشتراک میگذارند اما آن را از دنیای خارج از برنامه پنهان میکنند. فرض کنید، ما میخواهیم یک نوع داده Stack را اعلام کنیم و در عین حال میخواهیم اجرا و هم چنین ساختار داده را از کاربران پنهان کنیم. ما میتوانیم این کار را با تعریف یک پرونده عمومی به نام stack.h که شامل دادههای عمومی نوع داده Stack و توابع پشتیبانی شده از نوع داده استک است، انجام دهیم. در پرونده هدر فقط باید تعاریف ثابت ها، ساختارها، متغیرها و توابع با نام ماژول را درج کنیم. بدین ترتیب شناسایی منبع تعاریف در برنامههای بزرگتر با ماژولهای متعدد، آسان میشود. stack.h:
extern stack_var1;
extern int stack_do_something(void);
اکنون میتوانیم یک پرونده با نام stack.c ایجاد کنیم که شامل پیاده سازی نوع داده stack است:
#include
int stack_var1;
static int stack_var2;
int stack_do_something(void)
{
stack_var1 = 2;
stack_var2 = 5;
}
پرونده ی اصلی که میتواند شامل ماژول استک باشد:
#include
int main(int argc, char*argv[]){
while(1){
stack_do_something();
}
}
جمع بندی: ایده ی اصلی برنامه نویسی ماژولار، تقسیم وظایف یک برنامه ی بزرگ به چندین زیربرنامه ی کوچکتر و مستقل است که هر کدام از آنها توسط توسعه دهندگان مختلف و به صورت هم زمان توسعه داده میشوند. برنامه نویسی ماژولار تا حد زیادی با مفهوم OOP (برنامه نویسی شی گرا) توازن دارد و فرآیند اشکال زدایی و نگهدای برنامههای بزرگ را تا حد زیادی ساده میکند. ماژولارسازی نرم افزار برای درک بهتر برنامه نویسان و محدودیتهای شناختی انسانها انجام میشود که مجبور هستند برای خوانایی، کیفیت، نگهداری و اشکال زدایی بهتر برنامه ی خود، کدها را به قطعات کوچکتری تبدیل کنند و کامپیوترها برای درک کد نیازی به تقسیم آن به بخشهای کوچکتر ندارند. تجربه ی شما از برنامه نویسی ماژولار چیست؟ آیا استفاده از این تکنیک را برای توسعه ی پروژههای بزرگ مناسب میدانید؟ نظرات خود را با ما به اشتراک بگذارید.
مرگ از زندگی بهتر است زیرا به دیدار عزیان از دست رفته میرویم...
نازنین کریمی مقدم۱۳ شهریور ۱۴۰۰، ۱۸:۵۱
درود
تا وقتی دنیا این همه چیزای قشنگ داره و زنده ایم، زندگی کنیم :) مرگ همیشه هست اما زندگی کوتاهه.
mom۲۳ بهمن ۱۳۹۹، ۰۳:۳۷
ماژولها رو چطوری میشه به هم متصل کرد؟ چطور با هم ارتباط برقرار میکنند؟
آیا اینجا همون بحث میکروسرویس پیش میاد؟
یعنی برای اتصال ماژولها به هم باید در بستر شبکه با معماری میکروسرویس این کار رو انجام بدیم؟
نازنین کریمی مقدم۲۳ بهمن ۱۳۹۹، ۱۹:۱۶
درود. سوال خیلی خوبی پرسیدید.
حقیقتا خیلی بستگی به زبان برنامه نویسی داره. برای مثال در جاوا اسکریپت، تایپ اسکریپت و یا دات نت و... که معماری MVC وجود داره، کار خیلی راحتتر هست و اغلب از ماژولها تودرتو استفاده میشه. درسته که همیشه این خطر وجود داره که با تغییر یک ماژول کار ماژول دیگه مختل بشه، اما مزایایی که داره بیشتر از معایبشه. پس در کل معماری میکروسرویس رو نادیده میگیرند و از معماری MVC استفاده میکنند (برای مثال به راحتی تگ سلکتور یک کامپوننت رو درون فایل یک کامپوننت دیگر میگذارند) و نهایتا سعی میکنند توابع را با call back و... مدیریت کنند تا تداخلی ایجاد نشه.
اما کار برای زبانی مثل جاوای پایه که به صورت بنیادین از این معماریها استفاده نمیکنه و کلاس بیس هست سخت تره. قبلا برای مدیریت در چنین موقعیتهایی از میکروسرویسها استفاده میشد اما چندسالی هست که حداقل در محیطهای کاری، از فریمورکهای جاوا مثل اسپرینگ و... استفاده میکنند.
am۰۹ آذر ۱۳۹۹، ۱۴:۱۷
خیلی مطلب مفیدی بود متشکرم.
امیرحسین صحرانورد۲۰ آبان ۱۳۹۹، ۱۴:۲۵
واقعا مطلب مفیدی بود.
یه سوال ! چطور تو برنامه هامون ماژولها رو تشخیص بدیم ؟ مثلا یک فروشگاه آنلاین، ماژولهای ما میتونه چی باشه ؟
نازنین کریمی مقدم۲۷ آبان ۱۳۹۹، ۱۱:۱۶
سلام. ممنون که با ما همراه هستید.
خب همونطور که در مقاله گفتیم ماژول برای این ایجاد میشه که کارها تقسیم بشه و کدهای تکراری در هر بخش از کد نداشته باشیم. همین مفهوم ماژول بسته به زبان برنامه نویسی ممکنه کامپوننت و کانتینر و .... هم نامیده بشه که تفاوتهای ریزی با هم دارند اما هدف همه شون یکی هست.
طبق تجربه ای که دارم میتونم اینطوری جوابتون رو بدم که برای اینکه بفهمید یک برنامه دقیقا چه ماژولهایی داره، باید قبلا یک پروژه رو از صفر تا صد پیاده سازی کنید که لم کار دستتون بیاد. اما یک نکته طلایی در تشخیص اینکه کد در چه ماژولی هست وجود داره. این سوال رو از خودتون بپرسید که:
<strong>آیا این کدی که الان دارم مینویسم ممکنه برای بخش دیگه ای از برنامه هم استفاده بشه؟ اگه جواب مثبت بود، یعنی این کد شما باید ماژول بشه.</strong>
برای مثال در پیاده سازی فروشگاه آنلاین، شما یک ماژول برای ارسال پیام تعریف میکنید که برای بخش سفارش، بخش تکمیل خرید، بخش کاربر و... استفاده میشه.
پوریا۲۶ خرداد ۱۳۹۹، ۱۵:۵۰
خیلی خوب بود ممنون
نازنین گودرزی۲۶ خرداد ۱۳۹۹، ۲۱:۰۱
خوشحال هستیم که براتون مفید بوده.
شروع رایگان یادگیری برنامه نویسی
کلیک کنید 👇
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: