چگونه برنامه زبان C می تواند به خوانایی بالا ، قابلیت نگهداری آسان و قابلیت گسترش دست یابد

I. طراحی از بالا به پایین
برنامه ریزی کلی
با شروع از عملکرد کلی برنامه ، ابتدا ماژول اصلی (مانند عملکرد اصلی ()) را تعریف کنید و هدف کلی و ورودی/خروجی برنامه را روشن کنید. به عنوان مثال ، هنگام طراحی یک سیستم مدیریت دانشجویی ، ابتدا ماژول های عملکردی سطح بالا مانند “ورود داده ها” ، “پرس و جو” و “آمار” را که باید اجرا شوند ، تعیین کنید.
تجزیه گام به گام
برای ایجاد یک ساختار شبیه درخت مانند لایه های مشکلات پیچیده را به صورت لایه ای در زیر مشکلات قرار دهید. به عنوان مثال ، “ورود داده ها” را می توان بیشتر به زیر مجموعه هایی مانند “اطلاعات دانشجویی ورودی” ، “تأیید فرمت داده” و “ذخیره برای پرونده” تقسیم کرد. هر ماژول زیر بیشتر تجزیه می شود تا اینکه هر کار به اندازه کافی ساده باشد (به طور معمول مطابق با یک عملکرد در 50 خط). 。
طراحی سلسله مراتبی
ساختار سلسله مراتبی از طریق رابطه تماس عملکرد منعکس می شود. ماژول سطح بالا ماژول سطح پایین را فراخوانی می کند و ماژول سطح پایین به ماژول سطح بالا در جهت معکوس بستگی ندارد.
ii. برنامه نویسی ساخت یافته
محدودیت ساختار کنترل
فقط از سه ساختار اساسی استفاده کنید: دنباله ، انتخاب (اگر/سوئیچ) و حلقه (برای/در حالی). از استفاده از بیانیه GOTO خودداری کنید. به عنوان مثال ، برای جایگزینی منطق پرش پیچیده از یک حلقه استفاده کنید. \
\
ورودی منفرد ، یک خروجی
هر عملکرد یا بلوک کد فقط یک ورودی و یک خروجی برای اطمینان از منطق واضح دارد. 。 به عنوان مثال ، در یک عملکرد ، از چندین اظهارات بازگشت خودداری کنید و به طور یکنواخت نتیجه را در انتها برگردانید. \
\
عادی سازی بلوک کد
مرزهای بلوک های کد را از طریق تورفتگی ، تراز پرانتز و غیره روشن کنید تا خوانایی را تقویت کنید. به عنوان مثال:
if (condition) {
// Code block
} else {
// Code block
}
iii برنامه نویسی مدولار
\
تقسیم ماژول عملکردی
برنامه را به واحدهای کاربردی مستقل تقسیم کنید ، با هر ماژول مربوط به یک عملکرد یا گروهی از عملکردهای مرتبط. به عنوان مثال:
- ماژول اصلی: اصلی () مسئول کنترل فرآیند است.
- ماژول های عملکردی: مانند input_data () ، محاسبه_کور () و غیره.
- ماژول های ابزار: مانند File_io.c برای انجام عملیات پرونده.
جدایی رابط و اجرای.
- پرونده هدر (.h): اعلام نمونه های اولیه عملکرد ، ساختار داده ها و تعریف رابط ها. به عنوان مثال:
// file_io.h
int read_file(const char* filename);
- منبع (.c) : عملکرد خاص را با پنهان کردن جزئیات داخلی پیاده سازی می کند
// file_io.c
#include "file_io.h"
int read_file(const char* filename) { /* Implementation */ }
اصل استقلال ماژول
- انسجام بالا: توابع در ماژول ها از نزدیک مرتبط هستند (به عنوان مثال ، تمام محاسبات ریاضی در math_utils.c متمرکز شده اند)
- اتصال کم: ماژول ها داده ها را از طریق پارامترها منتقل می کنند و از متغیرهای جهانی جلوگیری می کنند. به عنوان مثال ، استفاده از آرگومان های عملکرد به جای متغیرهای خارجی برای عبور از نتیجه محاسبه.
ادغام و آزمایش ماژول
ماژول اصلی یکپارچه و اشکال زدایی به صورت گام به گام با استفاده از پرونده های هدر برای تماس با هر ماژول زیر است. به عنوان مثال:
#include "file_io.h"
#include "data_process.h"
int main() {
read_file("data.txt");
process_data();
return 0;
}
نمونه های عملی
“روش آمار عملکرد دانشجویی” را به عنوان نمونه در نظر بگیرید:
- طراحی از بالا به پایین: عملکرد اصلی input_scores () ، محاسبه_ avg () و output_result () را فراخوانی می کند.
- رمزگذاری ساختاری: فقط سه ساختار کنترل در هر عملکرد استفاده می شود ، مانند یک حلقه برای یک مجموعه از نمرات.
- اجرای مدولار: IO_MODULE.H/C: ورودی و خروجی Calc_Module.h/C را کنترل می کند: منطق آماری را پیاده سازی می کند برنامه اصلی ماژول ها را از طریق پرونده های هدر ادغام می کند.
V. اقدامات احتیاطی
- کنترل اندازه کد: یک عملکرد واحد بیش از 50 خط توصیه می شود و منطق پیچیده به زیر عملکرد تقسیم می شود.
- کنوانسیون های نامگذاری: نام عملکرد باید صریح باشد (به عنوان مثال ، اعتبار_نوپت () ، نه عملکرد 1 ()).
- نظرات مستندات: هدر باید عملکرد ماژول و پارامترهای رابط را بیان کند.
از طریق روشهای فوق ، برنامه زبان C می تواند به خوانایی بالا ، قابلیت نگهداری آسان و قابلیت گسترش ، که مطابق با هدف اصلی برنامه نویسی ساختاری است ، دست یابد.