یکی از نویسندهگان این کتاب، پورفسور H.M.Deitel شاهد یک فروپاشی در اواخر دهه ۱۹۶۰ توسط سازمانهای توسعه نرمافزار، بویژه در شرکتهای بود که پروژههائی در سطح کلان انجام میدادند. زمانیکه Deitel دانشجو بود، فرصت کار کردن در یک گروه توسعه دهنده در بخش اشتراک زمانی و حافظه مجازی سیستمهای عامل را بدست آورد، که در نوع خود یک تجربه با ارزش محسوب میشد. اما در تابستان ۱۹۶۷، شرکت تصمیم به متوقف کردن پروژه بدلایل اقتصادی کرد، پروژهای که صدها نفر بمدت چندین سال بر روی آن کار کرده بودند. این موضوع نشان داد که نرمافزار محصول پیچیدهای است.
بهبود وضعیت نرمافزار از زمانی آغاز شد که مزایای برنامهنویسی ساختیافته بر همگان هویدا گردید (از دهه ۹۷۰ ). اما تا دهه ۱۹۹۰ تکنولوژی برنامهنویسی شیگرا بطرز گستردهای بکار گرفته نشد، تا اینکه برنامهنویسان به وجود ابزاری برای بهبود فرآیند توسعه نرمافزار، احساس نیاز کردند.
در واقع، پیدایش تکنولوژی شی به میانه دهه ۱۹۶۰ باز میگردد. زبان برنامهنویسی C++ در AT&T و توسط Bjarne Stroustrup در اوایل دهه ۱۹۸۰ توسعه یافته که خود مبتنی بر دو زبان C و Simula 67 است. زبان C در بدو کار در AT&T و برای پیاده سازی سیستم عامل یونیکس در اوایل دهه ۱۹۷۰ ایجاد شد. زبان Simula 67، زبان برنامهنویسی شبیه سازی است که در سال ۱۹۶۷ و در اروپا توسعه یافته است. زبان C++ در برگیرنده قابلیتها و توانائی زبانهای C و Simula در ایجاد و دستکاری شیها است.
شیها چیستند و چرا خاص میباشند؟ در واقع، تکنولوژی شی، یک الگوی بسته (package) است که به ما در ایجاد واحدهای نرمافزاری با معنی کمک میکند. شیها تمرکز زیادی بر نواحی خاص برنامهها دارند. شیها میتوانند از جمله شیهای تاریخ، زمان، پرداخت، فاکتور، صدا، ویدئو، فایل، رکورد و بسیاری از موارد دیگر باشد. در حقیقت، میتوان هر چیزی را بفرم یک شی عرضه کرد.
ما در دنیای از شیها زندگی میکنیم. کافیست نگاهی به اطراف خود بیاندازیم. اطراف ما پر است از اتومبیلها، هواپیما، انسانها، حیوانات، ساختمانها، چراغهای ترافیگ، بالابرها، و بسیاری از چیزهای دیگر. قبل از اینکه زبانهای برنامهنویسی شیگرا ابداع شوند، زبانهای برنامهنویسی ( همانند FORTRAN، Pascal ، C و Basic ) بر روی اعمال یا actions بجای چیزها یا شیها (نام) تمرکز داشتند. با اینکه برنامهنویسان در دنیائی از شیها زندگی میکردند اما با فعلها سرگرم بودند. خود همین تناقض باعث شد تا برنامههای نوشته شده از قدرت کافی برخوردار نباشند. هم اکنون که زبانهای برنامهنویسی شیگرا همانند C و جاوا در دسترس هستند، برنامهنویسان به زندگی خود در یک دنیای شیگرا ادامه میدهند و میتوانند برنامههای خود را با اسلوب شیگرا بنویسند. فرآیند برنامهنویسی شیگرا در مقایسه با برنامهنویسی روالی (procedural) ماهیت بسیار طبیعیتری دارد و نتیجه آن هم رضایت بخشتر است.
اصلیترین مشکل برنامهنویسی روالی این است که واحدهای تشکیل دهنده برنامه نمیتوانند به آسانی نشاندهنده موجودیتهای دنیای واقعی باشند. از اینرو، این واحدها نمیتوانند بطرز شایستهای از قابلیت استفاده مجدد برخوردار باشند. برای برنامه نویسان روالی، نوشتن دوباره و مجدد کدها در هر پروژه جدید و با وجود مشابه بودن این کدها با نرمافزار پروژههای قبلی، چندان غیر عادی نمیباشد. نتیجه اینکار تلف شدن زمان و هزینهها است. با تکنولوژی شی، موجودیتهای نرمافزاری (کلاس) ایجاد میشوند و در صورتیکه بدرستی طراحی شده باشند، میتوان در آینده از آنها در پروژههای دیگر استفاده کرد.
استفاده از کتابخانه کامپونتها با قابلیت بکارگیری مجدد همانند MFC(Microsoft Foundation Classes) و کامپونتهای تولید شده توسط Rogue Wave و سایر شرکتهای نرمافزاری، میتواند در کاهش هزینهها و نیازهای پیادهسازی سیستمهای خاص بسیار موثر باشد.
با بکارگیری برنامهنویسی شیگرا، نرمافزار تولید شده بسیار قابل فهمتر شده، نگهداری و سازماندهی آن اصولیتر و اصلاح و خطایابی آن سادهتر میشود. این موارد از اهمیت خاصی برخوردار هستند چراکه تخمین زده میشود که هشتاد در صد هزینه یک نرمافزار مربوط به دوره نگهداری و ارتقاء آن در چرخه طول عمرش است و ارتباطی با نوشتن و توسعه اولیه نرمافزار ندارد. با تمام این اوصاف، مشخص است که برنامهنویسی شیگرا تبدیل به یکی از کلیدیترین مفاهیم برنامهنویسی در چند دهه آینده خواهد شد.
یکی از دلایل نوشتن کدهای متعلق بخود این است که دقیقا میدانید که کد نوشته شده چگونه کار میکند، و میتوانید به بررسی آن بپردازید. عیب اینکار هم در صرف زمان و پیچیدگی طراحی و پیادهسازی کد جدید است.
۱۴-۱ محیط توسعه C++
اجازه دهید تا به بررسی مراحل ایجاد و اجرای یک برنامه کاربردی C++ با استفاده از محیط توسعه C++ بپردازیم (شکل ۱-۱). اصولاً سیستم C++ متشکل از سه بخش است: محیط توسعه برنامه, زبان و کتابخانه استاندارد C++. عموماً برنامههای C++ از شش فاز یا مرحله عبور میکنند: ویرایش, پیش پردازش، کامپایل, لینک, بار شدن و اجرا. در ادامه به توضیح هر فاز میپردازیم.
فاز ۱: ایجاد برنامه
فاز ۱ مرکب از ویرایش یک فایل با استفاده از یک برنامه ویرایشگر است. با استفاده از یک ویرایشگر مبادرت به تایپ برنامه C++ کرده و هرگونه اصلاحات مورد نیاز را در آن اعمال و بر روی یک دستگاه ذخیرهسازی ثانویه, همانند دیسک سخت ذخیره میکنیم. فایلهای برنامه C++ دارای پسوندهای .cpp , .cxx , .cc یا .C میباشند (دقت کنید که C با حرف بزرگ است), که نشان میدهند, که فایل حاوی کد منبع C++ است. برای مشاهده پسوند فایل در محیط توسعه C++ به مستندات محیط توسعه C++ بکار رفته بر روی سیستم خود مراجعه کنید.
شکل ۱-۱ | .
دو ویرایشگر که در سیستم UNIX کاربرد بیشتری دارند عبارتند از vi و emacs. بستههای نرمافزاری C++ برای ویندوز میکروسافت همانند
Metroworks CodeWarrior (www.metrowerks. com), Borland C++ (www.borland. com)
و Microsoft Visual C++ (www.msdn.microsoft.com/visualc/) دارای ویرایشگر مجتمع در محیط برنامهنویسی خود هستند. البته میتوانید از یک ویرایشگر متنی ساده همانند Notepad در ویندوز, برای نوشتن کد C++ استفاده کنید. فرض ما بر این است که شما حداقل با نحوه ویرایش یک برنامه آشنا هستید.
فاز ۲ و ۳: پیش پردازنده و کامپایل یک برنامه C++
در فاز ۲, برنامهنویس, دستوری برای کامپایل برنامه صادر میکند. در یک سیستم C++, برنامه پیشپردازنده, قبل از اینکه فاز ترجمه کامپایلر شروع بکار کند, آغاز یا اجرا میشود (از اینرو به پیشپردازنده فاز ۲ و به کامپایل فاز ۳ نام گذاشتهایم). پیشپردازنده فرمانبر دستوراتی بنام رهنمود پیشپردازنده است که عملیات مشخص بر روی برنامه قبل از کامپایل آن انجام میدهند. معمولاً این عملیات شامل کامپایل سایر فایلهای متنی و انجام انواع جایگزینیها است. در فصلهای آتی با تعدادی از رهنمودهای پیشپردازنده آشنا خواهید شد. در فاز ۳, کامپایلر شروع به ترجمه برنامه C++ به کد زبان ماشین میکند که گاهاً بعنوان کد شی (object code) شناخته میشود.
فاز ۴: لینک
فاز ۴ معروف به فاز لینک است. معمولاً برنامههای C++ حاوی مراجعههایی به توابع و دادههای تعریف شده در بخشهای گوناگون هستند, همانند کتابخانههای استاندارد یا کتابخانههای خصوصی گروهی از برنامهنویسان که بر روی یک پروژه کار میکنند. کد شی تولید شده توسط کامپایلر C++ حاوی شکافهایی است که از فقدان این بخشها بوجود میآیند. برنامه لینکر مبادرت به لینک کد شی با کد توابع مفقوده میکند تا یک تصویر کامل و بدون شکاف بوجود آید. اگر برنامه بدرستی کامپایل و لینک گردد, یک نماد اجرایی تولید خواهد شد.
فاز ۵: بار شدن
فاز ۵, فاز بار شدن نام دارد. قبل از اینکه برنامه بتواند اجرا شود, ابتدا بایستی در حافظه جای گیرد. این کار توسط بارکننده (loader) صورت میگیرد که نماد اجرایی را از دیسک دریافت و به حافظه منتقل میکند. همچنین برخی از کامپونتها که از برنامه پشتیبانی میکنند, به حافظه بار میشوند.
فاز ۶: اجرا
سرانجام, کامپیوتر, تحت کنترل CPU خود, مبادرت به اجرای یک به یک دستورالعملهای برنامه میکند.
مسائلی که ممکن است در زمان اجرا رخ دهند
همیشه برنامهها در همان بار اول اجرا نمیشوند. در هر کدامیک از فازهای فوق امکان شکست وجود دارد، چرا که ممکن است انواع مختلفی از خطاها که در مورد آنها صحبت خواهیم کرد, در این بین رخ دهند. برای مثال, امکان دارد برنامه اقدام به انجام عملیات تقسیم بر صفر نماید (یک عملیات غیرمعتبر). در چنین حالتی برنامه C++ یک پیغام خطا بنمایش در خواهد آورد. اگر چنین شود, مجبور هستید تا به فاز ویرایش بازگردید و اصلاحات لازم را انجام داده و مجدداً مابقی فازها را برای تعیین اینکه آیا اصلاحات صورت گرفته قادر به رفع مشکل بودهاند یا خیر, طی کنید.
بیشتر برنامههای نوشته شده در C++ عملیات ورود و یا خروج داده انجام میدهند. توابع مشخصی از C++, از طریق cin (استریم ورودی استاندارد, با تلفظ “see-in”) که معمولاً از طریق صفحهکلید است, اقدام به دریافت ورودی میکنند, اما تابع cin میتواند به دستگاه دیگری هدایت شود. غالباً دادهها از طریق دستور cout (استریم استاندارد خروجی, با تلفظ “see-out”) خارج میگردند که معمولاً صفحهنمایش کامپیوتر است, اما میتوان cout را به دستگاه دیگری هدایت کرد. زمانیکه میگوییم برنامه نتیجهای را چاپ میکند, معمولاً منظورمان نمایش نتیجه بر روی صفحه نمایش (مانیتور) است. میتوان دادهها را به دستگاههای دیگری همانند دیسکها ارسال کرد و توسط چاپگر از آنها چاپ گرفت. همچنین دستوری بنام cerr (استریم استاندارد خطا) وجود دارد, که از آن برای نمایش پیغامهای خطا استفاده میشود, این دستور اکثراً برای نمایش پیغام در صفحه نمایش بکار گرفته میشود.
۱۵-۱ نکاتی در مورد C++ و این کتاب
گاهی اوقات برنامهنویسان با تجربه C++ بدون رعایت هیچگونه ساختار و روش مشخص شروع به برنامهنویسی میکنند, که چنین کاری در برنامهنویسی روش ضعیفی است. خواندن, نگهداری, تست و خطایابی چنین برنامههایی بسیار مشکل بوده و گاهاً رفتار عجیبی از خود بروز میدهند. این کتاب با در نظر گرفتن برنامهنویسان مبتدی سعی در نوشتن واضح برنامهها دارد.
هیچ دیدگاهی نوشته نشده است.