فلوچارت چیست و چه کاربردی در برنامه نویسی دارد؟
اگه قبل از شروع کدنویسی بخوای مسیر حل یه مسئله رو برای خودت مشخص کنی، فلوچارت میتونه خیلی کمکت کنه. با فلوچارت، مراحل انجام یک کار، شرطها، تصمیمها و مسیرهای مختلف رو بهصورت تصویری میبینی؛ بدون اینکه هنوز لازم باشه وارد جزئیات کدنویسی بشی.
مثلاً فرض کن میخوای برنامهای بنویسی که یک عدد رو بگیره و مشخص کنه زوج هست یا فرد. قبل از اینکه حتی یک خط کد بنویسی، میتونی مسیر کار رو مشخص کنی: عدد رو بگیر، شرط رو بررسی کن، نتیجه رو نمایش بده و تمام. همین مسیر ساده وقتی با چند شکل و فلش نمایش داده بشه، تبدیل به یک فلوچارت میشه.
در ادامه این مقاله میبینیم فلوچارت دقیقاً چیه، هرکدوم از شکلها و نمادهای اون چه معنیای دارن، چطور میتونیم یک فلوچارت رسم کنیم و اصلاً چه زمانی استفاده از فلوچارت به درد برنامهنویس میخوره. چند مثال ساده و واقعی هم بررسی میکنیم و در آخر تفاوت فلوچارت با الگوریتم، شبهکد و نمودارهای مشابه رو میبینیم.
فلوچارت چیست؟
فلوچارت (Flowchart) یک روش تصویری برای نشون دادن مراحل انجام یک کار، فرایند یا الگوریتمه. توی فلوچارت، هر مرحله با یک شکل مشخص نمایش داده میشه و فلشها هم نشون میدن که از هر مرحله باید به کدوم مرحله بعدی بریم.
مثلاً معمولاً از مستطیل برای نشون دادن یک عملیات استفاده میکنیم، لوزی زمانی به کار میره که قراره یک شرط رو بررسی کنیم و شکل شروع و پایان هم مشخص میکنه مسیر از کجا شروع میشه و کجا تموم میشه.
مزیت فلوچارت اینه که قبل از اینکه درگیر جزئیات کد یا یک سیستم بشیم، میتونیم تصویر کلی مسیر رو ببینیم. همین موضوع باعث میشه پیدا کردن ایرادهای منطقی، توضیح دادن روند کار به بقیه و حتی شروع کدنویسی راحتتر بشه.
البته فلوچارت فقط مخصوص برنامهنویسی نیست و در طراحی سیستمها، آموزش، مهندسی و مشخص کردن فرایندهای کاری هم کاربرد داره.
فلوچارت در برنامهنویسی یعنی چه؟
در برنامهنویسی، فلوچارت کمک میکنه قبل از نوشتن کد بفهمیم دقیقاً قراره چه اتفاقی بیفته و برنامه چه مسیرهایی رو طی کنه. مثلاً فرض کن بخشی از یک سایت فقط باید برای افراد ۱۸ سال به بالا نمایش داده بشه. منطق برنامه میتونه اینطوری باشه:
- سن کاربر رو بگیر.
- بررسی کن که ۱۸ سال یا بیشتر هست یا نه.
- اگه بله، اجازه ورود بده.
- اگه نه، یک پیام مناسب نمایش بده.
همین منطق ممکنه داخل کد با یک دستور if نوشته بشه، اما وقتی اون رو به شکل فلوچارت میکشیم، مسیر «بله» و «خیر» خیلی واضحتر جلوی چشممون قرار میگیره.
برای همین فلوچارت مخصوصاً وقتی تازه برنامهنویسی رو شروع کردی، میخوای یک الگوریتم طراحی کنی، چند شرط و مسیر مختلف داری یا میخوای منطق برنامه رو برای شخص دیگهای توضیح بدی، میتونه ابزار خیلی مفیدی باشه.
نمادهای فلوچارت و معنی هرکدوم
اگه برای اولین بار یک فلوچارت ببینی، احتمالاً با چند شکل مختلف مثل مستطیل، لوزی، بیضی و فلش روبهرو میشی. هرکدوم از این شکلها معنی مشخصی دارن و کمک میکنن با یک نگاه بفهمیم توی هر مرحله از فرایند چه اتفاقی میفته.
لازم نیست از همون اول تمام نمادهای فلوچارت رو حفظ کنی. برای شروع، شناختن چند نماد اصلی کاملاً کافیه؛ چون بیشتر فلوچارتهای ساده برنامهنویسی رو میشه با همینها رسم کرد.
نماد شروع و پایان (Start / End)
این نماد نقطه شروع یا پایان فلوچارت رو نشون میده و معمولاً به شکل بیضی یا یک مستطیل با گوشههای کاملاً گرد رسم میشه. مثلاً در ابتدای فلوچارت عبارت Start و در انتهای اون End قرار میگیره.
نماد پردازش (Process)
مستطیل برای نشون دادن یک کار یا عملیات استفاده میشه. مثلاً:
total = price * count
یا «محاسبه مبلغ نهایی سفارش». هر وقت در یک مرحله قراره عملیاتی انجام بشه، معمولاً از این نماد استفاده میکنیم.
نماد ورودی و خروجی (Input / Output)
این نماد معمولاً به شکل متوازیالاضلاع رسم میشه و برای دریافت اطلاعات یا نمایش نتیجه به کار میره. مثلاً: Enter your age یا: Show result پس هر جا برنامه قراره چیزی از کاربر بگیره یا نتیجهای رو نمایش بده، احتمالاً با این نماد روبهرو میشیم.
نماد تصمیمگیری (Decision)
لوزی یکی از مهمترین نمادهای فلوچارته و زمانی استفاده میشه که برنامه باید یک شرط رو بررسی کنه و بر اساس نتیجه، یکی از چند مسیر رو ادامه بده. مثلاً: age >= 18 ? از این مرحله ممکنه دو مسیر خارج بشه:
- بله ← اجازه ورود
- خیر ← نمایش پیام خطا
شرطهای if در برنامهنویسی نمونه خیلی خوبی برای درک این نماد هستن.
فلش یا مسیر جریان (Flowline)
فلشها مشخص میکنن مراحل فلوچارت با چه ترتیبی اجرا میشن و بعد از هر مرحله باید به کجا بریم. مثلاً: Start ← دریافت عدد ← بررسی شرط ← نمایش نتیجه ← End
بدون فلشها مشخص نیست هر مرحله به کدوم قسمت بعدی متصل میشه.
اتصالدهنده (Connector)
گاهی فلوچارت بزرگ میشه و اتصال مستقیم بخشهای مختلف با فلش باعث شلوغ شدن نمودار میشه. در چنین شرایطی میتونیم از Connector استفاده کنیم.
Connector معمولاً یک دایره کوچک با یک حرف یا عدد داخله. مثلاً دو نقطه از فلوچارت که داخل هر دو حرف A قرار گرفته، به هم مرتبط هستن. این کار کمک میکنه مسیرهای طولانی رو بدون کشیدن فلشهای زیاد و درهم نمایش بدیم.
فلوچارت چه کاربردی در برنامهنویسی داره؟
فلوچارت فقط یک نمودار برای قشنگتر نشون دادن مراحل نیست. کاربرد اصلیش اینه که قبل از اینکه وارد کدنویسی بشیم، بتونیم منطق برنامه رو واضحتر ببینیم و بفهمیم هر مرحله قراره چه کاری انجام بده.
وقتی یک مسئله چند شرط، مسیر یا مرحله مختلف داشته باشه، نوشتن مستقیم کد میتونه باعث بشه خیلی زود مسیر کار پیچیده بشه. فلوچارت کمک میکنه اول ساختار مسئله رو مشخص کنیم و بعد سراغ کدنویسی بریم.
طراحی منطق برنامه قبل از کدنویسی
یکی از مهمترین کاربردهای فلوچارت اینه که قبل از نوشتن کد، مسیر حل مسئله رو مشخص کنیم. مثلاً اگه بخوای یک سیستم ورود کاربر طراحی کنی، قبل از اینکه Controller، API یا کدهای مربوط به Login رو بنویسی، میتونی مسیر رو اینطوری مشخص کنی:
- کاربر اطلاعات ورود رو وارد میکنه.
- سیستم اطلاعات رو بررسی میکنه.
- اگه اطلاعات درست باشه، کاربر وارد حسابش میشه.
- اگه اطلاعات اشتباه باشه، پیام خطا نمایش داده میشه.
وقتی این مسیر رو به شکل فلوچارت میبینی، راحتتر میتونی تصمیم بگیری کد باید چه ساختاری داشته باشه.
نمایش شرطها و مسیرهای مختلف
توی خیلی از برنامهها فقط یک مسیر مستقیم نداریم. برنامه بر اساس شرایط مختلف تصمیم میگیره که چه کاری انجام بده. مثلاً:
- اگه موجودی محصول بیشتر از صفر بود، سفارش ثبت بشه.
- اگه موجودی صفر بود، پیام «ناموجود» نمایش داده بشه.
یا:
- اگه کاربر Admin بود، وارد پنل مدیریت بشه.
- در غیر این صورت، به صفحه کاربری بره.
فلوچارت کمک میکنه این مسیرها رو قبل از نوشتن شرطهای if و else واضح ببینیم.
پیدا کردن ایرادهای منطقی
گاهی کد از نظر Syntax هیچ مشکلی نداره، ولی منطق برنامه اشتباهه. مثلاً ممکنه یک شرط رو فراموش کرده باشیم یا یکی از مسیرها هیچ خروجی مشخصی نداشته باشه. وقتی منطق برنامه رو به شکل فلوچارت رسم میکنیم، این مدل ایرادها راحتتر دیده میشن.
به همین دلیل فلوچارت میتونه قبل از شروع کدنویسی، جلوی بخشی از اصلاحات و دوبارهکاریهای بعدی رو بگیره.
توضیح منطق برنامه به دیگران
همیشه قرار نیست فقط خودمون کدی که نوشتیم رو ببینیم. ممکنه بخوایم منطق یک بخش از سیستم رو برای برنامهنویس دیگه، طراح، مدیر پروژه یا حتی مشتری توضیح بدیم. در چنین شرایطی، یک فلوچارت ساده خیلی وقتها از چند صفحه توضیح یا چند ده خط کد قابل فهمتره. مثلاً برای توضیح فرایند ثبت سفارش میشه مسیر کلی رو به شکل زیر نمایش داد:
انتخاب محصول ← افزودن به سبد خرید ← ثبت اطلاعات ← پرداخت ← تایید سفارش
بدون اینکه لازم باشه شخص مقابل وارد جزئیات کدنویسی بشه.
مستندسازی بخشهای مهم سیستم
فلوچارت میتونه بخشی از مستندات پروژه هم باشه. مثلاً برای فرایندهایی مثل:
- ثبتنام کاربر
- ورود به سیستم
- بازیابی رمز عبور
- ثبت سفارش
- تایید پرداخت
- تغییر وضعیت سفارش
داشتن یک فلوچارت ساده کمک میکنه بعداً هم خودمون و هم اعضای دیگه تیم سریعتر بفهمیم منطق اون بخش از سیستم چطور طراحی شده.
چطور فلوچارت رسم کنیم؟
حالا که با نمادهای اصلی فلوچارت آشنا شدیم، وقتشه ببینیم چطور میشه برای یک مسئله فلوچارت کشید. برای شروع لازم نیست سراغ مسئلههای پیچیده بری. اول یک مسئله ساده انتخاب کن، مراحلش رو مشخص کن و بعد اون مراحل رو با نمادهایی که تا اینجا یاد گرفتیم به هم وصل کن.
۱. اول مشخص کن قراره چه مسئلهای رو حل کنی
قبل از کشیدن هر شکلی، باید دقیقاً بدونی فلوچارت قراره چه چیزی رو نشون بده. مثلاً:
- میخوایم عددی از کاربر بگیریم و مشخص کنیم زوج هست یا فرد.
- میخوایم بررسی کنیم کاربر اجازه ورود به سایت رو داره یا نه.
هرچقدر مسئله از اول واضحتر باشه، رسم فلوچارت هم راحتتر میشه.
۲. ورودی و خروجی رو پیدا کن
بعد مشخص کن برنامه چه اطلاعاتی دریافت میکنه و در آخر چه نتیجهای باید بده. مثلاً برای تشخیص زوج یا فرد:
- ورودی: یک عدد
- خروجی: «عدد زوج است» یا «عدد فرد است»
این مرحله کمک میکنه ابتدا و انتهای مسیر رو بهتر مشخص کنی.
۳. مراحل حل مسئله رو به ترتیب بنویس
هنوز لازم نیست چیزی رسم کنی. اول مراحل رو خیلی ساده و به ترتیب بنویس.
- شروع
- دریافت عدد
- بررسی زوج یا فرد بودن
- نمایش نتیجه
- پایان
این لیست در واقع اسکلت اولیه فلوچارتته.
۴. شرطها و تصمیمها رو پیدا کن
حالا ببین کجای مسیر باید یک تصمیم گرفته بشه. در مثال زوج یا فرد، باید بررسی کنیم:
number % 2 == 0 ?
اینجا دو حالت داریم:
- بله ← عدد زوجه
- خیر ← عدد فرده
پس این مرحله باید با نماد Decision یا همون شکل لوزی نمایش داده بشه.
۵. برای هر مرحله نماد مناسب انتخاب کن
حالا میتونیم مراحل رو به شکلهای فلوچارت تبدیل کنیم.
- Start ← نماد شروع
- دریافت عدد ← Input
- بررسی زوج یا فرد ← Decision
- نمایش نتیجه ← Output
- End ← نماد پایان
لازم نیست برای یک فلوچارت ساده از تعداد زیادی نماد مختلف استفاده کنی. همون نمادهای اصلی که در بخش قبل دیدیم برای بیشتر مثالهای ابتدایی کافیه.
۶. مراحل رو با فلش به هم وصل کن
بعد از قرار دادن شکلها، باید مسیر اجرای مراحل رو با فلش مشخص کنی.
Start ← دریافت عدد ← بررسی شرط ← نمایش نتیجه ← End
در قسمتهای شرطی هم بهتره روی مسیرها مشخص کنی هر فلش مربوط به کدوم نتیجه است؛ مثلاً «بله» و «خیر». تا جای ممکن مسیر فلوچارت رو مرتب نگه دار تا کاربر بتونه بدون دنبال کردن فلشهای درهم، روند اجرا رو بفهمه.
۷. در آخر مسیرها رو تست کن
وقتی فلوچارت تموم شد، یک بار خودت نقش برنامه رو بازی کن و از Start تا End جلو برو. مثلاً عدد 8 رو وارد کن:
- آیا ۸ بر ۲ بخشپذیره؟
- بله.
- پس باید پیام «عدد زوج است» نمایش داده بشه.
حالا عدد 7 رو امتحان کن:
- آیا ۷ بر ۲ بخشپذیره؟
- خیر.
- پس باید پیام «عدد فرد است» نمایش داده بشه.
با همین تست ساده میتونی بفهمی آیا تمام حالتهای مسئله رو در فلوچارت در نظر گرفتی یا نه.
نکته مهم اینه که هدف فلوچارت، پیچیدهتر کردن مسئله نیست. برعکس، باید کمک کنه مسیر حل مسئله رو سادهتر و واضحتر ببینی. اگه فلوچارتت انقدر شلوغ شده که خودت هم برای پیدا کردن مسیرها مشکل داری، احتمالاً وقتشه اون رو سادهتر کنی یا به چند بخش کوچیکتر تقسیمش کنی.