طراحی بالا به پایین و پایین به بالا

بندانگشتی|تصویر مربوط
**طراحی بالا به پایین و پایین به بالا** () هر دو استراتژی‌هایی در پردازش اطلاعات و مرتب‌سازی کارها و اطلاعات هستند که در زمینه‌های مختلفی چون نرم‌افزار، رفتارشناسی انسانی و تئوری‌های علمی و مدیریت و سازماندهی کاربرد دارند. قابلیت استفاده در تکنیک ریختن و فکر کردن و مدیریت در هر پروژه ای را دارا می‌باشند.

یک روش بالا به پایین (که گاهی به عنوان طراحی گام به گام از آن نامبرده می‌شود یا در مواردی هم ارز با تجزیه به کار می‌رود)، اساساً یک سیستم را به اجزای کوچکتر خود می‌شکند تا بتواند از وضعیت زیرسیستمهای آن با استفاده از یک روش مهندسی بازگشتی اطلاع کسب کند. در روش بالا به پایین یک دید شمای کلی از سیستم در دسترس است ولی نه به معنای اینکه این طرح کلی با جزئیات کامل باشد؛ لذا هر زیر سیستمی به ما اطلاعات جامع تر و کاملتری را می‌دهد و گاهی برای درک ساختار یک سیستم باید تعداد وارد جزئیات و ساختار تعدادی زیادی از زیرسیستم‌های آن بشویم تا بتوانیم به شناخت خوبی از جزئیات سیستم اصلی برسیم. یک روش بالا به پایین معمولاً به وسیله یک black box :en:Black boxمشخص می‌شود. این عمل باعث می‌شود مدیریت و اداره کردن آن آسان‌تر شود. به هر حال ممکن است بلک باکس ممکن است در روشن کردن مکانیزم مولفه‌ها یا در نشان دادن بیشتر از حد جزئیات شکست بخورد. روش بالا به پایین با یک تصویر بزرگ شروع می‌شود و در هر مرحله با رفتن به سطح پایینتر به تصویرهای کوچکی خرد می‌شود.

روش پایین به بالا بر اساس بنا کردن و ساختن اجزای کوچک سیستم و سپس ادغام آنها برای ساختن سیستمی پیچیده‌تر است. پردازش پایین به بالا یک مدل از پردازش اطلاعات است که بر اساس داده‌های ورودی از محیط برای شکل‌دادن یک ادراک است. از دید روان‌شناسی ادراکی (cognitive psychology perspective)، اطلاعات از طریق چشم (ورودی سنسور یا دکمه مربوط) به ما می‌رسد و سپس تبدیل به تصویری برای مغز می‌شود که قابلیت تفسیر و درک کردن به عنوان یک ادراک را دارد. در روش پایین به بالا برای درک کلی سیستم ابتدا به بررسی جزئیات تک تک ساده‌ترین و پایه‌ترین مولفه‌های سیستم می‌پردازیم و سپس به وسیله آنها به سیستم بالاتر از آن می‌رسیم. این مولفه‌های کوچکتر به همدیگر به منظور تشکیل یک زیرسیستم بزرگتر متصل می‌شوند. ممکن است برای همین زیرسیستم‌های بزرگتر این مرحله یک یا چند بار تکرار شود تا زمانی که بالاترین سطح سیستم شکل خود را بگیرد. این استراتژی را می‌توان مشابه مدل «بذر» در نظر گرفت. به این منظور که در شروع همه چیز کوچک است و اما به مرور همواره پیچیده‌تر و کامل تر می‌شود.

## طراحی و پیاده‌سازی محصول
در حین پیاده‌سازی و طراحی محصولات جدید، طراحان و مهندسان از روش‌های بالا به پایین و پایین به بالا بهره می‌برند. روش پایین به بالا زمانی به کار می‌رود که اجزا و مولفه‌هایی که برای ساخت محصول به کار می‌روند در ابتدا به طور کامل مشخص باشند. در روش بالا به پایین ما یک درک بالا و شمای کلی از محصول را در اختیار داریم (مثلاً در ساخت برنامه‌های کاربردی گاهی که کارفرما پروژه ای را به تیم کدنویسی می‌دهد و تیم در ابتدا به طور کامل از جزئیات بخش‌های آن اطلاعی ندارد) زمانی که اولویت کاهش هزینه یا افزایش دردسترس بودن محصول (availability) معمولاً روش پایین به بالا مناسب تر است؛ مثلاً در طراحی اتومبیل با این روش می‌توان هزینه هر بخش مانند بدنه و چرخ و چراغ و… را کمترین کرد.

## علوم کامپیوتر
### پیاده‌سازی نرم‌افزار
در پروسه توسعه و پیاده‌سازی نرم‌افزار روشهای بالا به پایین و پایین به بالا نقش اساسی دارند.
روش بالا به پایین تأکید بر روی برنامه‌ریزی و درک کامل برنامه برنامه دارد. به طبع هیچ کد زنی نمی‌تواند شروع شود تا زمانیکه به سطح کافی جزئیات در طراحی حداقل چندین بخش سیستم برسیم. روش بالا به پایین با متصل کردن و جایگزین کردن زیرسیستم‌ها با ریشه عمل می‌کند. به هر حال تست نهایی عملکردها را تا زمان طراحی لازم صورت بگیرد، به تأخیر می‌اندازد. در حالی که روش پایین به بالا به کد زنی و تست زود هنگام تمرکز دارد؛ که این امر به محض مشخص شدن اولین بخش‌های برنامه قابل شروع است. به هر حال این روش نیز ضرر خود را دارد. به این صورت که ما این ریسک را می‌پذیریم که کد زنی را در حالتی شروع کنیم که دید کافی از سیستم و اجزایی که باید به هم مرتبط شوند نداریم در حالی که ممکن است این اجزا و نحوه ارتباطشان با هم آنگونه که در اول به نظر می‌رسد ساده نباشد. پیشرفت تدریجی کدها از مشخصات اصلی این روش می‌باشد.

طراحی بالا به پاپین در دهه ۱۹۷۰ به وسیله محققان IBM به نام‌های Harlan Mills و Niklaus Wirth ایجاد شد. میلز جنبه‌های برنامه‌ریزی ساخت یافته را به منظور استفاده و تست از آنها در یک پروژه در سال ۱۹۶۹ مربوط به بایگانی روزنامه نیویورک تایمز توسعه داد. مهندسی و مدیریت موفق این پروژه منجر به توسعه روش بالا به پایین در IBM و سراسر صنعت کامپیوتر شد. همچنین niklaus wirth به سمت توسعه زبانهایی چون Modula و Oberon (که در آنها ما امکان تعریف یک ماژول را قبل از اینکه از تمام خصوصیات برنامه اطلاعی داشته باشیم را دارد) البته بهتر است این مورد را نیز اشاره کنیم که برنامه‌نویسی بالا به پایین دقیقاً آن چیزی که او ایجاد کرد نبود. روش بالا به پایین در مهندسی نرم‌افزار در اواخر دهه ۱۹۸۰ مورد توجه قرار گرفت؛[۳] و برنامه‌نویسی شی گرایی کمکی در اثبات این ایده داشت که هر دو جنبه از روش‌های بالا به پایین و پایین به بالا قابلیت به کار بردن را به نحو سودمندی دارند.

روش‌های مدرن طراحی نرم‌افزار معمولاً از ترکیبی از روش‌های بالا به پایین و پایین به بالا می‌باشند. این همواره ضروری است که یک شناخت کامل نسبت به سیستم برای طراحی آن داشته باشیم، که این اساس و پایه روش بالا به پایین است. بیشتر پروژه‌های نرم‌افزاری کد نویسی را در چند مرحله در حین پیشرفت پروژه (و نه به طور پیوسته در حین پیشرفت پروژه) بر اساس طراحی خود دارند و در چند مرحله سعی می‌کنند که کدنویسی را پیش ببرند که این کد زنی در حین انجام پروژه ایده و پایه برنامه‌نویسی پایین به بالا است. این روش به مرور کدها تکمیل و در صورت نیاز نیز اصلاح می‌شوند؛ بنابراین بیشتر پروژه‌های نرم‌افزاری ترکیبی از این دو روش می‌باشند.

#### برنامه‌نویسی
روش بالا به پایین یک روش برنامه‌نویسی است که وابستگی زیادی به روش‌ها و رسم‌های زبان‌های برنامه‌نویسی دارد. به این صورت که وقتی طراحی آغاز می‌شود اجزای سیستم پیچیده به قسمت‌های کوچکتر شکسته می‌شوند. تکنیکی که در برنامه‌نویسی با روش بالا به پایین مورد استفاده قرار می‌گیرد به این صورت است که یک روال اصلی که در آن اسامی بیشتر تابع‌هایی که بعداً مورد نیاز است را بنویسیم. سپس تیم برنامه‌نویسی در هر مرحله تلاش می‌کند که هر یک توابع را پیاده‌سازی و کد مربوط به آن را بنویسد. این چند تکه کردن باعث می‌شود که نوشتن کدهای داخل هر بخش و تابع اسانتر و سریعتر صورت بگیرد. زمانی که کد تمام توابع و زیرروالها نوشته شد، در آن موقع می‌توان برنامه را تست کرد. پس در این روش نوشتن هر تابع به این صورت است که ابتدا نام و فضا تمامی زیر تابع‌های مورد نظر آن را مشخص و سپس وارد تک تک تابع‌ها شده و سعی در نوشتن کد آن داریم. این روال بالا به پایین را برای تک تک تابع‌ها و روال‌ها و قسمت‌های برنامه تکرار می‌کنیم.

در روش پایین به بالا نیازمند این هستیم که تک تک المان‌های پایه ای برنامه را با جزئیات زیادی داشته باشیم؛ زیرا بر خلاف قسمت قبل در این قسمت برای نوشتن یک تابع اطلاع و کاری با توابع بالادستی نداریم و هر تابع اولیه (کوچک) را ابتدا نوشته و سپس به فکر ایجاد و نوشتن توابع والد (در صورت وجود) می‌افتیم. در این روش ما اطلاعات کافی برای المان‌های اولیه باید داشته باشیم و سپس این المان‌های (اکثراً کوچک) با هم مرتبط شده تا زیر سیستم بزرگتری را شکل دهند که این روال می‌تواند برای همان زیر سیستم بزرگتر نیز با زیر سیستم‌های بزرگتر تکرار شود که گاهی این مراحل تعداد بسیار زیادی می‌شوند. این استراتژی مشابه مدل «بذر» می‌باشد که با قسمت کوچکی شروع شده و به مرور و با پیشرفت در برنامه به طور دائم بزرگ و بزرگتر می‌شود. برنامه‌نویسی شیء گرا یک نمونه از استفاده از اشیا به منظور طراحی اپلیکیشن‌ها و برنامه‌های کامپیوتری است. در مهندسی ماشینی (مکانیکی) با برنامه‌های نرم‌افزاری مانند Pro/ENGINEER , Solidworks, Autodesk کاربران امکان طراحی محصولات به‌صورت جزء به جزء و نه به صورت کامل و کلی را دارند تا در ادامه با این قسمت‌ها را با هم ادغام کرده تا ساختمانی مانند LEGO را ایجاد کنند. مهندسان این عمل را طراحی تکه‌تکه (جزء به جزء) می‌نامند.

در روش پایین به بالا ما نیازمند یک شهود خوب هستیم تا بتوانیم توابعی که به وسیله ماژول ایجاد می‌شوند را مشخص کنیم. اگر یک سیستم قرار است از یک سیستم موجود ساخته شود، این روش بسیار مناسب است زیرا ما می‌توانیم کار را از ماژول‌های موجود شروع کنیم.

#### تجزیه
تجزیه پروسه آنالیز یک ورودی (به ترتیب)، (به عنوان مثال خواندن از فایل یا از صفحه کلید) به منظور مشخص کردن ساختار گرامری آن می‌باشد. این روش هم در بررسی زبان طبیعی و هم زبان ماشین کاربرد دارد. در مورد زبان ماشین این کار با کامپایل کردن گویند که توسط کامپایلر صورت می‌گیرد.

تجزیه پایین به بالا یک استراتژی برای آنالیز روابط داده‌های ناشناخته است که در ابتدا تلاش می‌کند تا بیشترین واحد اصلی و بنیادی را مشخص کند و بشناسد تا در مرحله بعدی بتواند ساختار سطح بالاتری از آن را استنتاج کند. از سوی دیگر تجزیه بالا به پایین، ساختار درخت تجزیه اصلی را فرض می‌کند و سپس بر اساس ساختارهای بنیادی و اصلی که در اختیار دارد، سعی می‌کند تجزیه را ادامه داده و به سطح پایین تر درخت برسد. در صورتی که علاقه‌مندید در مورد تجزیه پایین به بالا و تجزیه بالا به پایین مطالب بیشتری را بخوانید از دو لینک زیر استفاده کنید:

1- تحلیلگر بالا به پایین 

2- تجزیه از پایین به بالا

## منابع
https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design

رده:دیکوتومی
رده:روان‌شناسی عصبی
رده:سلسله‌مراتب
رده:علم مدیریت
رده:علم اطلاعات
رده:ویکی‌سازی رباتیک
رده:طراحی نرم‌افزار