دو دنیای برنامه نویسی: OOP (شی گرا) و FP (فانکشنال)

ترجمه و تالیف : عرفان حشمتی
تاریخ انتشار : 29 شهریور 99
خواندن در 3 دقیقه
دسته بندی ها : برنامه نویسی

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

در اینجا توضیح خواهیم داد که این دو چیز چیست و کدام یک را باید یاد بگیرید.

الگوی برنامه نویسی

هر زبان برنامه نویسی واقعا بی نظیر است. اگرچه ممکن است هنگام نگاه کردن به طرز عملکرد آنها یکسان به نظر برسند، اما عمیق‌تر شدن در آنها ویژگی‌های جذابی را نشان می‌دهد که ممکن است در دیگری وجود نداشته باشد.

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

تاکنون چند الگوی مشخص طراحی شده است اما دو مورد از آنها محبوب‌تر هستند، برنامه نویسی شی گرا (OOP) و برنامه نویسی تابع گرا یا فانکشنال (FP).

برنامه نویسی شی گرا

اگر به احتمال زیاد وب سایت یا برنامه‌های دسکتاپ را طراحی می‌کنید، از زبان‌های شی گرا مانندC ++ ،Java ،JavaScript ،Ruby ، PHP استفاده می‌کنید. برخی از مفاهیم این زبان‌های برنامه نویسی با یکدیگر مشترک هستند که باعث می‌شود در گروه OOP قرار بگیرند.

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

به عنوان مثال در اینجا نحوه تعریف یک سگ در جاوا آورده شده است:

class Dog {

}

هر کلاس می‌تواند دارای خواص (حالت‌ها) و روش‌هایی باشد تا تعریف موجودیت شما را تکمیل کند.

class Dog {
    public String name;
    public String breed;

    public void bark() {
        System.out.println("Woof Woof!");
    }
}

کد بالا را می‌توان اینگونه در پی اچ پی بازنویسی کرد:

class Dog {
    public $name;
    public $breed;

    function bark() {
        print("Woof Woof!");
    }
}

یا به این صورت در جاوااسکریپت:

class Dog {
    name
    breed

    bark() {
        console.log("Woof Woof!")
    }
}

در اکثر زبان‌های شی گرا متغیرها قابل تغییر هستند، به این معنی که می‌توانید مقدار را بعداً تغییر دهید:

let x = 5
console.log(x) // 5
x = 8
console.log(x) // 8

همانطور که مشاهده می‌کنید، اینها بسیار شبیه به هم هستند؛ زیرا همه آنها یک کلاس در یک زبان شی گرا هستند. یک موجودیت می‌تواند برای شکل دادن به یک شیء ایجاد شود و اینجاست که برنامه نویسی شی گرا معنی خود را پیدا می‌کند.

الگوی شی گرایی همه این مفاهیم را دربرمی‌گیرد:

  • انتزاع: کاهش پیچیدگی یک برنامه.
  • کلاس: تعریف ساختار یک موجودیت.
  • کپسوله سازی: ترکیب داده‌ها برای تشکیل داده جدید.
  • پنهان کردن اطلاعات: پنهان کردن داده‌های غیر ضروری برای کاهش پیچیدگی.
  • وراثت: تعریف رابطه بین کلاس‌ها.
  • رابط: استفاده از ورودی و خروجی سخت‌افزار و سایر برنامه‌ها.
  • شی: موجودی که از یک کلاس مشتق شده است.
  • پلی مورفیسم: توانایی انجام چندین کار و ظاهر شدن به روش‌های مختلف.

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

برنامه نویسی فانکشنال (تابع گرا)

برنامه نویسی تابع گرا یا فانکشنال در اکثر موارد متفاوت از شی گرا است. هر دو الگو دارای توابع و متغیرهایی هستند اما با آنها متفاوت رفتار می‌کنند. بنابراین اجازه ندهید که شباهت‌ها در تفاوت اختلافات قرار بگیرند. بسیاری از زبان‌های فانکشنال مانندElixir ،Erlang ،Elm ، Haskell، F# و ... وجود دارند.

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

یک زبان برنامه نویسی فانکشنال کاملاً بر روی توابع انجام می‌شود و معمولاً کلاس و اشیاء در آن وجود ندارد. یک زبان برنامه نویسی فانکشنال تمایل دارد که یک رویکرد ریاضی را اتخاذ کند، بنابراین متغیرها تغییر ناپذیر هستند. دقیقاً مانند ریاضیات وقتی یک متغیر تعریف شده است و مقدار آن قابل تغییر نیست.

اگر فکر می‌کنید تغییر ناپذیری محدودیت است و کار با چنین زبان برنامه نویسی غیرممکن است، خب اشتباه می‌کنید. این روش برنامه نویسی به شما کمک می‌کند تا روش ریاضی را تثبیت کنید و به همین دلیل است که اگر در حال ساختن چیزهای مرتبط با محاسبات هستید، بهترین زبان‌ها برای برنامه نویسی هستند. این بدان معنا نیست که شما نمی‌توانید از فانکشنال برای هر چیز دیگری استفاده کنید، بلکه یک پیشنهاد است.

دقیقاً مانند شی گرایی که مفاهیم را تعریف کردیم، در اینجا مفاهیمی هم برای فانکشنال وجود دارد:

  • تغییر ناپذیری: عدم توانایی در تغییر مقدار متغیر.
  • توابع خالص: توابع عوارض جانبی ندارند.
  • بازگشتی: تابعی است که خود را فراخوانی می‌کند.

چه موقع از OOP و چه موقع از FP استفاده کنیم؟

سخت‌ترین سؤال تا اینجا این است که از کدام زبان برنامه نویسی استفاده کنید و سخت‌تر از آن این است که چه الگویی را به کار بگیریم.

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

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

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

منبع

گردآوری و تالیف عرفان حشمتی
آفلاین
user-avatar

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

مقالات پیشنهادی

دیدگاه‌ها و پرسش‌ها

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