فلوچارت
Flowchartفلوچارت یا نمودار گردش کار، نمایش تصویری یک فرایند یا الگوریتم با شکلهای استاندارد است. هر شکل معنای مشخصی دارد و فلشها مسیر اجرا را نشان میدهند. کاربردش فراتر از برنامهنویسی است و در طراحی هر فرایندی به کار میآید.
شکلهای استاندارد
معنای هر شکل قراردادی و جهانی است؛ رعایت آن باعث میشود نمودار شما برای همه قابل خواندن باشد:
| شکل | معنی | نمونه |
|---|---|---|
| بیضی | شروع یا پایان | «شروع» |
| مستطیل | یک عملیات یا محاسبه | «مجموع را حساب کن» |
| لوزی | تصمیم؛ خروجی بله یا خیر | «آیا عدد مثبت است؟» |
| متوازیالاضلاع | ورودی یا خروجی | «عدد را بخوان» |
| فلش | جهت جریان اجرا | — |
| دایرهٔ کوچک | اتصال به بخش دیگر نمودار | برای نمودارهای بزرگ |
لوزی قلب هر فلوچارت است. هرجا تصمیمی گرفته میشود، مسیر دو شاخه میشود. تعداد لوزیها تقریباً نشان میدهد فرایند چقدر پیچیده است — و در برنامهنویسی، تعداد حالتهایی که باید آزمایش شوند.
قواعد رسم درست
- یک نقطهٔ شروع. هر فلوچارت دقیقاً یک نقطهٔ ورود دارد.
- جهت ثابت. جریان معمولاً از بالا به پایین است. اگر ناچار به بازگشت شدید، فلش را روشن رسم کنید.
- خروجی لوزی برچسب داشته باشد. هر شاخه باید مشخص کند شرط «بله» است یا «خیر». این پرتکرارترین نقص در فلوچارتهای ناقص است.
- هیچ مسیری معلق نماند. هر مسیر باید در نهایت به پایان برسد یا به مسیر دیگری بپیوندد.
- فلشها قطع نشوند. اگر نمودار شلوغ شد، آن را به چند بخش تقسیم کنید و با نقاط اتصال به هم وصل کنید.
- هر شکل یک کار. نوشتن چند عملیات در یک مستطیل، هدف نمودار را از بین میبرد.
نمونهٔ کاربردی
فلوچارت تشخیص عدد زوج یا فرد، بهصورت متنی:
- شروع (بیضی)
- عدد را از کاربر بگیر (متوازیالاضلاع)
- آیا باقیماندهٔ تقسیم بر ۲ صفر است؟ (لوزی)
- بله ← «زوج» را نمایش بده (متوازیالاضلاع)
- خیر ← «فرد» را نمایش بده (متوازیالاضلاع)
- هر دو مسیر ← پایان (بیضی)
نکتهٔ کلیدی: هر دو شاخه در نهایت به یک نقطهٔ پایان میرسند. اگر یکی از شاخهها به جایی نمیرسید، نمودار ناقص بود.
کاربردها و محدودیتها
کجا واقعاً مفید است:
- آموزش. برای تازهکارها، دیدن مسیر اجرا بسیار روشنتر از خواندن کد است.
- مستندسازی فرایند کسبوکار. مسیر تأیید یک درخواست، فرایند رسیدگی به شکایت، گردش کار اداری.
- گفتوگو با افراد غیرفنی. فلوچارت زبان مشترکی است که مدیر و برنامهنویس هر دو میفهمند.
- یافتن حالتهای فراموششده. هنگام رسم، معمولاً متوجه میشوید حالتی را در نظر نگرفتهاید.
محدودیتها:
- برای برنامههای بزرگ بهسرعت غیرقابل مدیریت میشود.
- مفاهیم مدرن مثل برنامهنویسی همزمان یا رویدادمحور را بهخوبی نشان نمیدهد.
- بهروز نگهداشتنش هنگام تغییر کد، هزینهبر است و اغلب فراموش میشود.
فلوچارت را برای بخشهای پیچیده و تصمیممحور رسم کنید، نه برای کل برنامه. نمودار یک فرایند پیچیدهٔ تأیید، ارزشمند است؛ نمودار کل یک نرمافزار، معمولاً بیفایده و منسوخ.
پرسشهای متداول دربارهٔ فلوچارت
تفاوت فلوچارت و شبهکد چیست؟
فلوچارت تصویری است و مسیرهای اجرا را بصری نشان میدهد؛ شبهکد متنی است و به کد واقعی نزدیکتر. برای فرایندهای تصمیممحور، فلوچارت روشنتر است؛ برای الگوریتمهای محاسباتی، شبهکد فشردهتر و کاربردیتر.
آیا فلوچارت هنوز کاربرد دارد؟
در آموزش و مستندسازی فرایندهای کسبوکار بله. در توسعهٔ نرمافزار حرفهای، معمولاً از نمودارهای تخصصیتری استفاده میشود که برای نمایش تعامل بخشهای مختلف سامانه طراحی شدهاند.
با چه ابزاری رسم کنم؟
گزینههای زیادی وجود دارد، از ابزارهای آنلاین رسم نمودار تا زبانهای متنی که از توضیح متنی، نمودار میسازند. مزیت روش متنی این است که نمودار را میتوان کنار کد نگه داشت و تغییراتش را دنبال کرد.
اصطلاحات همخانوادهٔ مفاهیم پایه برنامهنویسی
مشاهدهٔ همه ←- برنامهنویسیبرنامهنویسی یعنی تبدیل یک راهحل به دنبالهای از دستورهای دقیق که کامپیوتر بتواند اجرا کند. نکتهای که اغلب نادیده گرفته میشود: بخش سخت برنامهنویسی نوشتن کد نیست، بلکه فهمیدن دقیق مسئله و طراحی راهحل است.
- الگوریتمالگوریتم دنبالهای متناهی از گامهای دقیق و بدون ابهام است که مسئلهای را حل میکند. الگوریتم مستقل از زبان برنامهنویسی است: یک الگوریتم واحد را میتوان در هر زبانی پیاده کرد، درست مثل دستور پختی که با هر اجاقی قابل اجراست.
- متغیرمتغیر نامی است که به یک مقدار در حافظه اشاره میکند. بهجای اینکه با آدرسهای عددی حافظه کار کنید، به مقدار نامی معنادار میدهید و از آن پس با همان نام به آن دسترسی دارید.
- تابعتابع بلوکی نامدار از کد است که یک کار مشخص انجام میدهد و میتوان آن را بارها فراخوانی کرد. تابع معمولاً ورودی میگیرد، پردازشی انجام میدهد و خروجی برمیگرداند — و مهمتر از همه، از تکرار کد جلوگیری میکند.
- کلاسکلاس نقشه یا قالبی است که تعیین میکند یک نوع شیء چه ویژگیهایی دارد و چه کارهایی میتواند انجام دهد. از روی یک کلاس میتوان بینهایت شیء ساخت که هر کدام دادههای خودشان را دارند اما رفتار مشترکی نشان میدهند.
- شیگرایی OOPشیگرایی سبکی از برنامهنویسی است که در آن برنامه از مجموعهای از اشیاء ساخته میشود؛ هر شیء دادههای خودش را نگه میدارد و رفتارهای مربوط به آن دادهها را انجام میدهد. هدف اصلیاش مدیریت پیچیدگی در نرمافزارهای بزرگ است.
برای درک کاملتر، اینها را هم بخوانید
- الگوریتمالگوریتم دنبالهای متناهی از گامهای دقیق و بدون ابهام است که مسئلهای را حل میکند. الگوریتم مستقل از زبان برنامهنویسی است: یک الگوریتم واحد را میتوان در هر زبانی پیاده کرد، درست مثل دستور پختی که با هر اجاقی قابل اجراست.
- برنامهنویسیبرنامهنویسی یعنی تبدیل یک راهحل به دنبالهای از دستورهای دقیق که کامپیوتر بتواند اجرا کند. نکتهای که اغلب نادیده گرفته میشود: بخش سخت برنامهنویسی نوشتن کد نیست، بلکه فهمیدن دقیق مسئله و طراحی راهحل است.