کنترل نوع - ghobaei.ir

Report
‫طراحی و پیاده سازی زبان های‬
‫برنامه نویسی‬
‫مصطفی قبائی آرانی‬
‫‪Home‬‬
‫‪Page:www.ghobaee.ir‬‬
‫‪E-mail:[email protected]
‫فهرست مطالب‬
‫فصل اول‪ :‬اصول طراحی زبان ها‬
‫فصل دوم‪ :‬اثرات معماری ماشین بر زبان ها‬
‫فصل سوم‪ :‬اصول ترجمه زبان‬
‫فصل چهارم‪ :‬مدل سازی خواص زبان ها‬
‫فصل پنجم‪ :‬انواع داده اولیه‬
‫فصل ششم‪ :‬انواع داده ساختاریافته‬
‫فصل هفتم‪ :‬وراثت‬
‫فصل هشتم‪ :‬کنترل ترتیب اجرا‬
‫‪2‬‬
‫فصل نهم‪ :‬کنترل ترتیب زیربرنامه ها‬
‫طراحی و پیاده سازی زبان ها‬
‫فصل اول‪:‬‬
‫اصول طراحی زبان ها‬
‫فهرست مطالب فصل اول‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫دالیل(فواید) مطالعه انواع زبان های برنامه نویس ی‬
‫تاریخچه (نسل های) مختلف زبان برنامه نویس ی‬
‫طبقه بندی زبان ها از نظر کاربرد‬
‫اثر محیط برطراحی وپیاده سازی زبان برنامه نویس ی‬
‫ویژگی های یک زبان برنامه نویس ی خوب‬
‫مدل های محاسباتی زبان های برنامه نویس ی‬
‫استاندارد سازی زبان های برنامه نویس ی‬
‫طراحی و پیاده سازی زبان ها‬
‫دالیل(فواید) مطالعه زبان های برنامه نویس ی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫افزایش توانایی های خود در نوشتن الگوریتم های کارا‬
‫استفاده بهینه از زبان های برنامه نویس ی موجود‬
‫آشنایی با اصطالحات مفید ساختارهای برنامه‬
‫نویس ی(افزایش دامنه لغات برنامه نویس ی)‬
‫انتخاب بهترین زبان برنامه نویس ی‬
‫یادگیری یک زبان جدید آسانتر می شود‬
‫طراحی یک زبان جدید آسانتر می شود‬
‫طراحی و پیاده سازی زبان ها‬
‫نسل های زبان برنامه نویس ی‬
‫‪ ‬نسل اول( ‪:(Machine Language‬‬
‫در این نسل‪ ،‬برنامه به صورت صفر و یک (زبان ماشین) می باشد‪ -‬نیازی به مترجم ندارد و سریع اجرا‬
‫می شود‪ -‬نوشتن برنامه و آموزش مشکل‪ -‬اشکال زدایی مشکل‬
‫‪ ‬نسل دوم (‪: )Assembly Language‬‬
‫در این نسل‪ ،‬برنامه نویس ی کمی راحت تر شد و به جای بعض ی صفر و یک های معروف‬
‫نماد(سمبل) قرار داده شد ولی در عوض یک برنامه به زبان اسمبلی باید توسط اسمبلر‬
‫ترجمه شود‪.‬‬
‫‪ ‬نسل سوم (سطح باالی ساخت یافته) ‪:‬‬
‫در این نسل‪ ،‬برنامه نویس باید نحوه اجرا برنامه را به صورت الگوریتم کد نویس ی کند‪how to (.‬‬
‫?‪ )do‬مثل زبان های ‪C# , C++ , C , Pascal‬‬
‫‪ ‬نسل چهارم (خیلی سطح باال یا ویژوال) ‪:‬‬
‫در این نسل‪ ،‬کد نویس ی آنچنانی الزم نیست و فقط الزم است کاربر خواسته هایش را بگوید( ‪what‬‬
‫?‪)to do‬‬
‫نکته‪ :‬زبان های نسل اول و دوم سطح پایین و زبان های نسل سوم و چهارم سطح باال هستند‪.‬‬
‫طراحی و پیاده سازی زبان ها‬
‫طبقه بندی زبان ها از نظر کاربرد‬
‫‪‬‬
‫زبان های علمی فنی محاسباتی (مبتنی بر اعداد) ‪:‬‬
‫قدرت انجام محاسبات حجیم‪ ،‬دارای توابع کتابخانه ای ریاض ی قوی ‪.‬مثل‬
‫‪Fortran Algol - Matlab‬‬
‫‪‬‬
‫زبان های تجاری ‪:‬‬
‫برای کاربرد های تجاری‪ ،‬حسابداری و ‪ ..‬استفاده می شود ‪ .‬مثل ‪Cobol‬‬
‫‪‬‬
‫زبان های سیستمی‪:‬‬
‫کاربرد های سیستمی دارند مانند کامپایلر و سیستم عامل ‪Assembly - .‬‬
‫‪Ada - C‬‬
‫‪‬‬
‫زبان های هوش مصنوعی‪:‬‬
‫پردازش تصویر و متن توسط این زبان ها صورت می گیرد و از استنتاج به‬
‫جای پردازش استفاده می شود ‪ML – Lisp – Prolog - .‬‬
‫‪IPL‬‬
‫طراحی و پیاده سازی زبان ها‬
‫اثر محیط بر طراحی و پیاده سازی زبان‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫بیان مفهوم محیط‬
‫تفاوت محیط میزبان و محیط عملیاتی(مقصد)‬
‫انواع محیط‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫محیط دسته ای(‪)Batch‬‬
‫محیط محاوره ای(‪)Interactive‬‬
‫محیط سیستم تعبیه شده(‪)Embedded System‬‬
‫طراحی و پیاده سازی زبان ها‬
‫اثر محیط بر طراحی و پیاده سازی زبان‬
‫محیط دسته ای (‪: )Batch‬‬
‫در محیط های دسته ای‪ ،‬کاربر با برنامه نوشته شده به یک زبان برنامه‬
‫نویس ی‪ ،‬هیچ گونه تعامل و محاوره ای ندارد و ترتیب اجرای برنامه‪ ،‬در‬
‫بدنه خود برنامه گنجانده شده است‪.‬‬
‫در این محیط‪ ،‬کاربر در یک فاز‪ ،‬ورودی های مورد نیاز برنامه را وارد کرده‬
‫و سپس منتظر می ماند تا در فاز بعدی‪ ،‬پردازش صورت گیرد و در‬
‫نهایت در فاز خروجی‪ ،‬نتایج بدست می اید‪.‬‬
‫در این محیط‪ ،‬ارتباط کاربر با برنامه به صورت ‪ offline‬است و اگر‬
‫خطایی در حین اجرای برنامه رخ دهد کاربر نمی تواند در همان لحظه‪،‬‬
‫آن را اصالح نماید و باید منتظر اتمام فازها بماند‪.‬‬
‫‪9‬‬
‫طراحی و پیاده سازی زبان ها‬
‫اثر محیط بر طراحی و پیاده سازی زبان‬
‫محیط محاوره ای (‪: )Interactive‬‬
‫در محیط های محاوره ای‪ ،‬کاربر با برنامه به طور مستقیم محاوره و تعامل دارد‬
‫و خروجی برنامه به طور ‪ online‬در نمایشگر نشان داده می شود مانند‬
‫محیط مربوط به تایپ متن با نرم افزار ‪word‬‬
‫با توجه به ارتباط ‪ online‬کاربر با محیط‪ ،‬اگر در حین اجرای برنامه خطایی رخ‬
‫دهد‪ ،‬کاربر در همان لحظه قادر به اصالح خطا خواهد بود‪.‬‬
‫‪10‬‬
‫طراحی و پیاده سازی زبان ها‬
‫اثر محیط بر طراحی و پیاده سازی زبان‬
‫محیط سیستم های تعبیه شده (‪)Embedded System‬‬
‫به سیستم کامپیوتری که جهت کنترل بخش ی از یک سیستم بزرگتر استفاده‬
‫می شود سیستم کامپیوتری تعبیه شده یا توکار یا جاسازی شده گفته می‬
‫شود مانند سیستم کامپیوتری مربوط به ماشین لباسشویی‪ ،‬مایکروویو‪،‬‬
‫هواپیما و ‪...‬‬
‫بر خالف محیط های محاوره ای و دسته ای پردازش خطا در این محیط ها از‬
‫اهمیت زیادی برخوردار است و در صورت عدم اصالح خطا در یک بازه‬
‫زمانی مشخص‪ ،‬زیان های جدی به بار خواهد آمد‪ .‬بنابراین‪ ،‬قابلیت‬
‫اطمینان در این محیط ها مهم است‬
‫معمول سیستم های تعبیه شده به صورت بالدرنگ(‪ )Real-time‬کار می‬
‫کنند و بدون سیستم عامل هستند و برنامه های نوشته شده در یک‬
‫حافظه ‪ ROM‬قرار می گیرند‬
‫‪11‬‬
‫طراحی و پیاده سازی زبان ها‬
‫ویژگی های یک زبان خوب‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫وضوح سادگی و یکپارچگی‬
‫قابلیت تعامد(‪)Orthogonallity‬‬
‫طبیعی بودن برای کاربردها‬
‫پشتیبانی از انتزاع(‪)Abstraction‬‬
‫سهولت در بازرس ی برنامه‬
‫محیط برنامه نویس ی قدرتمند‬
‫قابلیت حمل باال (‪)Portability‬‬
‫هزینه استفاده‬
‫طراحی و پیاده سازی زبان ها‬
‫مدل های محاسباتی زبان‬
‫‪‬‬
‫مدل محاسباتی‪:‬چگونگی توصیف یک برنامه (نحوه نوشتن یک‬
‫برنامه) در یک زبان برنامه نویس ی‬
‫انواع مدل های محاسباتی‪:‬‬
‫‪ ‬دستوری‬
‫‪ ‬تابعی‬
‫‪ ‬قانون گرا‬
‫‪ ‬ش ی گرا‬
‫طراحی و پیاده سازی زبان ها‬
‫مدل های محاسباتی زبان‬
‫مدل دستوری‪:‬‬
‫برنامه= مجموعه ای از دستورات‬
‫زبانهای این مدل‪C,C++,Ada,Pascal,Cobol,Fortran,Ada,…:‬‬
‫طراحی و پیاده سازی زبان ها‬
‫مدل های محاسباتی زبان‬
‫مدل تابعی‪:‬‬
‫برنامه= مجموعه ای از توابع تودرتو‬
‫زبانهای این مدل‪ML,Lisp,Scheme,…:‬‬
‫طراحی و پیاده سازی زبان ها‬
‫مدل های محاسباتی زبان‬
‫مدل قانون گرا‪:‬‬
‫برنامه= مجموعه ای از قوانین‬
‫زبانهای این مدل‪( Prolog:‬زبان برنامه نویس ی منطقی‪ -‬کاربرد در‬
‫سیستم های خبره و هوش مصنوعی)‬
‫مدل های محاسباتی زبان‬
‫مدل ش ی گرا‪:‬‬
‫برنامه= مجموعه ای از اشیا (کالس ها)‬
‫برنامه‬
‫کالس ‪1‬‬
‫ویژگی‬
‫رفتار‬
‫کالس ‪2‬‬
‫ویژگی‬
‫رفتار‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫زبانهای این مدل‪C++,C#,Java,Smaltalk:‬‬
‫طراحی و پیاده سازی زبان ها‬
‫استاندارد سازی زبان ها‬
‫‪‬‬
‫زمان شناس ی ‪:‬‬
‫زمان استاندارد سازی مهم است از نظر زمانی‪ ،‬هر چه زودتر یک زبان‬
‫برنامه نویس ی‪ ،‬استاندارد سازی شود بهتر است‬
‫‪‬‬
‫پیروی ‪:‬‬
‫هنگامی که یک زبان برنامه نویس ی استاندارد شد‪ ،‬باید از آن استاندارد‬
‫استفاده کرد و تمام برنامه ها باید بر طبق آن استاندارد نوشته شوند و‬
‫کامپایلر نیز برنامه های نوشته شده بر طبق استاندارد را کامپایل حواهد‬
‫کرد(کامپایلر پیرو)‬
‫‪‬‬
‫‪‬‬
‫کهنگی و منسوخ شدن ‪:‬‬
‫یعنی در استاندارد های جدید‪ ،‬برخی ویژگی های موجود در استاندارد های‬
‫قبلی که منسوخ شده اند‪ ،‬بروزرسانی خواهند شد‬
‫‪‬‬
‫طراحی و پیاده سازی زبان ها‬
‫فصل دوم‪:‬‬
‫اثرات معماری ماشین بر زبان‬
‫ها‬
‫فهرست مطالب فصل دوم‬
‫کامپیوتر و اجزای آن‬
‫سازمان کامپیوتر معمولی‬
‫روش های اجرای برنامه‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ترجمه‬
‫تفسیری‬
‫تفاوت دو روش‬
‫زبان های کامپایلری و مفسری‬
‫انواع مترجم ها‬
‫انقیاد و زمان های انقیاد‬
‫طراحی و پیاده سازی زبان ها‬
‫کامپیوتر و اجزای آن‬
‫‪‬‬
‫کامپیوتر های سخت افزاری ‪:‬‬
‫•‬
‫‪‬‬
‫کامپیوتر های میان افزار ‪:‬‬
‫•‬
‫‪21‬‬
‫کامپیوتر سخت افزاری کامپیوتری است که کامال از اجرای سخت افزاری و‬
‫مدارات الکترونیکی شامل حافظه ثبات ها و ‪ ALU‬و ‪ . . .‬ساخته شده‬
‫است در این نوع کامپیوتر ها دقیقا سخت افزار مربوط به هر دستور زبان‬
‫ماشین وجود دارد ‪.‬‬
‫یک کامپیوتر میان افزار نامیده می شود در صورتیکه هر دستور زبان ماشین‬
‫دنباله ای از ریز عملیات می باشد که در حافظه قابل برنامه ریزی ذخیره‬
‫شده است ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫اجزای کامپیوتر‬
‫‪‬‬
‫داده ‪:‬‬
‫یک کامپیوتر باید مجموعه ای از داده های اولیه (مثل ‪ )int real , char‬و‬
‫داده های ساخت یافته (مثل رکورد ‪ ،‬آرایه و ‪ ) . . .‬برای انجام عملیات فراهم‬
‫کند ‪.‬‬
‫•‬
‫‪‬‬
‫اعمال اولیه ‪:‬‬
‫یک کامپیوتر باید مجموعه ای از عملیات اولیه برای پردازش روی داده ها را‬
‫داشته باشد ‪ .‬مثل دستورات ‪ CPU‬یا زبان ماشین‬
‫•‬
‫‪‬‬
‫کنترل ترتیب محاسبات‪:‬‬
‫•‬
‫‪22‬‬
‫یک کامپیوتر باید مکانیزمی برای کنترل ترتیب اجرای عملیات داشته باشد ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫اجزای کامپیوتر‬
‫‪‬‬
‫دستیابی به داده ‪:‬‬
‫‪‬‬
‫‪‬‬
‫مدیریت حافظه ‪:‬‬
‫‪‬‬
‫‪‬‬
‫یک کامپیوتر باید مکانیزم هایی جهت تخصیص حافظه برای برنامه و داده و‬
‫همچنین آزاد سازی حافظه داشته باشد ‪.‬‬
‫محیط عملیاتی ‪:‬‬
‫‪‬‬
‫‪23‬‬
‫یک کامپیوتر باید مکانیزم هایی برای کنترل داده هایی داشته باشد که با‬
‫اجرای عملیات تولید می شوند ‪( .‬کنترل انتقال داده بین برنامه و زیر برنامه‬
‫ها)‬
‫یک کامپیوتر باید مکانیزم هایی برای مبادله اطالعات با دستگاه های جانبی‬
‫فراهم سازد ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫سازمان کامپیوتر‬
‫واحد پردازش مرکزی (‪ )cpu‬از بخش های مهم یک کامپیوتر می باشد‬
‫‪.‬این واحد از ثبات های سریع و عناصر پردازش فعال تشکیل شده‬
‫است ‪ .‬ثبات هایی که وجود دارند ثبات داده و ثبات آدرس می باشند ‪.‬‬
‫‪‬‬
‫ثبات های آدرس ‪:‬‬
‫برای آدرس دهی کردن داده ها و دستورات روی حافظه استفاده می‬
‫شوند ‪.‬‬
‫‪‬‬
‫ثبات های داده ‪:‬‬
‫برای آدرس دهی کردن داده ها و دستورات روی حافظه استفاده می‬
‫شوند ‪.‬‬
‫‪24‬‬
‫سیستم هاي عامل پیشرفته‬
‫سازمان کامپیوتر‬
‫‪‬‬
‫‪‬‬
‫‪25‬‬
‫هر دستور العمل روی حافظه اصلی مشخص کننده یک هدف می باشد ‪.‬که این عمل‬
‫توسط مفسر ‪ cpu‬ترجمه (کد گشایی عملیات) و دستورات الزم به بخش های مختلف‬
‫داده می شود‪.‬تا اینکه عمل اولیه بر روی داده انجام شود ‪.‬‬
‫عناصر پردازش فعال یک ‪ cpu‬از اعمال اولیه ای که برای آن تعیین شده تشکیل شده‬
‫است ‪ .‬این اعمال ممکن است در پردازش گر های مختلف باشند ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫روش های اجرای برنامه‬
‫‪26‬‬
‫‪‬‬
‫روش ترجمه ‪ ،‬کامپایل کردن (‪)Translation‬‬
‫‪‬‬
‫روش تفسیری ‪ ،‬شبیه سازی نرم افزاری (‪)Interpreter‬‬
‫سیستم هاي عامل پیشرفته‬
‫روش های اجرای برنامه‬
‫‪‬‬
‫روش ترجمه ‪ ،‬کامپایل کردن (‪: )Translation‬‬
‫•‬
‫‪27‬‬
‫در این روش برنامه به زبان سطح باال طی فرایند هایی تبدیل به زبان‬
‫ماشین می شود که قابل اجر ا روی سخت افزار است ‪ .‬به طور کلی‬
‫مفسر (نرم افزار مترجم) به هر پردازنده زبانی گفته می شود که‬
‫برنامه ای به زبان منبع که می تواند سطح باال یا پایین باشد را گرفته‬
‫و آن را به زبان مقصد تبدیل می کند ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫روش های اجرای برنامه‬
‫روش ترجمه ‪ ،‬کامپایل کردن (‪: )Translation‬‬
‫در روش ترجمه ابزارهایی مورد نیاز است که هر کدام از این ابزار ها خود‬
‫یک نوع مترجم می باشند ‪.‬‬
‫نکته ‪:‬‬
‫اگر برنامه به زبان مبدا با ساختار زبان مبدا تطابق نداشته باشد پیغام‬
‫خطا صادر خواهد شد ‪.‬‬
‫‪28‬‬
‫سیستم هاي عامل پیشرفته‬
‫انواع مترجم ها (مفسر ها)‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪29‬‬
‫اسمبلر (‪)Assembler‬‬
‫کامپایلر (‪)Compiler‬‬
‫بار کننده (‪)Loader‬‬
‫پیوند دهنده (‪)Linker‬‬
‫پیش پردازنده یا پردازنده ماکرو (‪)Preproccesor‬‬
‫سیستم هاي عامل پیشرفته‬
‫انواع مترجم ها (مفسر ها)‬
‫‪‬‬
‫‪‬‬
‫‪30‬‬
‫اسمبلر (‪: )Assembler‬‬
‫مفسری می باشد که زبان منبع آن زبان اسمبلی و زبان‬
‫مقصد آن زبان ماشین برای برنامه واقعی می باشد ‪.‬‬
‫کامپایلر (‪: )Compiler‬‬
‫مفسری می باشد که زبان منبع آن یک زبان سطح باال و زبان‬
‫مقصد آن نزدیک به زبان ماشین (مثل اسمبلی ) می باشد ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫انواع مترجم ها (مفسر ها)‬
‫‪‬‬
‫بار کننده (‪: )Loader‬‬
‫مفسری می باشد که زبان منبع آن زبان ماشین به شکل جابجا پذیر‬
‫(آدرس نسبی) و زبان مقصد آن کد ماشین واقعی است ‪ .‬بار کننده ‪،‬‬
‫ماژولهای مختلف اجرایی را به هم پیوند داده و آدرس های آنها را به‬
‫صورت مناسب جابجا می کند ‪.‬‬
‫‪‬‬
‫پیوند دهنده (‪: )Linker‬‬
‫این مفسر بخش های مختلف برنامه را دریافت نموده ‪ ،‬آنها را سر‬
‫هم بندی کرده و برنامه خروجی تقریبا شبیه برنامه ورودی به شکل‬
‫کامل تر تولید می شود ‪.‬‬
‫‪31‬‬
‫سیستم هاي عامل پیشرفته‬
‫انواع مترجم ها (مفسر ها)‬
‫‪‬‬
‫پیش پردازنده یا پردازنده ماکرو (‪: )Preproccesor‬‬
‫مفسری می باشد که زبان منبع آن شکل توسعه یافته‬
‫ای از یک زبان سطح باال مانند ‪ C++‬می باشد و زبان‬
‫مقصد آن شکل استانداردی از همان زبان می باشد‬
‫(همان برنامه ‪. )C‬‬
‫مثال در زبان ‪ C‬دستوراتی که با عالمت ‪ #‬شروع می‬
‫شوند مثل تعریف ماکرو ها یا فایل های ‪includ‬‬
‫ابتدا بسط داده شده و به دستوراتی از زبان ‪ C‬تبدیل‬
‫می شوند ‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪32‬‬
‫سیستم هاي عامل پیشرفته‬
‫ترتیب اجرای مفسر ها برای ترجمه یک‬
‫برنامه‬
‫‪33‬‬
‫سیستم هاي عامل پیشرفته‬
‫روش های اجرای برنامه‬
‫‪‬‬
‫‪34‬‬
‫روش تفسیری ‪ ،‬شبیه سازی نرم افزاری (‪: )Interpreter‬‬
‫در این روش کد برنامه منبع مستقیما به شبیه ساز نرم افزاری یا‬
‫مفسر داده می شود و مفسر دستورات زبان سطح باال را تفسیر و‬
‫بالفاصله اجرا می کند در این روش به جای اینکه زبان سطح باال به‬
‫زبان ماشین ترجمه شود به کمک شبیه سازی ‪ ،‬آن برنامه روی یک‬
‫کامپیوتر میزبان ‪ ،‬اجرا خواهد شد‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫مقایسه روش ترجمه و تفسیری‬
‫‪ ‬در روش ترجمه برنامه به طور کامل به زبان ماشین تبدیل‬
‫شده و سپس اجرا می شود ‪ .‬در حالی که در روش تفسیری‬
‫تک تک دستورات زبان سطح باال ابتدا تفسیر و مجموعه‬
‫دستورات الزم برای شبیه سازی آن دستور اجرا می شود ‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪35‬‬
‫سرعت اجرا در روش ترجمه بیشتر از مفسری است ‪ .‬زیرا‬
‫در روش ترجمه فاز ترجمه و اجرا جدای از یکدیگر هستند ؛‬
‫ولی در شبیه سازی این دو فاز یکسان هستند ‪.‬‬
‫مترجم دستورات برنامه را به ترتیب فیزیکی ورودی پردازش‬
‫می کند ولی شبیه ساز جریان منطقی برنامه را دنبال می کند‬
‫‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫مقایسه روش ترجمه و تفسیری‬
‫‪‬‬
‫‪‬‬
‫‪36‬‬
‫مترجم هر دستور را فقط یکبار پردازش یا ترجمه می کند ولی‬
‫شبیه ساز ممکن است برخی از دستورات را چندبار پردازش‬
‫کرده مانند حلقه‪ for‬یا حتی پردازش نکند مثل یک بلوک‬
‫شرطی که همیشه غلط است ‪.‬‬
‫در روش کامپایلری برای ‪ n‬بار اجرا یک ترجمه الزم است ولی‬
‫در روش تفسیری برای ‪ n‬بار اجرا ‪ n‬ترجمه الزم است‬
‫‪(.‬حلقه ‪)for‬‬
‫سیستم هاي عامل پیشرفته‬
‫مقایسه روش ترجمه و تفسیری‬
‫‪‬‬
‫ترجمه محض و شبیه سازی محض دو کرانه اند که به ندرت‬
‫استفاده می شوند ‪ .‬اغلب زبان ها به صورت ترکیبی از ترجمه و‬
‫تفسیری پیاده سازی می شوند ‪.‬‬
‫ترجمه محض ‪ :‬در مواردی که زبان ورودی دقیقا شبیه زبان ماشین‬
‫باشد مانند اسمبلی‬
‫شبیه سازی محض ‪ :‬در مواردی مثل زبان های محاوره ای یا زبان‬
‫کنترل سیستم عامل‬
‫‪‬‬
‫‪37‬‬
‫برخی از جنبه های ساختار برنامه بهتر است قبل از اجرا ترجمه شوند‬
‫ولی برخی دیگر از جنبه ها بهتر است فقط در زمان اجرا پردازش شوند‬
‫‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫مقایسه روش ترجمه و تفسیری‬
‫‪‬‬
‫‪‬‬
‫‪38‬‬
‫ایراد مهم ترجمه از دست رفتن اطالعاتی در رابطه با برنامه‬
‫است ولی در روش تفسیری تمام اطالعات مربوطه موجود‬
‫است ‪.‬‬
‫در روش تفسیری چون دستورات تا زمان اجرا شکل اولیه‬
‫خود را خواهند داشت چند کپی از آنها نگهداری نمی شود ‪.‬‬
‫در مقابل در روش ترجمه چندین فایل داریم که نتیجه‬
‫ترجمه در آن ذخیره می شود ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫مقایسه روش ترجمه و تفسیری به‬
‫صورت خالصه‬
‫میزان حافظه‬
‫مصرفی‬
‫سرعت اجرا‬
‫اشکال زدایی‬
‫‪ n‬بار اجرا‬
‫‪39‬‬
‫روش تفسیری‬
‫روش ترجمه‬
‫کمتر‬
‫زیاد‬
‫کمتر‬
‫بیشتر‬
‫ضعیف تر‬
‫ایمن تر‬
‫‪ n‬بار تفسیر‬
‫یک بار ترجمه‬
‫سیستم هاي عامل پیشرفته‬
‫انواع زبان ها‬
:‫زبان های کامپایلری‬
C , C++ , FORTRAN , ADA

:‫زبان های مفسری‬
Java , Lisp , Perl , Postscript , Basic
ML ,HTML Smalltalk,
‫سیستم هاي عامل پیشرفته‬



40
‫انقیاد و زمان های انقیاد‬
‫‪‬‬
‫‪‬‬
‫تعریف ‪:‬‬
‫اختصاص یک ویژگی به مولفه ای از برنامه از بین مجموعه‬
‫ای از ویژگی های ممکن انقیاد نام دارد ؛ و زمان اختصاص‬
‫این ویژگی زمان انقیاد نام دارد ‪.‬‬
‫زمان های انقیاد ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪41‬‬
‫زمان اجرا‬
‫زمان ترجمه‬
‫زمان پیاده سازی‬
‫زمان تعریف یا طراحی زبان‬
‫سیستم هاي عامل پیشرفته‬
‫انقیاد زمان اجرا‬
‫این انقیاد ها در هنگام اجرای برنامه صورت می گیرند ‪ .‬مثل‬
‫انقیاد متغیر ها به متغیرشان و انقیاد متغیر ها به محل های‬
‫خاص ی از حافظه ‪.‬‬
‫انواع انقیاد های زمان اجرا ‪:‬‬
‫‪ ‬در هنگام ورود به زیر برنامه‬
‫‪ ‬در نقطه خاص ی از اجرای برنامه‬
‫‪42‬‬
‫سیستم هاي عامل پیشرفته‬
‫انقیاد زمان اجرا‬
‫‪‬‬
‫در هنگام ورود به زیر برنامه ‪:‬‬
‫به هنگام صدا زدن تابع در زبان ‪ c‬یا ‪ pascal‬انقیاد پارامتر های‬
‫مجازی به واقعی و انقیاد پارامتر های مجازی به محل هایی از‬
‫حافظه‬
‫‪‬‬
‫در نقطه خاص ی از اجرای برنامه ‪:‬‬
‫‪‬‬
‫‪43‬‬
‫برخی از انقیاد ها در حین اجرا ‪ ،‬در نقطه خاص ی از برنامه انجام‬
‫می پذیرند ‪ .‬مانند انقیاد متغیر ها به مقادیرشان توسط دستور‬
‫انتساب یا انقیاد اسامی متغیر ها به محل هایی از حافظه در هر‬
‫نقطه ای از برنامه مثال در زبان ‪ ML‬و ‪Lisp‬‬
‫سیستم هاي عامل پیشرفته‬
‫انقیاد زمان ترجمه‬
‫این انقیاد ها در زمان ترجمه رخ می دهند ‪.‬‬
‫‪‬‬
‫توسط برنامه نویس ‪:‬‬
‫‪‬‬
‫‪‬‬
‫توسط مترجم زبان ‪:‬‬
‫‪‬‬
‫‪‬‬
‫مانند انتخاب محل نسبی داده در حافظه ای که به زیر برنامه اختصاص‬
‫داده می شود یا چگونگی ذخیره سازی آرایه ها (سطری یا ستونی )‬
‫توسط بار کننده ‪:‬‬
‫‪‬‬
‫‪44‬‬
‫مانند اسامی متغیر ها ‪ ،‬نوع متغیر ها ‪ ،‬و ساختار دستورات‬
‫برنامه ای که شامل چند زیر برنامه است هنگام بار کردن آن در حافظه‬
‫آدرس متغیر های موجود در زیر برنامه ها باید به آدرس واقعی انقیاد‬
‫شود ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫انقیاد زمان پیاده سازی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫برخی از ویژگی های یک زبان ممکن است در پیاده سازی های‬
‫مختلف آن متفاوت باشد‪ .‬به عنوان مثال نمایش اعداد ‪،‬‬
‫اعمال محاسباتی ‪ ،‬محاسبات ریاض ی و غیره ‪.‬‬
‫محدوده مقادیر اعداد ‪ short int‬در پیاده سازی های‬
‫مختلف زبان ‪ C‬ممکن است متفاوت باشد ‪ .‬مثال در یک‬
‫ماشین ممکن است ‪ 8‬بیتی و در ماشین دیگر ممکن است ‪16‬‬
‫بیتی باشد ‪.‬‬
‫نکته ‪:‬‬
‫‪‬‬
‫‪45‬‬
‫پیاده سازی زبان با توجه به امکانات سخت افزاری می باشد ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫انقیاد زمان تعریف یا طراحی زبان‬
‫‪‬‬
‫‪‬‬
‫‪46‬‬
‫اغلب ساختارهای زبان های برنامه نویس ی ‪ ،‬شکل های‬
‫مختلف دستورات ‪ ،‬انواع متغیر ها ‪ ،‬انواع ساختمان داده‬
‫ها و غیره مواردی هستند که در زمان تعریف زبان معین می‬
‫شوند ‪.‬‬
‫مثال متغیر های ‪ I , j , . . . , n‬در فرترن به طور پیش‬
‫فرض ‪ integer‬است ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫نمونه ای از انقیاد ها‬
‫انقیاد نوع‬
‫انقیاد مقدار‬
‫انقیاد نماد‬
‫متغیر‬
‫زمان انقیاد‬
‫مجموعه مقادیر ممکن یک متغیر‬
‫یک نوع در زبان برنامه نویسی موجود باشد‬
‫یا نه‬
‫یک متغیر در تعریف چه نوعی باشد‬
‫زمان پیاده سازی‬
‫زمان تعریف زبان‬
‫مقدار یک متغیر‬
‫‪47‬‬
‫; ‪Int i‬‬
‫;‪i=10‬‬
‫;‪i=i+1‬‬
‫سیستم هاي عامل پیشرفته‬
‫هنگام ترجمه‬
‫در لحظه اجرا‬
‫اهمیت زمان های انقیاد‬
‫‪‬‬
‫انقیاد دیر رس (‪: )Late binding‬‬
‫اگر عمل انقیاد در زمان اجرا مشخص شود انقیاد دیر رس‬
‫گفته می شود ‪.‬‬
‫انقیاد زود رس(‪: )Erly binding‬‬
‫اگر عمل انقیاد در زمان ترجمه مشخص شود انقیاد‬
‫زودرس گفته می شود ‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪48‬‬
‫سیستم هاي عامل پیشرفته‬
‫انواع زبان ها بر اساس زمان مقد سازی‬
‫‪‬‬
‫زبان هایی با انقیاد زودرس (‪: )EBT‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫زبان هایی با انقیاد دیررس (‪: )LBT‬‬
‫‪‬‬
‫‪‬‬
‫‪49‬‬
‫کارایی باال – سرعت باال – انعطاف پذیری پایین – در زمان‬
‫ترجمه‬
‫مانند زبانهای ‪Fortran – c – Pascal‬‬
‫کارایی پایین – سرعت پایین – انعطاف پذیری بال – در زمان اجرا‬
‫مانند ‪Basic , Prolog , Lisp , ML‬‬
‫سیستم هاي عامل پیشرفته‬
‫فصل پنجم‪:‬‬
‫انواع داده اولیه‬
‫فهرست مطالب فصل پنجم‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ش ی داده‬
‫انقیاد ش ی داده‬
‫متغیر ها و ثوابت‬
‫نوع داده‬
‫مشخصات انواع داده اولیه‬
‫پیاده سازی انواع داده اولیه‬
‫اعالن‬
‫اهداف اعالن‬
‫کنترل نوع‬
‫کنترل نوع پویا‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫کنترل نوع ایستا‬
‫تبدیل نوع و تبدیل نوع ضمنی‬
‫انتساب و مقدار دهی اولیه‬
‫انواع داده اسکالر‬
‫نوع صحیح‬
‫‪ ‬زیر بازه‬
‫اعداد حقیقی ممیز شناور و ممیز‬
‫ثابت‬
‫شمارش ی ؛ بولین ؛ کاراکتری‬
‫انواع داده مرکب‬
‫رشته ها‬
‫اشاره گر ها‬
‫فایل ها‬
‫طراحی و پیاده سازی زبان ها‬
‫شی داده ‪:‬‬
‫‪ ‬یک ش ی داده گروهی از یک یا چند قسمت از اطالعات است‬
‫که در کامپیوتر های مجازی استفاده می شود ‪.‬‬
‫(هر چیزی را که تعریف می کنیم و مقدار در آن میریزیم را ش ی‬
‫داده می گویند )‬
‫‪ ‬یک ش ی داده توسط مجموعه ای از صفات مشخص می‬
‫شود که مهمترین آنها نوع داده است ‪.‬‬
‫‪52‬‬
‫سیستم هاي عامل پیشرفته‬
‫ویژگی های اشیا داده ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫نام ( ‪)Name‬‬
‫نوع (‪)Type‬‬
‫مقدار (‪)Value‬‬
‫آدرس ( ‪: )Address‬‬
‫•‬
‫‪‬‬
‫‪53‬‬
‫آدرس شروع مکان حافظه که در آن مقدار قرار می گیرد ‪.‬‬
‫طول عمر (‪)Life Time‬‬
‫سیستم هاي عامل پیشرفته‬
‫ویژگی های اشیا داده ‪:‬‬
‫‪‬‬
‫طول عمر (‪)Life Time‬‬
‫‪ ‬فاصله زمانی بین لحظه ای که حافظه به ش ی داده‬
‫تخصیص داده می شود تا زمانیکه حافظه از آن پس‬
‫گرفته می شود ‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪54‬‬
‫‪ Malloc , new‬گرفتن حافظه‬
‫‪ Free , Delete‬آزاد کردن حافظه‬
‫مدت زمان بین ‪ New , Delete‬را طول عمر گویند ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫تقسیم بندی های شی داده‬
‫اشیا داده به دو دسته تقسیم می شوند ‪:‬‬
‫‪ ‬تعریف شده توسط برنامه نویس ‪:‬‬
‫اشیا داده ای که توسط برنامه نویس تعریف می شوند مانند متغیر ها ‪،‬‬
‫مقادیر ‪ ،‬ثابت ‪ ،‬ارایه ‪ ،‬فایل‬
‫‪‬‬
‫تعریف شده توسط سیستم ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪55‬‬
‫اشیا داده ای که توسط سیستم به وجود می آیند و مستقیما در‬
‫اختیار برنامه نویس نیستند ‪ .‬مثل پشته های زمان اجرا ‪،‬‬
‫رکورد های فعالیت زیر برنامه ها ‪ ،‬بافر های فایل و لیست فضای آزاد‬
‫‪ ،‬جدول نماد ها‬
‫سیستم هاي عامل پیشرفته‬
‫تقسیم بندی های شی داده ‪:‬‬
‫‪‬‬
‫ش ی داده اولیه ‪:‬‬
‫•‬
‫‪‬‬
‫ش ی داده ساخت یافته (ساختاری) ‪:‬‬
‫•‬
‫‪56‬‬
‫اگر ش ی داده تنها یک مقدار را ذخیره کند به طوریکه شامل یک محل‬
‫حافظه برای مقدار داده باشد ‪ .‬مثل نوع ‪Int , float , char ,‬‬
‫‪.....‬‬
‫اگر ش ی داده شامل مجموعه ای از سایر اشیا داده ای باشد (بیش از‬
‫یک مقدار را در خود ذخیره کند ) مانند رکورد ‪ ،‬لیست ‪ ،‬آرایه‬
‫سیستم هاي عامل پیشرفته‬
‫تقسیم بندی های شی داده ‪:‬‬
‫‪‬‬
‫ش ی داده متغیر‪:‬‬
‫•‬
‫‪‬‬
‫ش ی داده ثابت‪:‬‬
‫•‬
‫‪57‬‬
‫اگر ویژگی ‪ value‬در مدت طول عمر متغیر باشد و تغییر کند را ش ی‬
‫داده متغیر گویند ‪.‬‬
‫اگر ویژگی ‪ value‬در مدت طول عمر ثابت باشد ش ی داده از جنس‬
‫ثابت است ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫نوع داده ‪:‬‬
‫‪‬‬
‫‪‬‬
‫نوع داده طبقه ای از اشیا داده به همراه مجموعه ای از‬
‫عملیات برای تولید و دستکاری می باشد ‪.‬‬
‫مشخصات ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫پیاده سازی ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪58‬‬
‫صفات‬
‫مقادیر‬
‫عملیات‬
‫پیاده سازی عملیات‬
‫نمایش حافظه‬
‫سیستم هاي عامل پیشرفته‬
‫نوع داده در سطح مشخصات ‪:‬‬
‫‪‬‬
‫صفات ‪:‬‬
‫‪‬‬
‫‪‬‬
‫مقادیر ‪:‬‬
‫‪‬‬
‫‪‬‬
‫مجموعه ای از مقادیر ممکن که یک ش ی داده می تواند داشته باشد ‪.‬‬
‫عملیات ‪:‬‬
‫‪‬‬
‫‪59‬‬
‫ویژگی است که اشیا داده ا زیک نوع را با دیگر نوع ها متمایز می کند ‪.‬‬
‫مجموعه ای از عملیات که برای یک نوع داده تعریف می شود و تعیین‬
‫می کند ش ی داده چگونه باید دستکاری شود ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫پیاده سازی عملیات ‪:‬‬
‫‪‬‬
‫‪‬‬
‫سه روش برای پیاده سازی عملیات روی اشیا داده وجود دارد ‪.‬‬
‫سخت افزاری ‪:‬‬
‫‪‬‬
‫‪‬‬
‫مانند ‪Not , And , OR , - , + , * , /‬‬
‫زیر برنامه یا تابع ‪:‬‬
‫مثال عمل جذر گیری که توسط سخت افزار به صورت مستقیم پشتیبانی نمی‬
‫شود یک زیر برنامه مانند ‪ SQRT‬برای آن نوشته می شود ‪.‬‬
‫‪‬‬
‫مجموعه ای از دستورات ‪:‬‬
‫‪‬‬
‫‪60‬‬
‫به جای زیر برنامه ‪ ،‬دستورات مستقیما در خود برنامه نوشته می شوند ‪.‬‬
‫‪ABS(x) => if x<0 then –x else x‬‬
‫سیستم هاي عامل پیشرفته‬
‫نمایش حافظه ‪:‬‬
‫‪‬‬
‫‪61‬‬
‫نمایش حافظه برای انواع داده اولیه ‪ ،‬تحت تاثیر کامپیوتری‬
‫است که برنامه را اجرا می کند به عنوان مثال نمایش عدد‬
‫صحیح به صورت دنباله بیتی است جهت نمایش کاراکتر ها‬
‫می توان از کد های کاراکتری موجود در سخت افزار یا‬
‫سیستم بهره برد ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫عملیات ‪:‬‬
‫‪‬‬
‫‪‬‬
‫هر عملیات معموال به صورت یک تابع ریاض ی بیان می شود بطوریکه‬
‫یک یا چند پارامتر را به عنوان ورودی پذیرفته و نتایج را تولید می‬
‫کند ‪.‬‬
‫دامنه عملیات ‪:‬‬
‫‪‬‬
‫‪‬‬
‫مجموعه ای از مقادیر که عملیات بر روی آنها تعریف شده است ‪.‬‬
‫برد عملیات ‪:‬‬
‫‪‬‬
‫مجموعه ای از نتایج ممکن برد عملیات نام دارد ‪.‬‬
‫‪ADD(2 , 3 )  5‬‬
‫برد‬
‫‪62‬‬
‫سیستم هاي عامل پیشرفته‬
‫دامنه‬
‫عملیات ‪:‬‬
‫‪‬‬
‫زیر نوع (‪: )Sub Type‬‬
‫‪‬‬
‫‪‬‬
‫ابر نوع (‪:)Super Type‬‬
‫‪‬‬
‫‪63‬‬
‫یک نوع زیر مجموعه ای از نوع دیگر باشد ‪.‬‬
‫در نمایش یک نوع زیر مجموعه ‪ ،‬نوع بزرگتر را ابر نوع گوییم ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫امضای عملیات ‪:‬‬
‫‪‬‬
‫برای مشخص کردن امضای عملیات از نشانه گذاری های‬
‫ریاض ی که در زبان ‪ C‬آن را الگو (‪ )Prototype‬می نامیم‬
‫استفاده می کنیم ‪.‬‬
‫‪OP-name: argtype × argtype ×. . . ×  resulttype‬‬
‫‪× :integer × integer  integer‬‬
‫‪= :integer = integer  boolean‬‬
‫‪Sqrt : real  real‬‬
‫‪64‬‬
‫سیستم هاي عامل پیشرفته‬
‫عملیات ‪:‬‬
‫‪‬‬
‫باینری ‪:‬‬
‫•‬
‫‪‬‬
‫یکانی ‪:‬‬
‫•‬
‫‪65‬‬
‫دو پارامتر ورودی می گیرند و یک پارامتر خورجی دارند مانند ‪، / ، - ، +‬‬
‫*‬
‫یک پارامتر ورودی می گیرند و یک خروجی دارند مانند قرینه ‪ ،‬جذر‬
‫سیستم هاي عامل پیشرفته‬
‫عوامل پیچیده شدن پیاده سازی عملیات‬
‫به صورت تابع ریاضی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪66‬‬
‫تعریف نشده‬
‫آرگومان ضمنی‬
‫اثرات جانبی‬
‫خود اصالحی‬
‫سیستم هاي عامل پیشرفته‬
‫تعریف نشده‬
‫‪‬‬
‫‪‬‬
‫عملی که بر روی دامنه خاص ی تعریف شده ممکن است برای‬
‫بعض ی از ورودی های روی آن دامنه تعریف نشده باشد ‪.‬‬
‫مانند مجموعه ای از اعداد که در عملیات محاسباتی سر ریز یا‬
‫زیر ریز تولید می کنند ‪.‬‬
‫‪+ : int × int  int‬‬
‫‪(30000) + (10000) = Overflow‬‬
‫‪(- 30000) + (- 10000) = Underflow‬‬
‫‪67‬‬
‫سیستم هاي عامل پیشرفته‬
‫آرگومان ضمنی‬
‫‪‬‬
‫ورودی های ضمنی یا ورودی هایی که به صورت صریح‬
‫تعریف نشده اند مثل متغیر های سراسری که باعث می‬
‫شوند تعیین دقیق دامنه عملیات بر روی اشیا داده ممکن‬
‫نباشد ‪.‬‬
‫)‪Int f ( int a ,int b‬‬
‫{‬
‫‪6‬‬
‫; ‪Return a*b*c‬‬
‫}‬
‫‪68‬‬
‫‪12‬‬
‫سیستم هاي عامل پیشرفته‬
‫; ‪Int c‬‬
‫) ( ‪Void main‬‬
‫{‬
‫; ‪c= 1‬‬
‫;) ‪f (2 , 3‬‬
‫; ‪c= 2‬‬
‫; )‪f (2 , 3‬‬
‫}‬
‫•‬
‫اثرات جانبی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪69‬‬
‫یک عملیات ممکن است عالوه بر وظیفه اصلی خود اعمال‬
‫مخرب دیگری نیز انجام دهد ‪.‬‬
‫مثل عملیاتی که حاصل جمع دو عدد را بر می گرداند ولی‬
‫مقادیر ذخیره شده در سایر اشیا داده را نیز اصالح می کند‪.‬‬
‫یک تابع ممکن است عالوه بر مقدار برگشتی ‪ ،‬آرگومان های‬
‫ورودی خود را نیز تغییر دهد که این یک اثر جانبی است ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫اثرات جانبی‬
‫‪‬‬
‫نکته ‪ :‬آرگومان ضمنی خود یک نمونه از اثرات جانبی است ‪.‬‬
‫)‪Int sum ( int a ,int &b‬‬
‫{‬
‫; ‪Return a + b ++‬‬
‫}‬
‫‪5 , 10‬‬
‫‪15‬‬
‫‪5 , 11‬‬
‫; ‪Int c‬‬
‫) ( ‪Void main‬‬
‫{‬
‫;‪int a=5 , b=10‬‬
‫;‪cout << a << b‬‬
‫;)‪cout << sum(a,b‬‬
‫;‪cout << a<< b‬‬
‫}‬
‫‪70‬‬
‫سیستم هاي عامل پیشرفته‬
‫خود اصالحی (حساسیت به سابقه یا گذشته)‬
‫‪‬‬
‫‪‬‬
‫عملیات می تواند ساختار داخلی ‪ ،‬از جمله داده های محلی که در بین‬
‫اجرا های مختلف نگهداری می شوند یا حتی کد خود را اصالح کنند‬
‫بنابراین نتایج حاصل از عملیات برای مجموعه خاص ی از آرگومان ها‬
‫‪ ،‬نه تنها به آن آرگومان ها بلکه به سابقه فراخوانی های قبلی بستگی‬
‫دارد ‪.‬‬
‫مانند تولید اعداد تصادفی ‪.‬‬
‫‪Rand (0 , 1 )0.567‬‬
‫‪Rand (0 , 1 )0.638‬‬
‫‪Rand (0 , 1 )0.445‬‬
‫‪71‬‬
‫سیستم هاي عامل پیشرفته‬
‫‪Seed = 0.55‬‬
‫‪Seed = 0.44‬‬
‫اعالن ‪Declaration‬‬
‫‪‬‬
‫‪‬‬
‫دستوری از برنامه است که نام و نوع و طول عمر اشیا داده‬
‫را مشخص می کند که به دو دسته تقسیم می شود ‪:‬‬
‫اعالن صریح ‪:‬‬
‫‪‬‬
‫‪‬‬
‫اعالن ضمنی ‪:‬‬
‫‪‬‬
‫‪72‬‬
‫خود برنامه نویس صراحتا متغیر را تعریف می کند ‪.‬‬
‫خود برنامه مترجم (کامپایلر) پیش فرض هایی را در مورد داده ها و‬
‫متغیر ها دارد ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫اعالن‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪73‬‬
‫در زبان فرترن متغیر ها از ‪ I , J . . . N‬پیش فرض به‬
‫صورت صحیح هستند ‪.‬‬
‫در زبان ‪ Perl‬انتساب مقداری به متغیر آن را اعالن می‬
‫کند ‪.‬‬
‫گاهی اوقات جزئیات پیاده سازی در اعالن مشخص می شود‬
‫‪.‬‬
‫اعالن می تواند اطالعاتی راجع به عملیات را به مترجم بدهد‬
‫‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫اطالعاتی که از اعالن گرفته می شود‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪74‬‬
‫نام‬
‫نوع‬
‫مقدار اولیه‬
‫ویژگی ش ی داده‬
‫طول عمر داده‬
‫سیستم هاي عامل پیشرفته‬
‫جدول نماد ها‬
‫‪‬‬
‫‪75‬‬
‫اطالعاتی از اشیایی که در برنامه استفاده کرده ایم در‬
‫جدولی به نام جدول نماد ها نگهداری می شود ‪.‬‬
‫مقدار‬
‫نوع‬
‫نام‬
‫‪3‬‬
‫‪Int‬‬
‫‪n‬‬
‫‪3.14‬‬
‫‪float‬‬
‫‪x‬‬
‫سیستم هاي عامل پیشرفته‬
‫; ‪int n = 3‬‬
‫;‪float x=3.14‬‬
‫اهداف اعالن (یا مزایای اعالن )‬
‫‪76‬‬
‫‪‬‬
‫انتخاب نمایش حافظه بهتر‬
‫‪‬‬
‫مدیریت بهتر حافظه‬
‫‪‬‬
‫مشخص شدن وضعیت عملیات چند ریختی‬
‫‪‬‬
‫کنترل نوع‬
‫سیستم هاي عامل پیشرفته‬
‫انتخاب نمایش حافظه بهتر‬
‫اگر اعالن اطالعاتی راجع به نوع و صفات شی داده در‬
‫اختیار کامپایلر قرار دهد بهترین نمایش حافظه برای‬
‫آن انتخاب می شود ‪.‬‬
‫به عبارت ساده تر کامپایلر می تواند یک فضای مناسب‬
‫تعیین کند ‪( .‬نوع)‬
‫‪77‬‬
‫سیستم هاي عامل پیشرفته‬
‫مدیریت بهتر حافظه‬
‫اشیا داده هایی را که طول عمر یکسان دارند در یک‬
‫بلوک حافظه قرار می دهد ‪( .‬از طول عمر استفاده می‬
‫کند)‬
‫نکته ‪:‬‬
‫بعضی از اشیا داده پویا که با دستورات ‪ New‬یا‬
‫‪ Malloc‬ایجاد می شوند طول عمر آنها اعالن نمی‬
‫شود ‪.‬‬
‫‪78‬‬
‫سیستم هاي عامل پیشرفته‬
‫مشخص شدن وضعیت عملیات چند ریختی‬
‫‪‬‬
‫‪‬‬
‫بسیاری از زبان ها ‪ ،‬نماد های خاص ی مانند ‪ +‬را برای تعیین‬
‫عملیات مختلف استفاده می کنند ‪.‬‬
‫مثال عالمت ‪ +‬مبین عملیات زیر است ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪79‬‬
‫جمع دو عدد صحیح‬
‫جمع دو عدد اعشاری‬
‫الحاق رشته‬
‫اجتماع دو مجموعه‬
‫سیستم هاي عامل پیشرفته‬
‫کنترل نوع (‪)Type Checking‬‬
‫مهمترین هدف اعالن از دیدگاه برنامه نویس ‪ ،‬انجام کنترل نوع‬
‫ایستا به جای کنترل نوع پویا می باشد ‪.‬‬
‫به زبان ساده تر چک می کند آیا نوع ها یکسان هستند یا نه ‪.‬‬
‫; ‪Int A‬‬
‫; ‪Float B , C‬‬
‫; ‪C =A+ B‬‬
‫‪float‬‬
‫‪80‬‬
‫‪int‬‬
‫سیستم هاي عامل پیشرفته‬
‫‪float‬‬
‫کنترل نوع ‪:‬‬
‫‪‬‬
‫کنترل نوع پویا (‪: )D.T.C‬‬
‫‪‬‬
‫‪‬‬
‫کنترل نوع ایستا (‪: )S.T.C‬‬
‫‪‬‬
‫‪81‬‬
‫کنترل نوع در زمان اجرا صورت می گیرد ‪ .‬مثل زبان های ‪ML ,‬‬
‫‪Lisp , Prolog‬‬
‫کنترل نوع در زمال ترجمه (کامپایل) صورت می گیرد ‪ .‬مثل زبان های‬
‫‪Java , C , Pascal‬‬
‫سیستم هاي عامل پیشرفته‬
‫کنترل نوع ایستا ‪:‬‬
‫‪‬‬
‫مزایا ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪82‬‬
‫افزایش سرعت برنامه‬
‫عدم نیاز به حافظه اضافی جهت نگهداری اطالعات نوع داده ای در‬
‫زمان اجرا‬
‫شامل شدن تمام عملیات موجود در برنامه و کنترل تمام مسیر های‬
‫اجرایی‬
‫ساده تر بودن اشکال زدایی برنامه‬
‫معایب ‪:‬‬
‫‪‬‬
‫انعطاف پذیری کم‬
‫‪‬‬
‫نیاز به تعریف اعالن برای تمام اشیاء داده‬
‫سیستم هاي عامل پیشرفته‬
‫کنترل نوع ایستا‬
‫در این حالت از کنترل نوع برای متغیر ها از جدول نماد ها‬
‫استفاده می شود ‪.‬‬
‫مقدار‬
‫‬‫‬‫‪2‬‬
‫‪83‬‬
‫نوع‬
‫‪Int‬‬
‫‪Float‬‬
‫‪Int‬‬
‫نام‬
‫‪n‬‬
‫‪M‬‬
‫‪A‬‬
‫سیستم هاي عامل پیشرفته‬
‫; ‪Int n‬‬
‫; ‪Float M‬‬
‫; ‪Int A = 2‬‬
‫کنترل نوع پویا‬
‫در این حالت از کنترل نوع برای متغیر ها از توصیفگر استفاده‬
‫می شود ‪.‬‬
‫‪N‬‬
‫‪10111011‬‬
‫‪K‬‬
‫‪Int‬‬
‫‪Float‬‬
‫‪M‬‬
‫‪A‬‬
‫‪00000010‬‬
‫; ‪Int N‬‬
‫‪Float‬‬
‫‪Int‬‬
‫; ‪Float M , K‬‬
‫; ‪Int A = 2‬‬
‫;‪A=M+N‬‬
‫‪Int‬‬
‫‪84‬‬
‫سیستم هاي عامل پیشرفته‬
‫‪Float‬‬
‫‪Int‬‬
‫کنترل نوع پویا‬
‫در این حالت از کنترل نوع برای آرایه ها از توصیفگر استفاده‬
‫می شود ‪.‬‬
‫‪A :Array [0 ... 10 , 1 .. 9 ] of int‬‬
‫‪Int‬‬
‫کران باال بعد اول‬
‫حافظه آرایه‬
‫کران پایین بعد اول‬
‫کران باال بعد دوم‬
‫کران پایین بعد دوم‬
‫‪85‬‬
‫سیستم هاي عامل پیشرفته‬
‫توصیف‬
‫گر‬
‫استنتاج نوع‬
Function Add (x: int , y) = x + y ;
x+y => int
Function Add (x , y : int) = x + y ;
x+y => int
Function Add (x: int , y: int) = x + y ;
x+y => int
Function Add (x , y) = x + y ;
‫سیستم هاي عامل پیشرفته‬
x+y => ?
86
‫تبدیل نوع‬
‫‪Error : Type mismatch‬‬
‫; ‪Int A‬‬
‫یا‬
‫تبدیل نوع صورت می گیرد‬
‫و‬
‫‪ Float‬می‬
‫متغیر‪ A‬را به چشم‬
‫بیند‬
‫‪87‬‬
‫‪Float B , C‬‬
‫‪C =A+B‬‬
‫‪Float‬‬
‫سیستم هاي عامل پیشرفته‬
‫‪Int‬‬
‫‪Float‬‬
‫تبدیل نوع‬
‫‪‬‬
‫‪‬‬
‫ضمنی ‪:‬‬
‫در این نوع تبدیل نوع کامپایلر کار تبدیل نوع را انجام می دهد ‪.‬‬
‫صریح ‪:‬‬
‫در این نوع از تبدیل نوع برنامه نویس کار تبدیل نوع را انجام‬
‫می دهد ‪ .‬مانند استفاده از توابع تبدیل‬
‫; ) ( ‪int to char‬‬
‫‪88‬‬
‫سیستم هاي عامل پیشرفته‬
‫تبدیل نوع ضمنی ‪:‬‬
‫‪ ‬باریک کننده ‪:‬‬
‫اگر در تبدیل نوع اطالعات از بین برود به آن تبدیل نوع ضمنی‬
‫محدود کننده یا باریک کننده می گویند ‪.‬‬
‫‪ ‬گسترش یافته ‪:‬‬
‫اگر در تبدیل نوع اطالعات از بین نرود به آن تبدیل نوع ضمنی‬
‫ارتقا یافته یا گسترش یافته می گویند ‪.‬‬
‫‪89‬‬
‫سیستم هاي عامل پیشرفته‬
‫تبدیل نوع ضمنی ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪90‬‬
‫باریک کننده ‪:‬‬
‫‪2.582‬‬
‫صحیح ‪ ‬اعشاری‬
‫‪ 16‬بیت ‪ 8‬بیت‬
‫‪Short  long‬‬
‫گسترش یافته ‪:‬‬
‫‪33.38‬‬
‫اعشاری ‪ ‬صحیح‬
‫‪ 8‬بیت ‪ 16‬بیت‬
‫‪long  short‬‬
‫سیستم هاي عامل پیشرفته‬
‫انتساب‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪91‬‬
‫انتساب ‪ ،‬عملیات اصلی برای تغییر انقیاد یک مقدار به یک‬
‫ش ی داده است این تغییر ‪ ،‬اثر جانبی عملیات محسوب می‬
‫شود ‪.‬‬
‫در بعض ی زبان ها مانند ‪ APL , C , Lisp‬انتساب‬
‫مقداری را بر می گرداند که این مقدار یک ش ی داده ای است‬
‫که حاوی یک کپی از مقدار نسبت داده شده است ‪.‬‬
‫در زبان پاسکال عمل انتساب مقداری را بر نمی گرداند ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫انتساب‬
‫‪Pascal‬‬
‫‪Lisp , C , APL‬‬
‫‪(:=) int × int  void‬‬
‫‪(=) int × int  int‬‬
‫‪A:=B‬‬
‫‪A=B‬‬
‫‪B‬‬
‫‪A‬‬
‫قبل از انتساب‬
‫‪4‬‬
‫‪3‬‬
‫قبل از انتساب‬
‫بعد از‬
‫انتساب‬
‫‪4‬‬
‫‪4‬‬
‫بعد از‬
‫انتساب‬
‫‪B‬‬
‫‪A‬‬
‫‪4‬‬
‫‪3‬‬
‫‪4‬‬
‫‪4‬‬
‫مقدار مجازی‬
‫‪92‬‬
‫سیستم هاي عامل پیشرفته‬
‫‪4‬‬
‫فرآیند انتساب ‪A=B‬‬
‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫مقدار راست ‪ B‬را حساب کن ‪.‬‬
‫مقدار چپ ‪ A‬را حساب کن ‪.‬‬
‫مقدار راست ‪ B‬را در مقدار چپ ‪ A‬کپی کن ‪.‬‬
‫مقدار راست ‪ B‬را به عنوان خروجی برگردان ‪.‬‬
‫مقدار راست = مقدار شی‬
‫داده‬
‫; ‪Int V = 25‬‬
‫مقدار چپ = آدرس شی داده‬
‫‪R-value (V) = 25‬‬
‫‪L-value (V) = 0X77‬‬
‫‪93‬‬
‫سیستم هاي عامل پیشرفته‬
‫مقدار دهی اولیه‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪94‬‬
‫ش ی داده فاقد مقدار اولیه ‪ ،‬ش ی داده ای است که ایجاد شده‬
‫است ولی هنوز مقداری به آن داده نشده است ‪.‬‬
‫در بعض ی از زبان ها مثل ‪ APL‬هر ش ی داده که ایجاد می‬
‫شود باید برای آن مقدار اولیه تعریف شود ‪.‬‬
‫متغیر های فاقد مقدار اولیه عامل مهمی برای بروز خطا در‬
‫برنامه نویس ی هستند ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫مقدار دهی اولیه‬
‫‪ ‬صریح ‪:‬‬
‫در این حالت برنامه نویس باید دستورات لزم را برای مقدار‬
‫اولیه به متغیر ها را در برنامه وارد کند ‪.‬‬
‫‪ ‬ضمنی ‪:‬‬
‫در این حالت خود کامپایلر مقدار اولیه متغیر را تعیین می کند که‬
‫این مقدار اولیه می تواند صفر یا ‪NULL‬باشد ‪.‬‬
‫‪95‬‬
‫سیستم هاي عامل پیشرفته‬
‫انواع داده‬
‫‪ ‬اسکالر ‪:‬‬
‫انواع داده اسکالر فقط یک صفت دارند و از معماری سخت‬
‫افزار کامپیوتر پیروی می کنند ‪.‬‬
‫انواع داده اسکالر شامل انواع صحیح – اعشاری – بولین و‬
‫کاراکتری می باشد‪.‬‬
‫‪ ‬انواع داده مرکب ‪:‬‬
‫شامل چندین صفت هستند و ساختار پیچیده تری دارند ‪.‬‬
‫مانند آرایه ها ‪ -‬رشته ها ‪ -‬فایل ها و اشاره گر ها‬
‫‪96‬‬
‫سیستم هاي عامل پیشرفته‬
‫انواع داده صحیح‬
‫از دو نظر انها را بررس ی می کنیم ‪.‬‬
‫‪ ‬از نظر مشخصات ‪:‬‬
‫•‬
‫•‬
‫•‬
‫‪‬‬
‫از نظر پیاده سازی ‪:‬‬
‫•‬
‫•‬
‫‪97‬‬
‫صفات‬
‫مقدار اولیه‬
‫عملیات‬
‫نمایش حافظه‬
‫پیاده سازی عملیات‬
‫سیستم هاي عامل پیشرفته‬
‫عملیات روی داده نوع صحیح‬
:‫عملیات محاسباتی‬

Binary- op:int*int int +,-,*,/,DIV,MOD
: ‫عملیات رابطه ای‬

Rel-op:int*intBoolean = ,<,>,<>,<=,>=
:‫عملیات انتساب‬

:‫عملیات بیتی‬

Assign: int*intvoid (:=)
Assign: int*intint
(=)
Bit-op:int*intint
&,|,~,^
‫سیستم هاي عامل پیشرفته‬
98
‫پیاده سازی‬
‫سه نمایش حافظه برای نوع داده صحیح وجود دارد ‪.‬‬
‫‪ ‬بدون توصیفگر‬
‫‪99‬‬
‫‪‬‬
‫توصیفگر و مقدار در یک کلمه‬
‫‪‬‬
‫توصیفگر و مقدار در دو کلمه مجزا‬
‫سیستم هاي عامل پیشرفته‬
‫بدون توصیفگر ‪:‬‬
‫‪‬‬
‫‪100‬‬
‫این نمایش در زبان هایی که زبان اعالن ها و کنترل نوع ایستا‬
‫را برای مقادیر صحیح فراهم می کنند استفاده می شود ‪.‬‬
‫مانند فرترن و ‪C‬‬
‫سیستم هاي عامل پیشرفته‬
‫توصیفگر و مقدار در یک کلمه ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪101‬‬
‫در این حالت در مصرف حافظه صرفه جویی می شود ولی‬
‫برای استفاده عملیات سخت افزار باید مقدار را از توصیفگر‬
‫توسط دستورات شیفت از یکدیگر جدا کرد ‪.‬‬
‫سرعت عمل در این حالت کمتر است ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫توصیفگر و مقدار در دو کلمه مجزا‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪102‬‬
‫این نمایش حافظه در لیسپ استفاده می شود ‪.‬‬
‫عیب این روش آن است که حافظه لزم برای ش ی داده دو‬
‫برابر می شود‬
‫مزیت این روش این است که عملیات روی آن به صورت‬
‫سخت افزاری قابل پیاده سازی است که افزایش سرعت را در‬
‫بر دارد‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫زیر بازه ها‬
‫شامل دنباله ای از مقادیر صحیح و بازه محدود هستند مانند‬
‫نوع داده شمارش ی‬
‫‪Type‬‬
‫کران باال ‪ . . . .‬کران پایین = نام زیر بازه‬
‫دو اثر مهم زیر بازه ها ‪:‬‬
‫‪ ‬نیاز به حافظه کمتر‬
‫‪ ‬کنترل نوع بهتر‬
‫‪103‬‬
‫سیستم هاي عامل پیشرفته‬
‫نوع شمارشی‬
‫‪Type‬‬
‫(اعضای لیست) = نام نوع شمارش ی‬
‫مانند مجموعه رنگ ها‬
‫‪Type‬‬
‫) ‪Colors :=(red , green , black‬‬
‫‪104‬‬
‫سیستم هاي عامل پیشرفته‬
‫نوع اعداد اعشاری‬
‫‪ ‬ممیز شناور ‪:‬‬
‫این نوع داده معموال با صفت ‪ real‬در فرترن و پاسکال یا‬
‫‪ float‬در ‪ c‬مشخص می شود ‪.‬‬
‫‪Sin : real  real‬‬
‫‪Max : real  real‬‬
‫‪ ‬ممیز ثابت ‪:‬‬
‫برای برخی از داده های حقیقی اگر از ممیز شناور استفاده‬
‫کنیم خطای گرد کردن رخ خواهد داد می توان برای اینگونه‬
‫داده ها از ممیز ثابت استفاده کرد‪.‬‬
‫‪105‬‬
‫سیستم هاي عامل پیشرفته‬
‫پیاده سازی اعداد اعشاری ممیز شناور‬
‫‪‬‬
‫‪‬‬
‫‪106‬‬
‫در اکثر زبان ها نحوه پیاده سازی اعداد حقیقی ممیز شناور‬
‫به سخت افزار بستگی دارد ‪.‬‬
‫برای ذخیره و پیاده سازی اعداد ممیز شناور از استاندارد‬
‫‪ IEEE754‬استاندارد ‪ 32‬بیتی و ‪ 64‬بیتی استفاده می‬
‫شود ‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫استاندارد ‪ 32‬بیتی ‪:‬‬
‫در این استاندارد هر عدد حقیقی شامل سه فیلد است‪:‬‬
‫‪ ‬بیت ‪: S‬‬
‫فیلد عالمت یک بیتی که صفر به معنای مثبت بودن است‪.‬‬
‫‪ ‬بیت ‪: E‬‬
‫توان ظاهری ‪ 8‬بیتی با افزودنی ‪.127‬‬
‫توان ظاهری= توان واقعی‪127 +‬‬
‫‪ ‬بیت ‪: M‬‬
‫مانتیس ‪ 32‬بیتی است ‪ .‬معمول اعداد اعشاری را به صورت‬
‫نرمال شده ذخیره می کنند ‪.‬‬
‫‪107‬‬
‫سیستم هاي عامل پیشرفته‬
‫اعداد اعشاری ممیز شناور ‪:‬‬
‫‪108‬‬
‫‪M‬‬
‫‪E‬‬
‫‪S‬‬
‫‪ 32‬بیتی‬
‫‪32‬‬
‫‪8‬‬
‫‪1‬‬
‫‪ 64‬بیتی‬
‫‪52‬‬
‫‪11‬‬
‫‪1‬‬
‫سیستم هاي عامل پیشرفته‬
‫اعداد اعشاری ممیز ثابت‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫این اعداد ممکن است مستقیما توسط سخت افزار‬
‫پشتیبانی شود یا به صورت نرم افزاری شبیه سازی گردد ‪.‬‬
‫این اعدا به صورت صحیح ذخیره می شوند و نقطه اعشار‬
‫به عنوان صفت آن ش ی داده ای است ‪.‬‬
‫این اعداد از فرمول زیر استفاده می کنند ‪.‬‬
‫‪Value(X) = Rvalue (X) * 10-SF‬‬
‫‪109‬‬
‫سیستم هاي عامل پیشرفته‬
‫پیاده سازی اعداد اعشاری ممیز ثابت‬
‫‪110‬‬
‫‪‬‬
‫‪FixedPoint‬‬
‫‪‬‬
‫‪FloatingPoint‬‬
‫سیستم هاي عامل پیشرفته‬
‫‪: FixedPoint‬‬
‫‪‬‬
‫مثال در زبان ‪ Cobol‬اعالن داده اعشاری ممیز ثابت با عبارت‬
‫‪ Picture‬نشان داده می شود‪.‬‬
‫‪Picture 999 V 99‬‬
‫‪111‬‬
‫سیستم هاي عامل پیشرفته‬
‫‪FloatingPoint‬‬
‫‪‬‬
‫مانند نماد علمی ‪.‬‬
‫; )‪DECLARE x Fixed DECIMAl (1 , 3‬‬
‫تعداد ارقام‬
‫اعشاری‬
‫‪112‬‬
‫تعداد ارقام صحیح‬
‫سیستم هاي عامل پیشرفته‬
‫نوع ‪( Bool‬بولین)‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪113‬‬
‫متشکل از اشیا داده ای است که یکی از دو مقدار ‪ True‬یا‬
‫‪ False‬را می پذیرد‪.‬‬
‫نمایش حافظه برای ش ی داده بولی یک بیت از حافظه است‬
‫به شرطی که نیاز به توصیفگر برای نوع داده نباشد‪.‬‬
‫مقدار صفر در کل واحد حافظه نشان دهنده ‪ False‬و‬
‫مقدار غیر صفر نشان دهنده ‪ Treue‬است ‪.‬‬
‫بعض ی از زبان ها مانند ‪ C‬فاقد نوع بولین هستند‪.‬‬
‫سیستم هاي عامل پیشرفته‬
‫نوع کاراکتری ‪char‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫نوع داده کاراکتری اشیا داده را به وجود می آورند که مقدار‬
‫آنها یک کاراکتر است ‪.‬‬
‫مقادیر داده های کاراکتری همیشه توسط سیستم عامل و‬
‫سخت افزار پشتیبانی می شوند ‪.‬‬
‫در هنگام ورودی خورجی کاربرد دارن (‪)I/O‬‬
‫عملیاتی که روی کاراکتر ها انجام می شود ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪114‬‬
‫‪Upercase‬‬
‫‪Lowercase‬‬
‫‪Isdigit‬‬
‫سیستم هاي عامل پیشرفته‬
‫رشته (‪)string‬‬
‫‪‬‬
‫به صورت آرایه ای از کاراکتر ها ‪:‬‬
‫‪char st[20] ; C , Pascal‬‬
‫‪‬‬
‫به صورت نوع رشته ها ‪:‬‬
‫‪ML , Lisp , Prolog‬‬
‫‪115‬‬
‫سیستم هاي عامل پیشرفته‬
‫;‪String st‬‬
‫انواع روش های پیاده سازی رشته ها‬
‫‪‬‬
‫رشته با طول ثابت(طوا ایستا) ‪:‬‬
‫‪‬‬
‫‪‬‬
‫رشته با طول متغیر باحد معین(طول پویای محدود) ‪:‬‬
‫‪‬‬
‫‪‬‬
‫ش ی داده رشته کاراکتری ممکن است طول حداکثری داشته باشد که‬
‫در برنامه اعالن شده باشد ‪.‬‬
‫رشته با طول متغیر (طول پویا)‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪116‬‬
‫طول رشته در هنگام ایجاد رشته مشخص است ‪ .‬و بعد از تعریف‬
‫قابل تغییر نیست ‪C# , C++ ,Java .‬‬
‫طول رشته می تواند در زمان اجرا تغییر کنند و حداکثر طول برای آن‬
‫مشخص نمی شود ‪Perl , JavaScript .‬‬
‫این نوع رشته ها دارای سربارتخصیص وآزاد سازی حافظه اند‬
‫سیستم هاي عامل پیشرفته‬
‫نمایش حافظه ای رشته ها‬
‫‪117‬‬
‫‪‬‬
‫طول ثابت ‪:‬‬
‫‪‬‬
‫طول متغیر با حد معین ‪:‬‬
‫‪‬‬
‫طول متغیر ‪:‬‬
‫سیستم هاي عامل پیشرفته‬

similar documents