مشاهده

Download Report

Transcript مشاهده

‫بسم هللا الرحمن الرحیم‬
‫فصل پنجم‬
‫انواع داده اولیه‬
‫وحیده رضویان‪ -‬فاطمه نظری‬
‫‪1‬‬
‫مقدمه‬
‫‪2‬‬
‫‪ ‬برنامه‬
‫‪‬‬
‫‪‬‬
‫مجموعه ای ازعملیات‬
‫اجراروی داده ها به ترتیب خاصی‬
‫‪ ‬تفاوت های بین زبان ها‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪3‬‬
‫انواع داده ها‬
‫عملیات‬
‫مکانیزم کنترل ترتیب اجرای عملیات برروی داده ها‬
‫خواص اشیا داده وانواع داده‬
‫‪4‬‬
‫‪ ‬ناحیه های ذخیره داده ها درکامپیوترواقعی‬
‫‪5‬‬
‫‪‬‬
‫مثل حافظه ‪،‬ثبات ها ‪،‬دیسک و‪...‬‬
‫‪‬‬
‫به صورت بایت یا کلمه گروهبندی می شوند‪.‬‬
‫‪‬‬
‫این ناحیه ها ایستا هستند‪.‬‬
‫‪ ‬ناحیه های ذخیره داده ها درکامپیوترمجازی‬
‫‪‬‬
‫سازمان پیچیده ای دارند‪.‬‬
‫‪‬‬
‫مثل آرایه ها‪ ،‬پشته ها‪،‬اعداد‪،‬رشته های کاراکتری و‪...‬‬
‫‪ ‬ازاصطالح شی داده برای گروهبندی زمان اجرای یک یا‬
‫چندقطعه ازداده ها استفاده می شود‪.‬‬
‫‪ ‬این ناحیه ها پویا هستند‪.‬‬
‫‪6‬‬
‫تعریف‬
‫‪ ‬شی داده‬
‫‪‬‬
‫‪‬‬
‫ظرفی برای مقادیرداده است‪.‬‬
‫محلی است که مقادیر داده در آنجا ذخیره وبعدا‬
‫بازیابی می شوند‪.‬‬
‫یک شی داده توسط مجموعه ای ازصفات مشخص می‬
‫شودکه مهم ترین آنها نوع داده است‪.‬‬
‫‪7‬‬
‫شی داده‬
‫• بعضی ازاشیا داده توسط برنامه نویس تعریف می‬
‫شوند‪.‬‬
‫برنامه نویس آنها رابا استفاده از اعالن ها ودستورات‬
‫زبان‪،‬دربرنامه ایجاد ودستکاری می کند‪.‬‬
‫مثل متغییرها ‪،‬آرایه ها‪،‬ثوابت‪،‬و‪...‬‬
‫• بعضی ازاشیا داده توسط سیستم تعریف می شوند‪.‬‬
‫مستقیما دراختیار برنامه نویس نیستند‪.‬‬
‫درحین اجرای برنامه‪،‬درصورت نیاز به طورخودکار ایجاد میشود‪.‬‬
‫مثل ‪:‬پشته ها‪ ،‬رکورد های فعالیت‬
‫‪8‬‬
‫مقادیر داده‬
‫‪ ‬مقدار داده با الگوی خاصی از بیت ها درحافظه‬
‫کامپیوتر نمایش داده می شود‪.‬‬
‫‪ ‬مقدار داده ممکن است یک عدد‪،‬کاراکتر یا‬
‫اشاره گری به شی داده دیگری باشد‪.‬‬
‫‪9‬‬
‫مثال‬
‫‪ ‬شی داده‪:‬محلی درحافظه‬
‫به نام ‪A‬‬
‫‪A:‬‬
‫‪ = 10001‬مقدارداده‬
‫‪0000000000010001‬‬
‫‪10‬‬
‫‪A:‬‬
‫طول عمر‪lifetime-‬‬
‫‪ ‬هرشی داده دارای طول عمر است‪.‬‬
‫‪ ‬از زمانی که متغیر در برنامه به وجود می آید تا‬
‫زمانی که از بین می رود‪.‬‬
‫‪11‬‬
‫‪ ‬شی داده اولیه‬
‫اگر شی داده حاوی مقداری باشد که همیشه به‬
‫عنوان یک واحد دستکاری شود‪.‬‬
‫یک شی داده اولیه است اگرتنها دارای یک محل‬
‫حافظه برای یک مقدار داده باشد‪.‬‬
‫آرایه شی داده اولیه نیست‪.‬‬
‫‪ ‬ساختمان‬
‫اگرشی داده ‪،‬مجموعه ای ازسایر اشیای داده باشد‪.‬‬
‫مثل آرایه‬
‫‪12‬‬
‫انواع مختلف انقیاد یک شی داده‬
‫‪‬‬
‫یک شی داده درطول عمرخود انقیادهای گوناگونی را می‬
‫پذیرد‬
‫‪ ‬انقیاد شی داده به یک نوع‪:‬‬
‫مجموعه ای ازمقادیر که شی داده میتواند بپذیرد‪.‬‬
‫در زمان ترجمه برنامه ایجادمی شود‪.‬‬
‫‪‬‬
‫‪13‬‬
‫انقیاد شی داده به محلی از حافظه‪:‬‬
‫محلی درحافظه برای شی درنظر گرفته می شود‪.‬‬
‫انواع مختلف انقیاد یک شی داده‬
‫‪‬‬
‫انقیاد شی داده به یک یا چند مقدار‪:‬‬
‫نتیجه عمل انتساب‬
‫‪‬‬
‫انقیاد شی داده به یک یا چند نام‪:‬‬
‫توسط اعالن ها مشخص می شود‪.‬‬
‫‪ ‬انقیاد شی داده به اجزا‪:‬‬
‫مثل آرایه‬
‫‪14‬‬
‫متغیرها و ثوابت‬
‫‪15‬‬
‫تعریف‬
‫‪‬‬
‫متغیر‬
‫شی داده ای که توسط برنامه نویس تعریف می شود‪.‬‬
‫مقدار آن با عملیات انتساب تغییر می کند‪.‬‬
‫مثل ‪int n,char a‬‬
‫‪ ‬ثابت‬
‫یک شی داده با نام است ‪.‬‬
‫مقداری به آن نسبت داده می شود که درطول عمر آن‬
‫ثابت است‪.‬‬
‫مثل ;‪ Const int max=30‬درزبان ‪c‬‬
‫‪16‬‬
‫تعریف‬
‫‪‬‬
‫لیترال (ثابت لیترال)‬
‫ثابتی است که نام آن همان نمایش مقدارش است‪.‬‬
‫مثل ”‪ “21‬که یک ثابت لیترال است که یک شی داده با‬
‫مقدار ‪ 21‬است‪.‬‬
‫‪ ‬نکته‪:‬‬
‫گاهی کامپایلر می تواند از اطالعات مربوط به مقادیر‬
‫ثابت استفاده کند تا از تولید کد برای یک دستور یا عبارت‬
‫جلوگیری کند‪.‬‬
‫‪17‬‬
‫مثال‬
‫;‪Const int MAX=30‬‬
‫;‪Int N‬‬
‫‪N=27‬‬
‫‪N=N+MAX‬‬
‫اشیای داده‪MAX, N, “30” ,”27”:‬‬
‫متغیر‪N :‬‬
‫ثابت‪MAX :‬‬
‫ثابت لیترال‪30,27:‬‬
‫‪18‬‬
‫ماندگاری داده‬
‫‪ ‬دراکثر موارد طول عمر متغیرها با زمان اجرای برنامه‬
‫یکی است‪.‬اجرا که تمام شد متغیرهاازبین می روند‪.‬‬
‫‪ ‬اگرطول عمریک داده بیشتراز یک اجرا باشدگوییم داده‬
‫ماندگار است ودربین اجراهای مختلف برنامه وجود‬
‫دارد‪.‬‬
‫ماندگاری‪:‬از بین نرفتن انقیادمکان ومقدار بعدازاتمام‬
‫برنامه‪.‬‬
‫مثل سیستم رزرواسیون هواپیما‬
‫‪19‬‬
‫انواع داده‬
‫‪20‬‬
‫تعریف‬
‫‪‬‬
‫نوع داده اولیه‬
‫دسته ای از اشیای داده اولیه که عملیات‬
‫گوناگونی بر روی آنها تعریف می شوند و در زبان‬
‫ساخته می شوند‪.‬‬
‫مثل انواع کاراکتری ‪،‬صحیح‪ ،‬حقیقی و‪...‬‬
‫‪‬‬
‫نوع داده‪data type -‬‬
‫دسته ای ازاشیای داده به همراه مجموعه ای‬
‫ازعملیات برای ایجاد ودستکاری آنها‬
‫آرایه که از نوع داده اولیه ساخته شده است پس آرایه یک‬
‫نوع داده است‪.‬‬
‫‪21‬‬
‫نوع داده‬
‫‪‬‬
‫زبان ممکن است به برنامه نویس اجازه دهد انواع‬
‫جدیدی راتعریف کند‪.‬‬
‫‪‬‬
‫تفاوت مهم بین زبان های قدیمی مثل فرترن وزبان های‬
‫جدید مثل جاوا به انواع داده هایی مربوط می شود که‬
‫توسط کاربران تعریف می شوند‪.‬‬
‫‪‬‬
‫نوع داده معموال در دو سطح بررسی می شود‪:‬‬
‫‪.1‬‬
‫مشخصات‬
‫‪.2‬‬
‫پیاده سازی‬
‫‪22‬‬
‫عناصراصلی مشخصات یک نوع داده‪:‬‬
‫‪.1‬‬
‫صفات‬
‫صفات اصلی هرشی داده مثل نوع داده ونام درطول عمرآن‬
‫عوض نمی شود‪.‬‬
‫بعضی ازصفات درتوصیفگر به عنوان بخشی ازشی داده ذخیره‬
‫می شود‪.‬‬
‫بقیه صفات فقط برای تعیین نمایش حافظه شی داده هستند‬
‫و درحین اجرای برنامه صریحا ظاهر نمی شوند‪.‬مثل آدرس‬
‫شی داده‬
‫مقداریک صفت ازشی داده‪،‬متفاوت ازمقداری است که شی‬
‫داده حاوی آن است‪.‬‬
‫‪23‬‬
‫عناصراصلی مشخصات یک نوع داده‪:‬‬
‫‪ .2‬مقادیر‬
‫انواع اشیا داده ‪،‬مجموعه ای ازمقادیرممکن‬
‫رابرای آن اشیا تعیین می کنند‪.‬‬
‫مجموعه ای ازمقادیر که توسط نوع داده‬
‫اولیه تعریف می شوند ‪،‬مجموعه مرتب می‬
‫نامند‪.‬‬
‫مجموعه مرتب دارای کمترین و بیشترین مقدار‬
‫است‪.‬‬
‫‪24‬‬
‫عناصراصلی مشخصات یک نوع داده‪:‬‬
‫‪.3‬‬
‫عملیات‬
‫عملیات تعیین می کنندکه نوع اشیای داده چگونه‬
‫بایددستکاری شوند‪.‬‬
‫عملیات اولیه‪:‬‬
‫‪‬‬
‫بخشی از زبان‬
‫عملیات تعریف شده توسط برنامه نویس‪:‬‬
‫‪‬‬
‫‪25‬‬
‫به شکل زیربرنامه ها یا اعالن متد‬
‫عناصراصلی مشخصات یک نوع داده‪( :‬عملیات)‬
‫‪‬‬
‫هرعملیات یک تابع ریاضی است‪.‬‬
‫‪‬‬
‫یعنی به ازای هر آرگومان ورودی‪،‬نتیجه مشخصی دارد‪.‬‬
‫‪‬‬
‫هرعملیات دارای یک دامنه و یک برد است‪.‬‬
‫‪‬‬
‫دامنه‪:‬مجموعه ای ازمقادیر ورودی است که عملیات‬
‫برروی آن تعریف میشود‪.‬‬
‫‪‬‬
‫برد‪:‬مجموعه ای از نتایج ممکن‪.‬‬
‫‪26‬‬
‫عناصراصلی مشخصات یک نوع داده‪( :‬عملیات)‬
‫‪‬‬
‫الگوریتم‪:‬مشخص میکند که محاسبات چگونه برروی‬
‫آرگومانهای ورودی انجام شود تا نتایج مطلوب حاصل‬
‫شود‪.‬‬
‫‪‬‬
‫عملکرد یک عملیات‪:‬نتایج تولیدشده برای هرمجموعه از‬
‫آرگومانها است‪.‬‬
‫الگوریتم عملکرد یک عملیات را مشخص میکند‪.‬‬
‫‪‬‬
‫مثل‪:‬برای مشخص کردن عملکرد عملیات ضرب استفاده‬
‫از جدول ضرب به جای الگوریتم ضرب دو عدد‪.‬‬
‫‪‬‬
‫‪27‬‬
‫امضای عملیات‬
‫‪ ‬درامضای یک عملیات ‪،‬تعداد‪،‬ترتیب و انواع داده ی آرگومانها و‬
‫ترتیب و نوع داده ی نتیجه را مشخص می کند‪.‬‬
‫‪Result type‬‬
‫‪Op name:arg type*…*arg type‬‬
‫‪ ‬عملیات جمع‪:‬‬
‫‪integer‬‬
‫‪+: integer * integer‬‬
‫جمع عملیات دو دویی است‪.‬‬
‫عملیات جذر‪:‬‬
‫‪real‬‬
‫جذرعملیات یکانی است‪.‬‬
‫‪28‬‬
‫‪Sqrt : real‬‬
‫‪‬‬
‫گاهی تعیین مشخصات دقیق یک عملیات به صورت‬
‫تابع ریاضی دشوار است‪.‬‬
‫‪‬‬
‫چهار عامل موجب میشود تا تعریف عملیات زبان برنامه سازی‬
‫دشوار شود‪:‬‬
‫‪ .1‬عملیاتی که برای ورودی های خاصی تعریف نشده اند‪.‬‬
‫مثل‪:‬تقسیم بر صفر یا مجموعه ای از اعداد که در‬
‫عملیات محاسبات منجر به سر ریز یا پاریز می شود‪.‬‬
‫‪29‬‬
‫ادامه‬
‫‪.2‬‬
‫‪.3‬‬
‫‪30‬‬
‫آرگومانهای ضمنی‬
‫مثل‪:‬متغیرهای سراسری که باعث میشوند تعیین‬
‫دقیق‬
‫دامنه عملیات ممکن نباشد‪.‬‬
‫نتایج ضمنی (اثرات جانبی)‪:‬‬
‫عملیات ممکن است عالوه بر وظیفه اصلی‬
‫خود‪،‬اعمال دیگری را انجام دهد‪.‬‬
‫اثرات جانبی تعیین مشخصات برد عملیات را دشوار‬
‫میکنند‪.‬‬
‫ادامه‬
‫‪.4‬‬
‫خوداصالحی(حساسیت به سابقه )‬
‫عملیات در عملکرد خود به سابقه حساسیت دارند‪.‬‬
‫عملیات ممکن است ساختار داخلی‪،‬اعم از داده های محلی‬
‫یا حتی کد خود را اصالح کند‬
‫نتایج حاصل از عملیات برای مجموعه ی خاصی از آرگومانها‬
‫نه تنها به آن آرگومانها ‪،‬بلکه به فراخوانی های قبلی‬
‫بستگی دارد‪.‬‬
‫مثل ‪ :‬در مولد عدد تصادفی اگر عدد دانه (پایه تولید عدد‬
‫تصادفی)تغییر نکند عدد تصادفی تولید نمی شود‪.‬‬
‫‪31‬‬
‫عناصراصلی مشخصات یک نوع داده‪:‬‬
‫‪ .4‬زیر نوع ها‬
‫‪ ‬اگر نوعی به عنوان بخشی از نوع بزرگتر باشد‪،‬آن را زیر‬
‫نوع و نوع بزرگتر را ابر نوع می گویند‪.‬‬
‫‪‬‬
‫مثل‪:‬‬
‫‪‬‬
‫زیر نوع ها میتوانند عملیات مربوط به ابر نوع را به ارث‬
‫ببرند‪.‬‬
‫مثل‪ :‬نوع ‪char‬در ‪ c‬عملیات نوع ‪ int‬را به ارث میبرد‪.‬‬
‫‪‬‬
‫‪32‬‬
‫‪ short int‬زیرنوع و ‪ int‬ابر نوع است‪.‬‬
‫عناصراصلی پیاده سازی یک نوع داده‪:‬‬
‫‪.1‬‬
‫نمایش حافظه‬
‫‪.2‬‬
‫شیوه ای که عملیات تعریف شده برای نوع داده ‪ ،‬اشیا‬
‫داده را دستکاری می کند‪.‬‬
‫‪33‬‬
‫‪ .1‬نمایش حافظه‬
‫‪‬‬
‫نمایش حافظه برای انواع داده اولیه تحت تاثیر‬
‫کامپیوتری است که برنامه را اجرا میکند‪.‬‬
‫‪‬‬
‫نمایش حافظه برای مقادیر صحیح به صورت نمایش دو‬
‫دویی صحیح‬
‫اگر از نمایش های سخت افرازی استفاده شود‬
‫عملیات اصلی بر روی آن نوع توسط سخت افزار پیاده‬
‫سازی میشود‪.‬‬
‫اگر از نمایش های سخت افزاری استفاده نشود‬
‫پس باید به طور نرم افزاری شبیه سازی شوند که‬
‫کارایی عملیات کم میشود‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪34‬‬
‫نمایش حافظه‬
‫‪‬‬
‫نمایش حافظه صفات اشیای داده نیز می تواند هم به‬
‫صورت سخت افزاری و هم به صورت نرم افزاری شبیه‬
‫سازی شود‪.‬‬
‫زبان های ‪،c‬فرترن‬
‫‪ ‬نمایش حافظه سخت افزاری‬
‫وپاسکال‬
‫‪ ‬صفات داده توسط کامپایلرتعیین می شود‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪35‬‬
‫زبان های لیسپ و‬
‫نمایش حافظه نرم افزاری‬
‫پرولوگ‬
‫صفات درتوصیفگر ذخیره می شوند‪.‬‬
‫شیوه ای که عملیات تعریف شده برای نوع داده‪،‬‬
‫اشیا داده را دستکاری میکند‪:‬‬
‫‪.1‬‬
‫به صورت عملیات سخت افزاری‬
‫‪.2‬‬
‫به صورت فراخوانی زیر برنامه رویه یا تابع‬
‫‪.3‬‬
‫به صورت دستوراتی در داخل برنامه نوشته شوند‪.‬‬
‫مثل تابع قدر مطلق‬
‫دستورات مربوط به تابع قدر مطلق در برنامه نوشته‬
‫می شود‪.‬‬
‫‪36‬‬
‫نمایش نحوی نوع داده‬
‫مستقل از مشخصات و پیاده سازی انواع داده‬
‫است‪.‬‬
‫مثل ‪int x:‬‬
‫دراین نمایش نحوی مشخص نیست ‪x‬چندتا‬
‫بایت دارد ‪،‬آدرس ‪ x‬چند و‪...‬‬
‫‪37‬‬
‫اعالن ها‬
‫‪‬‬
‫اعالن‪:‬‬
‫‪‬‬
‫دستوری ازبرنامه که نام ونوع اشیای داده وهمچنین‬
‫طول عمر آنها رامشخص می شود‪.‬‬
‫مثل ;‪float a,b‬‬
‫‪ ‬انواع اعالن‬
‫‪ ‬صریح‬
‫توسط برنامه نویس مشخص می شود‪.‬‬
‫‪ ‬ضمنی‬
‫اعالن پیش فرض‬
‫مثل‪:‬فرترن ازمتغیری مثل ‪INDEX‬بدون اعالن صریح ستفاده‬
‫میکند ونوع آن صحیح تعیین می شود‪.‬‬
‫‪38‬‬
‫اعالن چه قابلیت هایی دارد‬
‫‪.1‬‬
‫اعالن میتواند مقدار شی داده ثابت راتعیین کند‪.‬‬
‫اعالن می تواند مقدار اولیه متغیرها رامشخص کند‪.‬‬
‫‪.3‬‬
‫گاهی جزییات پیاده سازی مثل انقیادبه محل حافظه‬
‫خاص یا نمایش حافظه ویژه نیزمشخص می شود‪.‬‬
‫‪.4‬‬
‫اعالن ها می تواننداطالعاتی راجع به عملیات رابرای‬
‫مترجم زبان فراهم کنند‪.‬درحین ترجمه هر عملیات نیازبه‬
‫امضای هرعمل است‪.‬‬
‫‪.2‬‬
‫‪39‬‬
‫اهداف اعالن‬
‫‪ .1‬انتخاب نمایش حافظه‬
‫اطالعاتی راجع به نوع داده وصفات شی داده‪.‬‬
‫‪ .2‬مدیریت حافظه‬
‫اطالعاتی راجع به طول عمراشیا داده‬
‫‪ .3‬عملیات چندریختی‬
‫نماد ‪ +‬می تواندمبین عملیات جمع صحیح‪،‬اعشاری‬
‫‪،‬الحاق دو رشته‪،‬اجتماع دو مجموعه‪.‬‬
‫براساس نوع آرگومانهایش چندین عمل انجام میدهد‪.‬‬
‫‪.4‬‬
‫‪‬‬
‫‪40‬‬
‫کنترل نوع‬
‫درادامه‪...‬‬
‫کنترل نوع‬
‫سوال‬
‫‪‬‬
‫دنباله بیتی زیررا درنظر بگیرید‪:‬‬
‫‪‬‬
‫این دنباله مبین چه اطالعاتی است؟‬
‫‪‬‬
‫آیا می توان گفت آن دقیقا یک مقدار صحیح یا دنباله ای‬
‫ازکاراکتر ها یا یک دستور است؟‬
‫‪11100101…1001‬‬
‫‪ ‬آیا بااستفاده ازعملیات اولیه سخت افزار(عملیات ضمنی) برای‬
‫عملی مثل جمع می توان نوع آرگومان ها را کنترل کرد؟‬
‫‪41‬‬
‫کنترل نوع‬
‫‪‬‬
‫هیچ راهی برای تشخیص وجود ندارد‪.‬‬
‫‪‬‬
‫داده ها وقتی در سخت افزار نگهداری می شوند‪،‬‬
‫هیچ نوعی ندارند‪.‬‬
‫‪‬‬
‫در زبان ماشین که به سخت افزار نزدیک است نمی‬
‫توانیم خطای نوع را تشخیص دهیم‪.‬‬
‫مثل عملیات جمع با آرگومان های نادرست‬
‫‪‬‬
‫درسطح سخت افزاری کامپیوترهای معمولی قادربه‬
‫تشخیص خطای نوع نیستند‪.‬‬
‫‪42‬‬
‫کنترل نوع‬
‫تعریف‪:‬‬
‫‪‬‬
‫هر عملیاتی که در برنامه انجام می شود‪،‬باید تعداد و‬
‫نوع آرگومان های آن درست باشد‪.‬‬
‫‪‬‬
‫امتیاز اصلی استفاده از زبان سطح باال‬
‫زبان می تواندبرای تمام عملیات کنترل نوع انجام‬
‫دهد و برنامه در مقابل خطا محفوظ باشد‪.‬‬
‫‪‬‬
‫کنترل نوع به دو روش پویا و ایستا انجام می شود‪.‬‬
‫‪43‬‬
‫کنترل نوع پویا‬
‫‪‬‬
‫در زمان اجراانجام میشود‪.‬‬
‫‪‬‬
‫بالفاصله قبل از اجرای عمل خاصی صورت می گیرد‪.‬‬
‫‪‬‬
‫برای هر شی داده یک برچسب نوع قرار می‬
‫گیرد‪(.‬صفت نوع در توصیفگر ذخیره می شود‪).‬‬
‫‪‬‬
‫مثل‪:‬یک شی داده صحیح میتواند هم شامل مقدارصحیح‬
‫وهم شامل برچسب نوع صحیح باشد‪.‬‬
‫‪44‬‬
‫کنترل نوع پویا‬
‫‪‬‬
‫زبان های لیسپ وپرولوگ‪،‬کنترل نوع پویاراانجام میدهد‪.‬‬
‫‪‬‬
‫دراین زبان ها نوع متغیرها اعالن نمی شود‪.‬‬
‫‪‬‬
‫برای عمل ‪ ،A+B‬انواع ‪ A‬و ‪ B‬قبل از هرعمل جمع‬
‫‪،‬درزمان اجرا باید کنترل شود‪.‬‬
‫چون‪ A‬و ‪ B‬نوع ثابتی ندارند این متغیرها را بدون نوع‬
‫گویند‪.‬‬
‫‪45‬‬
‫امتیاز اصلی کنترل نوع پویا‪:‬‬
‫‪‬‬
‫‪46‬‬
‫قابلیت انعطاف درطراحی برنامه و آزادی از محدودیت ها‬
‫چون متغیرها بدون اعالنند‪.‬‬
‫معایب کنترل نوع پویا‬
‫‪ .1‬اشکال زدایی برنامه و حذف تمام خطاهای نوع آرگومان‬
‫مشکل است‪.‬‬
‫درحین تست برنامه‪،‬تمام مسیرهای اجرایی ممکن را‬
‫نمیتوان تست کرد‪.‬‬
‫‪.2‬‬
‫حافظه بیشتری مصرف میکند و کاهش سرعت اجرا‬
‫‪ .3‬باید به صورت نرم افرازی شبیه سازی شود‪.‬‬
‫‪47‬‬
‫کنترل نوع ایستا‬
‫‪‬‬
‫‪‬‬
‫در زمان ترجمه برنامه انجام می شود‪.‬‬
‫در زمان ترجمه انقیاد همه متغیرهابه یک نوع مشخص‬
‫می شود‪.‬‬
‫‪ ‬اطالعات در اعالن ها به صورت صریح یا ضمنی مشخص‬
‫می شود‪.‬‬
‫‪ ‬این اطالعات عبارتند از‪:‬‬
‫‪ .1‬برای هر عمل ‪،‬تعداد‪،‬ترتیب و نوع آرگومان و نتایج آن‬
‫‪.2‬‬
‫‪.3‬‬
‫‪48‬‬
‫نوع هر متغیر‬
‫نوع هر داده ثابت‬
‫کنترل نوع ایستا‬
‫‪ ‬در اغلب زبان ها به دلیل وجود بعضی از ساختارهای‬
‫زبان دربعضی از موارد کنترل نوع ایستا انجام نمی شود‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪49‬‬
‫پس برای کنترل نوع آرگومان ها به دو روش زیر عمل‬
‫می کنند‪:‬‬
‫کنترل نوع پویا‬
‫عملیات کنترل نشوند‬
‫اگرهزینه کنترل نوع پویا زیاد باشد قابل قبول است‪.‬‬
‫امتیازات کنترل نوع ایستا‬
‫‪ ‬چون تمام مسیرهای اجرایی کنترل می شود الزم‬
‫نیست تستی برای خطاهای نوع صورت می گیرذ‪.‬‬
‫‪‬‬
‫‪50‬‬
‫استفاده بهینه ازحافظه و افزایش سرعت اجرا‬
‫نوع قوی‬
‫‪‬‬
‫زبانی از نظر نوع قوی است که بتوان تمام خطاهای نوع‬
‫رابه طور ایستا(در زمان ترجمه) برطرف کرد‪.‬‬
‫زبانی که ازنظر نوع قوی است امنیت برنامه های ما راباال‬
‫می برد‪.‬‬
‫مثل تابع ‪f:s r‬‬
‫اگر ‪f‬مقداری خارج از ‪ r‬تولید نکندتابع ‪ f‬امنیت نوع دارد‬
‫و نوع نتیجه هم درست است‪.‬‬
‫‪‬‬
‫تعداد کمی از زبانهای امروزی ازنظرنوع قوی هستند‪.‬‬
‫اگر تبدیل یک نوع به نوع دیگر رامحدود کنیم به تعیین نوع‬
‫قوی نزدیک می شویم‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪51‬‬
‫استنتاج نوع‬
‫ازسایر‬،‫می توان اطالعات نوعی را که ازقلم افتاده اند‬
.‫انواع تعریف شده استنتاج کرد‬

‫ اگر تفسیر مبهم نباشد نیازی به اعالن‬ML ‫مثال در زبان‬
.‫نوع نیست‬

Fun
Fun
Fun
Fun
area(length:int.width:int):Int=length*width
area(length.width):Int=length*width
area(length:int.width):=length*width
area(length.width:int):Int=length*width
52
‫تبدیل نوع‬
‫‪‬‬
‫اگر درحین کنترل نوع‪ ،‬نوع مورد انتظار با نوع واقعی‬
‫آرگومانی یکسان نباشد آنگاه‪:‬‬
‫‪.1‬‬
‫خطا رخ می دهد‪.‬‬
‫تبدیل نوع صورت می گیرد‪.‬‬
‫‪‬‬
‫تبدیل نوع ‪،‬نوعی شی داده را گرفته وشی داده متناظر‬
‫با آن را تولید می کند‪.‬‬
‫‪Conversion:type1‬‬
‫‪type2‬‬
‫‪.2‬‬
‫‪53‬‬
‫تبدیل نوع‬
‫تبدیل نوع به دوصورت انجام می شود‪:‬‬
‫‪ .1‬استفاده ازمجموعه ای از توابع ازپیش ساخته که توسط‬
‫برنامه نویس فراخوانی می شود‪.‬‬
‫‪‬‬
‫مثال در زبان‪ c.‬با استفاده از تابع ازپیش ساخته‬
‫‪round‬می توان شی داده ی حقیقی رابه شی داده‬
‫صحیح تبدیل کرد‪(.‬گرد کردن)‬
‫‪.2‬‬
‫تبدیل ضمنی ‪،‬به طور خودکار‪ ،‬فراخوانی شود‪.‬‬
‫مثال‪:‬در زبان ‪c‬نوع صحیح به طور ضمنی به نوع حقیقی‬
‫تبدیل میشود‪.‬‬
‫‪54‬‬
‫تبدیل نوع‬
‫‪‬‬
‫تبدیالت ضمنی‬
‫اطالعات ازبین نمیرود‪.‬‬
‫گسترش یا ارتقا‬
‫(تبدیل مقادیر صحیح به حقیقی)‬
‫اطالعات ازبین می رود‪.‬‬
‫محدود کننده‬
‫(تبدیل مقادیر صحیح به حقیقی)‬
‫‪55‬‬
‫‪‬‬
‫در زبانهایی که کنترل نوع پویا را پشتیبانی می کنند در‬
‫صورتی که عدم تطابق نوع صورت گیرد تبدیل ضمنی صورت‬
‫میگیرد وتبدیالت محدود کننده در صورتی امکان پذیر است که‬
‫اشیای داده مقدار مناسبی داشته باشند ‪.‬‬
‫‪‬‬
‫‪1/5‬قابل تبدیل نیست‪.‬‬
‫‪‬‬
‫در کنترل نوع ایستا‪،‬کد اضافی در برنامه ی ترجمه شده قرار‬
‫میگیرد تا عملیات تبدیل را در نقطه ی مناسبی از اجرا انجام‬
‫دهد‪.‬‬
‫‪‬‬
‫‪56‬‬
‫‪‬‬
‫تبدیل نوع ممکن است چندین بار بیشتر از خودعملیات انجام‬
‫شود‪.‬‬
‫‪‬‬
‫مثال در زبان کوبول و ‪ PL/I‬اعداد به صورت رشته کاراکتری‬
‫ذخیره میشوند‪.‬‬
‫‪ ‬برای عمل جمع ‪:‬‬
‫نمایش حافظه کاراکتری‬
‫نمایش حافظه دودویی‬
‫‪57‬‬
‫نمایش حافظه دودویی‬
‫نمایش حافظه کاراکتری‬
‫‪‬‬
‫دو فلسفه متضاد در مورد تبدیل نوع ضمنی در زبان وجود دارد‪.‬‬
‫در پاسکال و ادا هیچ تبدیل نوع ضمنی وجود ندارد‬
‫در ‪C‬تبدیل ضمنی صورت میگیرد‪.‬‬
‫عدم تطابق نوع یک خطای متداول برنامه نویسی است‪.‬‬
‫‪58‬‬
‫انتساب و مقداردهی اولیه‬
‫‪59‬‬
‫انتساب‬
‫‪‬‬
‫عملیات اصلی برای تغییر انقیاد یک مقدار به یک شی‬
‫داده است این تغییر اثرجنبی نام دارد ‪.‬‬
‫‪C‬و لیسپ ‪،‬عمل انتساب ‪،‬مقداری را برمیگرداند‪.‬‬
‫‪:= int 1* int 2‬‬
‫‪int 3‬‬
‫پاسکال ‪،‬عمل انتساب ‪،‬مقداری را برنمیگرداند‪.‬‬
‫‪void‬‬
‫‪=: int 1 * int 2‬‬
‫‪Cout<< a=7+5‬‬
‫‪60‬‬
‫انتساب‬
‫‪‬‬
‫‪ X:=X‬را درنظر بگیرید‪:‬‬
‫‪ X‬سمت راست به مقدار موجود در شی داده ای به‬
‫مقدار راست‬
‫نام ‪ X‬اشاره می کند‬
‫‪ X‬سمت چپ به محلی از حافظه برای ذخیره مقدار‬
‫مقدار چپ‬
‫اشاره می کند‬
‫‪61‬‬
‫تساوی و هم ارزی‬
‫‪2+3‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪A‬‬
‫مقدار ‪ A‬برابر‪5‬‬
‫مقدار ‪ A‬برابر عبارت ‪2+3‬‬
‫اگرنوع داده های زبان ایستا باشد نوع ‪ A‬مشخص می‬
‫کند از کدام معنا استفاده کنیم‪.‬‬
‫در زبان پرولوگ عملگر ‪ is‬مقدار هم ارز رانسبت می دهد‪.‬‬
‫ولی عملگر= هم نماد انتساب و هم نماد مقایسه منطقی‬
‫‪A is 2+3 ,A =5.‬‬
‫‪A=2+3,A=5.‬‬
‫‪62‬‬
‫مقدار دهی اولیه‬
‫‪‬‬
‫‪‬‬
‫‪63‬‬
‫متغیر فاقد مقدار اولیه‬
‫یک شی داده است که ایجاد می شود ولی هنوز‬
‫مقداری به آن داده نشده است‪.‬‬
‫انواع داده اسکالر‬
‫‪64‬‬
‫تعریف‬
‫‪ ‬اشیایی وجود دارند که برای اشیای داده خود فقط یک‬
‫صفت دارند‪.‬‬
‫‪ ‬مثل‪:‬یک شی نوع صحیح دارای یک مقدار صحیح‬
‫(‪ )...،1،5‬است و هیچ اطالعات دیگری نمی تواند ازآن‬
‫شی بدست آید‪.‬‬
‫‪‬‬
‫‪65‬‬
‫اشیای اسکالر از معماری سخت افزار پیروی می کنند‪.‬‬
‫‪ .1‬انواع داده عددی‬
‫‪‬‬
‫متداولترین انواع داده عددی‪،‬اعدادحقیقی و صحیح هستند‪.‬‬
‫‪‬‬
‫خواص نمایش داده عددی ومحاسباتی بر روی کامپیوتر ها با‬
‫عملیات عددی ومحاسباتی که در ریاضیات معمولی بحث‬
‫می شود متفاوت است‪.‬‬
‫‪66‬‬
‫‪ 1-1‬انواع صحیح‬
‫مشخصات‪:‬‬
‫‪ ‬مهمترین صفت برای یک شی داده از نوع صحیح‪ ،‬نوع‬
‫است‪.‬‬
‫‪ ‬مقادیر ‪ :‬برای انواع صحیح زیرمجموعه ی مرتبی از‬
‫اعداد صحیح ‪.‬‬
‫عملیات شامل‪:‬‬
‫‪‬‬
‫عملیات محاسباتی‬
‫عملیات دودویی وعملیات یکانی‬
‫‪intege‬‬
‫‪BinOp: integer * integer‬‬
‫‪integer‬‬
‫‪67‬‬
‫‪Unaryop : integer‬‬
‫عملیات رابطه ای‬
RelOp: integer *integer
boolean
‫انتساب‬
assignment: integer*integer
void
‫عملیات بیتی‬
BinOp: integer * integer
integer
68
‫پیاده سازی‬
‫نوع داده صحیح بعد از تعریف توسط زبان توسط نمایش‬
‫حافظه سخت افزاری ومجموعه ای از عملیات بر روی‬
‫مقادیر صحیح پیاده سازی می شود‪.‬‬
‫سه نمایش حافظه برای مقادیر صحیح‪:‬‬
‫‪69‬‬
‫پیاده سازی‬
‫‪ ‬نمایش اولی‬
‫در مواردی امکان پذیر است که زبان‪ ،‬اعالنها و‬
‫کنترل نوع استا را برای مقادیر صحیح فراهم می‬
‫کند‪(.‬مثل فرترن و‪)C‬‬
‫‪ ‬نمایش دومی‬
‫عیب‪:‬حافظه برای یک شیء داده صحیح رادوبرابرمی کند‬
‫امتیاز‪:‬عملیات روی آن بصورت سخت افزاری قابل پیاده‬
‫سازی می باشد‪(.‬مثل لیسپ)‬
‫‪ ‬نمایش سومی‬
‫در حافظه صرف جویی می شود ولی برای عملیات سخت‬
‫افزاری باید مقدار را از توصیفگر تفکیک کردو پس از انجام‬
‫عملیات آن را درج کرد‪.‬‬
‫‪70‬‬
‫زیربازه ها‬
‫مشخصات‬
‫‪‬‬
‫زیربازه ای از نوع داده صحیح‪،‬زیر نوعی ازنوع داده‬
‫صحیح است‬
‫(پاسکال)‪A:1…10‬‬
‫(ادا)‪A:integer range 1….10‬‬
‫‪ ‬نوع زیر بازه عملیات نوع صحیح رادارا می باشد‪.‬‬
‫‪ ‬پیاده سازی‬
‫نیاز به حافظه کمتر‪:‬مقدار زیر بازه نسبت به مقدار‬
‫صحیح معمولی به بیتهای کمتری نیاز دارد‪.‬‬
‫‪71‬‬
‫پیاده سازی‬
‫نیاز به حافظه کمتر‪:‬مقدار زیر بازه نسبت به مقدار صحیح معمولی به‬
‫بیتهای کمتری نیاز دارد‪.‬‬
‫مثال‪:‬مقدار صحیح دربازه (‪،)1...10‬چهار بیت از حافظه در حالی که‬
‫مقدار صحیح معمولی حافظه ‪16‬یا‪32‬یا بیشتر نیاز داشته باشند‪.‬‬
‫کنترل نوع بهتر‪ :‬اعالن یک متغییر از نوع زیر بازه موجب می شود تا‬
‫کنترل دقیقتری صورت گیرد‪.‬مثال‪:‬اگر متغییر‬
‫‪month:1....10‬‬
‫تعریف شود‪.‬دستور زیر غلط می باشدودر زمان کامپال تشخیص داده می‬
‫شود‪.‬‬
‫‪Month := 0‬‬
‫‪72‬‬
‫اماانتساب زیر کنترل زمان اجرا الزم دارد تا مشخص کند مقدار جدید در‬
‫بازه قابل قبول‬
‫قراردارد‬
‫اعداد حقیقی ممیز شناور‬
‫مشخصات‬
‫معموال ً با صفت نوع داده مثل ‪ real‬در فرترن یا ‪ float‬در ‪C‬‬
‫مشخص می شود‪.‬‬
‫دقت اعداد ممیز شناور توسط برنامه نویس مشخص‬
‫می شود‪.‬‬
‫عملیات محاسباتی‪،‬رابطه ای وانتساب در اعداد‬
‫حقیقی امکان پذیر است‪.‬‬
‫بدلیل اصول مربوط به گرد کردن کمتر اتفاق می افتد که‬
‫دو مقدار حقیقی با هم مساوی باشند‪.‬‬
‫‪73‬‬
‫نمایشهای حافظه برای این نوع به سخت افزار بستگی‬
‫دارد‪.‬‬
‫اعدادممیز شناور به صورت دقت معمولی یا دقت مضاعف‬
‫شامل سه فیلد عالمت‪،‬توان ومانتیس می باشند‪.‬‬
‫‪74‬‬
‫اعداد حقیقی ممیز ثابت‬
‫برای برخی از داده های حقیقی اگر از ممیز شناور استفاده‬
‫کنیم خطای گرد کردن اتفاق می افتد‪،‬می توان برای‬
‫اینگونه داده ها از ممیزثابت استفاده کرد‪.‬‬
‫تعریف عدد ممیزثابت در کوبول‬
‫‪X picture 999V99‬‬
‫پیاده سازی‬
‫ممکن است توسط سخت افزار پشتیبانی شود یا به‬
‫صورت نرم افزار شبیه سازی گردد‪.‬‬
‫نقطه اعشار به عنوان صفت شی داده است‪(.‬فاکتور‬
‫مقیاس)‬
‫داده های ممیز ثابت در ‪ X :PL/I‬ده رقمی با دو رقم‬
‫اعشار‬
‫)‪X FIXED DECIMAL (10,2‬‬
‫‪75‬‬
‫نقطه اعشار به عنوان صفت شی داده است‪(.‬فاکتور‬
‫مقیاس)‬
‫داده های ممیز ثابت در ‪ X :PL/I‬ده رقمی با دو رقم اعشار‬
‫)‪X FIXED DECIMAL (10,2‬‬
‫‪76‬‬
‫اعداد موهومی‬
‫متشکل از یک جفت از اعداد است که یکی از آنها‬
‫بخش حقیقی ودیگری بخش موهومی را نشان می دهد‪.‬‬
‫عملیات بر روی آنها بصورت نرم افزاری می باشد‪.‬‬
‫‪77‬‬
‫اعداد گویا‬
‫خارج قسم دو عدد صحیح به طول نامحدوداست که معموال ً‬
‫بصورت پیوندی نمایش داده می شود‪.‬‬
‫‪78‬‬
‫نوع شمارشی‬
‫لیست مرتبی از مقادیر مجزا است‪.‬به نام ثوابت‬
‫شمارشی هم خوانده می شوند‪.‬‬
‫برنامه نویس اسامی لیترال ها و همچنین ترتیب‬
‫آنها را با استفاده از اعالنی مشخص می‬
‫کند‪.‬تعریف متغییری از این نوع در‪:C‬‬
‫}‪enum StudentClass {Fresh,Shop,Jonior,Senior‬‬
‫درپاسکال ابتدا تعریف نوع سپس تعریف متغییر‬
‫}‪type Class= {Fresh,Shop,Jonior,Senior‬‬
‫‪StudentClass: Class‬‬
‫‪79‬‬
‫عمالت بر روی نوع داده شمارشی‪:‬عملیات رابطه ای‪،‬‬
‫انتساب وعملیات ‪(successor‬بعدی)و‪(predecssor‬قبلی)‬
‫پیاده سازی‪:‬نمایش حافظه برای شی داده ای از نوع‬
‫شمارشی ساده است‪.‬هر مقدار با اعداد صحیح نمایش داده‬
‫می شود‪.‬‬
‫نوع بولی‬
‫متشکل از اشیای داده ای است که یکی ازمقادیر‪true‬‬
‫و‪ false‬را می پذیرند‪.‬‬
‫عملیات بر روی انواع بولی‪ :‬انتساب و ‪nor, nand‬‬
‫‪and,or,xor,‬‬
‫‪80‬‬
‫پیاده سازی‬
‫نمایش حافظه برای شی داده بولی یک بیت از حافظه‬
‫است‪.‬‬
‫مقادیر ‪ true‬و ‪ false‬به دو روش در این واحد حافظه نمایش‬
‫داده می شوند‪:‬‬
‫◦ بیت خاصی از واحد حافظه برای این مقادیر استفاده‬
‫می شودبقیه بیتها بی استفاده‪.‬‬
‫مقدار صفر در کل واحد حافظه نشان دهنده ‪false‬‬
‫◦‬
‫و مقدار غیرصفر نشان دهنده ‪ true‬است‪.‬‬
‫بدلیل مصرف زیاد حافظه معموال ً از مجموعه ای از بیتها در زبان‬
‫استفاده می شود‪.‬‬
‫‪ C‬نوع داده بولین ندارد از نوع صحیح برای این منظور استفاده‬
‫می کند‬
‫‪false‬‬
‫‪.‬مقدار صفر‬
‫‪true‬‬
‫‪ 81‬مقدار غیر صفر‬
‫کاراکتر ها‬
‫داده های ورودی وخروجی به صورت کاراکتر ها‬
‫هستند‪.‬‬
‫درنوع کاراکتری مقدار اشیای داده‪ ،‬کاراکتر است‪.‬‬
‫مجموعه ای از مقادیر کاراکتری‪،‬بصورت نوع‬
‫شمارشی در نظر گرفته می شود‪.‬مثل کاراکترهای‬
‫اسکی‬
‫عملیات‪ :‬رابطه ای‪،‬انتساب‪،‬تستهایی برای تشخیص‬
‫پیاده سازی‪ :‬مقادیر داده های کاراکتری همیشه توسط‬
‫سخت افزار و سیستم عامل پشتیبانی می شوند‪.‬‬
‫‪82‬‬
‫انواع داده مرکب‬
‫ساختمان داده پچیده ای است که توسط کامپایلر سازماندهی‬
‫می شود‬
‫‪-1‬رشته های کاراکتری‬
‫شی داده ای است که از دنباله ای از کاراکترها تشکیل شده است‪.‬‬
‫مشخصات‬
‫با رشته های کاراکتری حداقل به سه روش رفتار می شود‪:‬‬
‫‪ ‬طول ثابت‪ :‬کاراکترهای بیشتر از طول رشته نادیده گرفته می شوند‪،‬اگر‬
‫کمتر باشد بقیه رشته با فضای خالی پر می شود‪(.‬تخصیص حافظه در‬
‫زمان ترجمه )‬
‫;‪lastName: packed array [1…20] of char‬‬
‫‪ ‬طول متغیر با حد باال‪:‬حداکثر طول در برنامه اعالن می شود‪(.‬تخصیص‬
‫حافظه در زمان ترجمه )‬
‫‪ ‬طول نامحدود‪:‬ممکن است به طور خودکار در حین اجرای برنامه تغییر‬
‫کند‪(.‬تخصیص حافظه پویا)‬
‫‪83‬‬
‫پیاده سازی‬
‫‪84‬‬
‫عملیات‬
‫الحاق‬
‫عملیات رابطه ای در رشته ها‬
‫انتخاب زیر رشته با استفاده از اندیس‪:‬با دانستن ابتدا و انتهای زیر رشته آن را‬
‫از رشته انتخاب می کنند مثال‪:‬در‬
‫فرترن‬
‫فرمت بندی ورودی –‬
‫)‪NEXT=STR(6-10‬‬
‫خروجی‪ :‬فرمت بندی خروجی یا شکستن داده های‬
‫ورودی فرمت بندی شده به عناصر کوچکتر‪.‬‬
‫انتخاب زیر رشته با تطابق‬
‫الگو‪ :‬یک آرگمان این عملیات الگویی است که باید‬
‫جستجو شود‪،‬آرگمان دیگر رشته ای است که الگو باید در آن جستجو گردد‪.‬‬
‫رشته های پویا‪ :‬درپرل مقادیر رشته ای استا یا پویا هستند ‪( ُ $ABCُ.‬ایستا)و َ‪ً $ABC‬‬
‫‪( 8‬پویا)‬
‫‪5‬‬
‫اشاره گرها و اشیای داده برنامه نویس‬
‫برای اینکه زبان نوع اشاره گر را داشته باشد باید ویژگیهای‬
‫زیر را دارا باشد‪:‬‬
‫‪ ‬نوع داده اولیه اشاره گر‬
‫‪ ‬عمل ایجاد کردن‬
‫‪ ‬عملیات دستیابی به محتویات‬
‫مشخصات‬
‫نوع داده اشاره گر دسته از اشیای داده را تعریف‬
‫می کند که مقادیر آنها آدرسهای اشیای دیگری اند‬
‫اشاره گر ها ممکن است فقط به یک نوع‬
‫شی داده مراجعه کنند‪( .‬کنترل نوع ایستا)‬
‫اشاره گرها ممکن است به هر نوع شی داده‬
‫مراجعه کنند‪(.‬کنترل نوع پویا)‬
‫‪86‬‬
‫پیاده سازی‬
‫شی داده اشاره گر به صورت محلی از حافظه نمایش داده می‬
‫شود ‪،‬شامل ادرس محل دیگری از حافظه است‪.‬‬
‫دو نمایش حافظه برای مقادیر اشاره گر استفاده می شود‪:‬‬
‫ادرس مطلق ‪ :‬ادرس واقعی‬
‫ادرس نسبی ‪ :‬افستی از ادرس بلوک پایه‬
‫‪87‬‬
‫فایلها و ورودی‪-‬خروجی‬
‫ساختمان داده ای با دو ویژگی ‪:‬‬
‫‪‬‬
‫‪‬‬
‫بر روی حافظه ثانویه مثل دیسک یا نوار تشکیل می‬
‫شود و ممکن است بسیار بزرگتر از سایر ساختمان داده‬
‫ها باشد‪.‬‬
‫طول عمر آن می تواند بسیار زیاد باشد‪.‬‬
‫متداول ترین فایلها‪:‬‬
‫فایلهای ترتیبی‬
‫فایلهای متنی‬
‫ورودی – خروجی محاوره ای‬
‫فایلهای دستیابی مستقیم‬
‫فایلهای ترتیبی شاخص دار‬
‫‪88‬‬
‫فایلهای ترتیبی‬
‫‪ ‬ساختمان داده ای مرکب از دنباله خطی از عناصر همنوع‬
‫است‪.‬‬
‫‪ ‬طول آن متغیر است و حد باالیی ندارد‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪89‬‬
‫ورودی–خروجی داده ها معموال ً به صورت کاراکتری اند‪.‬‬
‫فایل می تواند در حالت خواندن یا در حالت نوشتن‬
‫دستیابی شود‪.‬‬
‫مشخصات‬
‫عملیات اصلی بر روی فایلهای ترتیبی ‪:‬‬
‫بازکردن‬
‫خواندن‬
‫نوشتن‬
‫تست انتهای فایل‬
‫بستن‬
‫پیاده سازی‬
‫سیستم عامل مسئول پیاده سازی فایلها است‪.‬‬
‫‪90‬‬
91
‫فایلهای متنی‬
‫فایلی از کاراکترها است ‪.‬‬
‫شکل اولیه فایل مربوط به ورودی – خروجی در‬
‫اغلب زبانها است‪.‬‬
‫فایلهای متنی را مستقیماً از طریق صفحه کلید می‬
‫توان ایجاد و چاپ کرد‪.‬‬
‫این فایلها شکلی از انواع فایلهای ترتیبی هستند‬
‫که یک سری عملیات ویژه را پشتیبانی می کنند‬
‫‪92‬‬
‫ورودی – خروجی محاوره ای‬
‫اصالح چندین جنبه از دیدگاه معمولی فایلهای ترتیبی که در‬
‫باال مطرح شدند ‪:‬‬
‫‪‬‬
‫فایل همزمان باید در حالت خواندن و نوشتن باشد‪.‬‬
‫‪‬‬
‫بافر کردن داده در ورودی و خروجی محدود می‬
‫شود‪.‬‬
‫‪‬‬
‫اشاره گر موقعیت فایل و تست انتهای فایل ارزش‬
‫چندانی ندارند‪.‬‬
‫‪93‬‬
‫فایلهای دستیابی مستقیم‬
‫در فایل ترتیبی عناصر به ترتیبی که در فایل قرار دارند‬
‫بازیابی می شوند ‪.‬‬
‫دستیابی تصادفی به عناصر غیر ممکن است‪.‬‬
‫می توان به هر عنصر به طور تصادفی دست یافت‪.‬‬
‫به صورت مجموعه ای از عناصر نامرتب سازماندهی‬
‫می شود‪.‬‬
‫‪94‬‬
‫فایل ترتیبی شاخص دار‬
‫این سازمان فایل مصالحه ای را بین سازمانهای‬
‫ترتیبی محض و دستیابی مستقیم محض به وجود می‬
‫آورد‪.‬‬
‫این نوع فایل امکان دستیابی ترتیبی به عناصر بعدی‬
‫را فراهم می کند که عنصر فعلی بطور تصادفی انتخاب‬
‫شده است‪.‬‬
‫‪95‬‬
96
97
98