1 .
3 .
5 پاسکال : در این بخش یک ارزیابی از ویژگیهای پاسکال برای برنامه نویسی بزرگ ارائه می کنیم .
به همین دلیل نسخه اصلی زبان را دراینجا در نظر می گیریم .
اکثر بی مناسبتی های بحث شده در اینجا توسط تأکیدات انجام شده توسط اجراهای مدرن تصحیح شده اند .
روالها و توابع برای تجزیه یک برنامه به مدول ها می باشد که می توانند برای اجرای آبسترهای روالی استفاده گردند بنابراین زبان صرفاً برنامه نویسی روالی را پشتیبانی می کند .
بعضی نسخه های بعدی زبان باعث اصلاح نسخه اصلی پاسکال با افزودن ویژگی های برنامه نویسی شئ گرا و مدول گرا شده اند.
یک برنامه پاسکال دارای ساختار شکل S.6 است .
یک برنامه شامل عملیات و عبارت ها می باشد .
عملیات توسط زبان فراهم می شوند یا بصورت تابع و روال مطرح می گردند .
یک روال یا تابع حاوی بیان ثوابت ، انواع ، متغیرها و سایر روال ها وتوابع است سازمان یک برنامه پاسکال یک ساختار درختی از مدول ها است .
ساختار درختی لانه ای کردن مدول هایی سطح پایین تر را نشان می دهد .
لانه ای کردن برای کنترل دورنمایی اسامی بیان شده در داخل مدول ها مطابق با قانون اتصال استاتیک مطرح شده در بخش 4 .
7 .
2 ، استفاده می شود .
شکل ص 17
برای دسترسی به ساختار برنامه های پاسکال ، مثال زیر را در نظر بگیرید .
فرض کنید که طرح مدولار از بالا به پایین یک مدول A دو مدول را تعریف کند ، C , B .
و آبستره های روالی کمکی را فراهم نماید .
مدول B دو آبستر کش روالی خصوص را فرا می خواند که توسط مدول E , D فراهم می شوند .
مدول C یک آبستراکشن روالی خصوص را فرا می خواند که توسط مدول F فراهم می شود .
شکل S.7 یک ساختار لانه بندی را برای یک برنامه ای نشان می دهد که شرایط های طرح را ارضاء می نماید .
شکل ص 18
یک مسئله اساسی با جواب شکل 7.
5 آن است که ساختار محدودیت ها را بر موارد یافت شده در طراحی تحمیل نمی کند .
در واقع ،ساختار امکان فراخوانی های متعدد دیگر را فراهم می سازد .
مثلاً می تواند A,B,C را فرابخواند .
C میتواند A,B را فرابخواند و غیره از طرف دیگر ، ساختار 7 .5 بعضی شرائط را تحمیل می کند که ممکن است نامطلوب باشند .
بعنوان مثال ، اگر ما کشف کنیم که مدول F به آبستراکشن روالی فراهم شده توسط مدول E احتیاج دارد ، ساختار فعلی دیگر کافی نمی باشد .
شکل 8 .
5 یک آرایش مجدد ساختار برنامه را نشان می دهد که با این نیاز جدید سازگار است .
مسئله با این سازمان جدید آن است که ساختار دیگر تفکیک سلسله مرتبه ای آبستراکشنی را نمایش نمی دهد .
مدول E یک آبستراکشن کمکی است که توسط A بکار می رود ، اگر چه تنها دلیل برای تعویض آن در آن سطح در درخت آن است که هر دو مدول B, F لازم است به آن مراجعه کنند .
مسائل مشابهی برای متغیر ها ، ثابت ها ،و انواع رخ می دهند .
ساختار درخت دسترسی به متغیر های بیان شده را در محول های محصور کننده فراهم می کند .
بعلاوه ، اگر هر مدول N,M لازم باشد که یک متغیر را به اشتراک بگذارد ، این متغیر ممکن است در مدولی بیان شود که از لحاظ استاتیکی N,M را هر دو محصور می نماید لذا متغیر برای هر مدول محصور شده دیگر توسط این مدول قابل دسترسی می شود .
مسائل بعدی توسط طرح یک برنامه متنی از پاسکال ایجاد می شوند .
کل برنامه یک متن یکنواخت واحد می باشد .
اگر برنامه بزرگ باشد ، مرزهای مدول فوراً دیده نمی شوند ، حتی اگر برنامه نویسی از قرار دادهای دقیق برای تعیین هویت استفاده نماید .
یک تسرروال می تواند قبل از بدنه آن دیده شود ، (بدلیل مداخله نمودن بیان های روال داخلی) ، در نتیجه ، برنامه ها به سختی خوانده شده یا اصلاح می گردند .
مسائل مربوط به پاسکال که دراین فصل بحث می شوند از ساختار بلوک ناشی می گردند و بنابراین برای سایر زبان های شبیه به ALGOL صدق می نمایند .
ساختار بلوک برای برنامه نویسی کوچک کافی می باشد زیرا بطور طبیعی پشتیبانی را انجام می دهد ولی برای ساختار بندی برنامه های بزرگ باارزش نمی باشد .
ساختار برنامه حاصل ازلانه بندی ممکن است با ساختار یافت شده در طی طراحی مداخله نماید .
این امر می تواند به نوشتن ، خواندن و اصلاح برنامه ها لطمه بزند .
پرسش مهم دیگر در ارتباط با پاسکال اولیه ، که تعریف زبان رسمی را فراهم می کند این موضوع را اصلاً اشاره نمی نماید .
مثلاً ، گزارش اولیه پرسش های زیر را باقی می گذارد .
به چه موجودیت های برنامه ای می تواند یک صدور واحد تألیف مجزا باشد ؟
چگونه یک رابط واحد معین می شود ؟
چه مقدار از کنترل نوع در مورد رابط های واحد انجام می شود ؟
اجراهای متفاوت راه حل های متفاوت را برای این نکات پذیرفته اند .
در نتیجه برنامه های پاسکال توسعه یافته بر روی سکوهای متفاوت ممکن است ناسازگار باشد .
مثلاً ، بعضی اجراها به روال های سطح خارجی وتوابع سطح خارجی اجازه می دهند که بطور مستقل کامپایل شوند .
واحدهای کامپایل شده بطور مستقل از طریق یک ارتباط دهنده استاندارد جمع آوری و سر هم می شوند که اتصالات بین موجودیت های وارد شده توسط هر مدول و موجودیت های صادر شده بر طرف می کند .
هیچ کنترل درون مدولی انجام نمی شوند تا تایید کنند آیا یک احضار برای یک روال خارجی با بیان روال مربوطه سازگار است یا خیر .
خطاهای از این نوع ممکن است دست نیافته باقی بماند سایر اجراهای پاسکال امکانات کامپایل کردن مجزای سالم تری را براساس نماد گذاری یک مدول فراهم می کنند که یک سری از ثوابت ، روال ها و انواع را احاطه می نماید .
2 .
5 C ـ زبان C تعاریف تابع را بصورت واحدهایی برای تفکیک یک برنامه به دو آبستراکشن روال فراهم می کند .
توابع ممکن است بعداً از طریق توابع لانه بندی شده محلی تفکیک نشوند بعلاوه ، C متکی بر یک حداقل ویژگی های زبان و تعدادی از قرار دادها برای پشتیبانی برنامه نویسی بزرگ می باشد .
این قرار دادها توسط برنامه نویسهای C بخوبی شناسایی می شوند و حتی در ابزارهایی منعکس می گردند که برای پشتیبانی زبان توسعه یافته اند .
در واقع ، بخش عمده برنامه نویسی در پشتیبانی بزرگ توسط فرمان های دخول فایل پیش پردازنده C فراهم می شود .
2.
3.
5 ـ احاطه کردن ـ واحد احاطه کردن در C یک فایل است .
نوعاً ، موجودیت های بیان شده در سر یک فایل برای توابع درآن فایل قابل رویت هستند و همچنین برای توابع در سایر فایل ها فاهم می باشند اگر آن توابع آنها را بیان کنند .
عبارت extern int max بیان می کند که متغیر max بکار رفته در اینجا تعریف می شود و محل ذخیره برای آن درجای دیگر آن تابع معلوم می باشند .
متغیرهای بیان شده در خارج از توابع فرض می شوند که برا سایر واحدها موجود می باشند اگر آنها را با استفاده از معین کننده extern بیان نمایند .
اما یک واحد ممکن است تصمیم بگیرد که چنین متغیرهایی را از سایر واحدها با بیان کردن استاتیک آنها ، پنهان نماید .
5 ـ رابط و اجرا : واحد C از مدولاریته فیزیکی یک فایل است .
هیچ پشتیبانی زبانی برای جدا سازی یک رابط مدول از اجرای آن وجود ندارد .
در عوض ، طبق قرار داد ، یک مدول منطقی در C توسط دو مدول فیزیکی (فایل ها) اجرا می شود ، که مکن است آن را رابط مدول و اجرای آن بنامیم .
رابط ، موسوم به یک header یا یک فایل include ، تمام علائم صادر شده توسط مدول را بیان می کند و بنابراین برای مشتریان مدول فراهم می باشد .
فایل header حاوی اطلاعات ضروری برای ارضاء سیستم نمونه است هنگامی که مدول های مشتری کامپایل می شوند .
فایل اجرایی مدول حاوی خش خصوصی از مدول است و سرویس های صادر شده را اجرا می کند .
یک مدولی مشتری که نیاز دارد که از عملکرد مدول دیگر استفاده کند فایل header از مدول فراهم کننده را در بردارد و به فایل اجرا وصل می شود .
یک فایل header ممکن است ثوابت را بیان کند یا تعاریف نوع ، متغیرها و توابع را ذکر نماید (معرفی نماید) فقط علامت تابع یعنی prototype فراخوانده شده در C توسط اعلام داده می شود .
یعنی تعریف تابع در فایل اجرا ظاهر گردد .
هر نوع اسامی تعریف شده در سطح خارجی یک فایل یعنی نه در داخل توابع ـ در سراسر آن فایل معلوم هستند و ممکن است در خارج از آن فایل معلوم باشند .
فایل های Header لحاظ شده توسط یک مدول ، کامپایلر را قادر می سازد تا مدول را جدا از سایر فایل های اجرا ، کامپایل نماید .
مدول شئ ، مقصد تولید شده توسط کامپایلر شامل مراجع تجزیه نشده برای آن متغیر ها وتوابع توسعه یافته از طریق فایل های header می باشد .
اتصال دهنده چندین مدول کامپایل شده مجزا را به صورت یک مدول قابل اجرا ترکیب می کند و مرجع های داخل مدول را در فرآیند ، تجزیه می نماید .
فایل header معمولاً با یک زائده h ، نام گذاری می شود و فایل اجرا با یک زائده C نامیده می شود .
این قرار دادها برفقدان پشتیبانی آشکار برای سازمان دهی برنامه غلبه کرده اند .
شکل 9 .
5 فایل های header و اجرا را رای یک مدول نشان می دهد که یک ساختار اطلاعات پشته را نشان می دهد .
همانطور که ملاحظه می شود ، در داخل فایل زبان هیچ امکانات محصور سازی را فراهم نمی نماید .
مثلاً برنامه اصلی در شکل 9 .5 دارای دسترسی کامل به ساختار درونی پشته های 51 و 52 است .
در واقع ، این خاصیت توسط برنامه اصلی برای مقدار دهی اولیه پشته های 51 و 52 توسط قرار دادن اشاره گرهای پشته آنها برابر با 5 استفاده می شود .
راه هایی برای اجرای این برنامه برای کاهش این تداخل بین مشتری و سرویس دهنده وجود دارند ، اما تمام آنها بستگی به دقت برنامه نویس دارد .
هیچ کنترلی بر آنچه که صادر می شود وجود ندارد : طبق پیش فرض ، تمام موجودیت های در یک فایل صادر می شوند .
فایل ها ممکن است بطور مجزا کامپایل شوند و مراجع درون فایل در زمان اتصال بدون هیچ نوع کنترلی تجزیه شوند .
یک فایل ممکن است کامپایل شود مادامی که همه فایل های header که او در بر می گیرد موجود باشند .
5 سازمان دهی برنامه ـ ساختار عمومی یک برنامه C در شکل 10 .
5 دیده می شود تمام فایل ها دارای ساختار مشابه هستند غیر از اینکه فقط یکی از فایل ها باید حاوی یک تابع به نام name باشد که برای آغاز اجرای برنامه استفاده می شود .
بدلیل اینکه توابع مجاز نمی باشند که در C لانه بندی شوند ، مسائل لانه بندی پاسکال رخ نمیدهند .
شکل صفحه 22 هیچ امکانات صادرات و واردات آشکاری وجود ندارد .
دو وسیله برای کنترل کردن دورنمایی اسامی در فایل ها وجود دارد .
static,extern : تمام توابع تعریف شده در یک فایل برای صدور توسط پیش فرض موجود هستند .
متغیر ها ممکن است توسط تعریف کردن آشکار آنها وارد شوند ( با استفاده از extern ) برای جلوگیری از وارد شدن یک موجودیت و محدود کردن دورنمایی موجودیت یک مدول ممکن است چنین موجودیت ای را ( تابع یا متغیر)static تعریف کند .
دو خط زیر متغیر صحیح maximum-length را وارد می کند و متغیر صحیحlocal-size را از مدول های دیگر پنهان می نماید .
exten int maximum-length static int local –size علامت static برروی نمادهای صادر شده در زمان ارتباط تأثیر می گذارد .
یک مدول کامپایل شده اسامی روال های ( غیر استاتیک ) و متغیر ها را به صورت نمادهای تعریف شده برای ارتباط دهنده ، صادر می کند .
یک مدول کامپایل شده دارای مراجع تجزیه نشده برای هر نماد تخصیص یافته بصورت extern درمدول می باشد .
ارتباط دهنده تلاش می نماید تا جنین مراجع تجزیه نشده ای را با نمادهای تعریف شده توسط سایر مدول ها منطبق نماید .
3 5 ـC++ براساس C است و اعتماد C بر قراردادها را به اشتراک می گذارد .
همچنین از یک فایل به صورت واحد مدولاریته فیزیکی استفاده می کند .C++ مانند C توابع را به صورت یک ساختار تجزیه برای اجرای