OBJECT ORIENTED
VS
FUNCTIONAL
•
.‫‌هاست‬
‫ه‬‫برنام‬ ‫در‬ ‫مسائل‬ ‫حل‬ ‫برای‬ ‫روش‬ ‫یا‬ ‫شیوه‬ ‫یک‬ ،‫‌نویسی‬
‫ه‬‫برنام‬ ‫پارادایم‬
•
‫توسعه‬ ‫برای‬ ‫د‬#
‫ن‬‫‌توا‬
‫ی‬‫م‬ ‫س‬#
‫ی‬‫‌نو‬
‫ه‬‫برنام‬ ‫ه‬#
‫ک‬ ‫ت‬#
‫س‬‫ا‬ ‫‌هایی‬
‫ت‬‫یاس‬#
‫س‬ ‫و‬ ‫‌ها‬
‫ی‬‫تراتژ‬#
‫س‬‫ا‬ ،‫ول‬#
‫ص‬‫ا‬ ‫ل‬#
‫م‬‫شا‬ ‫م‬#
‫ی‬‫پارادا‬ ‫ر‬#
‫ه‬
.‫بگیرد‬ ‫کار‬ ‫به‬ ‫‌افزار‬
‫م‬‫نر‬
•
.‫‌کنند‬
‫ی‬‫م‬ ‫پیروی‬ ‫پارادایم‬ ‫چند‬ ‫یا‬ ‫یک‬ ‫از‬ً ‫معموال‬ ‫مختلف‬ ‫‌نویسی‬
‫ه‬‫برنام‬ ‫‌های‬
‫ن‬‫زبا‬ •
‫اهمیت‬ ‫ت‬#‫درس‬ ‫م‬#‫پارادای‬ ‫انتخاب‬ ،‫‌افزار‬
‫م‬‫نر‬ ‫عه‬#‫توس‬ ‫در‬
.‫دارد‬ ‫زیادی‬
•
:‫از‬ ‫عبارتند‬ ‫‌ها‬
‫م‬‫پارادای‬ ‫‌ترین‬
‫ب‬‫محبو‬ ‫از‬ ‫تا‬ ‫دو‬
•
‫‌گرا‬
‫ی‬‫ش‬ ‫‌نویسی‬
‫ه‬‫برنام‬
•
‫تابعی‬ ‫‌نویسی‬
‫ه‬‫برنام‬
Functional programming
‫تابعی‬ ‫نویسی‬ ‫برنامه‬
•
،‫ی‬#
‫ع‬‫تاب‬ ‫ی‬#
‫س‬‫‌نوی‬
‫ه‬‫برنام‬ ‫زبان‬ ‫اولین‬
LISP
‫ه‬#
‫ه‬‫د‬ ‫اواخر‬ ‫در‬ ،
۱۹۵۰
‫کامپیوترهای‬ ‫برای‬
‫ی‬#
‫م‬‫عل‬
IBM
‫ری‬#
‫س‬
700/7000
‫فناوری‬ ‫انستیتوی‬ ‫در‬ ‫ی‬#
‫ت‬‫کار‬ ‫ک‬#
‫م‬ ‫جان‬ ‫ط‬#
‫س‬‫تو‬
.‫شد‬ ‫داده‬ ‫توسعه‬ ‫ماساچوست‬
•
‫ع‬#‫تواب‬
LISP
‫یک‬ ‫یله‬#‫‌وس‬
‫ه‬‫ب‬ ‫و‬ ‫شده‬ ‫ف‬#‫تعری‬ ‫چرچ‬ ‫الندای‬ ‫نماد‬ ‫از‬ ‫تفاده‬#‫اس‬ ‫ا‬#‫ب‬
‫میسر‬ ‫ی‬#
‫ت‬‫بازگش‬ ‫توابع‬ ‫تعریف‬ ‫تفاده‬#
‫س‬‫ا‬ ‫امکان‬ ‫تا‬ ‫‌اند‬
‫ه‬‫یافت‬ ‫ترش‬#
‫س‬‫گ‬ »‫ب‬#
‫س‬‫«برچ‬
.‫شود‬
•
.‫است‬ ‫شده‬ ‫بنا‬ ‫توابع‬ ‫مفهوم‬ ‫اساس‬ ‫بر‬ ‫تابعی‬ ‫‌نویسی‬
‫ه‬‫برنام‬
•
.‫‌کنند‬
‫ی‬‫م‬ ‫تولید‬ ‫خروجی‬ ‫و‬ ‫‌گیرند‬
‫ی‬‫م‬ ‫ورودی‬ ‫که‬ ‫توابعی‬
•
.‫ندارند‬ ‫جانبی‬ ‫اثر‬ ‫هیچ‬ ‫که‬ ‫معنا‬ ‫این‬ ‫به‬ ،‫هستند‬ ‫خالص‬ ‫توابع‬ ‫این‬
‫تابعی‬ ‫نویسی‬ ‫برنامه‬
•
:‫هستند‬ ‫یک‬ ‫درجه‬ ‫همچنین‬
•
‫منتقل‬ ‫آرگومان‬ ‫عنوان‬ ‫ه‬#‫ب‬
‫شوند‬
•
‫بازگشت‬ ‫ه‬#‫نتیج‬ ‫عنوان‬ ‫ه‬#‫ب‬
‫شوند‬ ‫داده‬
.
const a = document.querySelector('#number1').value;
const b = document.querySelector('#number2').value;
function sum(a, b)
{
return a + b;
}
function displayResult(result)
{
console.log(result);
}
‫اول‬ ‫ورودی‬
‫دوم‬ ‫ورودی‬
‫جمع‬ ‫تابع‬
‫نتیجه‬ ‫تابع‬
‫تابعی‬ ‫‌نویسی‬
‫ه‬‫برنام‬ ‫از‬ ‫‌کننده‬
‫ی‬‫پشتیبان‬ ‫‌های‬
‫ن‬‫زبا‬
Lisp
Clojure
Wolfram
Erlang
Haskell
F#
‫مزایا‬ ‫معایب‬
‫با‬ ‫پیچیدگی‬ ‫‌سازی‬
‫ه‬‫ساد‬ :‫انتزاعی‬ ‫قدرت‬
‫و‬ ‫کوچک‬ ‫توابع‬ ‫به‬ ‫مسائل‬ ‫شکستن‬
‫مستقل‬
‫جای‬ ‫به‬ ‫بازگشت‬ ‫از‬ ‫استفاده‬ :‫بازگشت‬
‫سنتی‬ ‫‌های‬
‫ه‬‫حلق‬
‫منطق‬ ‫اساس‬ ‫بر‬ ‫‌ها‬
‫ه‬‫برنام‬ :‫بودن‬ ‫منطقی‬
‫‌شوند‬
‫ی‬‫م‬ ‫نوشته‬ ‫ریاضی‬
‫با‬ ‫آشنایی‬ ‫به‬ ‫نیاز‬ :‫ریاضی‬ ‫اصطالحات‬
‫ریاضی‬ ‫مباحث‬
‫تغییر‬ ‫بدون‬ ‫‌یابی‬
‫ل‬‫اشکا‬ :‫آسان‬ ‫دیباگ‬
‫انجام‬ ‫‌تر‬
‫ع‬‫سری‬ ‫و‬ ‫‌تر‬
‫ه‬‫ساد‬ ‫وضعیت‬
‫‌شود‬
‫ی‬‫م‬
‫همزمان‬ ‫اجرای‬ :‫موازی‬ ‫‌نویسی‬
‫ه‬‫برنام‬
‫سرعت‬ ‫افزایش‬ ‫و‬ ‫تداخل‬ ‫بدون‬ ‫توابع‬
‫پردازش‬
‫ضروری‬ ‫محاسبات‬ ‫فقط‬ :‫تنبل‬ ‫ارزیابی‬
‫و‬ ‫زمان‬ ‫در‬ ‫‌جویی‬
‫ه‬‫صرف‬ ،‫‌شود‬
‫ی‬‫م‬ ‫انجام‬
‫منابع‬
Object oriented programming
‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬
‫دهه‬ ‫ر‬#‫اواخ‬ ‫در‬ »‫‌گرا‬
‫ه‬‫«روی‬ ‫و‬ »‫اختاریافته‬#‫«س‬ ‫ی‬#‫نویس‬ ‫ه‬#‫برنام‬ ‫رویکردهای‬ #
‫ع‬‫انوا‬
1970
‫دهه‬ ‫اوایل‬ ‫و‬
1980
.‫کنند‬ ‫پیدا‬ ‫ظهور‬
‫قالب‬ ‫در‬ ‫ط‬#
‫ب‬‫مرت‬ ‫ع‬#
‫ب‬‫توا‬ ‫و‬ ‫ا‬#
‫ه‬‌
‫ه‬‫داد‬ ‫ن‬#
‫آ‬ ‫در‬ ‫ه‬#
‫ک‬ ‫ت‬#
‫س‬‫ا‬ ‫ی‬#
‫ش‬‫رو‬ ‫شیءگرا‬ ‫ی‬#
‫س‬‫‌نوی‬
‫ه‬‫برنام‬
‫آن‬ ‫ع‬#
‫ب‬‫توا‬ ‫و‬ ‫ا‬#
‫ه‬‌
‫ه‬‫داد‬ ‫ه‬#
‫ک‬ ‫ت‬#
‫س‬‫ا‬ ‫تقل‬#
‫س‬‫م‬ ‫د‬#
‫ح‬‫وا‬ ‫ک‬#
‫ی‬ ‫ء‬#
‫ی‬‫ش‬ ‫ر‬#
‫ه‬ .‫‌شوند‬
‫ی‬‫م‬ ‫ع‬#
‫م‬‫ج‬ ‫اشیاء‬
‫وارد‬ ‫تغییرات‬ ‫آن‬ ‫درون‬ ‫‌های‬
‫ه‬‫داد‬ ‫ه‬#
‫ب‬ ‫د‬#
‫ن‬‫‌توان‬
‫ی‬‫نم‬ ‫ی‬#
‫ن‬‫بیرو‬ ‫ع‬#
‫ب‬‫توا‬ ‫و‬ ‫د‬#
‫ن‬‫‌ا‬
‫ه‬‫شد‬ ‫وله‬#
‫س‬‫کپ‬
.‫‌کند‬
‫ی‬‫م‬ ‫کمک‬ ‫د‬#
‫ک‬ ‫‌تر‬
‫ه‬‫ساد‬ ‫مدیریت‬ ‫و‬ ‫بهتر‬ ‫سازماندهی‬ ‫به‬ ‫روش‬ ‫این‬ .‫کنند‬
‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬
‫تابعی‬ ‫‌نویسی‬
‫ه‬‫برنام‬ ‫از‬ ‫‌کننده‬
‫ی‬‫پشتیبان‬ ‫‌های‬
‫ن‬‫زبا‬
Java
C++
Python
C#
Ruby
Swift
‫‌ها‬
‫س‬‫کال‬ ‫و‬ ‫اشیاء‬ ‫مفهوم‬
‫و‬ ‫‌ها‬
‫ی‬‫دسترس‬ ،‫وصیات‬#
‫ص‬‫خ‬ ،‫ا‬#
‫ه‬‫متد‬ ‫ف‬#
‫ی‬‫تعار‬ ‫ل‬#
‫م‬‫شا‬ ‫ه‬#
‫ک‬ ‫‌ای‬
‫ه‬‫بدن‬ ‫ی؛‬#
‫ش‬ ‫ک‬#
‫ی‬ ‫د‬#
‫ب‬‫کال‬ ‫و‬ ‫ب‬#
‫ل‬‫قا‬ :‫کالس‬
.‫است‬ ‫تغییرات‬
‫واقعی‬ ‫اشیاء‬ ‫ر‬#
‫گ‬‫نمایان‬ ‫‌توانند‬
‫ی‬‫م‬ ‫که‬ ‫خاص‬ ‫‌های‬
‫ه‬‫داد‬ ‫ا‬#
‫ب‬ ‫کالس‬ ‫از‬ ‫‌شده‬
‫ه‬‫اخت‬#
‫س‬ ‫‌های‬
‫ه‬‫نمون‬ :‫اشیاء‬
.‫باشند‬ ‫خیالی‬ ‫یا‬
‫درخواست‬ ‫ا‬#
‫ی‬ ‫ر‬#
‫ی‬‫تغی‬ ‫ه‬#
‫ن‬‫هرگو‬ ‫و‬ ‫د‬#
‫ن‬‫‌کن‬
‫ی‬‫م‬ ‫ص‬#
‫خ‬‫مش‬ ‫را‬ ‫اشیاء‬ ‫رفتار‬ ‫ه‬#
‫ک‬ ‫کالس‬ ‫ل‬#
‫خ‬‫دا‬ ‫ع‬#
‫ب‬‫توا‬ :‫ا‬#
‫ه‬‫متد‬
.‫دهند‬ ‫می‬ ‫انجام‬ ‫را‬
.‫‌کنند‬
‫ی‬‫م‬ ‫تعریف‬ ‫را‬ ‫مدل‬ ‫یک‬ ‫‌های‬
‫ی‬‫ویژگ‬ ‫که‬ ‫کالس‬ ‫درون‬ ‫متغیرهایی‬ :‫خصوصیات‬
‫چیست؟‬ ‫گرایی‬ ‫شی‬ ‫اصول‬
‫گرایی‬ ‫شی‬ ‫اصل‬ ‫چهار‬ ‫بر‬ ،‫کالس‬ ‫و‬ ‫شی‬ ‫مفاهیم‬ ‫‌بر‬
‫ه‬‫عالو‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫رویکرد‬
:‫از‬ ‫‌اند‬
‫ت‬‫عبار‬ ‫که‬ ‫دارد‬ ‫تاکید‬ ‫نیز‬
•
»‫‌سازی‬
‫ه‬‫«کپسول‬ ‫اصل‬
(
Encapsulation
)
•
( »‫تجرید‬ | ‫«انتزاع‬ ‫اصل‬
Abstraction
)
•
( »‫‌بری‬
‫ث‬‫ار‬ | ‫«وراثت‬ ‫اصل‬
Inheritance
)
•
»‫چندریختی‬ | ‫م‬###‫مورفیس‬ ‫ی‬###‫«پل‬ ‫ل‬###‫اص‬
(
Polymorphism
)
‫‌سازی‬
‫ه‬‫کپسول‬
•
‫از‬ ‫‌ها‬
‫ن‬‫آ‬ ‫ه‬#
‫ب‬ ‫تقیم‬#
‫س‬‫م‬ ‫ترسی‬#
‫س‬‫د‬ ‫از‬ ‫جلوگیری‬ ‫و‬ ‫ی‬#
‫ش‬ ‫درون‬ ‫م‬#
‫ه‬‫م‬ ‫اطالعات‬ ‫نگهداری‬
.‫کالس‬ ‫بیرون‬
•
‫د‬#
‫ک‬ ‫امنیت‬ ‫افزایش‬
:‫دسترسی‬ ‫‌های‬
‫ت‬‫حال‬
‫خصوصی‬
.‫دسترسی‬ ‫قابل‬ ‫کالس‬ ‫همان‬ ‫درون‬ ‫از‬ ‫فقط‬
‫شده‬ ‫محافظت‬
.)‫‌ها‬
‫س‬‫(زیرکال‬ ‫فرزند‬ ‫‌های‬
‫س‬‫کال‬ ‫برای‬ ‫دسترسی‬ ‫قابل‬
‫عمومی‬
.‫کالس‬ ‫بیرون‬ ‫از‬ ‫دسترسی‬ ‫قابل‬
‫انتزاع‬
.‫جزئیات‬ ‫‌سازی‬
‫ه‬‫پیاد‬ ‫بدون‬ ‫کلی‬ ‫مفاهیم‬ ‫تعریف‬ ‫نی‬#
‫ع‬‫ی‬ #
‫ع‬‫انتزا‬
‫از‬ ‫مستقیم‬ ‫ازی‬#
‫س‬‌
‫ه‬‫نمون‬ ‫و‬ ‫د‬#
‫ن‬‫‌کن‬
‫ی‬‫م‬ ‫ص‬#
‫خ‬‫مش‬ ‫را‬ ‫اختار‬#
‫س‬ ‫ط‬#
‫ق‬‫ف‬ ‫انتزاع‬ ‫‌های‬
#
‫س‬‫کال‬
.‫نیست‬ ‫ممکن‬ ‫‌ها‬
‫ن‬‫آ‬
‫وراثت‬ ‫اصل‬
.‫ببرد‬ ‫ارث‬ ‫به‬ ‫را‬ ‫والد‬ ‫کالس‬ ‫متدهای‬ ‫و‬ ‫‌ها‬
‫ی‬‫ویژگ‬ ‫‌تواند‬
‫ی‬‫م‬ ‫فرزند‬ ‫کالس‬ ‫یعنی‬ ‫وراثت‬
.‫‌شود‬
‫ی‬‫م‬ ‫تکرار‬ ‫از‬ ‫جلوگیری‬ ‫و‬ ‫د‬#
‫ک‬ ‫از‬ ‫مجدد‬ ‫استفاده‬ ‫باعث‬ ‫اصل‬ ‫این‬
‫جدید‬ ‫متدهای‬ ‫و‬ ‫‌ها‬
‫ی‬‫ویژگ‬ ،‫والد‬ ‫‌های‬
‫ی‬‫ویژگ‬ ‫بر‬ ‫عالوه‬ ‫‌تواند‬
‫ی‬‫م‬ ‫فرزند‬ ‫کالس‬
.‫باشد‬ ‫داشته‬ ‫هم‬ ‫را‬ ‫خودش‬ ‫مخصوص‬
‫چندریختی‬ ‫اصل‬
‫وظایف‬ ‫ا‬#
‫م‬‫ا‬ ،‫د‬#
‫ن‬‫باش‬ ‫ه‬#
‫ت‬‫داش‬ ‫د‬#
‫ل‬‫وا‬ ‫کالس‬ ‫ا‬#
‫ب‬ ‫‌نام‬
‫م‬‫ه‬ ‫متدهای‬ ‫د‬#
‫ن‬‫‌توان‬
‫ی‬‫م‬ ‫د‬#
‫ن‬‫فرز‬ ‫‌های‬
#
‫س‬‫کال‬
‫والد‬ ‫کالس‬ ‫متدهای‬ ‫عملکرد‬ ‫‌توان‬
‫ی‬‫م‬ ،‫ب‬#
‫ی‬‫ترت‬ ‫ن‬#
‫ی‬‫ا‬ ‫ه‬#
‫ب‬ .‫باشد‬ ‫متفاوت‬ ‫د‬#
‫ن‬‫‌توا‬
‫ی‬‫م‬ ‫ا‬#
‫ه‬‌
‫ن‬‫آ‬
.‫کرد‬ ‫‌سازی‬
‫ه‬‫پیاد‬ ‫مختلف‬ ‫‌های‬
‫ه‬‫شیو‬ ‫به‬ ‫فرزند‬ ‫‌های‬
‫س‬‫کال‬ ‫در‬ ‫را‬
‫مزایا‬ ‫معایب‬
‫بودن‬ ‫ماژوالر‬ ‫کدنویسی‬ ‫زیاد‬ ‫حجم‬
‫کدها‬ ‫از‬ ‫مجدد‬ ‫استفاده‬ ‫قابلیت‬
‫زبان‬ ‫چند‬ ‫در‬ ‫‌سازی‬
‫ه‬‫پیاد‬ ‫قابل‬
‫‌نویسی‬
‫ه‬‫برنام‬
‫‌وری‬
‫ه‬‫بهر‬ ‫میزان‬ ‫افزایش‬
‫شناسایی‬ ‫به‬ ‫زیاد‬ ‫زمان‬ ‫تخصیص‬
‫پروژه‬ ‫در‬ ‫‌گرایی‬
‫ی‬‫ش‬ ‫‌های‬
‫ه‬‫مولف‬
‫‌افزاری‬
‫م‬‫نر‬
‫‌پذیری‬
‫س‬‫مقیا‬ ‫و‬ ‫‌روزرسانی‬
‫ه‬‫ب‬ ‫قابلیت‬
‫باال‬ ‫‌پذیری‬
‫ف‬‫انعطا‬
‫ویژگی‬ ‫‌گرا‬
‫ی‬‫ش‬ ‫‌نویسی‬
‫ه‬‫برنام‬ ‫تابعی‬ ‫‌نویسی‬
‫ه‬‫برنام‬
‫تمرکز‬ ‫‌ها‬
‫ن‬‫آ‬ ‫بین‬ ‫روابط‬ ‫و‬ ‫اشیاء‬ ‫ریاضی‬ ‫اعمال‬ ‫و‬ ‫توابع‬
‫‌ها‬
‫ه‬‫داد‬
‫درون‬ ‫متدها‬ ‫همراه‬ ‫به‬ ‫‌ها‬
‫ه‬‫داد‬
‫دارند‬ ‫قرار‬ ‫اشیاء‬
‫همیشه‬ ‫و‬ ‫‌کنند‬
‫ی‬‫نم‬ ‫تغییر‬ ‫‌ها‬
‫ه‬‫داد‬
‫هستند‬ ‫ثابت‬
‫ساختار‬ ‫وراثت‬ ‫و‬ ‫‌ها‬
‫س‬‫کال‬ ‫ساختار‬ ‫‌ها‬
‫ن‬‫آ‬ ‫ترکیب‬ ‫و‬ ‫خالص‬ ‫توابع‬
‫معایب‬
،‫بلندتر‬ ‫کدهای‬ ،‫بیشتر‬ ‫پیچیدگی‬
‫همزمانی‬ ‫مشکالت‬
‫برای‬ ‫‌سازی‬
‫ه‬‫پیاد‬ ‫در‬ ‫دشواری‬
‫‌تر‬
‫ه‬‫پیچید‬ ‫مسائل‬ ‫برخی‬

object oriented vs functional programming

  • 1.
  • 2.
    • .‫‌هاست‬ ‫ه‬‫برنام‬ ‫در‬ ‫مسائل‬‫حل‬ ‫برای‬ ‫روش‬ ‫یا‬ ‫شیوه‬ ‫یک‬ ،‫‌نویسی‬ ‫ه‬‫برنام‬ ‫پارادایم‬ • ‫توسعه‬ ‫برای‬ ‫د‬# ‫ن‬‫‌توا‬ ‫ی‬‫م‬ ‫س‬# ‫ی‬‫‌نو‬ ‫ه‬‫برنام‬ ‫ه‬# ‫ک‬ ‫ت‬# ‫س‬‫ا‬ ‫‌هایی‬ ‫ت‬‫یاس‬# ‫س‬ ‫و‬ ‫‌ها‬ ‫ی‬‫تراتژ‬# ‫س‬‫ا‬ ،‫ول‬# ‫ص‬‫ا‬ ‫ل‬# ‫م‬‫شا‬ ‫م‬# ‫ی‬‫پارادا‬ ‫ر‬# ‫ه‬ .‫بگیرد‬ ‫کار‬ ‫به‬ ‫‌افزار‬ ‫م‬‫نر‬ • .‫‌کنند‬ ‫ی‬‫م‬ ‫پیروی‬ ‫پارادایم‬ ‫چند‬ ‫یا‬ ‫یک‬ ‫از‬ً ‫معموال‬ ‫مختلف‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ ‫‌های‬ ‫ن‬‫زبا‬ • ‫اهمیت‬ ‫ت‬#‫درس‬ ‫م‬#‫پارادای‬ ‫انتخاب‬ ،‫‌افزار‬ ‫م‬‫نر‬ ‫عه‬#‫توس‬ ‫در‬ .‫دارد‬ ‫زیادی‬ • :‫از‬ ‫عبارتند‬ ‫‌ها‬ ‫م‬‫پارادای‬ ‫‌ترین‬ ‫ب‬‫محبو‬ ‫از‬ ‫تا‬ ‫دو‬ • ‫‌گرا‬ ‫ی‬‫ش‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ • ‫تابعی‬ ‫‌نویسی‬ ‫ه‬‫برنام‬
  • 3.
  • 4.
    • ،‫ی‬# ‫ع‬‫تاب‬ ‫ی‬# ‫س‬‫‌نوی‬ ‫ه‬‫برنام‬ ‫زبان‬‫اولین‬ LISP ‫ه‬# ‫ه‬‫د‬ ‫اواخر‬ ‫در‬ ، ۱۹۵۰ ‫کامپیوترهای‬ ‫برای‬ ‫ی‬# ‫م‬‫عل‬ IBM ‫ری‬# ‫س‬ 700/7000 ‫فناوری‬ ‫انستیتوی‬ ‫در‬ ‫ی‬# ‫ت‬‫کار‬ ‫ک‬# ‫م‬ ‫جان‬ ‫ط‬# ‫س‬‫تو‬ .‫شد‬ ‫داده‬ ‫توسعه‬ ‫ماساچوست‬ • ‫ع‬#‫تواب‬ LISP ‫یک‬ ‫یله‬#‫‌وس‬ ‫ه‬‫ب‬ ‫و‬ ‫شده‬ ‫ف‬#‫تعری‬ ‫چرچ‬ ‫الندای‬ ‫نماد‬ ‫از‬ ‫تفاده‬#‫اس‬ ‫ا‬#‫ب‬ ‫میسر‬ ‫ی‬# ‫ت‬‫بازگش‬ ‫توابع‬ ‫تعریف‬ ‫تفاده‬# ‫س‬‫ا‬ ‫امکان‬ ‫تا‬ ‫‌اند‬ ‫ه‬‫یافت‬ ‫ترش‬# ‫س‬‫گ‬ »‫ب‬# ‫س‬‫«برچ‬ .‫شود‬
  • 5.
    • .‫است‬ ‫شده‬ ‫بنا‬‫توابع‬ ‫مفهوم‬ ‫اساس‬ ‫بر‬ ‫تابعی‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ • .‫‌کنند‬ ‫ی‬‫م‬ ‫تولید‬ ‫خروجی‬ ‫و‬ ‫‌گیرند‬ ‫ی‬‫م‬ ‫ورودی‬ ‫که‬ ‫توابعی‬ • .‫ندارند‬ ‫جانبی‬ ‫اثر‬ ‫هیچ‬ ‫که‬ ‫معنا‬ ‫این‬ ‫به‬ ،‫هستند‬ ‫خالص‬ ‫توابع‬ ‫این‬ ‫تابعی‬ ‫نویسی‬ ‫برنامه‬ • :‫هستند‬ ‫یک‬ ‫درجه‬ ‫همچنین‬ • ‫منتقل‬ ‫آرگومان‬ ‫عنوان‬ ‫ه‬#‫ب‬ ‫شوند‬ • ‫بازگشت‬ ‫ه‬#‫نتیج‬ ‫عنوان‬ ‫ه‬#‫ب‬ ‫شوند‬ ‫داده‬ .
  • 6.
    const a =document.querySelector('#number1').value; const b = document.querySelector('#number2').value; function sum(a, b) { return a + b; } function displayResult(result) { console.log(result); } ‫اول‬ ‫ورودی‬ ‫دوم‬ ‫ورودی‬ ‫جمع‬ ‫تابع‬ ‫نتیجه‬ ‫تابع‬
  • 7.
    ‫تابعی‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ ‫از‬‫‌کننده‬ ‫ی‬‫پشتیبان‬ ‫‌های‬ ‫ن‬‫زبا‬ Lisp Clojure Wolfram Erlang Haskell F#
  • 8.
    ‫مزایا‬ ‫معایب‬ ‫با‬ ‫پیچیدگی‬‫‌سازی‬ ‫ه‬‫ساد‬ :‫انتزاعی‬ ‫قدرت‬ ‫و‬ ‫کوچک‬ ‫توابع‬ ‫به‬ ‫مسائل‬ ‫شکستن‬ ‫مستقل‬ ‫جای‬ ‫به‬ ‫بازگشت‬ ‫از‬ ‫استفاده‬ :‫بازگشت‬ ‫سنتی‬ ‫‌های‬ ‫ه‬‫حلق‬ ‫منطق‬ ‫اساس‬ ‫بر‬ ‫‌ها‬ ‫ه‬‫برنام‬ :‫بودن‬ ‫منطقی‬ ‫‌شوند‬ ‫ی‬‫م‬ ‫نوشته‬ ‫ریاضی‬ ‫با‬ ‫آشنایی‬ ‫به‬ ‫نیاز‬ :‫ریاضی‬ ‫اصطالحات‬ ‫ریاضی‬ ‫مباحث‬ ‫تغییر‬ ‫بدون‬ ‫‌یابی‬ ‫ل‬‫اشکا‬ :‫آسان‬ ‫دیباگ‬ ‫انجام‬ ‫‌تر‬ ‫ع‬‫سری‬ ‫و‬ ‫‌تر‬ ‫ه‬‫ساد‬ ‫وضعیت‬ ‫‌شود‬ ‫ی‬‫م‬ ‫همزمان‬ ‫اجرای‬ :‫موازی‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ ‫سرعت‬ ‫افزایش‬ ‫و‬ ‫تداخل‬ ‫بدون‬ ‫توابع‬ ‫پردازش‬ ‫ضروری‬ ‫محاسبات‬ ‫فقط‬ :‫تنبل‬ ‫ارزیابی‬ ‫و‬ ‫زمان‬ ‫در‬ ‫‌جویی‬ ‫ه‬‫صرف‬ ،‫‌شود‬ ‫ی‬‫م‬ ‫انجام‬ ‫منابع‬
  • 9.
    Object oriented programming ‫گرا‬‫شی‬ ‫نویسی‬ ‫برنامه‬
  • 10.
    ‫دهه‬ ‫ر‬#‫اواخ‬ ‫در‬»‫‌گرا‬ ‫ه‬‫«روی‬ ‫و‬ »‫اختاریافته‬#‫«س‬ ‫ی‬#‫نویس‬ ‫ه‬#‫برنام‬ ‫رویکردهای‬ # ‫ع‬‫انوا‬ 1970 ‫دهه‬ ‫اوایل‬ ‫و‬ 1980 .‫کنند‬ ‫پیدا‬ ‫ظهور‬
  • 11.
    ‫قالب‬ ‫در‬ ‫ط‬# ‫ب‬‫مرت‬‫ع‬# ‫ب‬‫توا‬ ‫و‬ ‫ا‬# ‫ه‬‌ ‫ه‬‫داد‬ ‫ن‬# ‫آ‬ ‫در‬ ‫ه‬# ‫ک‬ ‫ت‬# ‫س‬‫ا‬ ‫ی‬# ‫ش‬‫رو‬ ‫شیءگرا‬ ‫ی‬# ‫س‬‫‌نوی‬ ‫ه‬‫برنام‬ ‫آن‬ ‫ع‬# ‫ب‬‫توا‬ ‫و‬ ‫ا‬# ‫ه‬‌ ‫ه‬‫داد‬ ‫ه‬# ‫ک‬ ‫ت‬# ‫س‬‫ا‬ ‫تقل‬# ‫س‬‫م‬ ‫د‬# ‫ح‬‫وا‬ ‫ک‬# ‫ی‬ ‫ء‬# ‫ی‬‫ش‬ ‫ر‬# ‫ه‬ .‫‌شوند‬ ‫ی‬‫م‬ ‫ع‬# ‫م‬‫ج‬ ‫اشیاء‬ ‫وارد‬ ‫تغییرات‬ ‫آن‬ ‫درون‬ ‫‌های‬ ‫ه‬‫داد‬ ‫ه‬# ‫ب‬ ‫د‬# ‫ن‬‫‌توان‬ ‫ی‬‫نم‬ ‫ی‬# ‫ن‬‫بیرو‬ ‫ع‬# ‫ب‬‫توا‬ ‫و‬ ‫د‬# ‫ن‬‫‌ا‬ ‫ه‬‫شد‬ ‫وله‬# ‫س‬‫کپ‬ .‫‌کند‬ ‫ی‬‫م‬ ‫کمک‬ ‫د‬# ‫ک‬ ‫‌تر‬ ‫ه‬‫ساد‬ ‫مدیریت‬ ‫و‬ ‫بهتر‬ ‫سازماندهی‬ ‫به‬ ‫روش‬ ‫این‬ .‫کنند‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬
  • 12.
    ‫تابعی‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ ‫از‬‫‌کننده‬ ‫ی‬‫پشتیبان‬ ‫‌های‬ ‫ن‬‫زبا‬ Java C++ Python C# Ruby Swift
  • 13.
    ‫‌ها‬ ‫س‬‫کال‬ ‫و‬ ‫اشیاء‬‫مفهوم‬ ‫و‬ ‫‌ها‬ ‫ی‬‫دسترس‬ ،‫وصیات‬# ‫ص‬‫خ‬ ،‫ا‬# ‫ه‬‫متد‬ ‫ف‬# ‫ی‬‫تعار‬ ‫ل‬# ‫م‬‫شا‬ ‫ه‬# ‫ک‬ ‫‌ای‬ ‫ه‬‫بدن‬ ‫ی؛‬# ‫ش‬ ‫ک‬# ‫ی‬ ‫د‬# ‫ب‬‫کال‬ ‫و‬ ‫ب‬# ‫ل‬‫قا‬ :‫کالس‬ .‫است‬ ‫تغییرات‬ ‫واقعی‬ ‫اشیاء‬ ‫ر‬# ‫گ‬‫نمایان‬ ‫‌توانند‬ ‫ی‬‫م‬ ‫که‬ ‫خاص‬ ‫‌های‬ ‫ه‬‫داد‬ ‫ا‬# ‫ب‬ ‫کالس‬ ‫از‬ ‫‌شده‬ ‫ه‬‫اخت‬# ‫س‬ ‫‌های‬ ‫ه‬‫نمون‬ :‫اشیاء‬ .‫باشند‬ ‫خیالی‬ ‫یا‬ ‫درخواست‬ ‫ا‬# ‫ی‬ ‫ر‬# ‫ی‬‫تغی‬ ‫ه‬# ‫ن‬‫هرگو‬ ‫و‬ ‫د‬# ‫ن‬‫‌کن‬ ‫ی‬‫م‬ ‫ص‬# ‫خ‬‫مش‬ ‫را‬ ‫اشیاء‬ ‫رفتار‬ ‫ه‬# ‫ک‬ ‫کالس‬ ‫ل‬# ‫خ‬‫دا‬ ‫ع‬# ‫ب‬‫توا‬ :‫ا‬# ‫ه‬‫متد‬ .‫دهند‬ ‫می‬ ‫انجام‬ ‫را‬ .‫‌کنند‬ ‫ی‬‫م‬ ‫تعریف‬ ‫را‬ ‫مدل‬ ‫یک‬ ‫‌های‬ ‫ی‬‫ویژگ‬ ‫که‬ ‫کالس‬ ‫درون‬ ‫متغیرهایی‬ :‫خصوصیات‬
  • 14.
    ‫چیست؟‬ ‫گرایی‬ ‫شی‬‫اصول‬ ‫گرایی‬ ‫شی‬ ‫اصل‬ ‫چهار‬ ‫بر‬ ،‫کالس‬ ‫و‬ ‫شی‬ ‫مفاهیم‬ ‫‌بر‬ ‫ه‬‫عالو‬ ‫گرا‬ ‫شی‬ ‫نویسی‬ ‫برنامه‬ ‫رویکرد‬ :‫از‬ ‫‌اند‬ ‫ت‬‫عبار‬ ‫که‬ ‫دارد‬ ‫تاکید‬ ‫نیز‬ • »‫‌سازی‬ ‫ه‬‫«کپسول‬ ‫اصل‬ ( Encapsulation ) • ( »‫تجرید‬ | ‫«انتزاع‬ ‫اصل‬ Abstraction ) • ( »‫‌بری‬ ‫ث‬‫ار‬ | ‫«وراثت‬ ‫اصل‬ Inheritance ) • »‫چندریختی‬ | ‫م‬###‫مورفیس‬ ‫ی‬###‫«پل‬ ‫ل‬###‫اص‬ ( Polymorphism )
  • 15.
    ‫‌سازی‬ ‫ه‬‫کپسول‬ • ‫از‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫ه‬# ‫ب‬‫تقیم‬# ‫س‬‫م‬ ‫ترسی‬# ‫س‬‫د‬ ‫از‬ ‫جلوگیری‬ ‫و‬ ‫ی‬# ‫ش‬ ‫درون‬ ‫م‬# ‫ه‬‫م‬ ‫اطالعات‬ ‫نگهداری‬ .‫کالس‬ ‫بیرون‬ • ‫د‬# ‫ک‬ ‫امنیت‬ ‫افزایش‬ :‫دسترسی‬ ‫‌های‬ ‫ت‬‫حال‬ ‫خصوصی‬ .‫دسترسی‬ ‫قابل‬ ‫کالس‬ ‫همان‬ ‫درون‬ ‫از‬ ‫فقط‬ ‫شده‬ ‫محافظت‬ .)‫‌ها‬ ‫س‬‫(زیرکال‬ ‫فرزند‬ ‫‌های‬ ‫س‬‫کال‬ ‫برای‬ ‫دسترسی‬ ‫قابل‬ ‫عمومی‬ .‫کالس‬ ‫بیرون‬ ‫از‬ ‫دسترسی‬ ‫قابل‬
  • 16.
    ‫انتزاع‬ .‫جزئیات‬ ‫‌سازی‬ ‫ه‬‫پیاد‬ ‫بدون‬‫کلی‬ ‫مفاهیم‬ ‫تعریف‬ ‫نی‬# ‫ع‬‫ی‬ # ‫ع‬‫انتزا‬ ‫از‬ ‫مستقیم‬ ‫ازی‬# ‫س‬‌ ‫ه‬‫نمون‬ ‫و‬ ‫د‬# ‫ن‬‫‌کن‬ ‫ی‬‫م‬ ‫ص‬# ‫خ‬‫مش‬ ‫را‬ ‫اختار‬# ‫س‬ ‫ط‬# ‫ق‬‫ف‬ ‫انتزاع‬ ‫‌های‬ # ‫س‬‫کال‬ .‫نیست‬ ‫ممکن‬ ‫‌ها‬ ‫ن‬‫آ‬
  • 17.
    ‫وراثت‬ ‫اصل‬ .‫ببرد‬ ‫ارث‬‫به‬ ‫را‬ ‫والد‬ ‫کالس‬ ‫متدهای‬ ‫و‬ ‫‌ها‬ ‫ی‬‫ویژگ‬ ‫‌تواند‬ ‫ی‬‫م‬ ‫فرزند‬ ‫کالس‬ ‫یعنی‬ ‫وراثت‬ .‫‌شود‬ ‫ی‬‫م‬ ‫تکرار‬ ‫از‬ ‫جلوگیری‬ ‫و‬ ‫د‬# ‫ک‬ ‫از‬ ‫مجدد‬ ‫استفاده‬ ‫باعث‬ ‫اصل‬ ‫این‬ ‫جدید‬ ‫متدهای‬ ‫و‬ ‫‌ها‬ ‫ی‬‫ویژگ‬ ،‫والد‬ ‫‌های‬ ‫ی‬‫ویژگ‬ ‫بر‬ ‫عالوه‬ ‫‌تواند‬ ‫ی‬‫م‬ ‫فرزند‬ ‫کالس‬ .‫باشد‬ ‫داشته‬ ‫هم‬ ‫را‬ ‫خودش‬ ‫مخصوص‬
  • 19.
    ‫چندریختی‬ ‫اصل‬ ‫وظایف‬ ‫ا‬# ‫م‬‫ا‬،‫د‬# ‫ن‬‫باش‬ ‫ه‬# ‫ت‬‫داش‬ ‫د‬# ‫ل‬‫وا‬ ‫کالس‬ ‫ا‬# ‫ب‬ ‫‌نام‬ ‫م‬‫ه‬ ‫متدهای‬ ‫د‬# ‫ن‬‫‌توان‬ ‫ی‬‫م‬ ‫د‬# ‫ن‬‫فرز‬ ‫‌های‬ # ‫س‬‫کال‬ ‫والد‬ ‫کالس‬ ‫متدهای‬ ‫عملکرد‬ ‫‌توان‬ ‫ی‬‫م‬ ،‫ب‬# ‫ی‬‫ترت‬ ‫ن‬# ‫ی‬‫ا‬ ‫ه‬# ‫ب‬ .‫باشد‬ ‫متفاوت‬ ‫د‬# ‫ن‬‫‌توا‬ ‫ی‬‫م‬ ‫ا‬# ‫ه‬‌ ‫ن‬‫آ‬ .‫کرد‬ ‫‌سازی‬ ‫ه‬‫پیاد‬ ‫مختلف‬ ‫‌های‬ ‫ه‬‫شیو‬ ‫به‬ ‫فرزند‬ ‫‌های‬ ‫س‬‫کال‬ ‫در‬ ‫را‬
  • 21.
    ‫مزایا‬ ‫معایب‬ ‫بودن‬ ‫ماژوالر‬‫کدنویسی‬ ‫زیاد‬ ‫حجم‬ ‫کدها‬ ‫از‬ ‫مجدد‬ ‫استفاده‬ ‫قابلیت‬ ‫زبان‬ ‫چند‬ ‫در‬ ‫‌سازی‬ ‫ه‬‫پیاد‬ ‫قابل‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ ‫‌وری‬ ‫ه‬‫بهر‬ ‫میزان‬ ‫افزایش‬ ‫شناسایی‬ ‫به‬ ‫زیاد‬ ‫زمان‬ ‫تخصیص‬ ‫پروژه‬ ‫در‬ ‫‌گرایی‬ ‫ی‬‫ش‬ ‫‌های‬ ‫ه‬‫مولف‬ ‫‌افزاری‬ ‫م‬‫نر‬ ‫‌پذیری‬ ‫س‬‫مقیا‬ ‫و‬ ‫‌روزرسانی‬ ‫ه‬‫ب‬ ‫قابلیت‬ ‫باال‬ ‫‌پذیری‬ ‫ف‬‫انعطا‬
  • 23.
    ‫ویژگی‬ ‫‌گرا‬ ‫ی‬‫ش‬ ‫‌نویسی‬ ‫ه‬‫برنام‬‫تابعی‬ ‫‌نویسی‬ ‫ه‬‫برنام‬ ‫تمرکز‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫بین‬ ‫روابط‬ ‫و‬ ‫اشیاء‬ ‫ریاضی‬ ‫اعمال‬ ‫و‬ ‫توابع‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫درون‬ ‫متدها‬ ‫همراه‬ ‫به‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫دارند‬ ‫قرار‬ ‫اشیاء‬ ‫همیشه‬ ‫و‬ ‫‌کنند‬ ‫ی‬‫نم‬ ‫تغییر‬ ‫‌ها‬ ‫ه‬‫داد‬ ‫هستند‬ ‫ثابت‬ ‫ساختار‬ ‫وراثت‬ ‫و‬ ‫‌ها‬ ‫س‬‫کال‬ ‫ساختار‬ ‫‌ها‬ ‫ن‬‫آ‬ ‫ترکیب‬ ‫و‬ ‫خالص‬ ‫توابع‬ ‫معایب‬ ،‫بلندتر‬ ‫کدهای‬ ،‫بیشتر‬ ‫پیچیدگی‬ ‫همزمانی‬ ‫مشکالت‬ ‫برای‬ ‫‌سازی‬ ‫ه‬‫پیاد‬ ‫در‬ ‫دشواری‬ ‫‌تر‬ ‫ه‬‫پیچید‬ ‫مسائل‬ ‫برخی‬