نرم‌افزار

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

ظاهراً، اولین بار جان توکی در سال ۱۹۵۸ این واژه را به‌این معنا به‌کار برده‌است. احتمالاً این واژه در مقابل سخت‌افزار (به انگلیسی: Hardware) به کار برده‌اند که بسیار پیش از پیدایش رایانه (به معنای اسباب و اشیاء) به‌کار می‌رفته‌است.







دو گروه کلی نرم‌افزارها

نرم‌افزارهای رایانه را می‌توان به دو دسته بزرگ تقسیم کرد:

نرم‌افزار سیستم (به انگلیسی: System software)
نرم‌افزار کاربردی (به انگلیسی: Application software)

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






سیستم عامل

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

این ارتباط میان نرم‌افزار و سخت‌افزار توسط سیستم عامل انجام می‌شود. این تنها قسمتی از کار سیستم عامل است.
سیستم عامل خود یک برنامه نرم افزاری است با این تفاوت که چون تمام منابع و امکانات سخت افزاری در اختیار وی می باشد دارای ویژگی منحصر به فرد می باشد بنابراین آن را در رده نرم افزارها می خوانیم با این ویژگی که از اهمیت خاصی برخوردار است. به بیان دیگر سیستم عامل یک برنامه جامع است که اجازه در اختیار قراردادن منابع و امکانات سخت افزاری را برای نرم افزارها صادر می کند و این سیستم عامل است که مسئول صحت عملکرد سیستم و منابع آن است.
سیستم عامل شامل 4 بخش مهم است
1- مدیریت پردازش و پردازشگر
2- مدیریت حافظه
3- مدیریت دستگاههای ورودی و خروجی (I/O)
4- مدیریت فایل
سه گروه کلی نرم‌افزارهای معماری

از دیدگاه ساختاری (معماری) (architecture)، نرم‌افزارها به دسته‌های زیر تقسیم می‌شوند:

کاربر-بنیان یا Client Base
کارگزار-بنیان یا Server Base
کاربر کارگزار بنیان یا Client-Server Base

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






رقابت نرم‌افزاری

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






نرم‌افزار سیستم

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

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







نرم‌افزار کاربردی

نرم‌افزار کاربردی (به انگلیسی: Application software) عبارت است از نرم‌افزاری که با استفادهٔ مستقیم از منابع و قابلیت‌های رایانه کاری را مستقیماً برای کاربر انجام می‌دهد. باید توجه داشت که این عبارت در مقابل عبارت نرم‌افزار سیستمی معنی پیدا می‌کند.

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

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

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

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







نرم‌افزار فروشگاه اینترنتی

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

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

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






تاریخچه و واژگان

پس از پیدایش اینترنت (World Wide Web)، آن به یک رسانهٔ جمعی تبدیل شد و سیستم های خرید اینترنتی ایجاد و توسعه یافتند. این نوآوری نتیجهٔ راه اندازی مرورگر Mosaic در سال ۱۹۹۳ و Netscape در سال ۱۹۹۴ بود. این سیستم محیطی را به وجود آورد که در آن ایجاد فروشگاه‌های تحت وب (فروشگاه اینترنتی ) ممکن بود. بنابراین اینترنت و WWW به عنوان ابزارهای زیرساختی و کلیدی به انتشار و توسعه سریع تجارت الکتریکی کمک کردند. تجارت الکترنیکی (به عنوان زیر مجموعه‌ای از E-BUSINESS) به تمامی سیستم های کامپیوتری اتلاق می‌شود که از معاملات دادوستدی حمایت و پشتیبانی می‌کنند. در سال ۱۹۹۸ به طور عمومی ۱۱مدل تجارت الکتریکی وجود داشت که یکی از آنها مدل تجارتی(B2C business to customer) E-SHOP یا همان فروشگاه اینترتی بود که فروشگاه آنلاین(ONLINE SHOPPING) نیز نامیده می‌شد.

دو واژهٔ E-SHOP و ONLINE SHOP مترادف هم هستند. واژهٔ خرید آنلاین خیلی قبل تر در سال ۱۹۹۴ اختراع شده بود(به عنوان مثال برای سیستم‌های تلویزیونی). امروزه این واژه در مورد مدل B2C از تجارت الکترونیکی بکار می‌رود. برای اینکه خرید اینترنی ممکن شود، به یک سیستم نرم افزاری نیاز است. به منظور ایجاد امکان خرید آنلاین برای تمامی مشتریان، فروشگاههای اینترنتی بر پایه www تکامل یافتند. برای این مدل از سیستم‌های خرید اینترنتی کلمهٔ اختصاری (web shop) استفاده می‌شود. هیچ واژهٔ یکنواخت و ثابتی برای این مدل از سیستم تجارت الکترونیکی بوجود نیامده مثلا در مناطقی که به زبان آلمانی حرف می‌زنند واژگانی مانند web shop) software) و یا ((online shop software مورد استفاده قرار می‌گیرد ویا در آمریکا واژهٔ (shopping cart software) ایجاد شده و مورد استفاده قرار می‌گیرد.






مدل توسعه نرم افزار فروشگاه اینترنتی

نرم افزارهای فروشگاه اینترنتی به دو صورت رایگان(Free Software) و تجاری (Commercial) توسعه داده شده و عرضه می‌شوند:

1- نرم افزار فروشگاه اینترنتی رایگان: مدل توسعه نرم افزار آزاد در زمینه تولید این مدل نرم افزارها نیز مورد استفاده قرار گرفته و مورد قبول جامعه قرار گرفته‌است. در این مدل توسعه جمعی از افراد متخصص و برنامه نویس از نقاط مختلف دنیا برروی یک نرم افزار کدبار (Open Source) مشارکت کرده و نهایتا در قالب یک لایسنس آزاد نرم افزار را جهت استفاده تمامی افراد جامعه منتشر می‌کنند. در این مدل توسعه معمولا نرم افزار به صورت رایگان در اختیار تمامی افراد جامعه قرار داده می‌شود و برخی اوقات شرکت‌هایی نیز از جامعه توسعه دهنده نرم افزار حمایت مالی می‌کنند که در این صورت شرکت‌های مذکور از خدمات جانبی در کنار نرم افزار درآمد زایی دارند. مزیت اصلی نرم افزار فروشگاه اینترنتی رایگان این است که می توان آن ها را بروی هر وب سروری که با آن سازگاری دارد نصب و میزبانی کرده و در کمترین زمان ممکن صاحب یک فروشگاه با کمترین هزینه شد. همچنین سورس کدهای نسخهٔ آزاد معمولا برای ویرایش وتغییر ویا سفارشی کردن برنامه در دسترس می‌باشد....

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

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






مشخصات فنی

برای توسعه نرم افزار فروشگاه اینترنتی معمولا از زبان های برنامه نویسی سمت سرور نظیر PHP و ASP.net و همچنین یک سیستم پایگاه داده جهت نگهداری اطلاعات محصول ها، مشتریان و سفارشات به عنوان مثال MySQL یا MS SQL Server بهره گرفته می شود. در نرم افزارهای فروشگاه اینترنتی مدرن جهت تعامل بهتر با مشتریان و مدیریت فروشگاه از زبانهای برنامه نویسی سمت کلاینت نظیر جاوااسکریپت و کتابخانه های مبتنی بر آن نظیر Jquery و Prototype استفاده می شود. در این نرم افزارها تمامی اطلاعات محصول ها توسط مدیریت فروشگاه در دیتابیس مرکزی فروشگاه برروی سرور اینترنتی ذخیره و نگهداری می شود که مشتریان می توانند با مراجعه به آدرس اینترنتی فروشگاه اطلاعات ذخیره شده در دیتابیس آن را مشاهده کرده و برخی اوقات نسبت به مقایسه اطلاعات محصول ها اقدام کنند. با توجه به حجم اطلاعات نگهداری شده در دیتابیس معمولا از تکنیک های مختلفی جهت افزایش امنیت و بهینگی کدها استفاده می گردد. موضوع مهمی که در این قضیه مطرح است صحت داده های فروشگاه و امنیت بالای ذخیره سازی اطلاعات می باشد تا تراکنش های آنلاین در محیط امنی ذخیره و نگهداری گردند.

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

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

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

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

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

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

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

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

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

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

مورد بعدی سئو می باشد. فروشگاه با SEO قدرتمند باعث بالا آمدن در رتبه گوگل و خرید بیشتر خواهد بود. از فروشگاه سازی استفاده نمایید که موارد SEO را رعایت نموده و امکانات سئو مناسب برای کالاها از قبیل درج کلمات کلیدی در متا تگ ها و URL کالا ها و دسته بندی ها داشته باشد.

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







نرم‌افزار موبایل

نرم‌افزار موبایل نرم‌افزاری قابل اجرا برروی گوشی‌های تلفن همراه می‌باشد که معمولاً با حجم کم و در ابعاد صفحه تلفن همراه عرضه می شود.

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

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

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






نفخ نرم‌افزار

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

بجا گذاشتن ردپاهای عظیم هنگام نصب
استفادهٔ اسراف‌گرایانه از منابع سامانه
ارائهٔ امکانات بی‌موردی که کاربران از آنها استفاده نمی‌کنند

این درحالی است که درمقابل نفع کم یا شاید هیچ منفعتی برای کاربر ندارند.

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






علل

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

امروزه وضعیت برعکس شده، منابع پست انگاشته می‌شوند، سریع کُدزنی و داشتن امکانات خبرساز اولویت کار است، و این تاحدی به پیشرفت فناوری مربوط است. سرعت محاسبه و گنجایش ذخیره‌سازی چندین برابر شده، درحالی‌که هزینهٔ تولید سخت‌افزار هم به همان شدت کاهش یافته (قانون مور را ببینید). علاوه بر آن گسترش استفاده از رایانه در همهٔ لایه‌های بازرگانی و زندگی خانگی، بازار رایانهٔ بسیار بزرگتری نسبت به دههٔ ۱۹۷۰ درست کرده است.

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






مثال‌ها

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

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

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

جدا از امکانات زاید، محدودیت‌های زمانی در فرایند تولید نرم‌افزار و مدیریت بی‌فکر، منجر به باقی ماندن و جا خوردن کُدهای قدیمی در ساخت نسخه‌های جدید نرم‌افزارها می‌شود. یک مثال خوب از این مورد، ادوبی اکروبات ریدر است، که در مسیر گسترش پی‌دی‌اف، هر روز رشد کرده و امروزه پروندهٔ نصاب آن بیش از ۳۷ مگابایت حجم دارد؛ در مقابل، بقیهٔ پی‌دی‌اف خوان‌ها بسته‌های نصاب بسیار کوچک‌تری دارند، مانند فاکسیت ریدر که پروندهٔ نصاب آن تنها ۵ مگابایت است.






کرک کردن نرم‌افزار

کِرَک کردن نرم‌افزار یعنی تغییر دادن نرم‌افزار به منظور حذف کردن روش‌های حفاظتی آن نرم‌افزار. از جمله این روش‌های حفاظتی می‌توان به موارد زیر اشاره کرد:

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

تا بتوان از آن بر خلاف خواسته ی سازندگان یا روشی که سازندگان در نظر گرفته اند استفاده کرد.

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








فرایند توسعه نرم‌افزار
فرایند تولید نرم‌افزار که با عنوان «چرخهٔ حیات تولید نرم‌افزار» نیز شناخته می‌شود، ساختاری است که روی توسعه و تولید محصولات نرم‌افزاری اعمال می‌شود. عبارت‌های مشابهی چون «چرخهٔ حیات نرم‌افزار» و «فرایند نرم‌افزار» در این رابطه استفاده می‌شود.الگوهای گوناگونی نظیر فرایندهای (خاص) وجود دارند که هر کدام خط مشی مختص (آن فرایندها) برای انجام کارها و فعالیت‌های متنوع در طول فرایندها را مشخص می‌کنند. برخی عنوان می‌کنند که «طرح چرخهٔ حیات» یک عبارت بسیار عمومی بوده و «فرایند تولید نرم‌افزار» عبارت تخصصی‌تر است. برای مثال خیلی از فرایندهای تولید نرم‌افزار ویژه‌ای هستند که خود زیر مجموعه چرخهٔ حیات حلزونی به شمار می‌روند.








فعالیت‌های تولید نرم‌افزار


برنامه‌ریزی (امکان‌سنجی)

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








پیاده‌سازی، آزمون و مستندسازی

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








استقرار و نگهداری سامانه

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








الگوهای تولید نرم‌افزار

الگو آبشاری

الگو آبشاری فرایندها را به گونه‌ای نشان می‌دهد که کجا تولید کنندگان نرم‌افزار (برنامه‌نویسان) فازهای زیر را به ترتیب انجام دهند:# مشخصات مورد نیاز (تحلیل نیازمندی‌ها)








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








الگو حلزونی

خصوصیت کلیدی الگو حلزونی مدیریت ریسک در تمام مراحل چرخهٔ تولید نرم‌افزار است. در سال ۱۹۸۸ میلادی بری بوهم به صورت رسمی الگو حلزونی فرایند تولید نرم‌افزار را منتشر کرد، که ترکیبی از بعضی کلیدهای تایید شده متدولوژی الگو آبشاری و نمونه‌سازی سریع است، اما احساس می‌شود الگو ارائه شده تاکید در ناحیه های کلیدی (الگو آبشاری) را با متدهای دیگری همچون بررسی دقیق و تحلیل دائمی ریسک‌ها، سیستم‌های خاص مناسب برای سامانه پیچیده و بزرگ، کوتاه تر کرده است.الگو حلزونی این روش را با چهار نمودار که نشان دهند فعالیت های زیر است، به تصویر می کشد که فرایندها در چند مرحله تکرار انجام می‌شود:# تدوین و فرموله کردن برنامه ریزی خوب است برای شناسایی اهداف سیستم، قسمت های انتخاب شده جهت پیاده سازی برنامه، محدودیت‌های واضح و مشخص پروژه.# تحلیل ریسک و مشکلات سامانه: ارزیابی تحلیلی برنامه های انتخاب شده، جهت مشخص کردن چگونگی شناسایی و از بین بردن ریسک‌ها.

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








روش تکرارشونده و افزایشی

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








روش توسعه سریع نرم‌افزار

روش توسعه سریع نرم‌افزار (به انگلیسی: Rapid application development)(مخفف انگلیسی: RAD) روش تکراری را بعنوان پایه کار استفاده می‌کند اما طرفداری نظریه سبک‌تر و محبوبیت بیشتر از روش سنتی است. روش سریع از بازخوردها به جای برنامه‌ریزی بعنوان سازوکار اصلی کنترل پروژه استفاده می‌کند. بازخوردها بوسیله آزمون‌های مرتب و انتشار پیاپی در بازه‌های زمانی کوتاه نرم‌افزارهای در حال تکامل تولید می‌شوند.روش‌های گوناگونی از فرایند سریع برای تولید نرم‌افزار استفاه می‌شود:








روش برنامه‌سازی مفرط


تولید نرم‌افزار به روش برنامه‌سازی مفرط (به انگلیسی: Extreme programming)(مخفف انگلیسی: XP) در فازهای خیلی کوچک (یا مداوم) انجام و با فرایندهای دسته‌ای قدیمی‌تر تطبیق داده می‌شوند. فاز اول (که عمداً کامل نشده) در طول مراحل ممکن است به جای اینکه ماه‌ها و سال‌ها در روش آبشاری طول بکشد تا کامل شود، یک روز یا یک هفته وقت بگیرد. ابتدا یک آزمون خودکار برای ایجاد اهداف اساسی تولید نرم‌افزار نوشته می‌شود. سپس (توسط دو برنامه‌نویس) برنامه‌نویسی انجام می‌گیرد که وقتی تمام آزمون‌ها را پشت سر گذاشته و دیگر هیچ آزمون مورد نیازی به ذهن برنامه‌نویسان نرسد کامل می‌شود. کار طراحی و معماری سیستم بعد از اینکه نه آزمونی وجود دارد و نه برنامه‌نویسی‌شده انجام می‌شود.طراحی توسط برنامه‌نویسان انجام می‌شود. (فقط مشخصات نهایی و ترکیب طراحی و کد در تمام فرایندها در روش سریع مشترک هستند) عملیات اصلی ناقص سامانه (توسط دست کم یکی از افراد گروه تولیدکننده و برنامه‌نویس) برای کاربران (یا برخی از کاربران) نصب یا نمایش داده می‌شوند. در اینجا تمام عوامل پروژه دوباره شروع به نوشتن آزمون برای قسمت‌های مهم سامانه خواهند کرد.
12:59 pm
معناشناسی اجرا

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

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






کتابخانه هسته
اغلب زبان‌های برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده می‌شوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازی‌های زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتم‌ها، داده ساختارها و مکانیزم‌های ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالباً با کتابخانه هسته به عنوان قسمتی از آن رفتار می‌کنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هسته‌ای را مشخص می‌کنند که باید در تمام پیاده سازی‌ها موجود باشند، و در زبان‌های استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبان‌ها به گونه‌ای تعریف شده‌اند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونه‌ای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونه‌ای از کلاس BlockContext کتابخانه می‌سازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان می‌باشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمی‌کنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.


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



خصوصیات

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

تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص می‌شود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده سازی منبع یا مدل. گاهی اوقات در زبان‌های مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحاً در رفتار پیاده سازی مدل موجودند.


پیاده سازی

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

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

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

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



تاریخچه
پیشرفت‌های اولیه

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

در دهه ۴۰، اولین رایانه‌های دیجیتال که توسط برق تغذیه می‌شدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سال‌های ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.

کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامه‌های زبان ماشین استفاده می‌کردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده می‌شوند جایگزین شد. در سال‌های بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخه‌های به روز شده این برنامه‌ها همچنان مورد استفاده قرار می‌گیرند، و هر کدام قویا توسعه زبان‌های بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبان‌های برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبان‌های برنامه نویسی به شدت متاثر از محدودیت‌های رابط بودند.



پالایش

دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثال‌های عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبه‌های آن بهینه سازی ایده‌های اولیه نسل سوم زبان برنامه نویسی بود:

APL برنامه نویسی آرایه‌ای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایده‌های خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی می‌کرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به

عنوان اولین زبان کاملاً شئ گرا معرفی شد.

C بین سال‌های ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبان‌های برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.

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

دهه‌های ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبان‌های برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.

"ادسگر دیکسترا" در نامه‌ای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبان‌های سطح بالا حذف شود.

در دهه‌های ۶۰ و ۷۰ توسعهٔ تکنیک‌هایی صورت گرفت که اثر یک برنامه را کاهش می‌داد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.




یکپارچگی و رشد

دهه ۸۰ سال‌های یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینه‌های گزافی صرف تحقیق در مورد زبان نسل پنجم می‌شد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثال‌های جدید، تمام این تلاش‌ها ایده‌هایی که در دهه‌های قبل حلق شده بودند را بهتر کرد.

یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستم‌های بزرگ از طریق مدول‌ها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستم‌های مدولی برجسته‌ای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبان‌های دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستم‌های مدولی غالباً با ساختارهای برنامه نویسی عام همراه شده‌اند.

رشد سریع اینترنت در میانه دهه ۹۰ فرصت‌های ایجاد زبان‌های جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وب‌گاه‌های دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعه‌ها اساساً نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثال‌های موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا می‌کند، هم در تحقیقات و هم در صنعت. جهت‌های فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونه‌های جدید مدولی(mixin، نماینده‌ها، جنبه‌ها) و تجمع پایگاه داده.

۴GLها نمونه‌ای از زبان‌هایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه داده‌های اسکالر را برگردانند، مجموعه‌هایی را تغییر داده و بر می‌گردانند که برای اکثر زبان‌ها متعارفند. Perl برای مثال، با "مدرک اینجا" خود می‌تواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.




سنجش استفاده از زبان

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

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

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

این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر می‌کند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق می‌کند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.

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

یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثال‌های برنامه نویسی دسته بندی شود. برای مثال، غالب زبان‌های برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده می‌کنند، در حالیکه تعداد کمی این کار را نمی‌کنند. سایر زبان‌ها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
ساعت : 12:59 pm | نویسنده : admin | مای اف | مطلب قبلی
مای اف | next page | next page