چرا سی پلاس پلاس (خصوصیات)
زبان برنامهنویسی ++C (تلفظ میشود: سی پلاس پلاس) یک زبان برنامهنویسی کامپیوتری همه منظوره، شی گرا، سطح بالا و چندرگه (که از برنامهنویسی رویهای، تجرید دادهها و برنامهنویسی شئ گرا پشتیبانی میکند)، عمومی و با قابلیتهای سطح بالا و سطح پایین میباشد. این زبان دارای قابلیتهای انواع داده ایستا، نوشتار آزاد، چندمدلی، معمولاً زبان ترجمه شده با پشتیبانی از برنامهنویسی ساختیافته، برنامهنویسی شیگرا، برنامه نویسی جنریک است. ++C به همراه جد خود C از پرطرفدار ترین زبانهای برنامهنویسی تجاری هستند.
زبان ++c یک زبان سطح میانی در نظر گرفته میشود. این زبان دارای قابلیت زبانهای سطح بالا و پایین بصورت همزمان است.
زبان ++C توسط بییارنه استراستروپ دانمارکی در سال ۱۹۷۹ در آزمایشگاههای بل (Bell Labs)، برای بهبود زبان سی و بر مبنای آن ساخته شد و آن را “C با کلاس” (C With Classes) نامگذاری نمودند. در سال ۱۹۸۳ به ++c تغییر نام داد. توسعه با اضافه نمودن کلاسها و ویژگیهای دیگری مانند توابع مجازی، سربارگزاری عملگرها، وراثت چندگانه، قالب توابع، و پردازش استثنا انجام شد. این زبان برنامهنویسی در سال ۱۹۹۸ تحت نام ISO/IEC 14882:1998 استاندارد شد. نسخه فعلی استاندارد این زبان ISO/IEC 14882:2003 است. نسخه جدیدی از استاندارد (که به صورت غیررسمی C++0x نامیده میشود) در دست تهیهاست.
استاندارد زبان
عد از سالها کار کمیته مشترک ANSI–ISO در سال ۱۹۹۸ ++C را استاندارد نمودند (ISO/IEC 14882:1998). به مدت چند سال پس از انتشار استاندارد این کمیته گزارشات معایب را مورد بررسی قرار داده نسخه اصلاح شده استاندارد ++C منتشر شد. در سال ۲۰۰۵ گزارشی فنی بنام «گزارش فنی کتابخانه ۱» (که معمولاً بصورت اختصار TR1 خوانده میشود) انتشار یافت. با وجود این که گزارش بخشی رسمی از استاندارد نیست ولی بخشهایی را به آن اضافه نموده که انتظار میرود در نسخههای بعدی استاندارد در نظر گرفته شود. پشتیبانی از این گزارش در حال افزایش بین تمام کامپایلرهای فعلی است.
در حالی که ++C به هیچ موسسهای وابسته نیست این مستندات بصورت آزادانه در دسترس نیستند.
فلسفه
در کتاب «طراحی و تکامل ++C» استراستروپ قوانین مورد استفاده در طراحی ++C را بیان مینماید. دانستن این قوانین به فهمیدن نحوه عملکرد ++C و چرایی آن کمک میکند. جزئیات بیشتر در کتاب قابل دسترسی است:
- ++C طراحی شدهاست تا یک زبان عمومی با کنترل نوع ایستا و همانند C قابل حمل و پربازده باشد.
- ++C طراحی شدهاست تا مستقیما و بصورت جامع از چندین شیوه برنامهنویسی (برنامهنویسی ساختیافته، برنامهنویسی شیگرا، انتزاع داده، و برنامهنویسی جنریک)
- ++C طراحی شدهاست تا به برنامهنویس امکان انتخاب دهد حتی اگر این انتخاب اشتباه باشد.
- ++C طراحی شدهاست تا حداکثر تطابق با C وجود داشته باشد و یک انتقال راحت از C را ممکن سازد.
- ++C از بکاربردن ویژگیهای خاص که مانع از عمومی شدن است خودداری مینماید.
- ++C از ویژگیهایی که بکار برده نمیشوند استفاده نمیکند.
- ++C طراحی شدهاست تا بدون یک محیط پیچیده عمل نماید.
کتابخانه استاندارد
در سال ۱۹۹۸ استاندارد ++C شامل دو بخش هسته زبان و کتابخانه استاندارد ++C است. این کتابخانه شامل بیشتر بخشهای STL و کتابخانه استاندارد C است. بیشتر کتابخانههای ++C در استاندارد وجود ندارند و یا استفاده از تعریف قابلیت پیوند کتابخانهها را میتوان در زبانهایی مانند فرترن، C، پاسکال، بیسیک نوشته شوند. البته با توجه به ویژگیهای کامپایلر مشخص خواهد شد که کدام زبان را میتوان استفاده نمود.
کتابخانه استاندارد ++C شامل کتابخانه استاندارد C با یک سری تغییرات برای بهبود عملکرد است. بخش بزرگ بعدی این کتابخانه STL است. STL شامل ابزار بسیار قدرتمندی مانند نگهدارندهها (مانند vector و list)، تکرارکنندهها (اشارهگرهای عمومی شده) برای شبیهسازی دسترسی مانند آرایه الگوریتمهایی برای جستجو و مرتبسازی در آنها وجود دارند. نقشهها (نقشههای چندگانه) (آرایه شرکتپذیر) و مجموعهها (مجموعههای چندگانه) واسطهای عمومی فراهم میسازند. در نتیجه با استفاده از قالب تابع، الگوریتمهای جنریک با هر نگهدارنده و دارای تکرارکننده عمل نماید. همانند C ویژگیهای کتابخانه را میتوان با استفاده از شبه دستور include# شامل یک سرآیند استاندارد اضافه نمود. c دارای ۶۹ کتابخانه استاندارد است که ۱۹ تا از آنها نامناسب تشخیص داده شدهاند.
استفاده از کتابخانه استاندارد – مانند std::vector یا std::string به جای آرایههای C- موجب ایجاد برنامههای مطمئنتر شدهاست.
STL در آغاز محصولی جداگانه از HP و سپس SGL پیش از ادغام در کتابخانه استاندارد ++C بودهاست. استاندارد عبارت STL را بکار نمیبرد بلکه آن را بخشی از کتابخانه میداند اما مردم هنوز هم آن را برای جداسازی بخشهای مختلف کتابخانه با این نام بکار میبرند.(جریانهای ورودی/خروجی، جهانیسازی، تشخیص، زیرمجموعه کتابخانه C)
بیشتر کامپایلرها کتابخانه استاندارد و STL را پیادهسازی مینماید. پیادهسازیهای مستقلی نیز همانند STLport نیر وجود دارند. پروژههای دیگر نیز پیادهسازیهای خود را از STL با توجه به اهداف خود بوجود میآورند.
ویژگیهای معرفی شده در ++C
در مقایسه با C زبان ++C ویژگیهای جدیدی را معرفی نمودهاست مانند تعریف متغیر به عنوان عبارت، تغییر نوعهای همانند تابع، new/delete، نوع داده bool، توابع درونخطی، آرگومان پیشفرض، گرانبارسازی عملگر و تابع، فضای نام و عملگر تعیین حوزه ::، کلاسها (شامل تمام ویژگیهای مربوط به کلاسها همانند وراثت، اعضای تابع، توابع مجازی، کلاسهای انتزاعی، و سازندهها)، قالبها، پردازش استثنا، کنترل نوع زمان اجرا، عملگرهای سربار شده ورودی (<<) و خروجی (>>).
برخلاف باور عموم ++C نوع داده ثابت را معرفی ننمودهاست. کلمه const کمی پیش از استفاده از این کلمه در ++C توسط زبان C بصورت رسمی بکار گرفته شد.
در بعضی حالات ++C تعداد کنترل نوع بیشتری نسبت به زبان C انجام میدهد. (برای اطلاعات بیشتر بخش «ناهماهنگی با C» را در پایین ببینید)
توضیحات با استفاده از // قبل از زبان C در زبان BCPL معرفی شده بود که مجدداً در زبان ++C به کار گرفته شد.
بعضی ویژگیهای ++C بعدا توسط C به کار گرفته شد مانند نحوه تعریف for، توضیحات به شکل ++C (با استفاده از //)، و کلمه inline با وجود اینکه تعریف این کلمه در C با تعریف آن در زبان ++C هماهنگی ندارد. همچنین در C ویژگیهایی معرفی شدهاست که در ++C وجود ندارند مانند ماکروهای قابل تغییر و استفااده بهتر از آرایهها به عنوان آرگومان. بعضی کامپایلرها این ویژگیها را پیاده نمودهاند اما در بقیه این ویژگیها موجب ناهماهنگی میگردد.
اشیا
سی++ چندین ویژگی شیگرا را زبان سی معرفی نمود معرفی کلاس چهار ویژگی که در زبانهای شیگرا و بعضا غیر شیگرا حضور دارد یعنی انتزاع، بستهبندی، وراثت، و چندریختی را فراهم کرد. اشیا نمونههای ساخته شده از کلاس در زمان اجرا هستند. میتوان کلاس را نمونهای از قالبها دانست که چندین مورد از آنها بوجود میآید.
بستهبندی
بستهبندی به معنای جمعآوری عملیات و داده در یک محل میباشد. سی++ بستهبندی را با ایجاد امکان تعریف هر کلاس به صورت public، private، protected پیادهسازی نمودهاست. اعضای private فقط توسط اعضای کلاس و یا کلاسها دقیقا بیان شده (friend) قابل دسترسی هستند. اعضای protected توسط کلاسهای ارث برده شده و اعضای کلاس و کلاسهای friend قابل دسترسی هستند.
در تعاریف شیگرا باید تنها توابعی بستهبندی گردند که باید از نحوه پیاده سازی این نوع بخصوص اطلاع داشته باشد. سی++ این ویژگی را با استفاده از توابع عضو و توابع دوست فراهم نموده اما قطعی نکردهاست. در سی++ این امکان وجود دارد که تمام نوع را عمومی تعریف نمایند اما در صورتی که نیاز باشد فقط بخشی از آن عمومی گردد در نتیجه این زبان نه تنها شیگرا است از مدلهای ضعیفتر همانند برنامهنویسی مدولار پشتیبانی مینماید.
عموماً توصیه بر این است که تمام اعضا به صورت خصوصی یا حفاظت شده تبدیل گردند و فقط توابعی که باید توسط دیگر کلاسها به عنوان واسط استفاده شوند عمومی باقی بمانند.
وراثت
وراثت این امکان را ایجاد میکند که یک نوع ویژگی دیگر انواع را داشته باشد. وراثت از یک کلاس پایه میتواند عمومی، خصوصی یا حفاظت شده باشد. این تعیین سطح دستزسی مشخص میسازد آیا کلاسهای نامربوط و یا مشتق شده میتوانند به اعضای عمومی یا حفاظت شده کلاس پایه دسترسی داشته باشند. تنها وراثت عمومی به معنای وراثت به کار رفته بصورت عموم است. دو نوع دیگر وراثت به ندرت مورد استفاده قرار میگیرند. اگر تعیینکننده سطح دسترسی حذف شود سطح دسترسی برای کلاس خصوصی و برای ساختمان به صورت عمومی تعریف میگردد. کلاسهای پایه ممکن است بصورت مجازی تعریف شوند که به آن وراثت مجازی گویند. وراثت مجازی تضمین میکند که فقط یک نمونه از کلاس پایه وجود داشته باشد و مشکلاتی همانند مشکلات وراثت چندگانه بوجد نیاید.
وراثت چندگانه یکی از ویژگیهای مورد بحث در سی++ است. وراثت چندگانه امکان اشتقاق از چند کلاس پایه را فراهم مینماید که موجب بوجود آمدن گراف رابطه وراثت بسیار پیچیدهاست. به عنوان مثال «گربه پرنده» میتواند از کلاس «گربه» و کلاس «پستانداران پرنده» ارث برد. در زبانهای دیگر مانند سیشارپ و جاوا به صورت دیگری ویژگی مشابه را پیادهسازی مینماید هر کلاس میتواند از چندین واسط اشتقاق یابد اما فقط یک کلاس پایه برای اشتقاق وجود دارد(واسطها برخلاف کلاس پایه فقط تعریف هستند و هیچگونه پیادهسازی را شامل نمیگردند).
چندریختی
امکان استفاده از یک واسط برای چندین پیادهسازی فراهم مینماید و اشیا در شرایط مختلف رفتار مختلفی از خود نشان میدهند.
سی++ دو نوع چندریختی در اختیار برنامهنویس قرار میدهد: چندریختی زمان کامپایل و چندریختی زمان اجرا. چندریختی زمان کامپایل امکان تصمیمگیریهای زمان اجرا را فراهم نمیسازد و چندریختی زمان اجرا اغلب موجب پایین آمدن بازدهی میگردد.
چندریختی ایستا
چندریختی ایستا شامل گرانبارسازی تابع، گرانبارسازی عملگر، آرگومان پیشفرض، و قالب کلاسها و تابع است.
ساختار برنامهها
ساختار برنامهها در این زبان بدین صورت است که همانند زبان سی، هر برنامه بایستی یک تابع اصلی (main) به عنوان بدنه برنامه داشته باشد. هر برنامه معمولاً از تعداد زیادی فایل تشکیل میشود که به هم الحاق میگردند (با دستور include) و به این فایلهای الحاقی سرآیند (Header) میگوییم. فایلهای الحاقی حاوی کدها یا نسخههای اجرایی کلاسها (مجموعه متغیرها و توابع) میباشند که در بدنه اصلی برنامه از آنها استفاده میشود. معمولاً هر کلاس (که تعریف یک نوع دادهای با متدهای مربوط به آن است) را در یک سرآیند مینویسند. هر سرآیند که معمولاً تنها تعاریف (معرفی) کلاس را در خود دارد به همراه فایلهای پیاده سازی به زبان ++C یا پیاده سازیهای کامپایل شده (به صورت فایل اشیا مانند dll یا so یا … ) میتواند به کار برده شود. به مجموعههای یکپارچهای از کلاسهای پیاده سازی شده (به صورت فایلهای سرآیند با پیاده سازیهای کد یا اشیای زبان ماشین) که برای برنامه نویسی به کار میروند، یک کتابخانه ++C گفته میشود و قدرت اصلی این زبان در امکان به کارگیری کتابخانههای آماده میباشد. کتابخانههای بزرگ ++C مانند STL، MFC، QT و … مجموعه قدرتمندی برای تولید برنامه در این زبان ایجاد کردهاند.
محیطهای برنامه نویسی
یک برنامه به زبان ++C میتواند در محیطهای visual studio ,Turbo C++ ,Borland C++ ,Dev Cpp در ویندوز و GCC و IDE معروف eclipse در لینوکس نوشته شود. این محیطهای برنامهنویسی، همراه با یک کمپایلر عرضه میشوند که کار تبدیل برنامه به فایل اجرایی را راحت میکند.
منبع: سایت ویکی پدیا
منبع: مرجع کامل فارسی سی پلاس پلاس به آدرس Cplusplus.ir
نویسنده: تمدن
لازم به ذکر است که دامنه cplusplus.ir توسط من تهیه شده و در حال حاضر محتوای سایت را روی وبلاگ بارگذاری کرده ام ;)
برای مشاهدۀ فهرست مطالب به آدرس tamadon.net/cpp مراجعه فرمایید.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگو شرکت کنید؟نظری بدهید!