حسابداری : اموزش کار با انواع نرم افزار ها طراحی وب سایت و مشاوره خرید هاست و دامین گرافیک : طراحی و چاپ انواع کارت ویزیت ، لوگو و ... آموزش کار با نرم افزار فتوشاپ تعویض و ارتقاع سیستم
نهانسازی: اشیا بدون اطالع از چگونگی کارکرد یکدیگر میتوانند با هم در ارتباط باشند. وراثت: یک کالس میتواند رفتار یا صفاتی را از کالس دیگر به ارث ببرد. چندریختی: اشیا میتوانند در موقعیتهای مختلف، رفتارهای متفاوتی از خود نشان دهند. در فصل هفتم، مفاهیم برنامهنویسی شئگرا )ایجاد کالس و شئ( آموزش داده میشود. زبانهای ++C ، Java و #C از جمله زبانهای برنامهنویسی شئگرا محسوب میشوند. نرمافزارهای کاربردی نرمافزارها انواع مختلفی دارند. به عنوان مثال، سیستم عامل ویندوز، یک نرمافزار سیستمی و نرمافزار حسابداری هلو یک نرمافزار کاربردی است. هدف از نگارش این کتاب آموزش برنامهنویس ی نرمافزارهای کاربردی )�Ap 19 1 فصل C# نرمافزار معرفی C Software plication )است. نرمافزارهای کاربردی نوعی از نرمافزارها هستند که در آنها ورود دادهها و خروج ً از اطالعات، بیشتر از محاسبات در واحد پردازشگر مرکزی )Unit Processing Central )است و معموال پایگاههای داده )Bases Data )در آنها استفاده میشود. به عنوان چند نمونه از نرمافزارهای کاربردی میتوان به موارد زیر اشاره کرد: سیستم حسابداری یک سازمان سیستم اتوماسیون یک سازمان سیستم مدیریت کتابخانه یک دانشگاه سیستم مدیریت یک هتل زبان های #C ،Delphi++ ،C Visual و Java از جمله زبانهای قدرتمندی هستند که میتوان برای توسعه نرم افزارهای کاربردی از آنها استفاده کرد. در این کتاب برای توسعه نرمافزارهای کاربردی از زبان #C استفاده شده است. زبان #C به صورت اختصاصی برای کار با چارچوب داتنت )Framework NET ).طراحی شده است. در ادامه، ضمن معرفی زبان #C ، اصطالحات مرتبط با این زبان نیز بررسی میشود. چارچوب دات نت چارچوب دات نت یک فناوری نرمافزاری است که توسط شرکت مایکروسافت )Microsoft )برای سهولت در طراحی و توسعه نرمافزار ایجاد شده است و حاوی مجموعهای از کالسهای کاربردی و مفید است. کالسهای موجود در این چارچوب بخش وسیعی از نیازهای برنامهنویسی را تحت پوشش قرار میدهند. چارچوب داتنت یک چارچوب کلی است و محدود به زبان برنامه نویسی خاصی نیست. مهمترین زبان های برنامه نویسی برای کار در این چارچوب عبارتاند از: Visual C# Visual Basic Visual C++ Visual F# در چارچوب دات نت، یک برنامه که به زبان #C نوشته شده است به راحتی میتواند از کدی استفاده کند که به زبان Basic Visual نوشته شده است و بالعکس )ویژگی چند زبانی(. تغییر عمدهای که در برنامهنویسی با چارچوب داتنت نسبت به گذشته قابل مشاهده است، نحوه اتصال به پایگاه داده است که میتوان از روش جدید NET .ADO استفاده کرد. در این روش، نحوه اتصال، خواندن و نوشتن داده ً ها کامال متفاوت با روش قدیمی یعنی ADO است که این تفاوت، تسهیل در برنامهنویسی و سرعت در تبادل دادهها را به ارمغان میآورد. در مورد نوع برنامههایی که میتوان با چارچوب داتنت نوشت هیچ محدودیت قابل ذکری وجود ندارد. میتوانید برای طراحی برنامههای کاربردی تحت ویندوز، برنامههای تحت وب، برنامههای تح ت کنسول )�Con sole )و غیره از این چارچوب استفاده کنید. اجزای چارچوب دات نت چارچوب دات نت از چهار بخش اصلی تشکیل شده است که عبارتاند از: 1 .زبان مشترک زمان اجرا )Runtime Language Common :)CLR به عنوان هسته مرکزی چارچوب داتنت، مدیریت اجرای برنامهها را برعهده دارد و در واقع CLR همان نقش ماشین مجازی جاوا )Virtual Java Machine )را در سیستمهای مبتنی بر جاوا بازی میکند. CLR عالوه بر اجرای کد، وظایف دیگری از جمله مدیریت حافظه و مدیریت نخ )Thread )را نیز انجام میدهد. 20 آموزش زبان برنامهنویسی #C 2 .کتابخانه کالس چارچوب )Library Class Framework :)این بخش حاوی مجموعهای عظیم از کالسها است که برنامهنویسان میتوانند از آنها استفاده کنند و با سرعت بیشتری برنامههای خویش را توسعه دهند. 3 .سیستم نوع مشترک )System Type Common :)این بخش باعث ایجاد هماهنگی بین زبانهای مختلف چارچوب داتنت میشود. 4 .مشخصات زبان مشترک (Specification Language Common :)CLS مجموعهای از ویژگیهای عمومی را که بین زبانهای مختلف چارچوب دات نت مشترک است، توصیف میکند. چارچوب دات نت، جهت پشتیبانی از ویژگی چند زبانی از CTS و CLS استفاده میکند. CLSS کد تمام زبانهای مختلف چارچوب داتنت را به زبان سطح میانی مایکروسافت )�In Microsoft Language termediate )و یا به اختصار MSIL تبدیل میکند. به عنوان مثال، میتوان یک کالس را توسط زبان Basic Visual ایجاد کرد و در زبان #C از آن ارثبری کرد. در ادامه، با مفهوم کد MSIL بیشتر آشنا خواهید شد. ترجمه برنامه و کد MSIL یک برنامه که به زبان #C نوشته شده است قبل از اجرا باید به کدی تبدیل شود که برای سیستم عامل قابل فهم باشد. به این کد، کد محلی )Code Native )میگویند. تبدیل یک کد از هر زبانی به کد محلی را کامپایل کردن میگویند و عملی است که توسط کامپایلر انجام میشود. در چارچوب داتنت عمل کامپایل از دو مرحله تشکیل شده است: 1 .تبدیل کد برنامه به کد MSIL :هنگامی که برنامهای را کامپایل میکنید، بالفاصله کد محلی تولید نمیشود. در عوض کد شما به زبانی به نام MSIL تبدیل میشود. این کد برای سیستم عامل خاصی نیست و همچنین منحصر به زبان #C نیز نیست. به عبارت دیگر، کد زبانهای دیگر چارچوب داتنت نیز هنگام کامپایل به MSIL تبدیل میشوند. MSIL یک زبان شئگرا با گرامری مشابه زبان Assembly است. 2 .تبدیل کد MSIL یک برنامه به کد محلی سیستم عامل: این مرحله، وظیفه کامپایلر Time In Just و یا به اختصار کامپایلر JIT است. این کامپایلر کد MSIL یک برنامه را دریافت کرده و آن را به کدی تبدیل میکند که به وسیله سیستم عامل قابل اجرا باشد. بعد از اینکه این تبدیل توسط کامپایلر JIT انجام شد، سیستم عامل میتواند برنامه را اجرا کند. همانطور که از نام این کامپایلر نیز مشخص است کدهای MSIL فقط هنگامی به زبان محلی قابل فهم برای سیستم عامل تبدیل میشوند که بخواهند اجرا شوند. در گذشته برای اجرای یک برنامه بر روی سیستم عاملهای مختلف نیاز بود که برای هر سیستم عامل، کد برنامه را یک مرتبه به صورت کامل کامپایل کنید. اما در چارچوب داتنت نیازی به این کار نیست. زیرا، برای هر نوع پردازنده و نیز هر نوع سیستم عامل یک نسخه از کامپایلر JIT وجود دارد. برنامه شما در هر سیستم عاملی که اجرا شود، کامپایلر JIT موجود در آن سیستم عامل کد MSIL برنامه شما را )که مستقل از سیستم عامل و نوع پردازنده است( دریافت کرده و کد محلی مناسبی تولید میکند تا برای سیستم عامل قابل فهم باشد. شکل 1-3 ،مراحل کامپایل یک برنامه نوشته شده با زبان #C را نشان میدهد. همانطور که در شکل 1-3 نشان داده شده است، کد برنامه شما هنگام کامپایل ابتدا به کد MSIL تبدیل میشود، سپس این کد قبل از اجرا توسط کامپایلر JIT به کد محلی تبدیل شده و کد محلی به وسیله CLR اجرا میشود )با فرض اینکه CLR که مهمترین بخش چارچوب دات ً نت است، قبال در آن کامپیوتر نصب شده باشد(. معرفی زبان #C شرکت سان مایکروسیستمز )Microsystems Sun )در سال 1999 طی قراردادی اجازه استفاده از زبان Java را 21 1 فصل C# نرمافزار معرفی C در اختیار شرکت مایکروسافت قرار داد تا در سیستم عامل خود از آن استفاده کند. همانطور که میدانید زبان Java در اصل به هیچ پلتفرم )Platform )یا سیستم عامل خاصی وابسته نبود ولی شرکت مایکروسافت برخی از مفاد قرارداد را زیر پا گذاشت و قابلیت مستقل از سیستم عامل بودن را از زبان Java حذف کرد. شرکت سان مایکروسیستمز نیز پروندهای علیه شرکت مایکروسافت تشکیل داد و در نهایت شرکت مایکروسافت مجبور شد تا زبان برنامهنویسی جدیدی ایجاد کند. در ابتدا نام این زبان، COOL( Language Oriented Object like C( بود، هر چند در جوالی سال ۲۰۰۰ ،زمانی که شرکت مایکروسافت این پروژه را عمومی کرد، نام آن را به #C تغییر داد. زبان #C به صورت اختصاصی برای کار با چارچوب داتنت طراحی شده است. آخرین نسخه این زبان، نسخه 2013 است که همزمان با چارچوب داتنت 1/5/4 در اکتبر سال ۲۰۱3 منتشر شد. آندرس هجلزبگرگ )Hejlsberg Anders )طراح زبان برنامهنویسی �Del phi ،سرپرستی تیم طراحان زبان #C را برعهده داشت. این زبان به شدت از زبانهای ++C ،Java و Delphi تاثیر پذیرفته است. طراحان زبان #C با الگوبرداری از مزایای زبانهای ++C و Java و نادیده گرفتن برخی از امکانات تاملبرانگیز و کم استفاده در هر یک از زبانهای فوق، یک زبان برنامهنویسی مدرن و شئگرا طراحی کردهاند. در مواردی حذف یا تغییر برخی از ویژگیهای کم استفاده و درست درک نشده در هر یک از زبانهای فوق، زمینهساز ایجاد یک زبان ایمن و آسان شده است. به عنوان مثال، زبان ++C میتواند م ً ستقیما با استفاده از اشارهگرها عملیات دلخواه خود را در حافظه انجام دهد، اما در صورتی که عملیاتی اینچنین به درستی کنترل و هدایت نگردند، خود میتواند باعث بروز مشکالت فراوانی شود. طراحان زبان #C ،با درک اهمیت این موضوع، این ویژگی شکل 1-3 مراحل کامپایل یک برنامه در چارچوب داتنت شکل 1-4 آندرس هجلزبرگ سرپرست تیم طراحان زبان #C 22 آموزش زبان برنامهنویسی #C را کماکان در آن قرار دادهاند ولی به منظور جلوگیری از استفاده نادرست و ایجاد اطمینانهای الزم، مسأله حفاظت را نیز در این زبان مورد توجه قرار دادهاند. جهت استفاده از ویژگی فوق، برنامهنویسان میبایست با صراحت و به روشنی درخواست خود را از طریق استفاده از واژههای کلیدی مربوطه اعالن کنند )فراخوانی یک توانایی و استفاده از آن(. یادگیری زبان #C برای افرادی که سابقه آشنایی با یکی از زبانهای برنامهنویسی ++C و یا Java را دارند کار مشکلی نخواهد بود. حتی افرادی که آشنایی اولیه با زبان اسکریپتی JavaScript و یا دیگر زبانهای برنامهنویسی نظیر Basic Visual را دارند، به راحتی میتوانند به زبان #C مسلط شوند. دالیل انتخاب زبان #C برای یادگیری زبان #C همزمان با طراحی چارچوب داتنت و با در نظر گرفتن مفاهیم و نیازهای جدید برنامهنویسی طراحی شده است و به همین جهت است که شرکت مایکروسافت زبان #C را مادر چارچوب داتنت معرفی کرده است. این مورد به تنهایی میتواند دلیل قانع کنندهای برای یادگیری این زبان باشد، اما دالیل متعدد دیگری نیز وجود دارد که در ادامه به برخی از آنها اشاره میشود: به عنوان یک زبان استاندارد برنامهنویسی توسط انجمن تولیدکنندگان کامپیوتر اروپا )ECMA )با شماره استاندارد 334-ECMA در سال 2001 ثبت شده است. به عنوان یک زبان استاندارد برنامهنویسی توسط سازمان بینالمللی استانداردها )ISO )با شماره استاندارد 23270 IEC/ISO در سال 2003 ثبت شده است. در حال استاندارد شدن توسط موسسه ANSI است. طبق فهرست منتشر شده در سایت معتبر تیوب )com.tiobe.www ،)زبان #C یکی از محبوبترین زبانهای برنامهنویسی است. این فهرست هر ماه یک بار بر مبنای کار مهندسان ماهر، دورههای آموزشی برگزار شده و فروش زبانها بروز میشود و حتی از موتورهای جستجو نظیر گوگل، یاهو و آمازون نیز برای محاسبه رتبهبندی استفاده میشود. زبان #C از زبانهای ++C و Java متولد شده است. بنابراین، برنامهنویسانی که ً قبال با این زبانها آشنایی داشتهاند به راحتی میتوانند به زبان #C مسلط شوند. آینده صنعت نرمافزار در دستان چارچوب داتنت است و چون زبان #C به عنوان مادر چارچوب داتنت شناخته میشود، از اهمیت بسزایی برخوردار است و از پشتیبانی شرکت مایکروسافت برخوردار خواهد بود. منابع مناسب )فارسی و زبان اصلی( برای یادگیری زبان #C فراوان است. کدها و مثالهای کاربردی برای زبان #C فراوان است. برای پیادهسازی یک قطعه کد در زبان #C به حجم کدنویسی کمتری نیاز است. به عنوان مثال، خیلی از جمالت در زبان ژاپنی ممکن است تنها به دو کلمه احتیاج داشته باشند در حالی که در برخی زبانها مثل زبان فارسی شاید نتوان اغلب این جمالت را با تنها دو کلمه بیان کرد. توسعه سریع نرمافزار )Development Application Rapid )در زبان #C امکانپذیر است. 23 1 فصل C# نرمافزار معرفی C خودآزمایی 1 .چند مورد از مزایا و معایب سبک برنامهنویسی ساختیافته را بیان کنید. 2 .چند مورد از تفاوتهای سبکهای برنامهنویسی ساختیافته و شئگرا را بیان کنید. 3 .سه اصل نهانسازی، وراثت و چندریختی را همراه با مثال شرح دهید. 4 .زبانهای برنامهنویسی به چند دسته تقسیم میشوند؟ 5 .چند مورد از ویژگیهای زبان برنامهنویسی #C را بیان کنید. 6 .اجزای اصلی چارچوب داتنت را نام برده و هرکدام را مختصراً شرح دهید. 7 .چهار زبان رسمی چارچوب داتنت را نام ببرید. 8 .مراحل کامپایل یک برنامه در چارچوب داتنت را شرح دهید.
ما در گروه خود انجام تمامی امور برنامه نویسی از جمله کار با c++ ، جاوا ، ruby ، html ،bash ، git ، svn ، و … انجام میدهیم آموزش کار با انواع کد
نویسی ها و آموزش راه های مختلف دور زدن قوانین برنامه نویسی ( به
++C (بخوانید سی پلاسپلاس) یک زبان
برنامهنویسی رایانهای همهمنظوره،همگردان، سطح میانی، شیءگرا و چندرگه
(که از برنامهنویسی رویهای، تجرید دادهها و برنامهنویسی شیءگرا پشتیبانی میکند)، عمومی و با
قابلیتهای سطح بالا و سطح پایین میباشد. این زبان دارای قابلیتهای انواع
داده ایستا، نوشتار آزاد، چندمدلی، معمولاً زبان ترجمه شده با پشتیبانی از
برنامهنویسی ساختیافته، برنامهنویسی شیءگرا، برنامهنویسی جنریک است.
از آنجا که در سی++ اشیاء را میتوان ابتدا به ساکن از کلاسهایی ایجاد کرد
که به هیچگونه سلسله مراتب ردهها و وراثت مقید نیستند، لذا سی++ از
برنامهسازی شیء بنیاد (object-based programming) نیز پشتیبانی میکند.
++C به همراه جد خود C از پرطرفدارترین زبانهای برنامهنویسی تجاری هستند. ++C یک زبان سطح میانی در نظر گرفته میشود؛ این زبان دارای قابلیت زبانهای سطح بالا و پایین بهصورت همزمان است. ++C توسط بییارنه استراستروپ ریاضیدان
دانمارکی در سال ۱۹۷۹ در آزمایشگاههای بل (Bell Labs)، برای بهبود زبان
سی و بر مبنای آن ساخته شد و آن را «C با کلاس» (C With Classes) نامگذاری
نمود. در سال ۱۹۸۳ به ++C تغییر نام داد. توسعه با اضافه نمودن کلاسها و
ویژگیهای دیگری مانند توابع مجازی، سربارگزاری عملگرها، وراثت چندگانه،
قالب توابع، و پردازش استثناء انجام شد. این زبان برنامهنویسی در سال ۱۹۹۸
تحت نام ISO/IEC ۱۴۸۸۲:۱۹۹۸ استاندارد شد. نسخهٔ فعلی استاندارد این زبان
ISO/IEC ۱۴۸۸۲:۲۰۱۴ است. تاریخچهٔ زبان استراستروپ کار بر روی زبان «C دارای کلاس»
را در سال ۱۹۷۹ آغاز کرد. ایدهٔ ساخت این زبان جدید در زمان کار بر روی تز
دکترای خود به ذهن استراستروپ خطور نمود. او متوجه شد که سیمولا دارای
ویژگیهایی مناسب برای ساخت برنامههای بسیار بزرگ است اما برای استفادهٔ
عملی بسیار کند است اما بیسیپیال با وجود سرعت بسیار زیاد برای ساخت
برنامههای بزرگ بسیار سطح پایین است. زمانی که استراستروپ کار خود را در
آزمایشگاههای بل (Bell Labs) آغاز نمود با مشکل تحلیل هسته یونیکس با توجه
به محاسبات توزیع شده روبرو شده بود. با یادآوری تجربیات خود در دوران
دکترا، او زبان C را با استفاده از ویژگیهای سیمولا گسترش داد. C به این
دلیل انتخاب شد که یک زبان عمومی، سریع، قابل حمل، و در سطح گستردهای در
حال استفاده بود. علاوه بر C و سیمولا زبانهای دیگری مانند ALGOL ۶۸، ADA,
CLU, ML نیز بر ساختار این زبان جدید اثر گذاشت. در ابتدا ویژگیهای کلاس،
کلاسهای مشتق شده، کنترل نوع قوی، توابع درونخطی و آرگومانهای پیشفرض
از طریق Cfront به C اضافه شد. اولین نسخهٔ تجاری در سال ۱۹۸۵ ارائه شد. در سال ۱۹۸۳ نام زبان از «C با کلاس» به
++C تغییر یافت. ویژگیهای دیگر شامل توابع مجازی، سربارگزاری عملگر و نام
تابع، ارجاعات، ثوابت، کنترل حافظه توسط کاربر بهصورت آزاد، کنترل نوع
بهتر، و توضیحات یکخطی به صورت BCPL با استفاده از «//» نیز به آن اضافه
شد. در سال ۱۹۸۵ اولین نسخه زبان برنامهنویسی ++C انتشار یافت و مرجع مهمی
برای این زبان فراهم شد در حالی که هیچ استاندارد رسمیای وجود نداشت. در
سال ۱۹۸۹ ویرایش ۲٫۰ از زبان ++C ارائه شد. ویژگیهای جدیدی مانند ارثبری
چندگانه، کلاسهای انتزاعی، اعضای ایستای توایع، اعضای ثابت تابع، و اعضای
حفاظت شده به آن اضافه شد. در سال ۱۹۹۰ «راهنمای مرجع ++C» منتشر شد. این
کار بنیان استانداردهای بعدی شد. آخرین ویژگیهای اضافه شده شامل موارد زیر
بودند: قالب توابع، استثناها، فضاهای نام، تبدیلات جدید، و یک نوع داده
منطقی. در حین تکامل ++C کتابخانهٔ استاندارد
نیز بهوجود آمد. اولین نسخهٔ کتاب استاندارد شامل کتابخانهٔ جریانات I/O
بود که جایگزین printf و scanf شد. در ادامه مهمترین ویژگی اضافه شده
Standard Template Library بودهاست. استاندارد زبان استاندارد سازی سی++ توسط یک گروه از
تشکیلات ISO انجام میشود.[۴] تاکنون ۶ نسخه از استاندارد این زبان منتشر
شدهاست؛ و استاندارد C++20 نیز برای انتشار در سال ۲۰۲۰ برنامهریزی
شدهاست. در سال ۱۹۹۸ برای اولین بار پس از سالها
کار کمیته مشترک ANSI–ISO این زبان تحت عنوان ISO/IEC 14882:1998 و نام
غیررسمی C++98 استاندارد سازی شد. بعدها در سال ۲۰۰۳ نسخه جدیدی از
استاندارد یعنی ISO/IEC 14882:2003 انتشار یافت و برخی از مشکلات و باگهای
C++98 در آن رفع شد. در سال ۲۰۰۵ یک گزارش فنی به اسم «گزارش
فنی کتابخانهٔ ۱» (که معمولاً بصورت اختصار TR۱ خوانده میشود) منتشر شد
که مواردی جدید را برای اضافه کردن به کتابخانه استاندارد دربرداشت با این
که این گزارش قسمتی از استاندارد نبود ولی بعدها در نسخه بعدی استاندارد
یعنی C++11 اضافه شد. نسخه بعدی با نام غیررسمی C++11 و
استاندارد ISO/IEC 14882:2011 در تاریخ ۱۲ اوت ۲۰۱۱ مورد تأیید سازمان
بینالمللی استانداردسازی قرار گرفت و جایگزین C++03 شد. در سال ۲۰۱۴ نسخه ای دیگر از این زبان
در تاریخ ۱۸ اوت ۲۰۱۴ با نام غیررسمی C++14 و استاندارد ISO/IEC 14882:2014
منتشر شد. هدف اصلی C++14 همانند C++03 رفع مشکلات و همچنین اضافه کردن
ویژگیها و بهبود جزیی C++11 بودهاست. انتشار نسخه بعدی استاندارد این زبان با
نام C++1z در سال ۲۰۱۷ بود که توسط کمیته ++ISO C در اواسط ماه جولای
تولید شد و در ماه دسامبر تأیید و منتشر شد. انتظار میرود نسخه آینده نیز در سال ۲۰۲۰ بهطور رسمی منتشر شود در حالی که ++C به هیچ مؤسسهای وابسته
نیست این مستندات بهصورت آزادانه در دسترس نیستند. گرچه نسخههای نهایی
نشده(draft) این اسناد در دسترس همگان قرار میگیرد. نام ++C این نام منسوب به ریک ماسکیتی (اواسط ۱۹۸۳)
است و برای اولین بار در دسامبر سال ۱۹۸۳ به کار برده شد. در طول مدت تحقیق
این زبان بنام «C جدید» و بعدها «C با کلاس» خوانده شد. در علوم کامپیوتر
هنوز هم ++C به عنوان ابرساختار C شناخته میشود. آخرین نام از عملگر ++ در
زبان C (که برای افزایش مقدار متغیر به اندازهٔ یک واحد بکار میرود) و یک
عرف معمول برای نشان دادن افزایش قابلیتها توسط + ناشی گشتهاست. با توجه
به نقل قولی از استراستروپ: «این نام ویژگیها تکاملی زبان در C را نشان
میدهد.» +C نام زبانی غیرمرتبط به این زبان است. استراستروپ مبدأ این نام را در فصل اول
کتاب خود «زبان برنامهنویسی ++C» اشاره مینماید که معنی دیگر ++C را
میتوان در ضمائم کتاب جرج ارول بنام ۱۹۸۴ یافت. در سه قسمت از زبان تخیلی
Newspeak «کلمات C» برای اشاره به لغات فنی و حرفهای بکار میرود. «دو
علامت +» برای ایجاد صفات عالی از صفات Newspeak به کار میرفت بنابراین
++C به معنای زبانی با بیشترین شباهت به C است. وقتی که به صورت خصوصی از ریک ماسکیتی
در مورد این اسم سؤال شد او در جواب گفت که این اسم بصورت خودمانی در بین
آنها به کار میرفتهاست و تصور نمیکردند که این نام بصورت نام رسمی این
زبان درآید. فلسفه در کتاب «طراحی و تکامل ++C» استراستروپ
قوانین مورد استفاده در طراحی ++C را بیان مینماید. دانستن این قوانین به
فهمیدن نحوه عملکرد ++C و چرایی آن کمک میکند. جزئیات بیشتر در کتاب قابل
دسترسی است: ++C طراحی شدهاست تا یک زبان عمومی با کنترل نوع ایستا و همانند C قابل حمل و پربازده باشد. ++C طراحی شدهاست تا مستقیماً و بصورت جامع
از چندین شیوه برنامهنویسی بتوان از آن استفاده کرد (برنامهنویسی
ساختیافته، برنامهنویسی شیگرا، انتزاع داده، و برنامهنویسی جنریک). ++C طراحی شدهاست تا به برنامهنویس امکان انتخاب دهد حتی اگر این انتخاب اشتباه باشد. ++C طراحی شدهاست تا حداکثر تطابق با C وجود داشته باشد و یک انتقال راحت از C را ممکن سازد. ++C از بکاربردن ویژگیهای خاص که مانع از عمومی شدن است خودداری مینماید. ++C از ویژگیهایی که بکار برده نمیشوند استفاده نمیکند. ++C طراحی شدهاست تا بدون یک محیط پیچیده عمل نماید. ویژگیهای معرفی شده در ++C در مقایسه با C زبان ++C ویژگیهای جدیدی را
معرفی نمودهاست مانند تعریف متغیر به عنوان عبارت، تغییر نوعهای همانند
تابع، نو/حذف، نوع داده bool، توابع درونخطی، آرگومان پیشفرض، گرانبارسازی
عملگر و تابع، فضای نام و عملگر تعیین حوزه ::، کلاسها (شامل تمام
ویژگیهای مربوط به کلاسها همانند وراثت، اعضای تابع، توابع مجازی،
کلاسهای انتزاعی، و سازندهها)، قالبها، پردازش استثناء، کنترل نوع زمان
اجرا، عملگرهای سربار شده ورودی (<<) و خروجی (>>). برخلاف باور عموم ++C نوع داده ثابت را
معرفی ننمودهاست. کلمه const کمی پیش از استفاده از این کلمه در ++C توسط
زبان C بصورت رسمی بکار گرفته شد. در بعضی حالات ++C تعداد کنترل نوع بیشتری
نسبت به زبان C انجام میدهد. (برای اطلاعات بیشتر بخش «ناهماهنگی با C» را
در پایین ببینید) توضیحات با استفاده از // قبل از زبان C در زبان BCPL معرفی شده بود که مجدداً در زبان ++C به کار گرفته شد. بعضی ویژگیهای ++C بعداً توسط C به کار
گرفته شد مانند نحوه تعریف for، توضیحات به شکل ++C (با استفاده از //)، و
کلمه inline با وجود اینکه تعریف این کلمه در C با تعریف آن در زبان ++C
هماهنگی ندارد. همچنین در C ویژگیهایی معرفی شدهاست که در ++C وجود
ندارند مانند ماکروهای قابل تغییر و استفاده بهتر از آرایهها به عنوان
آرگومان. بعضی کامپایلرها این ویژگیها را پیاده نمودهاند اما در بقیه این
ویژگیها موجب ناهماهنگی میگردد. پیش پردازنده ++C بطور عمومی در سه فاز ترجمه میگردد:
پیشپردازنده، ترجمه به کد object، پیوند (که دو مرحله آخر به عنوان عمل
کامپایل شناخته میشود) در اولین مرحله در پیشپردازنده، شبهدستورات
پیشپردازنده تغییرات لغوی بر روی کد منبع ایجاد مینمایند و آن را به
مراحل دیگر تحویل میدهند. شبه دستورات پیشپردازنده با استفاده از
کاراکتر # قبل از هر گونه فضای خالی آغاز گشته و رشتههایی را در کد منبع
با فایل یا رشتههای دیگر با توجه به قوانین تعریف گشته توسط برنامهنویس
جایگزین مینماید. این دستورات معمولاً اعمال زیر را انجام میدهند:
جایگزینی ماکروها، شمول فایلهای دیگر (برخلاف ویژگی سطح بالاتر مانند شمول
ماجولها/پکیجها/یونیتها/کامپوننتها)، کامپایل شرطی و/یا شمول شرطی. به
عنوان اشیاء سی++ چندین ویژگی شیگرا را زبان سی معرفی
نمود معرفی کلاس چهار ویژگی که در زبانهای شیگرا و بعضاً غیر شیگرا حضور
دارد یعنی انتزاع، بستهبندی، وراثت، و چندریختی را فراهم کرد. اشیاء
نمونههای ساخته شده از کلاس در زمان اجرا هستند. میتوان کلاس را نمونهای
از قالبها دانست که چندین مورد از آنها بوجود میآید. بستهبندی بستهبندی به معنای جمعآوری عملیات و داده
در یک محل میباشد. سی++ بستهبندی را با ایجاد امکان تعریف هر کلاس به
صورت public, private, protected پیادهسازی نمودهاست. اعضای private فقط
توسط اعضای کلاس یا کلاسها دقیقاً بیان شده (friend) قابل دسترسی هستند.
اعضای protected توسط کلاسهای ارث برده شده و اعضای کلاس و کلاسهای
friend قابل دسترسی هستند. در تعاریف شیگرا باید تنها توابعی
بستهبندی گردند که باید از نحوه پیادهسازی این نوع بخصوص اطلاع داشته
باشد. سی++ این ویژگی را با استفاده از توابع عضو و توابع دوست فراهم نموده
اما قطعی نکردهاست. در سی++ این امکان وجود دارد که تمام نوع را عمومی
تعریف نمایند اما در صورتی که نیاز باشد فقط بخشی از آن عمومی گردد در
نتیجه این زبان نه تنها شیگرا است بلکه از مدلهای ضعیفتر همانند
برنامهنویسی مدولار پشتیبانی مینماید. عموماً توصیه بر این است که تمام اعضا به
صورت خصوصی یا حفاظت شده تبدیل گردند و فقط توابعی که باید توسط دیگر
کلاسها به عنوان واسط استفاده شوند عمومی باقی بمانند. وراثت وراثت این امکان را ایجاد میکند که یک نوع
ویژگی دیگر انواع را داشته باشد. وراثت از یک کلاس پایه میتواند عمومی،
خصوصی یا حفاظت شده باشد. این تعیین سطح دسترسی مشخص میسازد آیا کلاسهای
نامربوط یا مشتق شده میتوانند به اعضای عمومی یا حفاظت شده کلاس پایه
دسترسی داشته باشند. تنها وراثت عمومی به معنای وراثت به کار رفته بصورت
عموم است. دو نوع دیگر وراثت به ندرت مورد استفاده قرار میگیرند. اگر
تعیینکننده سطح دسترسی حذف شود سطح دسترسی برای کلاس خصوصی و برای ساختمان
به صورت عمومی تعریف میگردد. کلاسهای پایه ممکن است بصورت مجازی تعریف
شوند که به آن وراثت مجازی گویند. وراثت مجازی تضمین میکند که فقط یک
نمونه از کلاس پایه وجود داشته باشد و مشکلاتی همانند مشکلات وراثت چندگانه
بوجود نیاید. وراثت چندگانه یکی از ویژگیهای مورد
بحث در سی++ است. وراثت چندگانه امکان اشتقاق از چند کلاس پایه را فراهم
مینماید که موجب بوجود آمدن گراف رابطه وراثت بسیار پیچیدهاست. به عنوان
مثال «گربه پرنده» میتواند از کلاس «گربه» و کلاس «پستانداران پرنده» ارث
برد. در زبانهای دیگر مانند سیشارپ و جاوا به صورت دیگری ویژگی مشابه را
پیادهسازی مینماید هر کلاس میتواند از چندین واسط اشتقاق یابد اما فقط
یک کلاس پایه برای اشتقاق وجود دارد (واسطها برخلاف کلاس پایه فقط تعریف
هستند و هیچگونه پیادهسازی را شامل نمیگردند). چندریختی امکان استفاده از یک واسط برای چندین پیادهسازی فراهم مینماید و اشیاء در شرایط مختلف رفتار مختلفی از خود نشان میدهند. سی++ دو نوع چندریختی در اختیار برنامهنویس
قرار میدهد: چندریختی زمان کامپایل و چندریختی زمان اجرا. چندریختی زمان
کامپایل امکان تصمیمگیریهای زمان اجرا را فراهم نمیسازد و چندریختی زمان
اجرا اغلب موجب پایین آمدن بازدهی میگردد. چندریختی ایستا چندریختی ایستا شامل گرانبارسازی تابع، گرانبارسازی عملگر، آرگومان پیشفرض، و قالب کلاسها و تابع است. چندریختی پویا چندریختی پویا شامل وراثت و توابع مجازی عضو است. گرانبارسازی تابع گرانبارسازی تابع امکان تعریف چندین تابع با
نام یکسان اما با تعداد آرگومانهای متفاوت را فراهم میسازد. این توابع
از طریق تعداد پارامترها یا نوع رسمی آنها شناسایی میگردند. در نتیجه یک
تابع ممکن است با توجه به موقعیت استفاده معنای مختلفی داشته باشد. نوع
داده برگشتی برای تشخیص توابع از یکدیگر مورد استفاده قرار نمیگیرد. گرانبارسازی عملگر بطور مشابه گرانبارسازی عملگر امکان استفاده
از یک عملگر مشخص میشود که عملکرد متفاوتی با توجه به عملوندهای خود
دارد. این عملگرهای گرانبار شده موجب فراخوانی تابع مشخصی متناسب با آن
موقعیت میگردند. گرانبارسازی عملگر ترتیب اجرا یا تعداد عملوندهای یک
عملگر را تغییر نمیدهد. عملگرهای . :: .* ? نمیتوانند گرانبار شوند. ساختار برنامهها ساختار برنامهها در این زبان بدین صورت است
که همانند زبان سی، هر برنامه بایستی یک تابع اصلی (main) به عنوان بدنه
برنامه داشته باشد. هر برنامه معمولاً از تعداد زیادی فایل تشکیل میشود که
به هم الحاق میگردند (با دستور include) و به این فایلهای الحاقی،
سرآیند (Header) گفته میشود. فایلهای الحاقی حاوی کدها یا نسخههای
اجرایی کلاسها (مجموعه متغیرها و توابع) میباشند که در بدنه اصلی برنامه
از آنها استفاده میشود. معمولاً هر کلاس (که تعریف یک نوع دادهای با
متدهای مربوط به آن است) را در یک سرآیند مینویسند. هر سرآیند که معمولاً
تنها تعاریف (معرفی) کلاس را در خود دارد به همراه فایلهای پیادهسازی به
زبان ++C یا پیادهسازیهای کامپایل شده (به صورت فایل اشیاء مانند dll یا
so یا …) میتواند به کار برده شود. به مجموعههای یکپارچهای از کلاسهای
پیادهسازی شده (به صورت فایلهای سرآیند با پیادهسازیهای کد یا اشیای
زبان ماشین) که برای برنامهنویسی به کار میروند، یک کتابخانه ++C گفته
میشود و قدرت اصلی این زبان در امکان بهکارگیری کتابخانههای آماده
میباشد. کتابخانههای بزرگ ++C مانند STL, MFC, QT و … مجموعه قدرتمندی
برای تولید برنامه در این زبان ایجاد کردهاند. تست کد ++C برای تست برنامههای نوشته شده با زبان ++C
روشهای مختلفی وجود دارد، برخی از ویرایشگرهای مانند visual studio ابزاری
برای این منظور دارند ولی برای تست دقیق تر بهتر است از ابزارهای با دقت
بالا استفاده کرد، بهینهسازی کد و بالا بردن کارایی از مزیتهای تست کد
است. C/C++Test راهکاری یکپارچه برای خودکارسازی محدوده وسیعی از شیوههای
تضمین کیفیت برنامههای تولید شده با زبانهای C و ++C میباشد. C/C++Test
قابلیت تولید تست واحد (unit test) و تحلیل سورس-کد (static analysis) تحت
زبان ++C را داراست. این ابزار امکان خودکارسازی تستهای برنامهنویسی را
همراه با اندازهگیری میزان پوشش کد (code coverage) فراهم میسازد. همچنین
کیفیت سورس-کد را از ابعاد مختلف کارکردی، کارایی، امنیت و نگهداشت تحلیل
میکند. امکان یکپارچه سازی با ابزار SAOTest جهت انجام تست کارکردی و
ابزار LoadTest جهت انجام تست کارایی در سطح ماجولهای برنامهنویسی را نیز
داراست. http://matingeernig.ir