موضوع مقاله: طراحی بالا به پایین و پایین به بالا | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # طراحی بالا به پایین و پایین به بالا | مقدمه: قابلیت استفاده در تکنیک ریختن و فکر کردن و مدیریت در هر پروژه ای را دارا می‌باشند. | ## بخش 1: طراحی بالا به پایین و پایین به بالا | یک روش بالا به پایین (که گاهی به عنوان طراحی گام به گام از آن نامبرده می‌شود یا در مواردی هم ارز با تجزیه به کار می‌رود)، اساساً یک سیستم را به اجزای کوچکتر خود می‌شکند تا بتواند از وضعیت زیرسیستمهای آن با استفاده از یک روش مهندسی بازگشتی اطلاع کسب کند. در روش بالا به پایین یک دید شمای کلی از سیستم در دسترس است ولی نه به معنای اینکه این طرح کلی با جزئیات کامل باشد؛ لذا هر زیر سیستمی به ما اطلاعات جامع تر و کاملتری را می‌دهد و گاهی برای درک ساختار یک سیستم باید تعداد وارد جزئیات و ساختار تعدادی زیادی از زیرسیستم‌های آن بشویم تا بتوانیم به شناخت خوبی از جزئیات سیستم اصلی برسیم. به هر حال ممکن است بلک باکس ممکن است در روشن کردن مکانیزم مولفه‌ها یا در نشان دادن بیشتر از حد جزئیات شکست بخورد. روش بالا به پایین با یک تصویر بزرگ شروع می‌شود و در هر مرحله با رفتن به سطح پایینتر به تصویرهای کوچکی خرد می‌شود. روش پایین به بالا بر اساس بنا کردن و ساختن اجزای کوچک سیستم و سپس ادغام آنها برای ساختن سیستمی پیچیده‌تر است. پردازش پایین به بالا یک مدل از پردازش اطلاعات است که بر اساس داده‌های ورودی از محیط برای شکل‌دادن یک ادراک است. در روش پایین به بالا برای درک کلی سیستم ابتدا به بررسی جزئیات تک تک ساده‌ترین و پایه‌ترین مولفه‌های سیستم می‌پردازیم و سپس به وسیله آنها به سیستم بالاتر از آن می‌رسیم. ممکن است برای همین زیرسیستم‌های بزرگتر این مرحله یک یا چند بار تکرار شود تا زمانی که بالاترین سطح سیستم شکل خود را بگیرد. به این منظور که در شروع همه چیز کوچک است و اما به مرور همواره پیچیده‌تر و کامل تر می‌شود. طراحی و پیاده‌سازی محصول در حین پیاده‌سازی و طراحی محصولات جدید، طراحان و مهندسان از روش‌های بالا به پایین و پایین به بالا بهره می‌برند. روش پایین به بالا زمانی به کار می‌رود که اجزا و مولفه‌هایی که برای ساخت محصول به کار می‌روند در ابتدا به طور کامل مشخص باشند. در روش بالا به پایین ما یک درک بالا و شمای کلی از محصول را در اختیار داریم (مثلاً در ساخت برنامه‌های کاربردی گاهی که کارفرما پروژه ای را به تیم کدنویسی می‌دهد و تیم در ابتدا به طور کامل از جزئیات بخش‌های آن اطلاعی ندارد) زمانی که اولویت کاهش هزینه یا افزایش دردسترس بودن محصول (availability) معمولاً روش پایین به بالا مناسب تر است؛ مثلاً در طراحی اتومبیل با این روش می‌توان هزینه هر بخش مانند بدنه و چرخ و چراغ و… را کمترین کرد. علوم کامپیوتر پیاده‌سازی نرم‌افزار در پروسه توسعه و پیاده‌سازی نرم‌افزار روشهای بالا به پایین و پایین به بالا نقش اساسی دارند. به طبع هیچ کد زنی نمی‌تواند شروع شود تا زمانیکه به سطح کافی جزئیات در طراحی حداقل چندین بخش سیستم برسیم. | ## بخش 2: طراحی بالا به پایین و پایین به بالا | به هر حال تست نهایی عملکردها را تا زمان طراحی لازم صورت بگیرد، به تأخیر می‌اندازد. در حالی که روش پایین به بالا به کد زنی و تست زود هنگام تمرکز دارد؛ که این امر به محض مشخص شدن اولین بخش‌های برنامه قابل شروع است. به این صورت که ما این ریسک را می‌پذیریم که کد زنی را در حالتی شروع کنیم که دید کافی از سیستم و اجزایی که باید به هم مرتبط شوند نداریم در حالی که ممکن است این اجزا و نحوه ارتباطشان با هم آنگونه که در اول به نظر می‌رسد ساده نباشد. میلز جنبه‌های برنامه‌ریزی ساخت یافته را به منظور استفاده و تست از آنها در یک پروژه در سال ۱۹۶۹ مربوط به بایگانی روزنامه نیویورک تایمز توسعه داد. مهندسی و مدیریت موفق این پروژه منجر به توسعه روش بالا به پایین در IBM و سراسر صنعت کامپیوتر شد. روش بالا به پایین در مهندسی نرم‌افزار در اواخر دهه ۱۹۸۰ مورد توجه قرار گرفت؛[۳] و برنامه‌نویسی شی گرایی کمکی در اثبات این ایده داشت که هر دو جنبه از روش‌های بالا به پایین و پایین به بالا قابلیت به کار بردن را به نحو سودمندی دارند. روش‌های مدرن طراحی نرم‌افزار معمولاً از ترکیبی از روش‌های بالا به پایین و پایین به بالا می‌باشند. این همواره ضروری است که یک شناخت کامل نسبت به سیستم برای طراحی آن داشته باشیم، که این اساس و پایه روش بالا به پایین است. بیشتر پروژه‌های نرم‌افزاری کد نویسی را در چند مرحله در حین پیشرفت پروژه (و نه به طور پیوسته در حین پیشرفت پروژه) بر اساس طراحی خود دارند و در چند مرحله سعی می‌کنند که کدنویسی را پیش ببرند که این کد زنی در حین انجام پروژه ایده و پایه برنامه‌نویسی پایین به بالا است. این روش به مرور کدها تکمیل و در صورت نیاز نیز اصلاح می‌شوند؛ بنابراین بیشتر پروژه‌های نرم‌افزاری ترکیبی از این دو روش می‌باشند. برنامه‌نویسی روش بالا به پایین یک روش برنامه‌نویسی است که وابستگی زیادی به روش‌ها و رسم‌های زبان‌های برنامه‌نویسی دارد. به این صورت که وقتی طراحی آغاز می‌شود اجزای سیستم پیچیده به قسمت‌های کوچکتر شکسته می‌شوند. تکنیکی که در برنامه‌نویسی با روش بالا به پایین مورد استفاده قرار می‌گیرد به این صورت است که یک روال اصلی که در آن اسامی بیشتر تابع‌هایی که بعداً مورد نیاز است را بنویسیم. سپس تیم برنامه‌نویسی در هر مرحله تلاش می‌کند که هر یک توابع را پیاده‌سازی و کد مربوط به آن را بنویسد. | ## بخش 3: طراحی بالا به پایین و پایین به بالا | این چند تکه کردن باعث می‌شود که نوشتن کدهای داخل هر بخش و تابع اسانتر و سریعتر صورت بگیرد. زمانی که کد تمام توابع و زیرروالها نوشته شد، در آن موقع می‌توان برنامه را تست کرد. پس در این روش نوشتن هر تابع به این صورت است که ابتدا نام و فضا تمامی زیر تابع‌های مورد نظر آن را مشخص و سپس وارد تک تک تابع‌ها شده و سعی در نوشتن کد آن داریم. این روال بالا به پایین را برای تک تک تابع‌ها و روال‌ها و قسمت‌های برنامه تکرار می‌کنیم. در روش پایین به بالا نیازمند این هستیم که تک تک المان‌های پایه ای برنامه را با جزئیات زیادی داشته باشیم؛ زیرا بر خلاف قسمت قبل در این قسمت برای نوشتن یک تابع اطلاع و کاری با توابع بالادستی نداریم و هر تابع اولیه (کوچک) را ابتدا نوشته و سپس به فکر ایجاد و نوشتن توابع والد (در صورت وجود) می‌افتیم. در این روش ما اطلاعات کافی برای المان‌های اولیه باید داشته باشیم و سپس این المان‌های (اکثراً کوچک) با هم مرتبط شده تا زیر سیستم بزرگتری را شکل دهند که این روال می‌تواند برای همان زیر سیستم بزرگتر نیز با زیر سیستم‌های بزرگتر تکرار شود که گاهی این مراحل تعداد بسیار زیادی می‌شوند. این استراتژی مشابه مدل «بذر» می‌باشد که با قسمت کوچکی شروع شده و به مرور و با پیشرفت در برنامه به طور دائم بزرگ و بزرگتر می‌شود. برنامه‌نویسی شیء گرا یک نمونه از استفاده از اشیا به منظور طراحی اپلیکیشن‌ها و برنامه‌های کامپیوتری است. در روش پایین به بالا ما نیازمند یک شهود خوب هستیم تا بتوانیم توابعی که به وسیله ماژول ایجاد می‌شوند را مشخص کنیم. اگر یک سیستم قرار است از یک سیستم موجود ساخته شود، این روش بسیار مناسب است زیرا ما می‌توانیم کار را از ماژول‌های موجود شروع کنیم. تجزیه تجزیه پروسه آنالیز یک ورودی (به ترتیب)، (به عنوان مثال خواندن از فایل یا از صفحه کلید) به منظور مشخص کردن ساختار گرامری آن می‌باشد. تجزیه پایین به بالا یک استراتژی برای آنالیز روابط داده‌های ناشناخته است که در ابتدا تلاش می‌کند تا بیشترین واحد اصلی و بنیادی را مشخص کند و بشناسد تا در مرحله بعدی بتواند ساختار سطح بالاتری از آن را استنتاج کند. | ## جمع‌بندی | از سوی دیگر تجزیه بالا به پایین، ساختار درخت تجزیه اصلی را فرض می‌کند و سپس بر اساس ساختارهای بنیادی و اصلی که در اختیار دارد، سعی می‌کند تجزیه را ادامه داده و به سطح پایین تر درخت برسد.