برنامه نویسی شی گرا (Object-oriented programming) و ساخت یافته (Structured Programming) دو روش برنامه نویسی مشهور برای ساخت نرم افزارها هستند. در برنامه نویسی شی گرا، برنامه نویسی مبتنی بر ایجاد شی ها (Objects) و ارتباط آن ها با یکدیگر صورت می گیرد. این روش برنامه نویسی برای مدیریت پیچیدگی و انعطاف پذیری برنامه های بزرگ و پیچیده بسیار مفید بوده و برنامه ها را به توابع و توابع را به کلاس ها تقسیم می کند. از سوی دیگر، روش ساخت یافته به عنوان یک الگوی طراحی برنامه، تمرکز را بر تقسیم وظایف مختلف یک برنامه و ارتباط بین آن ها می گذارد. برنامه نویسی شی گرا و ساخت یافته به عنوان دو رویکرد مهم برنامه نویسی، مزایا و معایب خود را دارند. در این مقاله، به بررسی تفاوت برنامه نویسی شی گرا و ساخت یافته و همچنین کاربرد مشترک آن ها پرداخته خواهد شد. همچنین، توصیه هایی برای انتخاب رویکرد مناسب در پروژه های نرم افزاری نیز ارائه می دهیم. 
برنامه نویسی شی گرا، یکی از مهم ترین الگوهای برنامه نویسی است که در دهه ۱۹۶۰ میلادی توسط سیمون پیتر ارائه شد. این الگو بر اساس ایده تقسیم شی های مختلف در یک سیستم ایجاد شده است. در برنامه نویسی شی گرا، هر شی یک مجموعه از ویژگی ها و عملکردهای مشخص دارد و با داشتن این مشخصات و عملکردها، قابلیت ارتباط و تعامل با دیگر شی ها را دارا خواهد بود. بر اساس الگو برنامه نویسی شی گرا، برنامه ها با استفاده از شی هایی که دارای ویژگی هایی مانند تعریف (Definition)، خصوصیت (Attribute) و عملکرد (Functionality) هستند، طراحی می شوند. در این سبک برنامه نویسی، شی ها را به دلیل داشتن ویژگی های خاص خود، به عنوان موجودیت های (Entities) منحصر به فرد می شناسیم. این ویژگی های خاص شامل ارث بری (Inheritance)، کپسوله سازی (Encapsulation)، کثرت (Multiplicity) و پلی مورفیسم (Polymorphism) هستند. به عنوان مثال برای کسانی که قصد یادگیری زبان برنامه نویسی PHP و مفاهیم شی گرایی این زبان را دارند، دوره آموزش php سون لرن پیشنهاد می شود. این دوره شما را با مفاهیم پایه و پیشرفته PHP آشنا می کند و یاد می گیرید چگونه از آن برای توسعه وب سایت های پویا استفاده کنید.
کارایی برنامه نویسی شی گرا را به صورت ویژه در برنامه نویسی های بزرگ و پیچیده می بینیم. این مزایا و کاربردها شامل قابلیت ارائه مدل های موثرتر، جایگزینی رفتارهای تکرارپذیر با ارث بری و همچنین پنهان سازی اطلاعات در شی ها هستند. همچنین، با استفاده از ارث بری، امکان توسعه و گسترش کد بسیار ساده تر می شود. با این حال، استفاده از هر الگوی برنامه نویسی بدون نقطه ضعف نیست. یکی از این معایب، افزایش پیچیدگی کد و اشغال حافظه RAM برنامه است. همچنین، ممکن است استفاده از برنامه نویسی شی گرا در برنامه های کوچک و ساده بیش از حد ازدحام کد و پیچیدگی ایجاد کند. یکی از برجسته ترین کاربردهای برنامه نویسی شی گرا، برنامه نویسی وب بوده که برای ساخت وب سایت ها و برنامه های تحت وب استفاده می شود. همچنین، برنامه نویسی شی گرا در بازی سازی، برنامه های موبایل، نرم افزارهای سیستم عامل و بسیاری دیگر از زمینه های برنامه نویسی کاربرد دارد. 
ساخت یافته یک الگوی برنامه نویسی است که به کمک آن، برنامه نویسان قابلیت تعریف رفتارهای مشخص را به شی ها می دهند و این رفتارها را در پاسخ به وقایع مختلفی که در سیستم رخ می دهند، پیاده سازی می کنند. به این ترتیب، ساخت یافته ها با استفاده از تعریف خود، وضعیت سیستم را نگهداری کرده و در پاسخ به وقایعی که در سیستم رخ می دهند، به روزرسانی می شوند. می توانیم برنامه ساخت یافته را یک کلاس بزرگ بی نام در نظر بگیریم که به نوعی، شکل خاصی از شی گرایی به حساب می آید. برنامه نویسی ساخت یافته بر اساس چند ویژگی اصلی شناخته می شود. این ویژگی ها عبارتند از:
با استفاده از برنامه نویسی ساخت یافته، برنامه نویسان کنترل بهتری بر روی سیستم و پیچیدگی کمتر در کدنویسی را خواهند داشت. این الگوی برنامه نویسی به شکل خودکار نگهداری و به روزرسانی وضعیت های سیستم را انجام می دهد و بهبود امنیت و کارایی سیستم نیز می تواند از دیگر مزایای استفاده از برنامه نویسی ساخت یافته باشد. همچنین، با انتخاب برنامه نویسی ساخت یافته، انعطاف پذیری بیشتری در طراحی و پیاده سازی سیستم ها در اختیارتان قرار می گیرد. این انعطاف پذیری به دلیل این است که ساخت یافته ها به صورت ماژولار طراحی شده اند و به راحتی می توانند تغییر کنند. این الگوی برنامه نویسی خالی از نقاظ ضعف نیست. به عنوان مثال، به دلیل پیچیدگی بالا، ممکن است برای برنامه نویسانی که با آن آشنایی ندارند، سخت باشد. کاهش عملکرد سیستم نیز از دیگر معایب این روش محسوب می شود. برنامه نویسی ساخت یافته در بسیاری از زمینه های برنامه نویسی مورد استفاده قرار می گیرد؛ یعنی کاربرد برنامه نویسی ساخت یافته در طراحی و پیاده سازی سیستم های حمل و نقل، بازی های ویدیویی، سیستم مدیریت محتوا و بسیاری زمینه های دیگر قابل استفاده خواهد بود. به طور خاص، از ساخت یافته در زبان های برنامه نویسی مانند جاوا، پایتون و سی شارپ استفاده می شود. 
برای آموزش برنامه نویسی باید با دو متد شی گرایی و ساختار یافته آشنا باشید. در یک نگاه کلی، در برنامه نویسی شی گرا، تمرکز بر روی اشیا (شی) و روابط بین آن ها قرار دارد که شامل وضعیت و رفتار مشخصی از سیستم است و هدفی جز بهبود قابلیت نگهداری، قابلیت گسترش و خوانایی کد ندارد. از طرف دیگر، در برنامه نویسی ساخت یافته، تمرکز بر روی معماری سیستم بوده و هدف کلی آن بهبود خصوصیات سیستم از جمله پایداری، امنیت و قابلیت توسعه است. همچنین برنامه نویسی ساخت یافته معماری سیستم را به چندین بخش کوچک تقسیم می کند و هر قسمت به طور مستقل از دیگر قسمت ها، مدیریت می شوند. خوانایی کد، قابلیت گسترش و توسعه، کاهش تکرار کدنویسی و افزایش قابلیت نگهداری در برنامه نویسی شی گرا در مقابل برنامه نویسی ساخت با پایداری، قابلیت توسعه، امنیت و قابلیت استفاده مجدد قرار دارند. مثال کاربردی برای برنامه نویسی شی گرا می تواند پیاده سازی یک برنامه پخش موسیقی باشد. در این حالت، هر آهنگ به عنوان یک شی در نظر گرفته می شود که قابلیت نگهداری و گسترش برنامه را بهبود می بخشد. یک مثال مفهومی برای برنامه نویسی ساخت یافته نیز می توان به ایجاد یک سیستم بانکی اشاره کرد. در این حالت، سیستم به چندین قسمت کوچک تقسیم می شود که هر قسمت به طور مستقل از دیگر قسمت ها مدیریت می شود. این الگوی برنامه نویسی برای بهبود پایداری، امنیت و قابلیت توسعه سیستم کارایی دارند. در ادامه، به صورت خلاصه به تفاوت های برنامه نویسی شی گرا و ساخت یافته اشاره می کنیم:

برای پروژه های کوچک، استفاده از رویکرد ساخت یافته به عنوان یک روش ساده و قابل اجرا، توصیه می شود. با متدهای ساخت یافته، می توانید به راحتی کدهای خود را سازماندهی و برای نگهداری و توسعه آن ها بهترین شیوه را انتخاب کنید. همچنین، برای پروژه های کوچک، استفاده از پارادایم برنامه نویسی شی گرا نیز گزینه بدی نیست. این رویکرد به شما اجازه می دهد تا کدهایی با کیفیت بالا و قابلیت گسترش بیشتر بسازید و برای پشتیبانی از تغییرات در آینده، ساده تر وارد عمل شوید. برای پروژه های بزرگ و پیچیده، استراتژی کمی تغییر می کند؛ به طوری که ترکیب برنامه نویسی شی گرا و ساخت یافته را توصیه می کنیم. با این رویکرد ادغامی، به راحتی کدهای پیچیده خود را سر و سامان خواهید داد و از قابلیت باز استفاده کد بهره مند می شوید. در ادامه، از پارادایم برنامه نویسی شی گرا برای تعامل بین اجزای سیستم استفاده کنید و قابلیت تغییر در آینده سیستم را داشته باشید. باید اعتراف کنیم که استفاده از مفاهیم شی گرایی در ساخت یافته ها، به طور موثری می تواند باعث بهبود خصوصیات ساختاری و نگهداری کد شود. به عنوان مثال، استفاده از ارث بری و پلی مورفیسم در ساخت یافته ها، قابلیت باز استفاده کد را بالا می برد و باعث افزایش کیفیت ساختاری سیستم خواهد شد. در پروژه های بزرگ و پیچیده، استفاده مجزا از رویکرد کافی نبوده و بی شک نیاز به ترکیب آن ها با هم وجود دارد. از این رو، اکثر پروژه های بزرگ و تجاری موفق از ترکیب برنامه نویسی شی گرا و ساخت یافته به موفقیت رسیده اند. یکی از مثال های مهم از ترکیب موفق برنامه نویسی شی گرا و ساخت یافته در پروژه های بزرگ، استفاده از الگوی طراحی MVC است. در این الگو، مدل (Model) به عنوان قسمت اصلی سیستم از رویکرد شی گرایی استفاده می کند؛ در عین حال، کنترلر (Controller) و نمایشگر (View) نیز به صورت ساخت یافته و با استفاده از مفاهیم شی گرایی پیاده سازی شده اند. این ترکیب حساب شده، باعث افزایش قابلیت باز استفاده کد و بهبود خصوصیات ساختاری و نگهداری کد شده است. 
برای انتخاب رویکرد مناسب برای پروژه های نرم افزاری، باید به چندین عامل توجه کنید. برخی از مهم ترین عوامل شامل موارد زیر می شود:

باید اعتراف کنیم که استفاده از ترکیب رویکردهای برنامه نویسی شی گرا و ساخت یافته، برای پروژه های بزرگ و پیچیده، بسیار مناسب است. این رویکردها به توسعه و نگهداری سیستم های بزرگ کمک می کنند و با استفاده از ابزارهای مناسب مانند نمودارهای UML، قابلیت توسعه و نگهداری را بهبود می بخشند. به عنوان توصیه نهایی، پیشنهاد می دهیم که برای انتخاب رویکرد مناسب در پروژه های نرم افزاری، باید به مواردی مانند اندازه و پیچیدگی پروژه، تکنولوژی مورد استفاده، نیازهای کاربری و توانایی تیم برنامه نویسی توجه کرد. در نهایت، انتخاب رویکرد مناسب برای پروژه های نرم افزاری، می تواند به بهبود عملکرد و کارایی سیستم و بهبود تجربه کاربری کمک کند و نباید کم ارزش تلقی شود.
اصفهان، خیابان حمزه اصفهانی، بن بست تخت جمشید(18) ، پلاک ۴
دفتر تهران: تهران، خیابان سهروردی شمالی، خیابان هویزه شرقی، پلاک 20، طبقه دوم، واحد 6