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

Download Report

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

‫طراحی و پیاده سازی زبان های‬
‫برنامه نویسی‬
‫مصطفی قبائی آرانی‬
‫‪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‬‬
‫‪ ‬فاصله زمانی بین لحظه ای که حافظه به شی داده تخصیص داده می‬
‫شود تا زمانیکه حافظه از ان پس گرفته می شود ‪.‬‬
‫‪ Malloc , new ‬گرفتن حافظه‬
‫‪ Free , Delete ‬ازاد کردن حافظه‬
‫‪‬‬
‫‪54‬‬
‫مدت زمان بین ‪ 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‬‬
‫افزایش سرعت برنامه‬
‫عدم نیاز به حافظه اضافی جهت نگهداری اطالعات نوع داده ای در زمان اجرا‬
‫شامل شدن تمام عملیات موجود در برنامه و کنترل تمام مسیر های اجرای ی‬
‫ساده تر بودن اشکال زدای ی برنامه‬
‫انعطاف پذیری کم‬
‫نیاز به تعریف اعالن برای تمام اشیاء داده‬
‫سیستم هاي عامل پیشرفته‬
‫کنترل نوع ایستا‬
‫در این حالت از کنترل نوع برای متغیر ها از جدول نماد ها استفاده می شود‬
‫‪.‬‬
‫‪83‬‬
‫مقدار‬
‫‬‫‪-‬‬
‫نوع‬
‫‪Int‬‬
‫‪Float‬‬
‫نام‬
‫‪n‬‬
‫‪M‬‬
‫‪2‬‬
‫‪Int‬‬
‫‪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‬‬
‫‪115‬‬
‫‪‬‬
‫به صورت ارایه ای از کاراک تر ها ‪:‬‬
‫‪char st[20] ; C , Pascal‬‬
‫‪‬‬
‫به صورت نوع رشته ها ‪:‬‬
‫‪ML , Lisp , Prolog‬‬
‫سیستم هاي عامل پیشرفته‬
‫;‪String st‬‬
‫انواع روش های پیاده سازی رشته ها‬
‫‪‬‬
‫رشته با طول ثابت(طوا ایستا) ‪:‬‬
‫‪‬‬
‫‪‬‬
‫رشته با طول متغیر باحد معین(طول پویای محدود) ‪:‬‬
‫‪‬‬
‫‪‬‬
‫شی داده رشته کاراک تری ممکن است طول حداک ثری داشته باشد که در برنامه اعالن‬
‫شده باشد ‪.‬‬
‫رشته با طول متغیر (طول پویا)‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪116‬‬
‫طول رشته در هنگام ایجاد رشته مشخص است ‪ .‬و بعد از تعریف قابل تغییر نیست ‪.‬‬
‫‪C# , C++ ,Java‬‬
‫طول رشته می تواند در زمان اجرا تغییر کنند و حداک ثر طول برای ان مشخص نمی‬
‫شود ‪Perl , JavaScript .‬‬
‫این نوع رشته ها دارای سربارتخصیص وازاد سازی حافظه اند‬
‫سیستم هاي عامل پیشرفته‬
‫نمایش حافظه ای رشته ها‬
‫‪117‬‬
‫‪‬‬
‫طول ثابت ‪:‬‬
‫‪‬‬
‫طول متغیر با حد معین ‪:‬‬
‫‪‬‬
‫طول متغیر ‪:‬‬
‫سیستم هاي عامل پیشرفته‬