اسکریپت‌نویسی

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

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





در دهه ۱۹۶۰ اولین پوسته‌های فرمان ساخته شدند. کاربران این پوسته‌ها گاه مجبور بودند برای انجام امور خود، سلسله‌ای از دستورهای تکراری یا مشابه را در پوسته وارد کنند. کم کم به پوسته‌ها قابلیت‌هایی اضافه شد که کاربر با آن می‌توانست الگوی دستورهای خود را به پوسته اعلام کند و پوسته به طور خودکار دستورها را انجام می‌داد. این پیشرفت‌ها منجر به ساخت اولین اسکریپت‌های پوسته‌ای شد.

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

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



اکشن‌اسکریپت
اکشن‌اسکریپت ActionScript زبان برنامه نویسی برای فلش‌پلیر می‌باشد که تعامل با کاربر، پردازش و نگهداری اطلاعات و غیره را در زمان اجرا به عهده دارد .AS بر پایه ECMAScript است که معمولاً به صورت بایت کد توسط compiler درون فایل ذخیره گردیده و درrun-time توسط ActionScript Virtual Machine ترجمه و اجرا می‌شود. AS مدل پیشرفته و قوی را از یک زبان برنامه نویس ارایه می‌کند که برای بسیاری از توسعه دهندگان وب و برنامه نویسان با اندکی دانش ازobject-oriented programming آشنا و راحت خواهد بود .



برنامه‌نویسی سمت سرور
برنامه‌نویسی سمت سرور روشی است که برای طراحی وب که شامل اسکریپت‌های نهان درون یک کد اچ‌تی‌ام‌ال می‌باشد استفاده می‌شود که نتیجه درخواست یک کاربر به سرور یک وب سایت می‌باشد که با کدنویسی‌های سمت سرور قبل از پاسخ دادن سرور به کاربر انجام می‌گردد. اسکریپت‌ها می‌تواند درون هر کدام از زبان‌های اسکریپتی موجود تحت سرور نوشته شود. برنامه‌نویسی سمت سرور با نوع برنامه‌نویسی سمت کاربر تفاوت دارد که انواع نهان آن همچون جاوااسکریپت در مرورگر وب در سمت کاربر اجرا می‌شود. کدنویسی سمت سرور معمولا برای ایجاد یک واسط کاربری و محدود کردن دسترسی کاربران به پایگاه‌های داده یا منابع اطلاعاتی می‌باشد. این اسکریپت‌ها ممکن است مشخصات کاربر را برای استفاده در سفارشی کردن پاسخ براساس مشخصات کاربر، نیازمندی‌های کاربر و حقوق دسترسی کاربران، گرد آوری کنند. همچنین کدنویسی سمت سرور باعث می‌شود که مالک وب سایت بتواند دسترسی کاربران به کد منبع و اسکریپت‌های سمت سرور را کاهش دهد که این خود ممکن است اختصاصی و یا ارزشی باشد. مشکل کد نویسی سمت سرور این است که کامپیوتر سرور وب سایت باید بیشتر منابع مجاسباتی را پیش از ارسال صفحه به کاربر برای نمایش در مرورگر وب ارائه کند. وقتی که سرور معمولا از یک راه برای مثال پروتکل FTP،HTTP داده ارائه می کد، کاربران ممکن است حق انتخاب از میان تعدادی از برنامه‌های سمت کاربر دارند (بسیاری از مرورگرهای وب می‌توانند از هر دو پروتکل گفته شده استفاده کنند). در موارد برنامه‌های کاربردی خاص تر، ممکن است برنامه نویسان خودشان اقدام به نوشتن پروتکل برای سرور، کاربر و انتقال اطلاعات نمایند، که می‌تواند فقط می‌تواند توسط یکدیگر استفاده شود. برنامه‌هایی که بر روی کامپیوتر کاربر به صورت محلی بدون ارسال یا دریافت اطلاعات از طریق شبکه می‌باشد سرویس گیرنده‌های را در نظر نمی‌گیرند، و به همین دلیل اعمال آن برنامه‌های تاثیری بر روی اعمال کامپیوترهای سرویس گیرنده ندارند.




تاریخچه

برای اولین بار در دسامبر ۱۹۹۴، Netscape یک پیاده سازی از JavaScript را به وسیله Netscape Enterprise Server برای کد نویسی سمت سرور ارائه نمود.(مدت کمی پس از ارائه شدن JavaScript برای مرورگرها بود) کدنویسی سمت سرور بعدها در اوایل ۱۹۹۵ به وسیله Fred DuFresne در طراحی (Boston MA television station (WCVB استفادهشد. و این تکنولوژی با شماره ۵۸۳۵۷۱۲ در آمریکا ثبت شد. و این حق انحصاری در سال ۱۹۹۸ منتقل شد و در حال حاضر متعلق به (Open Invention Network (OIN است. در سال ۲۰۱۰ OIN، آقای Fred DuFresne را به خاطر اعمالش در اسکریپت نویسی سمت سرور "Distinguished Invertor" نامید.



توضیح

در روزهای اول وب، کدنویسی سمت سرور به طور انحصاری توسط ترکیبی از برنامه‌های C و یا اسکریپت‌های Perl و با پوسته‌ای از اسکریپت‌های (Common Gateway Interface(CGI انجام می‌شد. آن اسکریپت‌ها توسط سیستم عامل اجرا می‌شدند. و نتایج آن توسط وب سرور بازتاب داده می‌شدند. بسیاری وب سرورهای جدید می‌توانند به طور مستقیم یک خط از زبان اسکریپتی همچون ASP و PHP را به وسیله خود وب سرور و یا ماژول‌های اضافه (همچون mod_perl یا mod_php)که برای وب سرورها بودند اجرا نمایند. برای مثال WebDNA شامل یک پایگاه داده نهان درون خودش است. همچنین روشی از کدنویسی(i.e، CGI یا اجرای مستقیم) می‌تواند برای سخت سایت‌های پیچیده با چندین صفحه استفاده شود، ولی معمولا اجرای مستقیم سربار کمتری دارد که ناشی از عدم تماس با مفسرهای خارجی می‌باشد. وب سایت‌های پویا گاهی اوقات از برنامه‌های سروری کاربردی تحت وب خاصی استفاده می‌کنند، برای مثال کتابخانه "Python "Base HTTP Server، همچنین بعضی افراد این را کد نویسی سمت سرور نمی دانند. استفاده از روش کدنویسی تحت وب پویا در هنگام طراحی، همچون ASP کلاسیک یا PHP، توسعه دهندگان باید درک عمیقی از منطق، موقت و جدایی فیزیکی بین سرویس گیرنده و سرور داشته یاشند. برای اعمال کاربران برای به راه انداختن کدهای سمت سرور، حالتی را داریم که توسعه دهنده‌ای با ASP کلاسیک کار می‌کند باید به صراحت باعث شود که مرورگر کاربر یک بازخورد درخواست به وب سرور بفرستد. ایجاد این چنین فعل و انفعالاتی به آسانی باعث صرف وقت زیادی در طراحی و به وجود آورنده مقدار زیادی کد ناخوانا می‌شود. JSP یک زبان اسکریپتی سمت سرور می‌باشد.
زبان‌های اسکریپت‌نویسی سمت سرور

ای‌اس‌پی (*.asp)
اکتیووی‌اف‌پی (*.avfp)
ای‌اس‌پی‌دات‌نت (*.aspx)
سی توسط سی‌جی‌آی (*.c. *،csp)
زبان نشانه‌گذاری کلدفیوژن (*.cfm)
جاوا توسط جی‌اس‌پی (*.jsp)
جاوااسکریپت با استفاده از جاوااسکریپت سمت سرور (*.ssjs. *،js)
لوآ (*.lp. *،op)
پرل سی‌جی‌آی (*.cgi. *،ipl. *،pl)
پی‌اچ‌پی (*.php) - اسکریپت‌نویسی کدباز
پایتون، برای مثال توسط جنگو (*.py)
روبی، برای مثال توسط روبی آن ریلز (*.rb. *،rbw)
اس‌ام‌ایکس (*.smx)
لاسو (*.lasso)
تی‌سی‌ال (*.tcl)
وب‌دی‌ان‌ای (*.dna. *،tpl)





تایپ‌اسکریپت

تایپ‌اسکریپت زبان برنامه‌نویسی‌ای است که توسط مایکروسافت توسعه‌داده می‌شود. تایپ‌اسکریپت پیشرفت‌داده‌شدهٔ جاوااسکریپت است و بررسی نوع قوی و شئ‌گرایی واقعی را ذاتاً به آن زبان می‌افزاید. آندرس هجلزبرگ پدر سی‌شارپ در توسعهٔ تایپ‌اسکریپت فعالیت داشته‌است.




جاوااسکریپت
جاوااسکریپت (به انگلیسی: JavaScript) زبان برنامه نویسی اسکریپت مبتی بر اشیاء است که توسط NetScape تولید شده‌است. این زبان، یک زبان شی‌گر است که بر اساس استاندارد ECMA-262 Edition 3 نوشته شده‌است.
علیرغم اشتباه عمومی، زبان جاوا اسکریت با زبان جاوا ارتباطی ندارد، اگر چه ساختار این زبان به سی پلاس پلاس(++C) و جاوا شباهت دارد؛ که این امر برای یادگیری آسان در نظر گرفته شده‌است. از همینرو دستورهای متداول مانند if, for, try..catch ,"while" و... در این زبان هم یافت می‌گردند.
این زبان می‌تواند هم به صورت ساخت یافته و هم به صورت شی گرا مورد استفاده قرار گیرد. در این زبان اشیاء با اضافه شدن متدها و خصوصیات پویا به اشیاء خالی ساخته می‌شوند، بر خلاف جاوا. بعد از ساخته شدن یک شی به روش فوق، این شی می‌تواند به عنوان نمونه‌ای برای ساخته شدن اشیاء مشابه مورد استفاده قرار گیرد.
به علت این قابلیت زبان جاوااسکریپت برای ساختن نمونه از سیستم مناسب می‌باشد.
کاربرد گسترده این زبان در سایتها و صفحات اینترنی می‌باشد و به کمک این زبان می‌توان به اشیاء داخل صفحات HTML دسترسی پیدا کرد و آنها را تغییر داد. به همین علت برای پویا نمایی در سمت کاربر، از این زبان استفاده می‌شود.




تاریخچه

اسکریپت را در ابتدا شخصی به نام برندان ایچ در شرکت نت‌اسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوا اسکریپت تغییر یافت. این تغییر نام تقریباً با افزوده شدن پشتیبانی از جاوا در مرورگر وب Netscape Navigator همزمانی دارد. اولین نسخهٔ جاوا اسکریپت در نسخه 2.0B3 این مرورگر در دسامبر ۱۹۹۵ معرفی و عرضه شد. این نام گذاری منجر به سردرگمی‌های زیادی شده و این ابهام را ایجاد می‌کند که جاوا اسکریپت با جاوا مرتبط است در حالی که این طور نیست. عدهٔ زیادی این کار را یک ترفند تجاری برای به دست آوردن بخشی از بازار جاوا که در آن موقع زبان جدید مطرح برای برنامه نویسی تحت وب بود می‌دانند..

به دلیل موفقیت عمدهٔ جاوا اسکریپت در نقش زبان نویسه‌ای سمت کارخواه (client side scripting language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را Jscript نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در آگوست ۱۹۹۶ داده شد. تفاوت‌های این دو زبان به حدی جزیی است که اغلب Jscript و جاوا اسکریپت به جای هم به کار می‌روند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت Jscript با استاندارد ECMA مطرح می‌کند.

نت‌اسکیپ جاوا اسکریپت را به سازمان Ecma International برای استاندارد سازی ارسال کرده‌است و نتیجه نسخهٔ استاندارد شده‌ای به نام ECMA Script است.

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

امکانات زیر (در صورت قید نشدن) همگی مطابق استاندارد ECMA Script می‌باشند.



زبان امری و ساخت یافته

جاوا اسکریپت از تمامی نحو ساختاری زبان C پشتیبانی می‌کند. مانند گزاره (if و switch و حلقه‌های while و...) یک مورد استثنا تعیین حوزهٔ متغیرهاست: تعریف حوزه در حد block در جاوا اسکریپت وجود ندارد. هر چند جاوا اسکریپت ۱٫۷ با کلمهٔ کلیدی let این نوع حوزه دهی را امکان پذیر می‌سازد. مانند c در جاوا اسکریپت بین عبارت و گزاره تفاوت وجود دارد.




پویایی

؛ تایپ دهی پویا: مانند اکثر زبان‌های نویسه‌ای تایپ به مقدارها منسوب می‌گردد و نه به متغیرها. برای مثال متغیر x ممکن است به یک عدد وابسته سازی شود، و بعداً به یک رشته. جاوا اسکریپت برای تعیین تایپ شی راه‌های مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد.

؛ تایپ دهی ضعیف: زبان جاوا اسکریپت از نظر تایپ دهی ضعیف به شمار می‌آید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود. (عدد را با رشته جمع کرده‌است)

؛ اشیا به دید آرایه‌های انتسابی: جاوا اسکیرپت تقریباً تماماً بر اساس اشیا است. اشیا، آرایه‌های انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیا، کلیدهای آرایه انتسابی هستند و درواقع obj.x = ۱۰ با obj[“x”] = ۱۰ هم ارز هستند و شیوه نگارش با نقطه صرفاً یک سهولت نحوی است. ویژگی‌ها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین می‌توان روی ویژگیهای یک شی با ساختار for … in پیمایش کرد.

؛ ارزیابی در زمان اجرا: جاوااسکریپا یک تابع eval دارد که قادر است گزاره‌های تولید شده در یک رشته در زمان اجرا را، اجرا کند.




تابعی بودن

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

؛ توابع داخلی و بستارها: توابع داخلی (توابع تعریف شده داخل یک تابع دیگر) هر بار که تابع بیرونی فرا خوانده شود، ایجاد می‌شوند و متغیرهای توابع بیرونی تا زمانی که تابع داخلی وجود داشته باشد، وجود خواهند داشت، حتی پس از اتمام آن فراخوانی از تابع بیرونی. (مثال: اگر تابع داخلی به عنوان مقدار برگشتی تابع باشد، هنوز به متغیرهای تابع بیرونی دسترسی دارد) – این مکانیزم بستار گرفتن در جاوا اسکریپت است.




ساختار شماتیک» محوری

؛ ساختار شماتیک: جاوا اسکریپت به جای رده‌ها برای تعریف ویژگی‌های اشیا، که شامل متدها و وراثت است از «ساختار شماتیک» استفاده می‌کند (پیش‌نمونه). امکان شبیه سازی بسیاری از امکانات رده-محور با ساختارهای شماتیک جاوا اسکریپت امکان پذیر است.

توابع در نقش سازندهٔ اشیا

برای توابع علاوه بر نقش عادی، به عنوان سازنده ی اشیا هم عمل می‌کنند. آوردن یک new قبل فراخوانی تابع، آن را با کلمهٔ کلیدی this وابسته سازی شده به شی جدید اجرا می‌کند. ویژگی prototype از تابع مورد نظر، ساختار شماتیک شی جدید را مشخص می‌کند.

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




امکانات دیگر

جاوا اسکریپت برای تامین اشیا و متدها که با آن‌ها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسه‌ها (include) هم به این محیط نیازمند است (مانند تگ <script>در HTML). (البته این یک ویژگی زبانی نیست اما در عمل اغلب این طور پیاده سازی شده‌است)

؛ تعداد متغیر پارامتر (variadic): تعداد نامعینی پارامتر را می‌توان به یک تابع ارسال نمود. تابع می‌تواند هم از طریق پارامترهای رسمی و هم از طریق شی محلی arguments به آن‌ها دسترسی داشته باشد.

Literalهای آرایه و شی

مانند بسیاری از زبان‌های نویسه‌ای آرایه‌ها و اشیا (که در زبان‌های دیگر همان آرایه‌های انتسابی هستند) را می‌توان با یک نحو موجز ایجاد و توصیف نمود. در واقع این شیوهٔ نگارش پایهٔ قالب داده‌ای جی‌سون هم هست.




عبارات منظم

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




نظام تایپ دهی

انواع زیر جزو انواع داده‌های قابل دسترس در زبان جاوا اسکریپت است. در استاندارد ECMA انواع دیگری هم تعریف شده که صرفاً داخلی است و برای پیاده سازی است.

تعریف نشده: این تایپ فقط یک مقدار با نام undefined دارد و متعلق به تمام متغییرهای مقدار دهی نشده‌است

نوع تهی: نوع تهی هم فقط یک مقدار دارد با نام null

نوع دودویی: نمایندهٔ یک مقدار منطقی است و دو مقدار true و false را می‌پذیرد.

نوع رشته: در بر گیرندهٔ تمام رشته‌های متناهی از ۰ یا بیشتر عنصر ۱۶ بیتی بدون علامت است. این عناصر با اندیس‌های نامنفی قابل دسترسی هستند. طول رشته تعداد عناصر داخل آن و طول رشتهٔ تهی برابر ۰ است.

زمانی که رشته حاوی متن واقعی باشد هر عنصر به عنوان یک واحد UTF-16 در نظر گرفته می‌شود (مستقل از این که شیوهٔ واقعی نگه داری رشته چه باشد). تمام عملیات بر روی رشته‌ها آن‌ها را به عنوان اعداد صحیح بدون علامت در نظر می‌گیرند و تضمین کنندهٔ تولید رشته به حالت normalize شده نیست و تضمین‌های خاص زمانی هم ندارد. علت این تصمیم گیری سادگی در پیاده سازی ذکر شده‌است.

نوع عدد: نوع عدد در جاوا اسکریپت مطابق با استادارد IEEE برای اعداد شناور دودویی است (با اندکی تفاوت).

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




تبدیلات خودکار

این زبان دارای تبدیلات خود کار بین این انواع داده‌ای است.

زمانی که بخواهد یک if را ارزیابی کند یا از عملگرهای منطقی ! و && و || استفاده شود، تبدیل به نوع دودویی را انجام می‌دهد. مقادیر ۰ و ۰- و NaN به false و سایر مقادیر عددی به true نگاشت می‌گردد. همچنین رشتهٔ تهی false و سایر رشته‌ها true در نظر گرفته می‌شود. انواع شی و تابع true و undefined و null هم false در نظر گرفته می‌شود.

زمانی که یکی از عملوندهای عملگر + رشته باشد، تبدیل به رشته صورت می‌گیرد، مانند ۵ + “۳۷” که می‌شود “۵۳۷”

عملگرهای دیگری عددی (جز جمع) منجر به تبدیل به عدد می‌گردد مانند ۳ – “۵۷” که مقدار عددی ۳۴- را به دست می‌دهد.




وی‌ام‌ال‌اسکریپت

زبان وی-ام-ال اسکریپت یک گویش یا مشتق از زبان جاوا اسکریپت می‌باشد که برای صفحات وی-ام-ال استفاده می‌شود که قسمتی از پروتکل برنامه‌های بی‌سیم و رادیویی می‌باشد.

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

وی-ام-ال اسکریپت مبتنی بر ای-سی-ام-ای اسکریپت(سند انجمن سازنده کامپیوترهای اروپا) می‌باشد که نسخه استاندارد شده جاوا اسکریپت می‌باشد. بنابراین نحو وی-ام-ال اسکریپت بسیار شبیه جاوا اسکریپت می‌باشد.

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




وی‌بی‌اسکریپت

VBscript یک زبان رایانه‌ای فعال است که توسط شرکت مایکروسافت توسعه یافته‌است. ترکیبات این زبان از تغییرات محدودی از زبان برنامه نویسی ویژوال بیسیک برگرفته شده‌است.
VBscript به صورت معمولی بر روی همه ویندوزهای انتشار یافته توسط مایکروسافت از ویندوز ۹۸ تا حالا نصب شده‌است. براساس تنظیمات و اهداف وسایلی که اجرا شده بر روی ویندوز CE ممکن است این برنامه شامل ویندوز CE نشود و سود این برنامه برای مدیران ویندوز برای جستجو کردن یک ابزار اتوماتیک است که از دسته زبانهای برنامه سازی توسعه یافته اولیه اواخر سال ۱۹۷۰ قوی تر و پربازده تر باشد.
VBscript باید با یک فضای استاندارد میزژی‌هایی شبیه کنترل سندهای مایکروسافت.




تاریخچه

VBscript به عنوان قسمتی از تکنولوژی‌های نمایش ویندوز به کار گرفته شد. چیزی که هدفش در ابتدا برای توسعه وب در سال ۱۹۹۶ ارسال و منتشر شد، در طول یک دوره دو ساله VBscript و JVscript از ورژن ۱٫۰ به ورژن ۲٫۰ ارتقاء پیدا کردند و بعد از آن زمان مدیران سیستم‌ها به این فکر افتادند که از این زبان استفاده کنند. در ورژن ۵٫۰ دستورالعمل‌های VBscript با ویژگی‌هایی نظیر توضیحات منظم، کلاسها، حالتها (مقدار/ اجرا/ اجرای عمومی) تابع برای سنجش، اجرای دستورهایی که توسط یک ویرایش گر دیگر ساخته شده‌است، یک اشاره گر دستور العمل‌ها مثل Getref()، پخش شده کمکهای کامپیوتر، رشد پیدا کرده‌اند.
در ورژن ۵٫۵ (Submatches)ها برای کلاس کلاس توضیحات منظم در VBscript اضافه شده‌است، که در نهایت به VBscript اجازه می‌دهد که تألیفاتی را سند کند که گروههای توضیحاتی را در درون خود تسخیر کند. این پیشرفت قبلاً فقط در JVscript از خانواده محصولات مایکروسافت ممکن بود. از سال ۲۰۰۸ تا حالا هیچ دستورالعمل جدیدی به نام VBscript اضافه نشده‌است. بطوری که توسط ویندوز powershell جایگزین شده‌است.
به علاوه کمکها در ادامه با مقدار کد نوشته شده در برنامه وظایف خود را ادامه می‌دهند به خاطر اینکه آنها به عنوان یک ابزاری مؤثر برای بعضی وظایف باقی می‌مانند.
ماشین زبان به طور مستمر توسط تیم مهندسی نگهداری مایکروسافت نگهداری شده‌است. چیزی که برای رفع خطاها و خدمات امنیتی قابل دسترسی است.
وقتی استفاده‌ها در اینترنت اکسپلورر مایکروسافت به کار گرفته شده VBscript در دستورالعملها به JVscript شبیه می‌شود به عنوان یک زبان برای نوشتن دستورالعملهایی که برای صفحات HTML شامل شده‌اند و متقابلاً با مدل شیءگرایی اسناد صفحات DOM که به تنهایی برای انجام وظایفی در HTML ممکن نیست. نمونه‌های دیگر از مرورگرها firebox و opera هستند که برای پشتیبانی VBscript ساخته نشده‌اند. این به این معناست که ارتقاء دهنده‌های مرورگرها برای ارتقاء مرورگرها از زبان JVscript استفاده می‌کنند. در کنار کاربران وب، VBscript همچنین برای پردازش سرور صفحات وب استفاده می‌شود که این مسئله برای صفحات فعال سرور مایکروسافت ASP بسیار قابل توجه‌است. ماشین ASP و کتابخانه تایت و vbscript.dll,asp.dll برای اجرای اسناد VBscript که جا شده در یک صفحه ASP مشمول تبدیل کننده‌های ٪> و <٪ است. این یک مثال است از یک صفحه ASP با VBscript که فرمت یک زمان ۲۴ ساعته را نشان می‌دهد. همچنین VBscript می‌تواند برای تولید کاربردهایی که مستقیماً بر روی ویندوزهای کامپیوترهای شخصی مایکروسافت اجرا می‌شوند مورد استفاده قرار گیرد.
ساده‌ترین مثال از آن یک سند است که استفاده فضای میزان ویندوز را می‌سازد. یک مثال از سند برای بالا آمدن به تنهایی فایل از راه گسترش فایل VBS است.
این سند می‌تواند در دو راه مطلوب شده باشند:
wscript. exe استفاده شده برای نمایش خروجی و ورودی را حول یک GUI دریافت کند. مثل بسته‌های دیالوگی و ورودی
cscript. exe استفاده در محیط ویرایش دستورات VBscript.
فایلهای vbs می‌توانند دو نوع فایل ویرایشی را شامل شده باشند:
فایلهای wsf: فایلهایی که بعد از XML معمول شد.
فایلهای hta: فایلهایی که بعد از HTML معمول شد.
فایلهای wsf می‌توانند فایلهای vbs چندگانه را شامل شوند. در نتیجه فایلهای wsf معناهایی برای استفاده مجدد از کدها را مهیا می‌کنند:
می‌توانیم یک کتابخانه‌ای از کلاسها یا تابع‌هایی در یک یا چند فایل vbs بنویسیم و آن فایلها را در یک یا چند فایل wsf برای استفاده و استفاده مجدد آن تابع‌ها در یک راه مدل شده شامل کنیم. مورد استفاده دیگر HTML در کاربردهای HTML و HTA است. در یک HTA، HTML برای ملاقات کاربران مورد استفاده قرار گرفته‌است و یک زبان ویرایش مثل HTML برای منطق برنامه مورد استفاده قرار گرفته‌است.
HTAS در درون mshta.exe اجرا می‌شود. چیزی که یک فضای مورد اعتماد تولید شده توسط اینترنت اکسپلورر است. محدودیتها برای اجرای کاربردها در وب یا محدوده اینترنت مثل دسترسی به فایلهای محلی یا راههای شبکه‌ای به کار برده شده‌است. همچنین HTAS در این محیط قابل اعتماد اجرا می‌شود. راهنمای فعال تحقیق می‌تواند موضوعی برای محدوده منطقی اینترنت اکسپلورر و پیامهای خطای مربوطه باشد.
VBscript و JVscript می‌توانند در یک فایل wsc برای تولید یک مؤلفه ویرایش ویندوز مورد استفاده قرار گیرد. یک کلاس ویرایش فعال که می‌تواند توسط کاربردهای کامپیوتری قابل اجرای دیگر طلب شده باشد. در آخر VBscript به عنوان یک زبان ویرایشی وارداتی برای بعضی کاربردهای جاداده شده تطابق داده شده‌است. مثل ملاقاتهای اپراتوری تولیدی و ملاقاتهای ماشینی بشر.




توابع و دستورالعمل‌ها
VBscript توابعی کتابخانه‌ای و روتین را محیا کرده‌است مثل تاریخ/ زمان، عملیات رشته‌ای، ریاضی، تقابل کاربران، خطایابی و توضیحات منظم.
به علاوه تابع‌ها می‌توانند به استفاده از فناوری‌های فعال اضافه شده باشند. مدیریت سیستمی فایل، تغییر و تبدیل فایل، و عملکردهای متن در حال جریان می‌توانند به سرانجام برسند با کتابخانه زمان اجرای ویرایش scrrun.dll. فایل باینری و حافظهٔ ۰ و ۱ توسط کلاس ADODB.Stream محیا شده‌است. فایلی که هم می‌تواند به عنوان سازنده رشته مورد استفاده قرار گیرد و هم می‌تواند به عنوان تبدیل کننده یک آرایه‌ای از بایتها به یک رشته و بالعکس مورد استفاده قرار گیرد. دسترسی به پایگاه اطلاعات مقدور است در اطراف شیءهای داده‌ای فعال ADO و پایگاه سوخت IIS با مجوزهای معتبر و کافی توسط تابع Getobject() می‌تواند دستکاری شود. به علاوه، فایلهای XML و طرح‌ها می‌توانند توسط کتابخانه XML مایکروسافت دستکاری شده باشند. (msxml۳.dll ، msxml۶.dll) چیزی که می‌تواند از طریق XMLHTTP و شیءهای سرور XMLHTTP برای بازیابی شاخه‌های وب جهانی مورد استفاده قرار گیرد.




برنامه‌نویسی ادیبانه

برنامه‌نویسی ادیبانه (به انگلیسی Literate Programming) چگونگی نگارش یک برنامه رایانه‌ای است، بطوریکه صورت و شمایل آن برنامه به شکل اسناد و متونی باشد که برای خواندن غیررسمی و غیرفنی توسط انسان (مانند خواندن متون ادبی)، مناسب باشد. این مفهوم برای اولین بار توسط دونالد کنوت، دانشمند علوم رایانه و استاد افتخاری دانشگاه استانفورد (دانشگاه)، در سال ۱۹۸۱ (میلادی) میلادی مطرح شده‌است.

در این روش متن برنامه (کد مبدا) و توضیحات به همراه هم در یک فایل مبدا ذخیره می‌شوند. متن اصلی برنامه و توضیحات را می‌توان بطور کامل به‌وسیلهٔ برنامه‌های کاربردی خاص، استخراج کرد.




برنامه‌نویسی اعلانی

برنامه‌نویسی اعلانی، در علوم رایانه یکی از شیوه‌های برنامه‌نویسی است که در آن منطق محاسبات بدون شرح چگونگی انجام آنها بیان می‌شود. برنامه‌های اعلانی تلاش می‌کنند تا با توصیف عملیات مورد نیاز برنامه‌ها بجای توضیح چگونگی انجام عملیات، تاثیرات جانبی (side effects) درون برنامه‌ها را کاهش و یا به کل ازمیان بردارند که از لحاظ اولویت‌های عملیاتی در تناقض کامل با شیوه برنامه‌نویسی دستوری می‌باشند. زبانهای دستوری زبان‌هایی هستند که عملیات تحلیلی را برحسب عباراتی که در وضعیت برنامه‌ها تغییراتی ایجاد می‌کنند، شرح می‌دهند حال آنکه زبانهای اعلانی برنامه هارابه عنوان اصول منطق محاسباتی و محاسبات را کسورات و اجزای کوچک درون فضای آن منطق می‌بینند.از آنجا که این زبان می‌تواند تا حد چشمگیری نوشتن برنامه‌های موازی برای رایانش موازی را آسان و ساده کند توانسته توجه زیادی را به خود معطوف سازد.

زبانهای معمول اعلانی شامل برنامه‌نویسی تابعی، عبارت باقاعده، برنامه‌نویسی منطقی می‌شوند.



تعریف

زبان ها و یا برنامه‌های اعلانی معمولاً به روشهای گوناگونی معرفی می‌شوند:‎۲

هر سبک برنامه ریزی، که دستوری نباشد.
هر برنامه‌ای که توضیح دهد چه عملیاتی مورد نیاز است و نه اینکه به توصیف چگونگی انجام آن عملیات بپردازد.
هر نوع برنامه‌ای که عاری از هر گونه تآثیرات جانبی (side effects) باشد.
هر زبانی که در مطابقت کامل و واضح با منطق ریاضیات باشد.




خلاصه

زبان اعلانی را می‌توان به منزله چتری فرض کرد که شامل چند نمونه ساختار برنامه نویسی معروف می‌باشد:‎۳‎

برنامه‌های کاربردی(functional programming)

ابن نوع برنامه‌ها، برنامه‌هایی هستند که با محاسبات و تحلیلات به مانند ارزیابی توابع ریاضیاتی رفتار می‌کنند و از داده‌های توضیحی(state)و بی ثبات(mutable) دوری می‌کنند. و بر خلاف برنامه‌های دستوری که به تغییرات وضعیت درون برنامه‌ها تاکید دارند به کاربرد توابع تآکید می‌کنند.از جملهٔ این قبیل برنامه‌ها می‌توان به lips،APL اشاره کرد که بعدها نمونه‌های پیشرفته آن مانند Schemایجاد شد.




برنامه‌های منطق(logic programming)

این نوع زبان خود به سه دسته برنامه‌های قیدی(constraint programming)، برنامه‌های تحلیل داده(data flow programs)و برنامه‌های (domain specific) تقسیم می‌شود. برنامه ریزی منطق به عنوان یک سطح وسیع استفاده از منطق ریاضیات می‌باشد که در زمینه‌های تحلیل و محاسبات کامپیوتری، اثبات تئوریهای علمی، ایجاد مدل و حل مسائل، از این نوع ساختار برنامه ریزی استفاده می‌شود.زبانهایی چون svg،html،xsltاز نمونه زبانهای منطق به شمار می‌آیند.





برنامه‌نویسی بر پایه پیش‌نمونه

برنامه‌نویسی بر پایه پیش‌نمونه (به انگلیسی: Prototype-based programming) شیوه‌ای از برنامه‌نویسی شئ‌گرا است که کلاس در آن موجود نیست و رفتار استفادهٔ مجدد (که به وراثت در زبان‌های بر پایهٔ کلاس شناخته می‌شود) توسط فرایندی از شبیه‌سازی اشیاء موجود انجام می‌پذیرد. این مدل همچنین به بدون کلاس، پیش‌نمونه‌گرا یا برنامه‌نویسی بر پایهٔ نمونه نیز شناخته می‌شود. دلگیشن (به انگلیسی: Delegation) قابلیت زبانی است که برنامه‌نویسی بر پایهٔ پیش‌نمونه را پیشتیبانی می‌کند.



برنامه‌نویسی پودمانی

برنامه‌نویسی پودمانی یا برنامه‌نویسی پیمانه‌ای (به انگلیسی: Modular programming)، یک روش طراحی نرم‌افزار است برای افزایش وسعت نرم‌افزاری که از قسمت‌های مجزایی به نام پودمان تشکیل شده‌است.

یک ماژول، تکه برنامه ای است که با یک استاندارد و قالب مشخص طراحی شده و انجام یکسری از فعالیتها را بر عهده دارد. در عوض مدیریت امکانات مورد نیاز ماژول و همچنین مدیریت بر روی خود ماژول توسط سایت انجام خواهد شد. مثلاً شما با افزودن ماژول خرید و فروش online، تمامی قابلیتهای یک سایت فروشگاهی را به سایت موجود خود خواهید افزود. در عوض ماژول جدید به دلیل ارث بردن و استفاده از قابلیتهای پایه ای سایت، چنان بر روی سایت شما عمل می نماید که گویی از ابتدا درون سایت بوده و بخشی جدا از برنامه نیست.





برنامه‌نویسی تابعی
برنامه‌نویسی تابعی (به انگلیسی: Functional programming) نوعی پارادایم برنامه‌نویسی است که در آن «محاسبات» به صورت ارزش‌یابی توابع ریاضی در نظر گرفته می‌شوند.




برنامه‌نویسی جنبه‌گرا
برنامه‌نویسی جنبه‌گرا روشی برای برنامه‌نویسی است که پس از برنامه و برای رفع مشکلات آن به وجود آمد. هدف از برنامه نویسی جنبه‌گرا، مستقل کردن وظایف (در قالب ماژول‌ها) است به طوری که کمترین تداخل را در یکدیگر داشته باشند تا نهایتاً بتوان از آنها برای برنامه‌های دیگر است. برای مثال وظیفهٔ اهراز هویت در یک برنامه را می‌توان به عنوان یک جنبه در نظر گرفت و ماژول جداگانه‌ای برای آن ساخت تا از این پس در تمام پروژه‌های مشابه بتوان از آن استفاده کرد. بیشتر زبان‌های برنامه‌نویسی، از برنامه‌نویسی جنبه‌گرا پشتیبانی خوبی به عمل می‌آورند. می‌توان از آن جمله به جاوا و روش AspectJ اشاره کرد. برنامه‌نویسی جنبه‌گرا، ارتباط تنگاتنگ و نزدیکی با دارد ولی دو مفهوم متفاوت هستند.




برنامه‌نویسی دستوری

برنامه‌نویسی دستوری (به انگلیسی: Imperative programming) در علوم رایانه یکی از شیوه‌های برنامه‌نویسی است که در آن مراحل اجرای یک برنامه کامپیوتری قدم به قدم توسط برنامه نویس بیان می‌شود. این بر خلاف زبانهای اعلانی است که در آنها تنها نتیجه انجام دستورات بیان می‌شود. به بیان دیگر در زبانهای دستوری چگونگی اجرای برنامه بیان می‌شود اما در زبانهای اعلانی چیستی نتیجه بیان می‌شود.

به عنوان مثال اگر قصد باز کردن دری را داشته باشیم و با زبان اعلانی این را بخواهیم بیان کنیم خواهیم گفت در را باز کن اما اگر با زبان دستوری بیان کنیم خواهیم گفت بلند شو، به طرف در نردیک شو، دستگیره را بگیر و در را به طرف بیرون هل بده.





برنامه‌نویسی رویدادمحور

برنامه‌نویسی رویداد گرا یک الگوی برنامه‌نویسی است که در آن، روند اجرای برنامه توسط رویدادها - برای مثال، خروجی یک سنسور یا دستورهای کاربر (کلیک های موس، دکمه های کیبورد) و یا پیام های دریافتی از سایر برنامه ها یا رشته ها - تعیین می گردد.

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

نخست، انتخاب رویداد (یا شناسایی رویداد)
و دوم، اداره کردن رویداد ها

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





برنامه‌نویسی رویه‌ای

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

هر پروسه می‌تواند در هر نقطه‌ای در طول اجرای برنامه فراخوانده شود شامل فراخوانی پروسه توسط خودش (برنامه‌نویسی بازگشتی) یا پروسه‌های دیگر.






برنامه‌نویسی ساخت‌یافته

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

رویه ها (به انگلیسی: routines)، زیر رویه ها(به انگلیسی: subroutines)، ساختار بلوک (به انگلیسی: block structures) و حلقه های for , while در کنار سادگی آزمودن کدها و صرف نظر کردن از Goto که برنامه را به یک کلاف سردرگم (به اصطلاح برنامه نویسی: spaghetti code) تبدیل می کرد، موجب شدند تا دنبال کردن برنامه و نگه داری از آن تا حد زیادی بهبود یابد.

این پارادایم در دهه ی 1960 توسط بوهن (به انگلیسی: Böhm) و جاکوپینی (به انگلیسی: Jacopini) پدید آمد و در سال 1968 پدیده ی معروفی به نام Goto از سوی ادسخر دیکسترا زیان آور تشخیص داده شد و این پدیده ی تازه به صورت تئوری در قالب برنامه نویسی ساخت یافته ارایه شد و پس از آن توسط زبان الگول(به انگلیسی: ALGOL) به کمک ساختارهای کنترلی پشتیبانی گردید.



مثال

به عنوان مثال برای نوشتن برنامه‌ای که قراراست اطلاعات نمرات یک محصل را بگیرد و کارنامهٔ آن را چاپ کند، زیر روال‌های زیر لازم است:

زیر روالی ای برای خواندن اطلاعات ورودی
زیر روالی ای برای جمع‌آوری اطلاعات ورودی و محاسبهٔ معدل
زیر روالی برای چاپ اطلاعات به صورت یک جدول
زیر روالی برای اتصال به چاپگر و چاپ گزارش

هر زیر روال آنقدر کوچک می‌شود که برنامه‌نویس بتواند راحت تر کار کردن آن را درک کند ( هر زیر روال معمولاً ۳۰ خط برنامه‌نویسی است). به این ترتیب برنامه‌نویس با نوشتن هر زیر روال بخشی از برنامه را تولید می‌کند و برنامه‌نویسان مختلف می‌توانند بر روی زیر روال‌های مختلف کار کنند تا در نهایت به اضافه نمودن آنها به یکدیگر برنامهٔ نهایی ساخته شود.

در زبان‌های ساختار یافته توابع کتابخانه‌ای فراوانی وجود دارند که سعی می‌کنند به برنامه‌نویس در برخی از روال‌ها کمک کنند. مثلاً برای چاپ در مثال فوق، توابع کتابخانه‌ای برای سهولت انجام کار در این زیر روال، در زبان پاسکال، وجود دارد.

برخی از زبان‌های ساخت یافته:

پاسکال
سی
بیسیک






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

برنامه‌نویسی شیءگرا (به انگلیسی Object-Oriented Programming مخفف OOP) یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی اجزای آن، شی ها می باشند. در واقع در این شیوه برنامه نویسی، برنامه به شیء گرایش پیدا می کند. به این معنا که داده ها و توابعی که قرار است بر روی این داده ها عمل کنند، تا حد امکان در قالبی به نام شی در کنار یکدیگر قرار گرفته، جمع بندی شده و یک واحد(شی) را تشکیل داده و نسبت به محیط بیرونِ خود، کپسوله می شوند و از این طریق، توابع بیگانه ی خارج از آن شی، دیگر امکان ایجاد تغییر در داده های درون آن شی را ندارند. به طور مثال حساب بانکی شما که شامل مشخصات فردی شما و میزان سپرده ی شما در بانک است، تشکیل یک شی را می دهند و به دلیل دارا بودن ویژگی کپسوله، امکان دستکاری در میزان سپرده یا مشخصات شما، توسط دیگران وجود ندارد. از دیگر ویژگی های برنامه نویسی شی گرا، پیچیدگی کم، هزینه کم، امکان گسترش سریع برنامه با خطای کمتر نسبت به سایر پارادیام های برنامه نویسی است.

فلسفه یی که منجر به شکل گیری ی زبان های شی گرا شد، عبارت بود از این واقعیت که نحوه ی عملکرد مغز و شیوه ی دریافت اطلاعات از محیط پیرامون و پردازش آن اطلاعات(اندیشیدن)، شیوه یی شی گراست، از همین روی می بایستی زبانی تعریف می شد که همین شیوه را مبنای کار خود قرار داده و بازتولید می کرد. و دقیقاً به همان شکل که اشیا در جهان خارج، دارای هویت و کارکرد مشخص و یگانه برای خود هستند و در عین حال با دیگر اشیا در ارتباطی تنگاتنگ و مستقیم اند، در زبان های برنامه نویسی نیز می بایستی این اصول کلی برقرار می شد. تا به این شکل، برنامه نویس بتواند با بهره گیری از زبانی که به روش اندیشیدنش، نزدیکی بیشتری دارد، شی های مختلفی را تعریف نموده، این شی ها را در ارتباط با یکدیگر قرار داده و از شی های پویای تولید شده برای حل مساله ی پیش روی استفاده نماید. امروزه اکثر زبان‌های دستوری برنامه نویسی از فنون شیءگرایی پشتیبانی می‌کنند. زبانهایی مانند جاوا، سی++، سی شارپ، دلفی از جمله زبانهای شیءگرا هستند. حتی بسیاری از زبانهای روال گونه که ساختار برنامه‌ها در آنها بلوک‌هایی با نام پروسیجر است امروزه از فنون شیءگرایی نیز پشتبانی می‌کنند. زبانهای سی++ و پی‌اچ‌پی از این جمله هستند. هر شیء یک سری خصوصیت و قابلیت دارد، که اصطلاحاً Properties و Operation خوانده می‌شوند. در این روش از برنامه نویسی دید برنامه نویس به سیستم دید شخصی است که سعی می‌نماید به پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آنها سیستم را تولید نماید. مفهوم مدیریت دیداری

مفاهیم عمده



کلاس
کلاس نوع خاصی از آرایه است که امکان ذخیره و جمع بندی تعداد زیادی المان را (که شامل داده ها و توابع هستند) برای یک شی جدید فراهم آورده و تحت یک نام مشترک ذخیره می کند. اما بر خلاف آرایه که تنها قادر به ذخیره ی داده هایی هم جنس است، کلاس می تواند داده هایی از جنس های مختلف را ذخیره نماید. به طور مثال در نظر بگیرید که می خواهیم تاریخ 13 نوامبر 2006 را که تشکیل شده از روز، ماه و سال است مورد استفاده قرار دهیم

حال در نظر بگیرید که نه فقط یک تاریخ، بلکه n تاریخ متفاوت مورد نیاز است. این بدان معنی ست که می بایستی به تعداد n بار، سه متغیر بالا، جداگانه تعریف شوند و تعریفِ تک تک و پیاپی متغیرها، نه فقط از لحاظ زمانی بسیار وقت گیر می نماید، بلکه از لحاظ میزان کد مورد نیاز نیز بسیار غیر عملی ست، چرا که هر بار می بایستی نام جدیدی برای متغیرها در نظر گرفته شود (دو متغیر متفاوت نمی‌توانند هم نام باشند). در اینجاست که کلاس ها به خوبی وارد عمل می شوند. با استفاده از کلاس ها می توان متغیرهای متعدد (در مثال بالا: int day ;String month, ;int year) را زیر عنوان یک جنسیت مشترک جدید (به طور مثال هر سه را در یک کلاس با نام Date)، تعریف و جمع بندی نمود. و بعد از آن، بدون نیاز به تعریف مجدد روز، ماه و سال،از کلاس Date به میزان مورد نیاز استفاده کرد:

class Date{
int day;
String month;
int year;
}



وراثت

وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه نویسی شیءگراست. هر شیء یک نمونه از یک کلاس است و هر کلاس می‌تواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاس‌های دیگر را به ارث ببرد). در یک مثال ساده می‌توان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، می‌توان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل زانتیا مدل C۵ یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفه‌جویی در نوشتن کد و تا حدودی تضمین صحت کد موجود می‌شود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاس‌هایی که از این کلاس پایه ویژگی‌ای ا به ارث برده‌اند این تغییر اعمال خواهد شد.




مخفی‌سازی

کپسوله سازی، مخفی‌سازی (Encapsulation)، یا لفافه‌بندی، به این مفهوم اشاره دارد که باید بعضی خصوصیات یا رفتارهای شیء را از دید دیگران پنهان کرد. فرض کنید شما به عنوان یک راننده می‌خواهید اتومبیل شخصی تان را روشن کنید و به محل کارتان عزیمت کنید سوییچ را بر می‌دارید، استارت می‌زنید و با فشار آوردن به پدال‌های گاز و ترمز و چرخش فرمان و ... به محل کارتان خواهید رسید. در طول این مسیر در اتومبیل شما به عنوان یک شیء اعمال مختلفی در حال انجام بود. مثلاً لنت ترمز به دیسک چرخ برخورد می‌کرد و باعث کم شدن سرعت می‌شد یا شمع‌ها شروع به جرقه زدن در زمانی بخصوصی می‌کردند. حال فرض کنید که عمل مخفی سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمعها را کنترل می‌کردید و به سیستم سوخت رسانی در موقع لزوم دستور می‌دادید که سوخت را بداخل سیلندرها ارسال کند و... یا هیچ‌گاه به مقصد نمی‌رسیدید! یا سالم نمی‌رسیدید!

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

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




انتزاع / تجرید

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

در اطراف ما اشیاء زیادی وجود دارد و می‌توان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و.... این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت می‌کند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر می‌دهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان می‌دهد. ولی فقط این یک ماشین نیست که این کار را انجام می‌دهد. تمامی ماشین‌ها این کارها را انجام می‌دهند. پس می‌توانیم این ماشین را 'تعریف' کنیم و بگوییم:

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

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




ارتباط اشیاء

مجدداً به مثال ماشین باربری بر می‌گردیم و این بار، یک ماشین سواری را تعریف می‌کنیم. ماشین سواری شیئی است که چهار چرخ، یک ترمز، یک پدال گاز و یک صندوق عقب دارد. این تعریف به تعریف ماشین باربری بسیار شبیه‌است. به عبارت دیگر ما به یک تعریف جدید می‌رسیم: خودرو. خودرو وسیله‌ای است که چهار چرخ، یک ترمز، یک پدال گاز دارد. پس از این به بعد تعریف ماشین باربری و ماشین سواری خیلی ساده‌تر می‌شود.

ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.

اگر کسی به درب کارخانه مراجعه کند و بگوید که 'خودرو' می‌خواهد، چیزی دریافت نمی‌کند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها می‌تواتند ماشین باربری یا ماشین سواری بخواهد.
کارواش را در نظر می‌گیریم. این کارواش خودرو را تمیز می‌کند و دیگر به طور جزئی عنوان نمی‌کند که کدام نوع خودرو را تمیز می‌کند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
وقتی شخصی قصد اجاره خودرویی دارد، و می‌خواهد جنسی را حمل کند در هنگام تماس با متصدی کرایه ماشین می‌گوید: «اگر خودرو شمااز نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد می‌گوید: «برای من یک ماشین سواری بفرستید.»

در زبان‌های برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری می‌کنند. برخی از تعاریف کاملاً عام است و نمی‌توان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته می‌شود.
12:06 pm

عزیمت حسین به کوفه

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





حسین از توصیه‌هایش تقدیر نمود و بیان داشت که کار خود را به خدا واگذار کرده‌است. ویلفرد مادلونگ می‌نویسد که اکثر روایات حاکی از آنند که عبدالله بن زبیر به حسین اصرار می‌کرد تا به شیعیانش در کوفه بپیوندد تا عرصه مکه از رقیبی چون حسین پاک گردد. اما روایات دیگری هم هستند که حاکی از میل عبدالله بن زبیر به حمایت از حسین در صورت قیام در مکه هستند. حسین که از وقایع کوفه خبر نداشت و در تاریخ ۸ یا ۱۰ ذی حجه ۶۰/ ۱۰ یا ۱۲ سپتامبر ۶۸۰ آماده عزیمت به سمت کوفه گردید و به جای حج، عمره را در خارج از شهر مکه انجام داد تا بتواند از مهلکه فرار کند. ۵۰ مرد از خویشاوندان و دوستان حسین (که می‌توانستند در صورت نیاز بجنگند) به همراه زنان و کودکان، همراه حسین بودند. مکان‌های توقف حسین در مسیر مکه به کوفه در طبری و بلاذری ذکر شده و ولهاوزن تاریخ نگار آلمانی به آنها اشاره کرده‌است. بعد از عزیمت حسین، عبدالله بن جعفر نامه‌ای به همراه دو پسر خود عون و محمد به حسین نوشت و به وی التماس کرد که برگردد.

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

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

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

حسین در زباله دریافت که قاصدش قیس بن مسهر (مشیر) صیداوی (یا برادر رضاعی حسین عبدالله بن یقطر) که به کوفه فرستاده شده بود تا آمدن قریب‌الوقوع حسین را به کوفیان اطلاع دهد، مثله شده و با پرتاب شدن از بام قصر کوفه، کشته شده‌است. حسین با شنیدن این موضوع به حامیانش گفت که با توجه مسائل غم بار پیش آمده مانند خیانت کوفیان، هر کس مجاز است که از کاروان حسین جدا گردد که تعدادی از کسانی که در راه به حسین پیوسته بودند از وی جدا شدند اما کسانی که از حجاز با وی بودند وی را ترک نکردند. به گفته جعفریان این اخبار نشان می‌داد که اوضاع کوفه دگرگون‌شده و شرایط با زمانی که از زبان مسلم گزارش شده بود کاملاً فرق کرده‌است. برای حسین روشن شده بود که دیگر رفتن به کوفه با توجه به ارزیابی‌های سیاسی درست نیست.

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

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

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

در ۲ محرم، حسین در منطقه کربلا از توابع نینوا خیمه زد. در روز سوم وضعیت با ورود لشکر ۴۰۰۰ نفره به فرماندهی عمر بن سعد ابی وقاص (که پیشتر از طرف عبیدالله بن زیاد به دستبای ری فرستاده شده بود تا شورش دیلمیان را سرکوب کند) بدتر شد. عمر بن سعد به عنوان فرزند یکی از صحابیون محمد، تمایلی به جنگیدن با حسین نداشت و تلاش‌هایی بی فرجام برای رهایی از مسئولیت رویارویی با حسین انجام داد. اما ابن زیاد گفت که اگر از این فرمان سرپیچی کند، حکومت ری در کار نخواهد بود. ابن سعد با شنیدن این موضوع، از ابن زیاد اطاعت کرد به امید اینکه حداقل از جنگ با حسین جلوگیری کند. اول از هر کاری، عمر بن سعد نامه‌ای به حسین فرستاد از قصدش برای آمدن به عراق مطلع گردد. پیکی به ابن سعد رسید که حاکی از تمایل حسین به عقب نشینی بود و حسین گفت که به علت نامه‌های کوفیان به عراق آمده و اگر مردم عراق وی را دیگر نمی‌خواهند، وی به مدینه باز خواهد گشت. وقتی ابن سعد موضوع را به ابن زیاد گزارش داد، ابن زیاد اصرار کرد که حسین حتماً باید با یزید بیعت کند و در عین حال آب هنوز از وی منع می‌شود. عمر بن سعد لشکری ۵۰۰ نفره به فرماندهی عمرو بن حجاج زبیدی را بر فرات گماشت. به مدت ۳ روز، حسین و یارانش تنشگی را متحمل شدند. شبانه گروهی ۵۰ نفره و با شهامت به فرماندهی عباس به سمت فرات یورش بردند اما تنها مقدار کمی مشک آب توانستند بیاورند.

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

به مرزها برود و همانند یک سرباز عادی با کفار بجنگد.
با یزید بیعت کند و به وی بپیوندد.
به جایی که از قبل آمده بود، بازگردد.

البته عقبه بن سمعان، غلام رباب (همسر حسین) که از بازماندگان لشکر حسین در واقعه کربلا بود، شدیداً این روایت را رد می‌کند. او گواهی می‌دهد که حسین هیچگاه پیشنهادی نداد و فقط سرزمین کربلا را ترک کرد و به جایی رفت تا تکلیف کار جنگ مشخص گردد. ویلفرد مادلونگ معتقد است که این روایت پیشنهاد از سوی حسین که تسلیم یزید شود با دیدگاههای مذهبی اش تناقض دارد و احتمالاً منابع اولیه قصد دارند که مسئولیت کشته شدن حسین را به گردن ابن زیاد بیندازند نه یزید. به‌گفته رسول جعفریان، شمر در تغییر نظر عبیدالله زیاد در ردّ پیشنهاد حسین مبنی بررفتن او به یکی از سرحدات کشور اسلامی یا بازگشت به مدینه موثر بود. وی با اشاره به منابع اولیه همچون تاریخ طبری و الکامل فی التاریخ تأکید می‌کند که حسین ابن علی در هیچ مرحله‌ای نخواست تا اجازه دهند نزد یزید برود و بیعت کند.

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

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

من خدا را ستایش می‌کنم که ما را به پیامبری محمد مفتخر نمود و قرآن و دین را به ما تعلیم نمود. من یارانی بهتر از یاران خود و خاندانی مخلصتر از خاندان خود نمی‌شناسم. خدا شما را پاداش دهد. من فکر می‌کنم که فردا کشته خواهیم شد. من از شما می‌خواهم که بروید و اصراری به ماندنتان ندارم. از تاریکی شب استفاده کنید و بروید.

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




واقعه کربلا

صبح روز دهم محرم، حسین لشکریانش را که ۳۰ اسب سوار و ۴۲ پیاده بودند را آماده کرد. سمت چپ سپاه را به حبیب بن مظاهر، سمت راست را به زهیر بن قین و قلب را به عباس سپرد. وی همچنین دستور داد که دور تا دور خیمه‌ها، هیزم جمع آوری کنند و هیزمها را آتش بزنند. خود نیز به خیمه‌ای که قبلاً آماده کرده بود رفت و خود را معطر به مشک نمود و نوره (داروی موبر) به سر و تن مالید و خود را شست. سپس در حالی که سوار بر اسب بود و قرآنی به دست داشت، مناجاتی زیبا با خداوند نموده و با مردم کوفه نیز سخن نمود و گفت که خدا ولی اوست و دین را محافظت خواهد کرد. به مردم سخنان محمد که وی و حسن را سرور جوانان بهشت خوانده بود و جایگاه خانواده‌اش را یادآوری نموده و از آنان خواست تا فکر کنند که آیا کشتن وی، امری مشروع است؟ سپس مردم کوفه را به خاطر اینکه پیشتر از وی خواسته بودند تا پیششان بیاید، سرزنش نمود و درخواست کرد تا اجازه دهند وی به یکی از سرزمینهای اسلامی برود که در آنجا امنیتش تامین باشد. اما دوباره به وی گفته شد که اول از همه باید تسلیم یزید گردد. حسین در پاسخ گفت که هیچگاه خودش را همانند یک برده تسلیم نمی‌کند. حسین از اسب پیاده شد و دستور داد تا مهار اسب را ببندند به نشانهٔ اینکه هرگز از معرکه جنگ فرار نخواهد کرد. حر بن یزید بن ریاحی تحت تاثیر قرار گرفت و به سپاه حسین رفت و کوفیان را به خاطر خیانت به حسین سرزنش کرد که البته تاثیری بر روی آنان به وجود نیامد و سر انجام حر در میدان نبرد کشته شد. حسین به اتکای یارانش تا موقعی که تمامی یارانش کشته نشده بودند، وارد جنگ نشد و نمی‌جنگید.

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

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

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

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

شمر با سپاهی به سمت حسین رفت، اما جرات ننمود به وی حمله کند و تنها درگیری لفظی بین آن دو شکل گرفت. حسین آماده جنگ شد. باید توجه داشت که حسین در آن زمان ۵۵ سال سن داشت و به اقتضای سنش نمی‌توانست مداوم بجنگد. پسری خود را سر راه حسین قرار داد و هر چه حسین و زینب به وی می‌گفتند که به خیمه‌ها برگردد، گوش نمی‌کرد. عاقبت دست این پسر بر اثر ضربت شمشیر قطع شد و حسین به وی وعدهٔ دیدار پدرانش را در بهشت می‌داد و سعی در تسکین درد پسر داشت. از یاران حسین، ۳ یا ۴ تن بیشتر نمانده بودند و حسین به سپاهیان ابن زیاد حمله برد. حسین چون بیم داشت که پس از مرگش عریان در صحرا رها شود، چندین جامه درخشان مرغوب پوشیده بود. اما بعد از کشته شدنش تمامی آن لباس‌ها را غارت نموده و بدنش عریان در صحرای کربلا رها شد. ابن سعد ظاهر گردید و زینب به او گفت: حسین دارد کشته می‌شود و تو تنها تماشا می‌کنی. ابن سعد اشکهایش با شنیدن این سخن جاری گشت. حسین شجاعانه می‌جنگید و یعقوبی و چند منبع شیعی دیگر می‌گویند که دهها تن را کشت. اما برخی منابع دیگر حاکی از آن هستند که سربازان ابن زیاد اگر می‌خواستند می‌توانستند حسین را در جا بکشند. حسین وقتی به طرف فرات می‌رفت تا آب بنوشد، تیری به چانه‌اش یا گلویش خورد. سرانجام حسین از ناحیه سر و بازو آسیب دیده و بر صورت به زمین افتاد. به خولی بن یزید اصبحی دستور داده شد که سر حسین را از بدن جدا کند، اما وی متزلزل شد و نتوانست این کار را بکند. از همین رو، سنان بن انس عمرو نخعی بعد از اینکه ضربتی دیگر به حسین زد، سر وی را از بدن جدا نمود. سنان سر حسین را به خولی داده و خولی سر را پیش ابن زیاد برد.

نبرد به پایان رسید و سربازان ابن زیاد رو به غارت آوردند. لباس‌های حسین، شمشیر و اثاثیه‌اش، کفشها و روپوش یمانی‌اش همگی غارت گردیدند. همچنین زیورآلات و چادر زنان نیز غارت گردید. زین العابدین علی بن حسین که بیمار بود در یکی از خیمه‌ها بود و شمر می‌خواست او را بکشد. اما ابن سعد مانع شد و اجازه نداد کسی به خیمهٔ وی وارد شود. صفوف عزاداران حسین به خاطر وجود علی بن حسین است و نام «شهدای کربلا و طف» با نام وی عجین شده‌است. ۷۲ تن یاران حسین که ۱۷ تن از آنان هاشمی بودند و بر طبق محسن الامین، از لشکریان ابن زیاد ۸۸ تن کشته شدند. حر بن زیاد ریاحی، ۴۰ نفر و بریر بن خضیر ۳۰ نفر، نافع ۱۲ یا ۱۳ نفر و حسین تعداد زیادی از لشکریان ابن زیاد را کشتند. سن حسین را هنگام کشته شدن، ۵۶ سال پنج ماه، ۵۷ سال و چند ماه یا ۵۸ سال نوشته‌اند. روز عاشورا را در تاریخ روز جمعه، شنبه یا دوشنبه دانسته‌اند که در این میان روز جمعه صحیح تر به نظر می‌رسد و ابوالفرج اصفهانی روز دوشنبه را از لحاظ تقویمی رد می‌کند. تاریخ کشته شدن حسین را نیز به غیر از ۱۰ محرم ۶۱، در ماه صفر یا سال ۶۰ نیز ذکر کرده‌اند.




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

روایات در منابع اولیه عموماً گرایش به انداختن مسئولیت قتل حسین به گردن ابن زیاد و مبرا کردن یزید دارند. ویلفرد مادلونگ می‌نویسد حریص بودن ابن زیاد به قتل حسین از سوگند خوردنش در باره لگدمال کردن جسد حسین توسط اسبها هویدا می‌شود و این کینه شدید از ماجرای اعتراض حسین به برادر خطاب کردن زیاد بن ابیه (پدر ابن زیاد) از سوی معاویه نشات می‌گیرد. ویلفرد مادلونگ معتقد است که یزید مسئول اصلی قتل حسین است چرا که وی می‌دانست که حسین حتی اگر موقتاً تسلیم گردد باز هم تهدیدی جدی برای خلافت یزید به شمار می‌آید و گرچه در نهان خواستار قتل حسین بود، اما به عنوان خلیفه مسلمانان نمی‌توانست این میل را بروز دهد و وی که از کینه شدید ابن زیاد به حسین آگاه بود، طی نامه‌ای به او هشدار می‌دهد که اگر حسین موفق به انجام کارش شود، ابن زیاد مجدداً به دوران بردگی اجدادش بر می‌گردد. یزید در نامه خود شدیداً به ابن زیاد توصیه می‌کند که مسلم بن عقیل را اعدام کند و ابن زیاد هم مشتاقانه این کار را انجام داد. یزید بعدها در ملاء عام مسئولیت قتل حسین را به گردن ابن زیاد می‌انداخت که ابن زیاد از این کار وی خشمگین گردید و از دستور یزید مبنی بر حمله به عبدالله بن زبیر در مکه سر باز زد.
کشته شدگان و باقی‌ماندگان از بنی هاشم در واقعه کربلا
کل کشته شدگان از طرف حسین، ۷۰ یا ۷۲ تن بودند که حداقل ۲۰ تن از آنان هاشمیان از نسل ابوطالب بودند. علی اکبر اولین کشته از بنی هاشم بود که یزید خلیفه وقت، پسر دایی مادرش می‌شد که به همین علت برای وی امان نامه آورده شد اما وی تبار پدری اش و ارتباطش به محمد را والاتر می‌داشت و این امان را نپذیرفت. ویلفرد مادلونگ معتقد است که عبدالله فرزند کوچک حسین در حالی که بر روی زانوانش بود تیر خورد و مادلونگ بر خلاف منابع دیگر، در نوزاد بودن این بچه تردید دارد. ۶ برادر پدری حسین در این جنگ کشته شدند که ۴ تن از آنان فرزندان ام‌البنین دختر حظام از قبیله بنی کلب بودند. برادر زاده‌ام‌البنین به نام عبدالله بن ابی محل بن حظام برای این ۴ برادر حسین امان نامه‌ای از سوی ابن زیاد آورد که ردش کردند. سه پسر از حسن، سه پسر از عبدالله بن جعفر و نیز سه پسر و سه نوه از عقیل بن ابی طالب در این واقعه کشته شدند. ابن سعد از میان دیگر کشتگان بنی هاشم، یک پسر از نسل ابولهب و یک پسر از نسل ابوسفیان بن حارث بن عبدالمطلب نام می‌برد. ابن سعد از میان باقی‌ماندگان که به اسارت گرفته شدند، دو پسر از حسن، یک پسر از عبدالله بن جعفر و یک پسر از عقیل به همراه ۵ زن را نام می‌برد. ابوالفرج اصفهانی می‌نویسد سه پسر از حسن باقی‌ماندند که در میان آنان حسن بن حسن به شدت زخمی گردید. علی بن حسین بیمار بود و نمی‌توانست بجنگد.




خانواده حسین

اولین ازدواج حسین با رباب دختر امراء القیس بود. امراء القیس در زمان عمر بن خطاب به مدینه آمد و از طرف عمر به رهبری قبایل قضاعه که به اسلام گرویده بودند، انتخاب گردید. علی مساله ازدواج پسرانش با دختران امراء را مطرح کرد و وی قبول کرد که سه تن از دخترانش را به ازدواج حسنین در بیاورد. اما هم حسنین و هم آن سه دختر در آن زمان بسیار کم سن و سال بودند و به نظر نمی‌رسد در همان موقع ازدواجی صورت گرفته باشد. حتی ممکن است که حسن با دختری که برایش برگزیده شده بود ازدواج نکرده باشد. حسین با رباب ازدواج کرد و اقوام امراء در اواخر خلافت علی گه گاه برای میانجیگری و قضاوت پیش علی می‌آمدند. رباب همسر محبوب حسین بود و با وجود اینکه رباب سال‌ها برای حسین فرزندی نیاورده بود، احتمالاً پس از مرگ علی، سکینه (در برخی منابع آمنه، امینه و...) را به دنیا آورد. ابوالفرج اصفهانی در کتاب اغانی از سکینه روایت می‌کند که حسن، حسین را به خاطر علاقه زیادش به رباب سرزنش می‌نمود، اما حسین در پاسخ سه بیت شعر در اثبات علاقه به رباب خواند. رباب فرزند پسری به نام عبدالله برای حسین به دنیا آورد که در خردسالی در کربلا کشته شد و احتمالاً حسین به خاطر این فرزند کنیه ابا عبدالله را دارد. برخی منابع شیعی در سال‌های بعد، این فرزند را علی اصغر نامیده‌اند که دانشنامه ایرانیکا این مطلب را بی‌اساس می‌داند. بعد از کشته شدن حسین، گفته می‌شود که رباب یک سال بر مزار حسین بود و عزادار بود و از ازدواج امنتاع می‌کرد. حسین با زن دیگری به نام سلافه از قبیله بنی قضاعه نیز ازدواج کرد که جزئیات این ازدواج در دسترس نیست و از وی صاحب فرزندی به نام جعفر شد که در زمان حیات حسین و در خردسالی درگذشت.

حسین دو پسر به نام علی داشت که از آن دو، علی زین العابدین امام چهارم شیعیان، از حادثه کربلا جان سالم به در برد و احتمالاً وی از دیگر پسر به نام علی بزرگ‌تر بود و در زمان واقعه کربلا، ۲۳ ساله بود. بنا براین باید در زمان خلافت علی به دنیا آمده باشد. مادر وی کنیزی از ناحیه سند است که بعد از کشته شدن حسین با یکی از غلامان حسین ازدواج کرد و پسری به نام عبدالله بن زبید را برای وی آورد. فرزندان عبدالله در ینبع زندگی می‌کردند. منابع اولیه سنی، با نام علی‌اصغر از زین العابدین و علی دوم را با نام علی‌اکبر یاد می‌کنند، اما شیخ مفید و دیگر نویسندگان شیعی عکس این مطلب را صحیح می‌دانند. علی دوم، در سن ۱۹ سالگی در کربلا کشته شد. مادر وی لیلا دختر مرٞه بن عروه ثقفی و میمونه بن ابی سفیان (خواهر معاویه) است. این ازدواج احتمالاً باید بعد از صلح حسن با معاویه صورت گرفته باشد و نمی‌توانسته در زمان علی بوده باشد. دانشنامه ایرانیکا معتقد است حسین نام این فرزند را نیز علی گذاشت چرا که وی به خاطر والا بودن نسب عربی مادرش از زین العابدین که از کنیزی زاده شده بود، برتر بوده‌است. معاویه در سخنی علی‌اکبر را بهترین شخص برای خلافت معرفی نمود به این دلیل که به اعتقاد معاویه وی، شجاعت بنی هاشم، بخشندگی بنی امیه و غرور ثقفیان را یکجا جمع کرده بود.

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

ساعت : 12:06 pm | نویسنده : admin | مطلب قبلی | مطلب بعدی
نوای علمدار | next page | next page