اولینبار واژه پارادایم (Paradigm) در کتاب تیمائوس افلاطون بهصورت (Paradeigma) بهعنوان مدل یا الگویی برای خلقت و ایجاد کیهان نام برده شد. اما استفاده امروزی از آن، حاصل تفکرات فلسفی فیلسوف بزرگ فلسفه علم، توماس کوهن بوده است. او در کتاب “ساختار انقلابهای علمی” (1962) این اصطلاح را در معنای امروزی آن تعریف کرد. پارادایم سپس در علوم مختلفی مانند: علوم اجتماعی، روانشناسی و زبانشناسی کاربرد پیدا کرد. با این حال یکی از مهمترین کاربردهای این اصطلاح در دانش برنامه نویسی رایانه است که در این مطلب با برخی از کاربردهای آن در این زمینه آشنا خواهیم شد.
پارادایم در فلسفه علم
توماس کوهن، مورخ و فیلسوف علم، وقتی این کلمه را به کار برد که میخواست به مجموعه روشهایی که یک رشته علمی را تعریف میکنند، اشاره کند. کوهن در اثر تاریخی خود “ساختار انقلابهای علمی”، پاردایم علمی را اینگونه تعریف میکند:
- آنچه باید مشاهده و بررسی شود
- نوع سوالاتی که قرار است در رابطه با یک موضوع پرسیده شود
- ساختار سوالاتی که باید پرسیده شود
- چگونگی تفسیر نتایج تحقیقات علمی
- چگونگی انجام آزمایشات و تجهیزات مورد نیاز یا در دسترس
بر این اساس در فلسفه علم، پارادایم مجموعه آزمایشهای نمونهای و تحقیقاتی است که شبیهسازی میشوند. ولی پارادایم رایج غالبا روش خاصی از مشاهده واقعیت یا تعیین محدودیت در برنامههای قابل قبول برای تحقیقات آینده را در یک روش علمی نشان میدهد.
پارادایم در برنامهنویسی کامپیوتر
اجداد ما “شیوههای برنامهنویسی” را که ما آنها را “پارادایم برنامهنویسی” مینامیم کشف و ابداع کردند. ما از دانشی که آنها برای ما بهجا گذاشتهاند، بهره میبریم و در عین حال برای ایجاد الگوهای جدید یا پارادایمهای جدید تلاش میکنیم. پارادایم برنامهنویسی یک سبک یا روش برنامهنویسی است که نوع ارتباطات اجزای برنامه و سبک نتیجهگیریها و عملکردها را نشان میدهد. برخی از زبانهای برنامهنویسی، نوشتن برنامه را در برخی از پارادایمها آسان میکنند اما برخی دیگر با پارادایمهای دیگر تناسب دارند. برخی از انواع پارادایمها عبارتند از:
دستوری (Imperative)
اعلانی (Declarative)
ساختار یافته (Structured)
رویهای (Procedural)
عملکردی یا کاربردی (Functional)
سطح-عملکرد (Function-Level)
شیگرا (Object-Oriented)
رویداد محور (Event-Driven)
جریانمحور (Flow-Driven)
منطقی (Logic) یا مبتنی بر قانون (Rule-based)
محدود شده (Constraint)
جنبهگرا (Aspect-Oriented)
بازتابی (Reflective)
آرایهای (Array)
پارادایم برنامهنویسی دستوری
کلمه imperative در عبارت پارادایم برنامهنویسی دستوری (Imperative programming paradigm)، برگرفته کلمه لاتین impero بهمعنای “فرمان میدهم” است؛ و این همان واژهای است که ما واژه امپراتور (emperor) بهمعنای فرمان دهنده را از آن میگیریم. پس در این پاردایم، تو امپراتور و فرماندهنده هستی و دستورات کمی را برای انجام کار به رایانه میدهی و از او گزارش میخواهی. این پارادایم خود از سه نوع پارادایم دیگر تشکیل شده است که دو مورد از آنها را با هم مرور میکنیم.
پارادایم برنامهنویسی رویهای
این پارادایم امکان تقسیم دستورالعملها (instructions) به رویهها (procedures) را فراهم میکند. دقت داشته باشید که رویهها، تابع نیستند و تفاوت بین آنها این است که توابع (functions) یک مقدار (value) را برمیگردانند اما رویه ها اینگونه نیستند و هیچ ارزش بازگشتی ندارند. یک مثال عالی از رویهها میتواند همان حلقه (loop) باشد. هدف اصلی حلقه ایجاد عوارض جانبی است و مقدار را بر نمیگرداند. این پاردایم بسیار منحصر به فرد است و انتظار نمیرود با گذشت زمان تغییر زیادی کند.
پارادایم برنامهنویسی شیگرا
این پارادایم به دلیل مزایای منحصر به فرد خود، پارادایمی محبوب است. ویژگیهای کلیدی برنامهنویسی شی گرا شامل: کلاس، انتزاع، محصور سازی، وراثت و چند شکلی است. یک کلاس، یک الگو یا نقشه است که اشیا از آن ایجاد میشوند. اشیا نمونههایی از کلاسها هستند. اشیا دارای ویژگی/حالتها و روش/رفتارها هستند. ارث بردن روابط سلسله مراتبی را قادر میسازد تا نمایان و تصحیح شوند و در نهایت، پلیمورفیسم یا چند شکلی به اجسام مختلف اجازه میدهد پیام مشابهی را دریافت کرده و به روشهای مختلف پاسخ دهند. برنامههایی که از این پارادایم پشتیبانی میکنند، عبارتند از:
- Python
- Ruby
- Java
- C++
- Smalltalk
پارادایم برنامهنویسی اعلانی
پارادایم برنامهنویسی اعلانی (Declarative programming paradigm) سبکی از برنامهسازی است که منطق محاسبات را بدون صحبت در مورد جریان کنترل آن بیان میکند. در این پارادایم، برنامهنویس آنچه را که باید توسط برنامه انجام شود، مشخص میکند بدون اینکه نحوه اجرای آن را مشخص کند. به عبارت دیگر، این رویکرد به جای آموزش نحوه دستیابی، بر آنچه باید به دست بیاید تمرکز میکند. با دو زیرمجموعه مهم این پارادایم آشنا میشویم.
پارادایم برنامهنویسی منطقی
پارادایم برنامهنویسی منطقی از دستورالعملها تشکیل نشده است؛ بلکه از حقایق و بندها تشکیل شده است. از هر آنچه میداند استفاده میکند و سعی میکند به دنیایی برسد که همه آن حقایق و بندها در آن صادق هستند. به عنوان مثال: سقراط یک مرد است، همه انسانها فانی هستند و بنابراین سقراط فانی است. برنامههایی که از این پارادایم پشتیبانی میکنند، عبارتند از:
- Prolog
- Absys
- ALF
- Alice
- Ciao
پارادایم برنامه نویسی تابعی یا عملکردی
شهرت این پارادایم به خاطر استفاده زبان جاوا اسکریپت از آن است. پارادایم برنامهنویسی تابعی ریشه در ریاضیات دارد و از زبان، مستقل است. اصل کلیدی این پارادایم اجرای مجموعهای از توابع ریاضی است. شما برنامه خود را با توابع کوتاه مینویسید. همه کدها در یک تابع هستند. همه متغیرها به تابع محدود شدهاند. برنامههایی که از این پارادایم پشتیبانی میکنند، عبارتند از:
- Haskell
- OCaml
- Scala
- Clojure
- Racket
- JavaScript
با شناخت پاردایمها در برنامهنویسی پیشرفت کنید
پاردایمهای برنامهنویسی از پیچیدگی برنامهها میکاهند. هر برنامهنویس هنگام اجرای کد خود باید از رویکرد پارادایمی پیروی کند که هرکدام آنها مزایا و معایبی دارند. اگر مبتدی هستید، شاید بهتر باشد از پارادایم برنامهنویسی شیگرا شروع کنید. مفاهیم آن را درک کنید و سعی کنید آن را در پروژههای خود به کار بگیرید. برای مثال اگر برنامهنویسی شیگرا را یاد میگیرید، ستونهای این پارادایم برنامهنویسی عبارتند از: محصور سازی، انتزاع، وراثت و چند شکلی. با انجام این کار آنها را بیاموزید. این به شما کمک میکند تا مفاهیم آنها را در سطوح عمیقتری بفهمید و کدهایی پیچیدهتر، کارآمدتر و موثرتر بنویسید.
ثبت دیدگاه