تفاوت بین برنامه نویسی فانکشنال و شی‌گرا
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 6 دقیقه

تفاوت بین برنامه نویسی فانکشنال و شی‌گرا

برنامه نویسی فانکشنال یک تکنیک برنامه نویسی است که فاکتورهای فانکشنال مورد نیاز برای ایجاد و اجرای برنامه‌ها را برجسته و به آن اهمیت می‌دهد. OOP یا برنامه‌ها شی‌گرا،‌ تکنیک‌های برنامه نویسی مفهومی هستند که از اشیا به‌عنوان کلید استفاده می‌کنند. مدل برنامه نویسی مورد استفاده در برنامه نویسی فانکشنال،‌ یک مدل برنامه نویسی اعلانی یا Declarative است؛ درحالی‌که برنامه نویسی شی‌گرا از مدل برنامه نویسی دستوری دستوری یا imperative استفاده می‌کند. در برنامه نویسی فانکشنال،‌ متغییرها و توابع عناصر اصلی کد هستند، درحالی‌که در برنامه نویسی شی‌گرا، آبجکت‌ها و متدها عناصر اصلی هستند. (مقاله‌ی تفاوت بین برنامه‌نویسی اعلانی و دستوری را بخوانید)

برنامه نویسی فانکشنال

برنامه نویسی فانکشنال همچنین از زبان‌های برنامه نویسی مانند Lisp, Clojure, Wolfram, Erlang, Haskell, F, R و سایر زبان‌های برجسته و در دامنه‌های خاص را پشتیبانی می‌کند. برنامه نویسی فانکشنال مناسب برای علوم داده است و R نیز یک زبان محبوب بین دانشمندان و متخصصان حوزه علوم داده است.

زبان‌های FP را می‌توان به خوبی در یک محیط تعاملی ترجمه کرد،‌ که درک کد را آسان‌تر می‌کند.

برنامه نویسی فانکشنال مزایایی مانند بهره‌وری، ارزیابی کند بودن،  فانکشن‌ها تو در تو،‌ کد بدون عیب و برنامه نویسی موازی را فراهم می‌کند. به زبان ساده،‌ برنامه نویسی فانکشنال نوشتن فانکشن دارای statements است برای اجرای یک کار  بخصوص برای برنامه است.

این فانکشن را به راحتی می‌توان در هر نقطه invoked (فراخوانی) و یا reused ( استفاده مجدد )‌کرد. همچنین به مدیریت کد کمک می‌کند و نیازی به نوشتن دوباره و دوباره statementها نخواهید داشت.

برنامه نویسی فانکشنال مبتنی بر مفاهیم مختلفی است :

  1. توابع مرتبه بالا (HOF)
  2. توابع خالص
  3. Recursion (بازگشت)
  4. ارزیابی دقیق و غیر دقیق
  5. Type systems
  6. Referential Transparency 

در برنامه نویسی فانکشنال، از توابع به‌عنوان شهروندان درجه‌ اول یاد می‌شود.

OOP (برنامه‌نویسی شی‌گرا)

برنامه نویسی شی‌گرا مبتنی بر ویژگی‌های اصلی که عبارتند از :

۱. Abstraction یا انتزاع: کمک می‌کند تا اطلاعات مفید یا داده‌های مربوطه را به کاربر منتقل کنید و این باعث افزایش کارایی برنامه و ساده‌ کردن امور می‌شود. 

۲. Inheritance یا وراثت: به ارث بردن متدها،‌ فانکشن‌ها، properties، و فیلد‌های یک کلاس بیس یا پایه در کلاس مشتق شده کمک می‌کند.

۳. Polymorphism یا چندشکلی (‌چند ریختی هم گفته می‌شود): کمک می‌کند تا یک کار را از راه‌های متفاوتی با کمک overloading و overriding که به ترتیب به‌عنوان compile-time و run-time polymorphism نیز معروف است، را انجام دهیم.

۴. Encapsulation: به پنهان کردن اطلاعات غیر ضروری از کاربر کمک می‌کند و از دسترسی غیر مجاز کاربر جلوگیری می‌کند.

زبان‌های برنامه نویسی شی‌گرا , C#, Java, Python,C++, Ruby, PHP, Perl, Objective-C, Swift, Dart, Lisp و ... هستند. در یک برنامه شی‌گرا ،‌ آبجکت‌ها به‌راحتی در برنامه‌ دیگری هم قابل استفاده هستند. آبجکت‌های جدید را می‌توان به‌راحتی برای همان کلاس ایجاد کرد و کد را می‌توان به راحتی حفظ یا تغییر داد.

همچنین دارای ویژگی مدیریت حافظه نیز هست. این یک مزیت بزرگ در طراحی برنامه‌های بزرگ برای شما ایجاد می‌کند، که می‌توان کدها را به راحتی به قسمت‌های کوچک‌تر تقسیم کرد و در تشخیص اجزا یا مراحل مورد نیاز برای اجرا یا برنامه‌ریزی به روشی خاص کمک می‌کند.

مقایسه‌ی سر به سر بین برنامه نویسی فانکشنال و شی‌گرا

در زیر ۸ مقایسه اصلی و برتر بین برنامه نویسی شی‌گرا و فانکشنال آورده شده.

تفاوت‌های کلیدی بین برنامه نویسی فانکشنال و شی‌گرا

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

۱.برنامه‌نویسی فانکشنال برای انجام  بسیاری از عملیات‌های مختلف که داده‌ها برای آن‌ها فیکس و ثابت شده است، استفاده می‌شود. برنامه نویسی شی‌گرا برای انجام چند عملیات که دارای رفتار مشترک و انواع مختلفی هستند،‌ استفاده می‌شود.

۲.برنامه نویسی فانکشنال داشتن یک مدل برنامه نویسی stateless است. برنامه‌نویسی شی‌گرا، دارای یک مدل برنامه‌نویسی stateful است.

۳. در برنامه نویسی فانکشنال، یک state وجود ندارد. در برنامه نویسی شی‌گرا، state وجود دارد.

۴. در برنامه نویسی فانکشنال، یک فانکشن واحد اولیه manipulation یا دستکاری است. در برنامه نویسی شی‌گرا، یک آبجکت واحد اولیه و اصلی manipulation است.

۵. در برنامه نویسی فانکشنال، فانکشن‌ها تاثیر و عوارض جانبی ندارند؛ به این معنی که هیچ تاثیری روی کدی که در چندین پردازنده اجرا می‌شود ندارد. در برنامه‌نویسی شی‌گرا، متدها می‌توانند تاثیرات جانبی داشته باشند و بر پردازنده‌ها تاثیر بگذارند.

۶. در برنامه‌نویسی فانکشنال، تمرکز اصلی برنامه‌نویسی روی کارهایی است که ما انجام می‌دهیم. در برنامه‌نویسی شی‌گرا، محور اصلی برنامه‌نویسی این است که ما چگونه انجام می‌دهیم.

۷. در برنامه‌نویسی فانکشنال عمدتا از abstraction روی داده‌ها و رفتارها پشتیبانی می‌شود. برنامه‌نویسی شی‌گرا به طور عمده فقط از abstraction روی داده‌ها پشتیبانی می‌کند.

۸. برنامه‌نویسی فانکشنال، عملکرد بالایی در پردازش داده‌های بزرگ برای برنامه‌ها دارد. برنامه‌نویسی شی‌گرا برای پردازش داده‌های بزرگ مناسب نیست.

۹.برنامه نویسی فانکشنال از عبارات شرطی پشتیبانی نمی‌کند. در برنامه نویسی شی‌گرا می‌توان از عبارات شرطی مانند if-else و switch استفاده کرد.

جدول مقایسه بین برنامه نویسی فانکشنال و شی‌گرا

در زیر جدول مقایسه بین برنامه نویسی فانکشنال در مقابل برنامه نویسی OOP یا شی‌گرا آورده شده است.

نتیجه‌گیری

برنامه نویسی فانکشنال و شی‌گرا هر دو مفاهیم مختلف زبان‌های برنامه نویسی هستند. هدف از هر دو برنامه نویسی فانکشنال و شی‌گرا، تهیه یک کد بدون باگ است که می‌تواند به راحتی قابل فهم، کدگذاری، مدیریت و توسعه سریع باشد.

برنامه نویسی فانکشنال و برنامه نویسی شی‌گرا از روش‌ها مختلفی برای ذخیره‌سازی و دستکاری داده‌ها استفاده می‌کنند. در برنامه نویسی فانکشنال، داده‌ها را نمی‌توان در آبجکت‌ها ذخیره کرد و فقط با ایجاد توابع می‌توان آن‌ها را تغییر داد. در برنامه نویسی شی‌گرا، داده‌ها در آبجکت‌ها ذخیره می‌شوند. برنامه نویسی شی‌گرا به طور گسترده‌ای توسط برنامه نویسان استفاده می‌شود و همچنین موفق است. ( البته هر چیزی که بیشتر استفاده میشه دلیل بر خوب بودن اون نیست،‌ و همون طور که دیدید برنامه نویسی فانکشنال از بسیاری از جهات خیلی خیلی بهتر از برنامه نویسی شی‌گرا است.)

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

سرانجام، برای نتیجه‌گیری، همیشه وظیفه برنامه‌نویسان یا توسعه‌دهندگان است که یک مفهوم زبان برنامه‌نویسی را انتخاب کنند که روند توسعه آن‌ها را پربار و آسان‌تر کند.

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
4.67 از 3 رای

/@Fatemeh.shirzadfar
فاطمه شیرزادفر
برنامه نویس

تجربه کلمه‌ای هست که همه برای توصیف اشتباهاتشون ازش استفاده میکنن، و من همیشه دنبال اشتباهات جدیدم! برنامه‌نویس هستم و لینوکس‌ دوست

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید