Transcript مشاهده
فصل 6
بسته بندی
1
مقدمه
تمام فعالیتهای طراحی را می توان به عنوان طراحی
مشخصات نوع داده (ایجاد انواع داده جدید) در نظر گرفت
یعنی :
• طراحی صفات نوع داده(عناصر شی داده)
• عملیات موردنیاز(عملیات بر روی شی داده)
چهار روش ایجاد انواع داده جدید و عملیات بر روی آنها:
– ساختمان داده
– زیربرنامه ها
– اعالن نوع
– وراثت
2
ساختمان داده ها
.1از نظر مجازی تمام زبان ها خواصی برای ایجاد اشیا داده
پیچیده از انواع داده اولیه دارند.
.2ساختمان داده شی داده ی مرکب از اشیا داده دیگری
است(.عنصر ارایه می تواند عدد،رکورد،رشته کاراکتری یا ارایه
دیگری باشد).
.3برای توصیف هر گونه ساختمان داده به یک توصیفگر نیاز
است که مشخصات ان را تعیین کند.
.4ساختمان داده های مهم عبارتند از:ارایه ها/رکوردها/پشته
ها/لیست ها/مجموعه ها
ایجاد اشیا داده غیر همگن:
رکوردها
ایجاد اشیا داده
همگن:لیست
ها/مجموعه ها/ارایه ها
3
زیر برنامه ها
برنامه نویس میتواند برنامه هایی را ایجاد کند که مثل یک نوع جدید
عمل کند.
استفاده از نوع
جدید به برنامه
نویس و تا حدی
به زبان برنامه
نویسی بستگی
دارد.
در برخی از
زبان ها عملیات
به عنوان یک
نوع جدید
محسوب میشوند.
این مکانیزم در
همه زبان ها
وجود دارد.
4
اعالن نوع
زبان توانایی تعریف انواع داده جدید و عملیات بر روی ان انواع را
دارد.
مفهوم نوع داده انتزاعی برای ایجاد انواع داده جدید به کار برده میشود.
)Class(c++
)Package(Ada
وراثت
به کمک تکنیک های شی گرایی و وراثت می توان انواع
جدید و عملیات بر روی ان ها را انجام داد.
5
مشخصات انواع ساختمان داده
(صفات اصلی ساختمان داده )
تعداد
عناصر
سازمان
عناصر
نوع هر
عنصر
اسامی
برای
انتخاب
عناصر
حداکثر
تعداد
عناصر
6
.1تعداد عناصر:
اگر تعداد عناصر ساختمان داده در طول عمرش ثابت
باشد(ارایه/رکورد)
اندازه ساختمان داده
ثابت
اگر تعداد عناصر ساختمان داده در طول عمرش ثابت
نباشد(پشته/لیست)
اندازه ساختمان داده
متغیر
اشیا داده طول متغیر با استفاده از اشاره گر ها
اشیا داده طول ثابت را به هم پیوند می
دهند(.رشته)
7
.3اسامی برای انتخاب عناصر:
هر ساختمان داده باید مکانیزمی داشته باشد که بتوان اجزا ان را انتخاب
کرد.
در ارایه به کمک اندیس/در رشته به وسیله اشاره گر
.4حد اکثر تعداد عناصر:
برای ساختار هایی با طول متغیر مثل رشته یا پشته حداکثر طول ان بر حسب تعداد
عناصر باید مشخص باشد.
.5سازمان عناصر:
متداول ترین سازمان دنباله خطی از عناصر است مانند:ارایه های یک
بعدی/رکوردها/رشته ها در یک فضای پیوسته از حافظه وجود دارد.
9
عملیات در ساختمان داده ها
عملیات
انتخاب
عناصر
ایجاد و
حذف
ساختمان
داده ها
درج و
حذف
عناصر
عملیات
روی کل
ساختمان
داده ها
10
.1عملیات انتخاب عناصر:
الف )انتخاب تصادفی(مستقیم):اجزا به صورت دلخواه انتخاب میشوند(.بردارها)
ب )انتخاب ترتیبی:اجزا به ترتیبی که از قبل مشخص شده است انتخاب میشوند(.لیست)
.2عملیات روی کل ساختمان داده:
عملیات ممکن است کل ساختمان داده ها را به عنوان ارگومان بپذیرند و ساختمان داده جدیدی
را تولید کنند(.جمع دو ارایه/اجتماع بر روی مجموعه ها)
.3درج و حذف عناصر:
عملیاتی است که تعداد عناصر ساختمان داده را تغییر می دهد.
.4ایجاد و حذف ساختمان داده ها:
عملیاتی که ساختمان داده ها را ایجاد یا حذف می کند.
11
پیاده سازی ساختمان داده ها
.1نمایش حافظه:هنگام ذخیره سازی ساختمان داده حافظه ای برای عناصر
ساختمان داده و توصیفگر اختیاری که تمام یا چند صفت ساختمان داده را ذخیره
میکند در نظر گرفته میشود.
الف)نمایش ترتیبی:
در این نمایش ساختمان داده در یک بلوک پیوسته از حافظه ذخیره میشود که شامل
توصیفگر و اجزا می باشد(ساختمان داده با طول ثابت و گاهی با طول متغیر»»
رشته ها /پشته ها)
ب)نمایش پیوندی:
در این نمایش ساختمان داده در چندین بلوک حافظه نا پیوسته ذخیره می شوند که
بلوک ها از طریق اشاره گرها به یکدیگر پیوند خواهند خورد(.ساختمان داده با
طول متغیر»»لیست ها)
12
13
.2پیاده سازی عملیات:
انتخاب اجزا ساختمان داده مهمترین نکته در پیاده سازی ان است و هدف ان است که
انتخاب ترتیبی و تصادفی عناصر کار امد باشد.
الف)انتخاب ترتیبی در حافظه:
عملیات انتخاب عنصر در نمایش ترتیبی حافظه به کمک یک ادرس مبنا و یک ادرس
افست به صورت( )Base+Offsetبه سادگی و با سرعت انجام می شود( .ادرس
دستیابی)
محل نسبی عنصر انتخاب شده در بلوک ترتیبی( افست)
محل شروع بلوک(ادرس پایه)
ب)انتخاب پیوندی در حافظه:
برای انتخاب یک جز در ساختمان داده در روش پیوندی می بایست تمام عناصر اول تا
iام برای رسیدن به عنصر iام دستیابی شوند.
نمایش پیوندی زنجیره ای از اشاره گرها را از اولین بلوک موجود در ساختار تا عنصر
مورد نظر دنبال کرد.
14
+
15
مدیریت حافظه و ساختمان داده ها
.1
.2
.3
.4
هنگامی که به یک شی داده حافظه تخصیص داده می شود طول عمر ان شروع می
شود و هنگامی که این انقیاد از بین برود طول عمر ان هم تمام میشود.
برای ساختمان داده های با طول متغیر هر یک از عناصر طول عمر مخصوص به
خودشان را دارند ولی در ساختمان داده با طول ثابت کل ساختمان داده دارای یک
طول عمر است.
هنگام ایجاد یک شی داده یک مسیر دستیابی به ان نیز ایجاد میشود این مسیر
دستیابی یا از طریق نام برای ان صورت میگیرد یا به کمک اشاره گری که به ان
اشاره میکند .
در هر نقطه از طول عمر شی داده ای ممکن است چندین مسیر دستیابی وجود داشته
باشد
مانند:ارگومانی به زیر برنامه ارسال میشود یا اشاره گر جدیدی به ان اشاره
میکند(ارجاع سرگردان)
»»یا مسیر های دستیابی ممکن است به روش های گوناگون از بین بروند
مانند:انتساب مقدار جدیدی به متغیر اشاره گر(زباله)
16
.1داده های زباله(حافظه مازاد):
هنگامی که یک مسیر دستیابی به یک شی داده از بین برود ولی خود شی داده
وجود داشته
باشد شی داده را زباله گوییم زیرا دیگر قابل استفاده نیست ولی انقیاد ان به محل
حافظه اش از بین نرفته است یعنی حافظه ای که در اختیار ان است قابل استفاده
مجدد نیست.
17
.2ارجاعهای معلق
.1اگر طول عمر شی داده تمام شود ولی هنوز یک مسیر دستیابی به ان را داشته باشیم
می گوییم ارجاع معلق رخ داده است .
.2در حقیقت ارجاع سرگردان یک مسیر دستیابی است که پس از اینکه طول عمر شی
داده خاتمه یافت وجود داشته باشد.
.3این مشکل زمانی رخ می دهد که چند اشاره گر به صورت همزمان به شی داده اشاره
می کنند.
دستور):free(pحافظه مذکور از( )pرها شده ولی هنوز ()qبه ان اشاره می
18
کند.
اگر دو مشکل فوق همزمان رخ دهد
(داده زباله/ارجاع معلق)
مشکل داده زباله چندان مهم نیست چون داده های زباله حافظه مصرف می کنند و
باعث به هدر رفتن حافظه می شوند و حداکثر یک برنامه به دلیل عدم حافظه کافی
اجرا نخواهد شد ولی ارجاع معلق مسئله مهمی در مدیریت حافظه است که اگر از
طریق ارجاع سر گردان به یک شی داده دسترسی داشته باشیم باعث نا هنجاری
اطالعات می شود.
19
اعالن و کنترل نوع ساختمان داده ها:
یک اعالن داده ساخت یافته صفات متعددی را برای ان مشخص می
سازد.
اعالن زیردر پاسکال:
;A=array[1…20,-4…8]Of real
.1مشخص می کند که نوع داده ارایه ای است دو بعدی.
.2اندیس سطرها از ) )1تا ( )20و اندیس ستون ها از( )-4تا ()8
است.
.3تعداد سطر ها ( )20و تعداد ستون ها ( )13است.
.4تعداد کل خانه ها( )260است.
.5نوع هر خانه نیز حقیقی است.
20
در هنگام کنترل ساختمان داده دو موضوع مهم باید در نظر
گرفته شود:
.1وجود مولفه انتخابی:
جز انتخابی ممکن است در ساختمان داده نباشد.
A[13] X
]Q A[1…10
عملیات اندیس که جزئی از ارایه را انتخاب می کند ممکن است اندیس خارج از محدوده
ارایه باشد.کنترل زمان اجرا باید معتبر بودن ان را بررسی کند.
.2نوع عنصر انتخابی:
اگر عنصری وجود داشته باشد باید نوع ان هم درست باشد(.نوع مورد انتظارعملیات)
A[2][3].LINK-<Item
باید نوع عنصری که از این طریق به دست می اید مشخص و درست باشد.
این کنترل به صورت ایستا و در زمان کامپایل انجام می گیرد.
21
بردارها و ارایه ها:
مشخصات:
.1بردار (ارایه یک بعدی) ساختمانی مرکب از تعداد ثابتی از عناصر هم نوع است که به
شکل دنباله خطی از عناصر سازمان دهی شده اند.
صفات بردار:
تعداد
عناصر
اندیس برای
انتخاب هر
عنصر
نوع هر
عنصر
22
عملیات روی بردارها:
.1عملیاتی که عنصری را از برداری انتخاب می کند اندیس گذاری نام دارد (.عملیات
اندیس گذاری محل شی داده را بر می گرداند).
.2عملیات دیگر بردارها عبارتند از :ساخت و از بین بردن ان ها،انتساب به عناصری از
بردار،جمع دو بردار(بردار با طول یکسان)
.3عملیات روی بردارها بسیار محدود است ولی در APLاین عملیات بسیار زیاد است.
پیاده سازی:
.1همگنی عناصر و ثابت بودن اندازه بردار،نمایش حافظه و دستیابی به عناصر ان را
ساده کرده است(از همگنی نتیجه میشود که اندازه و ساختار هر عنصر باید یکسان
باشد،از طول ثابت بردار نتیجه میشودکه تعداد و موقعیت هر عنصر بردار در طول
عمرش ثابت باشد).
.2ذخیره صفات بردار
توصیفگر
(حدود باال و پایین بازه در توصیفگر
.3کنترل بازه مقادیر اندیس محاسبه شده
ذخیره میشوند) .
23
24
پیاده سازی:
Address: A[i]=a+(i-lB)*E
.1با شروع از عنصر اول برای رسیدن به )(iامین عنصر باید از ( )i-1امین عنصر
قبلی عبور کرد.
.2اگر )(Eاندازه هر عنصر باشد باید از )i-1(*Eمحل حافظه عبور کنیم.
.3اگر اولین عنصر در محل ( )aباشد و ( )lBحد پایین اندیس باشد ،فرمول دستیابی
برای مقدار چپ یک عنصر بردار به صورت زیر است:
LVALUE(A(i)) =a+(i-LB) *E
a+i*E-LB*E=(a-LB*E)+i*E
در Cبرای ارایه های کاراکتری مقدار ) (E=1و ( )Lb=0است.
:LVALUE(A(i))=(a+0*E)+i*E=a+iفرمول دستیابی عنصر ارایه
کاراکتری
در پاسکال اندیس از ( )1و در cاز صفر شروع می شود.
25
مبدا مجازی:
ادرس عنصری با اندیس صفر را مشخص می کنیم.
)مقدار ثابت(LVALUE(A(0))=(a-LB*E)+(0*E)=a-LB*E=K
ادرسی است که عنصر صفر برداری در ان جا قرار می گیرد این ادرس مبدا
مجازی نام دارد(VO).
VO=a-LB*E
26
27
پیاده سازی های دیگر:
اگر( )aادرس شروع اولین خانه ارایه در حافظه باشد و( )Eمقدار بایت های الزم جهت
ذخیره هر یک از عناصر ارایه باشد.
حد پایین اندیس ارایه )lB( :
حد باالی اندیس ارایه )UB( :
محل ذخیره عنصر iام (ارایه تک بعدی)A[i]=a+(i-lB)*E:
نکته :برای تولید ادرس عناصر یک ماتریس باید ابتدا ان را به بردار تبدیل کنیم چون
در
حافظه کامپیوتری حافظه دو بعدی معنا ندارد ،این تبدیل ادرس معموال به دو روش
سطری و ستونی می باشد.
بسیاری از زبان ها مانند ،Cپاسکال و جاوا از روش سطری و فرترن از ستونی استفاده
میکند.
28
نمایش حافظه به صورت فشرده :
.1در نمایش حافظه فشرده عناصر یک بردار به صورت فشرده ذخیره میشوند(.به این
نکته توجه نمیشود که هر عنصر باید از کلمه ادرس پذیر شروع شود)
این روش باعث صرفه جویی در حافظه میشود ولی دستیابی به عنصر هزینه زیادی می
برد زیرا نمی توان از فرمول دستیابی استفاده کرد.
نمایش حافظه به صورت غیر فشرده:
.2به دلیل گران بودن هزینه دستیابی بردارها به صورت غیر فشرده ذخیره می شوند.
هر عنصر در مرز یک واحد حافظه ادرس پذیر قرار می گیرد و بین هر جفت از
عناصر ممکن است حافظه بدون استفاده باقی بماند،مزیت این روش دستیابی سریع است
ولی حافظه به هدر میرود.
29
آرایه های شرکت پذیر
برداریک آرایه یک بعدی است وماتریس یک آرایه دوبعدی است که
شامل چند سطر وستون است .آرایه سه بعدی شامل سطحی ازسطرها
وستونهااست به همین ترتیب آرایه ای باابعادبیشتررامی توان با آرایه
ای باابعادکمترایجادکرد.
• مشخصات ونحو:
تفاوت آرایه چندبعدی وبرداردربازه اندیس هربعداست که اعالن آن به
....
matrix:
array
صورت زیراست[1...20][1....20] of :
....
....
....
integer
• ویژگی آرایه ها»:
.1آرایه ها به دوروش سطری وستونی پیاده سازی می شوند:
سطر
1
ستون k
ستون2
ستون1
سطر
k
فرمول دستیابی به هر آرایه سه بعدی دردوحالت سطری وستونی به صورت زیراست:
30
=)]Lvalue(A[I,J,K
مثال:درآرایه ]A[1....3,1....4وآدرس عنصر] A[2,3رادردوترتیب
سطری وستونی
بدست آورید(فرض کنید آدرس شروع 0وطول هرعنصر1بایت باشد):
Lvalue(A[2,3])=0+[(2-1)(4-1+1)+(3-1)]×1=6سطری
Lvalue(A[2,3])=0+[(3-1)(3-1+1)+(2-1)]×1=7ستونی
.2نمایش حافظه برای آرایه های چندبعدی ازبردارپیروی می کنندبرای
ماتریس ها
اشیای داده اولین سطرسپس اشیای داده دومین سطروبه همین ترتیب
ذخیره می
شودتایک نمایش حافظه ترتیبی ازتمام عناصرآرایه داشته باشیم.
.3توصیفگرآرایه مانندبرداراست بااین تفاوت که حدودباالوپایین
هربعدنگهداری
می شودمانندمثال بعد:
31
32
.4عملیات اندیس گذاری(,استفاده ازفرمول دستیابی برای محاسبه
آفست یک عنصر
ازآدرس پایه آرایه)مانندبردارهاست به طور مثال اگر Aماتریسی
با Nسطرو
Mستون باشدوبه صورت سطری ذخیره گردد،محل عنصر ]A[I,J
به صورت زیرمحاسبه می شود:
Lvalue(A[i,j]) =α+(I-LB1)×S+(J-LB2) ×E
S=(UB2 –LB2+1 )×E
VO=α-LB1×S-LB2×E
Lvalue(A[I,J])=VO+I×S+J×E
33
آرایه هایی باابعادباالتر:
آرایه ]A[L1:U1,.....,Ln:Unیک آرایه nبعدی است که LI
حدودپایین Ui ،حدودباال و eاندازه هرعنصرآرایه است وآرایه
درآدرس αذخیره می شود.
محاسبه ضرایب:
Mn=e
[For each i=n-1 down to 1
Compute: mi=(ui+1 –li+1)×mi+1
محاسبه مبدأ مجازی:
34
آدرس عنصرآرایه:
آدرس عنصر ]A[S1...Snبه صورت زیر محاسبه می شود:
برش آرایه ها:
• مشخصات:
برش بخشی ازیک آرایه است که خودش یک آرایه است.شکل
زیرمثالی ازبرش آرایه ای رانشان می دهد:
35
نکته :یکی از اولین زبانهایی که برش راپیاده سازی کرد PL/Iاست.
مثال :پرل ازدوشکل پشتیبانی می کند:
الف)لیستی ازاندیس ها ]@LIST[1...5]=@LIST2[3,5,7,9,13
ب)محدوده اندیس ها
• پیاده سازی:
پیاده سازی برش هابه کمک توصیفگرآرایه ساده وکارآمداست:فرض
کنیدماتریس A3×4به صورت زیرتعریف شده باشد:
36
می توان توصیفگرزیررابرای آن تولیدکرد:عناصراین آرایه براساس
فرمول زیرقابل دسترسی هستند:
Lvalue(A[I,J])=α+I*3+J*1
α
VO
1
LB1
4
UB1
3
multi1
1
LB2
3
UB2
1
multi2
حدپایین
حدباال
اختالف
حدباالوپایین
فاصله بین
عناصرمتوالی
37
برای پیاده سازی برش)s(*,2میتوان توصیفگری برای
ماتریسAایجادکرداین برش یک بردارستونی رانشان می دهدکه
واحداست.
عناصرسه
بردارستونی رانشان می دهدکه فاصله بین
VO
α-3
1
LB1
4
UB1
3
MULTI1
آرایه های شرکت
انجمنی
آرایه):هاکه تاکنون مطرح شد،روش دستیابی به یک
پذیر(مهم
ویژگی
عنصرخاص ،ازطریق یک نوع شمارشی به نام اندیس
است.عناصرآرایه برحسب این اندیس مرتب هستند وبااستفاده
ازمقادیراندیس می توان به هرعنصرآرایه دست یافت دربعضی
ازبرنامه های کاربردی مطلوب است که ازطریق نام (بدون استفاده
ازاندیس) بتوان به اطالعات دست یافت.
38
مثال:
به ترتیب نام دانشجو و نمره دانشجوی]grade[i],name[iاسامي
افراد كالس را مي توان با دو آرایه نشان داد در این حالت ،یك ترتیب
ضمني با استفاده از اندیس دانشجويiوجود دارد.
درپرل آرایه شرکت پذیربه وسیله عملگر%ایجادمی شودمانندمثال
زیر:
}’%classlist={“ali”,’a’,”ahmad”,’b’,”reza”,’d
39
رکوردها:
رکوردساختمان داده ای مرکب ازتعدادثابتی ازعناصروازانواع
مختلف است.یابه عبارت دیگررکوردمجموعه ای ازعناصرداده ای
است که هرعنصربا یک نام شناخته شده وازطریق آفستی ازشروع
ساختارموردبررسی قرارمی گیرد.
.1عناصررکوردممکن است ناهمگن وازانواع مختلفی باشند.
.2عناصررکورد دارای نام هستند.
40
درمثال زیرمی خواهیم اطالعات دانشجورانگهداری کنیم این رکوردبه
صورت زیرتعریف می شود:
{Struct student
;Int stid
;]Char name[30
;]Char major[15
;Int department
}
;Struct student st1,st2
41
• صفات رکوردهاعبارت
انداز :
تفاوت بین آرایه ورکورد:
عناصررکوردبااندیس دسترسی نمی شوندبلکه بااسامی فیلدهاقابل
ارجاع هستند.بعالوه یک رکوردمی تواندعناصری از جنس
رکوردهای دیگر،یا رکوردخودش داشته باشد.
42
نکته:عناصررکوردرافیلدونام آن رانام
فیلدمی نامند.
فرمول محاسبه برای دستیابی به محل iامین عنصردررکوردبه
صورت زیراست که درآنαآدرس پایه بلوک حافظه است که R
رانشان می دهد.
43
:رکوردها وآرایه هایی باعناصرساختاری
:تعریف رکورددرکوبول به صورت زیراست
01 EMPLOYEE_RECORD
02 EMPLOYEE_NAME
05 FIRST PICTURE IS X(20)
05 MIDDLE PICTURE IS X(10)
05 LAST PICTURE IS X(20)
02 HOURLY_RATE PICTURE IS 99V99.
44
رکورد EMPLOYEE_RECORDازیک رکورد
EMPLOYEE_NAMEویک
فیلد HOURLY_RATEتشکیل شده است .اعداد0,02,05
درابتدای هرخط شماره
سطح وساختارسلسله مراتبی رکوردرانشان می دهد.دستور
PICTUREفرمت ذخیره
سازی هرفیلدرانشان می دهدX(20) .یعنی 20کارکترالفبای عددی
و99 v99یعنی
عدددهدهی ممیزثابت بادورقم صحیح ودورقم اعشار.
45
رکوردهای طول متغییر(یونیون):
یونیون نوعی است که متغیرهای آن مقادیرباانواع مختلف رادرزمان
های متفاوت
حین اجرا می توانند داشته باشند.فرض کنیدیک کامپایلرجدولی
داردکه انواع ثابتهای
درون هربرنامه رادرآن نگهداری می کند.یک فیلدجدول مقدارثابت
است وهمچنین زبان مربوط به این کامپایلراجازه تعریف ثابت هایی
رابانوع صحیح،ممیزشناوروبولین
بدهد.دراین حالت CوC++ازکلمه UNIONودرفرترن
از EQUIVALENCEپس به دودسته.1یونیون آزاد.2یونیون قابل
تشخیص تقسیم می شود.یونیون آزاد درCو C++کاربرد دارد.
46
:به صورت زیرخواهدبودCیک نمونه ازیونیون آزاددر
Union flex type{
int int value;
float floatvalue;
};
Union flex type var1;
Float x;
……..
Var1.intvalue=27;
X=var1.floatvalue;
47
کنترل نوع درآخرین دستورانجام نمی شودزیراسیستم نوع
مقدارفعلیvarرانمی تواند تشخیص دهدبنابراین رشته ی بیتی که
عددصحیح 27رانمایش می دهدبه متغییر ممیز شناورxنسبت می
دهدکه کامال بی معنی است.رکوردطول متغیررایونیون قابل تشخیص
می نامیم.رکوردی باطول متغیرمانندمثال زیرخواهدبود:
48
عنصر payclassدرپاسکال برچسب ودرادامتمایزکننده(مشخص می
کنددرهرزمان چه شکلی ازرکوردقابل استفاده است)
3فیلدID,DEPT,AGEبرای تمامی رکوردها ثابت است.ممکن
است بعضی ازفیلدهادرطول عمررکورد وجودداشته وثابت
باشدیااینکه تغییرکندوازبین برودپس برای این کاربایدکنترل
شونددرنتیجه داریم:
.1کنترل پویا(عنصربرچسب قبل ازدستیابی به آن بررسی می شودکه
آیاوجود داردیانه)
یونیون آزاد
که تعریف رکوردطول متغیربدون
درحالتی
(
نشود
انجام
کنترلی
.2
یونیون قابل
تشخیص).
عنصربرچسب صورت گیرد
نکته :اگردرساختاررکوردازفیلدبرچسب استفاده نشود.
اگرازفیلدبرچسب استفاده شود
49
نمایش حافظه برای رکوردهای طول متغیربه صورت
زیراست:
50
لیست ها
لیست ،ساختمان داده اي است كه دنباله مرتبي از ساختمان داده ها است.
مشخصات و نحو :لیست ها همانند بردارها حاوي دنباله مرتبي از اشیا هستند.
اولین عنصر لیست را معموال راس گویند.
لیست ها از جهات زیر با بردارها متفاوت اند:
.1طول لیست ها به ندرت ثابت است .لیست ها معموال براي نمایش ساختمان داده
ها به كار مي روند .و درطول اجراي برنامه ،كوتاه و بلند مي شوند(.طول متغیر)
.2لیست ها به ندرت همگن هستند .نوع داده هر عنصر لیست ممكن است با
عنصر دیگر متفاوت باشد.
.3زبان هایي كه از لیست ها استفاده مي كنند ،نوعا چنین داده اي را به صورت
ضمني ،بدون صفات صریحي براي اعضاي لیست ،تعریف مي كنند.
51
نحو زبان لیسپ ،ساختار لیست را به صورت زیر نمایش مي دهد:
)(FunctionName Data1, Data2 , ……,Datan
لیسپ با اعمال FunctionNameبر روي آرگومان هاي Data1تا Datanاجرا مي
شود.
اغلب عملیات در لیسپ ،آرگومان هاي لیست را گرفته ،مقادیر لیست را برمي گردانند.
به عنوان مثال :
Consدوآرگومان لیست را مي گیرد و لیستي را برمي گرداند كه آرگومان اول آن به
ابتداي آرگومان دوم اضافه مي شود.
)(cons ‘ )a b c ( ‘)d e f(( = ))a b c (d e f
این مثال نشان مي دهد كه نتیجه ،لیستي با چهار عنصر است كه عنصر اول ،لیست)(a,b,c
است .چهار عنصر لیست حاصل ،از یك نوع نیستند.اولي یك لیست است(عنصر اول
لیست) ،در حالي كه بقیه ،عناصر اولیه یا اتم هستند.
52
این مثال همچنین ویژگي مهم از زبان لیسپ را نشان مي دهد كه در آن تمام آرگومان
هاي تابع ابتدا ارزیابي مي شوند .اگر عبارتي به صورت زیر نوشته شود:
))(cons (a b c )d e f
لیسپ ابتدا تالش مي كند تابع ( )aرابا آرگومان هاي ( )bو ( )cارزیابي كند و سپس
سعي مي كند تابع( )dرا با آرگومان هاي تابع ()fو ( )eارزیابي نماید .این كار احتماال با
خطا مواجه مي شود.
تابع) (quote xیا’ xفقط مقدار لیترال (مقدار چپ) آرگومان خود را بر مي گرداند،
لذا از ارزیابي نادرست جلوگیري مي شود(.مشخص میکند که خودش یک پارامتر است
نیاز به ارزیابی ندارد).
نحو لیست در ام ال نیز به صورت ][a, b, cاست .لیست ها در ام ال همگن هستند.
یعني مي توان لیستي از مقادیر صحیح مثل[ ]1,2,3یا لیستي از رشته ها مثل
[” ]“abc” , “defداشت.
53
پیاده سازي .از ماهیت پویاي اغلب پیاده سازي هاي لیست و این واقعیت كه عناصر
موجود در لیست به ندرت همگن هستند:
نتیجه مي شود كه مدیریت حافظه منظم كه براي بردارها و آرایه ها مفید است ،در اینجا
قابل استفاده نیست.
در چنین مواردي ،معموال از سازمان مدیریت حافظه پیوندي استفاده مي شود .یك قلم
لیست ،یك عنصر اولیه است كه معموال شامل شي داده اي به اندازه ثابت است.
در لیسپ به سه فیلد از اطالعات نیاز داریم.
یك فیلد نوع و دو اشاره گر لیست ،اگر فیلد نوع ،اتم باشد ،آنگاه فیلدهاي باقي مانده
توصیفگرهایي هستند كه این اتم را توصیف مي كنند.
اگر فیلد نوع ،یك لیست باشد ،اشاره گر اول ،راس لیست است (اولین عنصر لیست) در
حالي كه اشاره گر دوم ،انتهاي لیست است( ،اعضاي باقي مانده).
ساختار حافظه را براي مثال فوق نشان مي دهد:
()cons ‘ )a b c ( ‘)d e f(( = ))a b c (d e f
54
شباهت بین ساختارهاي پایین و وسط در شكل صفحه بعد كارایي این پیاده
سازي را براي این ساختار نشان مي دهد.
.Cons.1عملیات consیا الحاق به این صورت پیاده سازي مي شوند :گره جدیدي
از لیست ایجاد مي شود وفیلد راس به عنوان آرگومان اول consو فیلد انتها به عنوان
آرگومان دوم consمنظور مي شود.
.Head.2راس لیست ،محتویات (مقدار راست) فیلد راس لیست است.
Tail.3انتهاي لیست ،محتویات فیلد انتهاي لیست است.
55
56
شكل هاي گوناگون لیست ها
در بعضي از زبان ها شكل هاي مختلفي از ساختارهاي لیست وجود دارد.
پشته ها و صف ها .پشته لیستي است كه انتخاب ،درج و حذف عناصر از انتهاي
آن انجام مي شود .صف لیستي است كه انتخاب و حذف از یك طرف و درج از طرف
دیگر انجام مي شود .حافظه پشته و صف را مي توان به صورت ترتیبي یا پیوندي نمایش
داد(.پشته زمان اجرا یک شی داده مهم است که توسط سیستم تعریف می شود،صف ها در
زمان بندی و همزمان سازی زیر برنامه ها کاربرد دارند).
درخت ها .لیستي كه عناصرش عالوه بر اشیاي داده اولیه ،ممكن است لیست باشند،
درخت نام دارد ،به شرطي كه هر لیست فقط یك عنصر از اولین لیست باشد(.درخت ها
برای نمایش جدول نمادها در کامپایلر به کار می روند).
گراف هاي جهت دار .ساختمان داده اي كه عناصر آن با استفاده از الگوي پیوندي
خاصي به هم پیوند داده مي شوند (به جاي دبناله خطي از عناصر) ،گراف جهت دار نام
دارد.
57
لیست هاي خاصیت .اگر در ركوردي با تعداد متغیري از عناصر ،تعداد عناصر بدون
هیچ محدودیتي تغییر كند ،لیست خاصیت نام دارد.
در لیست خاصیت ،اسامي عناصر (اسامي فیلدها) و مقادیر آنها باید ذخیره شوند هر نام
فیلد ،نام خاصیت نامیده مي شود.
مقدار متناظر فیلد ،مقدار خاصیت نامیده مي شود.
نمایش متداول براي لیست خاصیت ،همان لیست پیوندي معمولي است به طوري كه
اسامي صفت و مقادیر آنها در یك دنباله طوالني تغییر مي كنند(.شکل صفحه بعد)
براي انتخاب یك مقدار خاصیت ،لیست جستجو مي شود تا خاصیت مطلوب پیدا شود .فقط
اسامي خاصیت ها بررسي مي شوند پس از یافتن خاصیت مطلوب ،عنصر بعدي لیست،
مقدار آن خاصیت است،
وقتي خاصیت جدیدي در لیست خاصیت (لیست توصیفی)درج مي شود:
دو عنصر درج مي گردد كه عبارتند از :نام خاصیت و مقدارش.
58
59
مجموعه ها
مجموعه شي داده اي است كه شامل مقادیر نامرتب و مجزا است ،در حالي كه لیست از
تعدادي مقادیر مرتب تشكیل شده است كه ممكن است بعضي از عناصر آن تكراري
باشند.
عملیات اصلي روي مجموعه ها عبارتند از:
.1عضویت .آیا مقدار( )xعضوي از مجموعه )(sاست)(XЄS
.2درج و حذف یك مقدار .اگر فعال)(Xعنصري از مجموعه ()sنباشدمي توان آن را
در)(Sدرج كرد .چنانچه) (xعضو )(sباشد مي توان آن را از مجموعه)(Sحذف كرد.
.3اجتماع ،اشتراك و تفاضل مجموعه ها.
60
پیاده سازي .در زبان هاي برنامه سازي ،منظور از مجموعه ،ساختمان داده اي است
كه عناصر مرتب را نشان مي دهد ،مجموعه مرتب ،لیستي است كه مقادیر تكراري آن
حذف شده اند.
مجموعه نامرتب ،دو نمایش حافظه دارد:
نمایش بیتي مجموعه ها .نمایش حافظه بیتي در حالتي مناسب است كه اندازه مقادیر
مجموعه جهاني ،كوچك باشد.نمایش تابع ویژگي مجموعه ،رشته بیتی را نشان می دهد در
این نمایش برای درج یک عنصر در مجموعه باید بیت مناسبی را به یک تبدیل کرد و برای
حذف یک عنصر از مجموعه باید بیت مناسبی را صفر نمود.
;For A=set of 1…6
حال اگر درAمجموعه [ ]2،3،5با دستور [ A= ]2،3،5ذخیره گردد.حافظه به شکل زیر
در می اید:
61
نمایش درهم سازي مجموعه ها .نمایش دیگري براي مجموعه ،براساس
تكنیك درهم سازي یا حافظه پراكنده است ،از این روش وقتي استفاده مي شود كه
مجموعه جهاني بزرگ باشد (مثال وقتي كه مجموعه شامل اعداد و رشته هاي كاراكتري
باشد).
حتي بهترین تابع درهم سازي نمي تواند تضمین كند كه داده هاي مختلف ،آدرس هاي
درهم سازي مختلفي را ایجاد مي كنند .گرچه مطلوب است كه تابع درهم سازي ،آدرس
هاي درهم سازي تولید شده را در سراسر بلوك پخش كند ،ممكن است دو داده مختلف ،یك
آدرس درهم سازي را تولید كنند .در این صورت مي گوییم .برخورد پیش مي آید تكنیك
هاي زیادي براي مقابله با برخورد وجود دارد:
(عنصر جدید xرا که به صورت رشته بیتی Bxاست).
درهم سازي مجدد .مي توانیم رشته بیتی( )Bxرا اصالح كنیم (مثال با ضرب كردن در
یك مقدار ثابت) و نتیجه را دوباره درهم سازي كنیم تا آدرس درهم سازي جدیدي ایجاد
شود .اگر برخورد دیگري پیش آمد ،درهم سازي را تكرار مي كنیم تا( )Bxپیدا شود یا یك
محل خالي در بلوك پیدا شود.
62
پیمایش ترتیبي .جستجو را از نقطه برخورد در بلوك شروع مي كنیم تا Bxیا یك
محل خالي در بلوك پیدا مي شود.
باكت بندي.
مي توانیم اشاره گرهایي را در بلوك در نظر بگیرم كه به لیستهاي باكت
پیوندي اشاره كنند كه حاوي عناصر با آدرسهاي درهم سازي یكسان است .پس از درهم
سازي) (Bxو بازیابي اشاره گر به لیست باكت مناسب آن لیست را براي )(Bxجستجو
مي كنیم چنانچه پیدا نشد آن را به انتهاي لیست اضافه مي كنیم.
63
تكامل مفهوم نوع داده
چون كامپیوترهاي واقعي محدودیت هایي را براي تعریف نوع اعمال نمي كنند ،اغلب
زبان هاي برنامه سازي انواع داده اولیه اي مثل حقیقي ،صحیح و رشته كاراكتري را
دارند.
مفهوم اولیه نوع داده ،نوع را به صورت مجموعه اي از مقادیر تعریف مي كند كه یك
متغیر مي تواند آنها را بپذیرد .متغیرها را مي توان از نوع مورد نظر اعالن كرد.
براي انواع اولیه اي مثل حقیقي و صحیح ،زبان برنامه سازي ،امكاني را براي اعالن
متغیرهاي آن نوع عملیاتي را براي آنها تدارك مي بیند .نمایش حافظه مربوط به مقادیر
حقیقي و صحیح ،كامال بسته بندي شده است یعني از برنامه نویس پنهان است .برنامه
نویس بدون اینكه از جزییات نمایش حافظه این انواع اطالع داشته باشد ،از اشیاي داده
آنهااستفاده مي كند .برنامه نویس فقط نام نوع و عملیاتي را براي دستكاري آن نوع فراهم
مي بیند.
64
انتزاع داده .براي بسط مفهوم بسته بندي به داده هایي كه توسط برنامه نویس تعریف
مي شود .نوع داده انتزاعي را به صورت زیر تعریف مي كنیم:
.1مجموعه اي از اشیاي داده معموال با استفاده از یك یا چند تعریف نوع.
.2مجموعه اي از عملیات انتزاعي بر روي آن انواع داده
.3بسته بندي تمام آنها ،به طوري كه كاربر نوع جدید نتواند اشیاي داده اي از آن نوع
را ،به جز از طریق عملیاتي كه براي آن تعریف شده است ،دستكاري كند.
65
پنهان سازي اطالعات
براي نوشتن برنامه بزرگ بایداز استراتژي تقسیم و حل استفاده كرد :برنامه به
مجموعه اي از قطعات بنام ماژول تقسیم مي شود .هر ماژول مجموعه محدودي از
عملیات را بر روي مقدار محدودي از داده ها انجام مي دهد .بدین ترتیب ،كنترل منطقي
بر فرآیند طراحي برنامه وجود خواهد داشت.
طراحي ماژول معموال به دو روش انجام مي شود:
.1ماژول ها ،تجزیه تابعي برنامه را نشان مي دهد(.مدل متداول برنامه نویسي در دهه
1960بود ،و ساختار زیربرنامه ها ،رویه ها و توابع ،از آنها نتیجه مي شود).
.2ماژول ها تجزیه داده اي برنامه را نشان مي دهند(.براي استفاده از نوع داده ،فقط
باید مشخصات آن معلوم باشد ،جزییات پیاده سازي پنهان هستند و مي توان از آنها
صرف نظر كرد).
66
زبان برنامه سازي انتزاع را به دو روش پشتیباني مي كند .در یك روش با
تدارك كامپیوتر مجازي كه كاربرد آن آسان تر و قدرت آن بیشتر است كامپیوتر سخت
افزار است ،مجموعه مفیدي از انتزاع ها را تدارك مي بیند كه به عنوان ویژگي هاي زبان
مي شناسیم.
در روش دوم ،زبان امكاناتي را فراهم مي كند كه برنامه نویس مي تواند انتزاع ها را به
وجود آورد ،انتزاع هایي كه كامپیوتر مجازي تعریف شده توسط كاربر را به وجود مي
آورند .زیربرنامه ها ،كتابخانه هاي زیربرنامه ،تعاریف نوع ،كالس ها و پكیج ها بعضي
از امكاناتي هستند كه در زبان هاي مختلف براي پشتیباني از انتزاع هاي برنامه نویسي
وجود دارد.
67
پنهان سازي اطالعات ،اصطالح مهمي در طراحي انتزاع هاي برنامه نویسي است.
هر قطعه از برنامه باید تا آنجایي كه ممكن است اطالعات را از كاربران آن قطعه
پنهان كند.
وقتي اطالعات در یك انتزاع بسته بندي شدند ،معنایش این است كه :
.1الزم نیست كاربر از اطالعات مخفي اطالع داشته باشد تا بتواند از آن انتزاع
استفاده نماید.
.2در صورت لزوم ،نمي تواند مستقیما ٌ اطالعات مخفي را دستكاري
كند(.مانند:نمایش عدد صحیح در فرترن و پاسکال)
68
زیربرنامه ها:
زیربرنامه یک عملیات انتزاعی است که توسط برنامه نویس تعریف
می شود .به عبارت دیگر :زیربرنامه نمایانگریک تابع ریاضی که
مجموعه خاصی ازآرگومانها را به مجموعه خاصی ازنتایج نگاشت
می کند.
دودیدگاه اززیربرنامه مهم است:
.1درسطح طراحی زبان(طراحی وپیاده سازی امکاناتی است که
برای تعریف وفراخوانی زیربرنامه تهیه می شود).
.2درسطح طراحی برنامه (روش نمایش عملیات انتزاعی که برنامه
نویس تعریف می کنددرمقایسه باعملیات اولیه موجوددرزبان
مورد توجه است)
69
• مشخصات زیربرنامه:
.1نام زیربرنامه
.2امضای زیربرنامه(که تعدادآرگومان ها،ترتیب ونوع هرکدام
ازآنها وتعدادنتایج وترتیب ونوع آنها بایدمشخص باشد)
.3عملیاتی که توسط زیربرنامه انجام می شود.
نکته :اگرزیربرنامه یک مقداری برگرداند به آن زیربرنامه تابع می
گویم.مانندزیر:
70
نکته :دربعضی اززبان ها برای اعالن زیربرنامه ها ازکلمات کلیدی
مانند procedure,function
مثال :درپاسکال داریم:
رویه (زیرروال):
اگرزیربرنامه بیش ازیک مقداررابرگرداندیا آرگومانهای
خودراتغیردهدرویه یازیرروال نامیده می شود.
درvoid ،cنشان می دهدکه تابع مقداری رابرنمی گرداند.نام
پارامترمجازی که با* مشخص شده است نشان دهنده ی پارامتری
است که تغیرات آن درزیربرنامه ،دربرنامه فراخوان قابل دسترسی
است.
71
مشکل زیربرنامه ها:
.1
.2
.3
.4
زیربرنامه ممکن است آرگومان ضمنی به شکل متغیرهای
غیرمحلی داشته باشد.
زیربرنامه ممکن است نتایج ضمنی(اثرات جانبی) داشته باشد،به
طوری که متغیرهای غیرمحلی یاآرگومانهای ورودی_خروجی
راتغیردهد.
زیربرنامه ممکن است برای بعضی ازآرگومانها تعریف نشده
باشد.به طوری که کامل اجرانمی شوندبلکه کنترل اجرارابه
پردازنده ی استثناارسال می کنندیاکل برنامه رابه طورناقص
خاتمه می دهند.
زیربرنامه ممکن است به گذشته حساس باشد.یعنی نتایج آن به
72
پیاده سازی زیربرنامه:
زیربرنامه ،عملیاتي از الیه كامپیوتر مجازي را نشان مي دهد كه
توسط برنامه نویس ساخته مي شود و در نتیجه،زیربرنامه با استفاده
از ساختمان داده و عملیاتي پیاده سازي مي گردد كه توسط خود زبان
برنامه سازي ارائه مي شود .پیاده سازي توسط بدنه زیربرنامه تعریف
مي شود كه متشكل از اعالن داده هاي محلي است كه ساختمان داده
هاي مورد استفاده زیربرنامه ها را تعریف مي كنند و شامل دستوراتي
است كه عملكرد زیربرنامه ها رامشخص مي كنند .اعالن ها و
دستورات طوري بسته بندي مي شوند كه داده هاي محلي و دستورات،
به طورجداگانه توسط كاربر زیربرنامه ها قابل دستیابي نیستند .كاربر
مي تواند زیربرنامه ها را با آرگومان هاي خاصي فرا خواني كند و
نتایج محاسبه را دریافت نماید.
73
نحوCبرای بدنه زیربرنامه به صورت زیر است:
تعریف وفراخوانی زیربرنامه:
• تعاریف وسابقه فعالیت زیربرنامه:
تعریف زیربرنامه ها ،خاصیت ایستاي یك برنامه است .در حین
اجراي برنامه ،اگر زیر برنامه اي فراخواني شود،سابقه فعالیتي از آن
زیربرنامه ایجاد مي شود .وقتي زیر برنامه ها خاتمه یافت .سابقه
فعالیت آن نیز از بین می رود .تعریف زیر برنامه ،قالبي براي ایجاد
سابقه فعالیت در حین اجرا است.درواقع سابقه فعالیت یک
زیربرنامه،نوعی شی داده ای است که دربلوکی ازحافظه نشان داده
74
تعریف زیربرنامه:
تعریف ،چیزي است كه در برنامه نوشته مي شود و تنهااطالعاتي
است که در زمان ترجمه وجود دارد یعني نوع متغیرهاي زیربرنامه
ها مشخص است ،ولي مقادیر (مقدارراست)یا محل آنها (مقدار چپ)
.
نیست
مشخص
فعالیت زیربرنامه:
سابقه فعالیت زیربرنامه ها فقط در حین اجراي برنامه وجود دارند.در
حین اجرا ،كد مربوط به دستیابي به مقدار چپ یا مقدار راست متغیر
مي تواند اجرا شود ،اما نوع متغیر ممكن است وجود نداشته باشد مگر
اینكه مترجم این اطالعات را توصیفگر متغیر ذخیره كرده باشد .سابقه
فعالیت زیربرنامه ها ،داراي طول عمر است كه از فراخواني
زیربرنامه ها شروع مي شود و تا از بین رفتن آن ادامه دارد.
75
مثال :
76
این تعریف،اجزایی رامشخص می کندکه سابقه فعالیت
زیربرنامه درزمان اجرابه آنهانیازدارد:
.1
.2
.3
.4
خط امضای ،FNاطالعاتی رابرای حافظه پارامترها(اشیای
دادهXو)Yوحافظه الزم برای نتیجه تابع ارایه می کند.
اعالنهایی وجوددارندکه حافظه رابرای متغیرهای محلی
(آرایهMومتغیر)Nآماده می کنند.
حافظه مربوط به لیترال ها وثوابت تعریف شدهinitval.ثابتی
بامقدار2و finalvalثابتی بامقدار10است10.و20لیترال هستند.
حافظه الزم برای کداجرایی که ازدستورات بدنه زیربرنامه
تولیدمی شود.
77
یکی ازخواص مهم Cاین است که صفت CONSTبه
کامپایلرCاطالع می دهدکه شی داده initvalدارای مقدارلیترال 2
است.دستورdefine #یک دستورپیش پردازنده(ماکرو) است که به
جای هر finalvalکارکترهای “”10راقرارمی دهد.مترجم cنام
finalvalراپردازش نمی کند.اثرات عملی هردودستوردرزیربرنامه
اجرایی یکسان است امامعنای آنهامتفاوت استinitval .دارای یک
مقدارچپ است که مقدار راستش 2است،درحالی که finalvalفقط
دارای مقدارراست 10است.
زیربرنامه دارای دوفضااست:
.1بخش پویا(رکوردفعالیت)
.2بخش ایستا(سگمنت کد)
78
.1بخش ایستا :
كه سگمنت كد نام دارد و حاوي ثوابت و كد اجرایي است .این بخش
در حین اجرازیربرنامه هاباید ثابت باشد ،لذا یك كپي از آن مي تواند
بین تمام سوابق فعالیت زیربرنامه ها مشترك باشد.
.2بخش پویا:
بخش پویا كه ركورد فعالیت نام دارد و شامل پارامترها ،نتایج تابع و
داده هاي محلي و ناحیه حافظه موقت،نقاط برگشت و پیوندهایي براي
مراجعه به متغیرهاي غیر محلي است ساختار این بخش براي تمام
سوابق فعالیت زیربرنامه ها یكسان است .اما مقادیر متفاوتي در آنها
وجود دارد .لذا ،هر سابقه فعالیت یك كپي ازركورد فعالیت مخصوص
به خود را دارد.
79
شکل زیرمفهوم دوبخش ایستاوپویارانشان می دهد:
نکته:اندازه و ساختار ركورد فعالیت مورد نیاز براي یك زیربرنامه ها،
مي تواند در زمان ترجمه تعیین شود.
دوعمل مخفی که درهنگام فراخوانی زیربرنامه صورت می گیرد:
Prolog .1
Epilog .2
80
:Prolog
این اعمال بایدقبل ازدستورات اجرای زیربرنامه گنجانده شود.انجام
این مقدمات توسط مترجم قبل ازاجرای کدزیربرنامه انجام می
شودوشامل عملیاتی چون:تنظیم رکورد فعالیت ،انتقال
پارامترها،ایجادپیوندبرای ارجاع های غیرمحلی و.....
:Epilog
این اعمال هنگام خاتمه زیربرنامه انجام می شودتانتایج
رابرگردانندوحافظه رکورد فعالیت راآزاد کنند.برای این اعمال
نیزدستوراتی توسط مترجم درانتهای کداجرایی قرارداده می شود.
81
زیربرنامه های کلی:
مشخصات زیربرنامه ها ،تعداد ،ترتیب و نوع آرگومان ها را مشخص
مي كند .زیربرنامه كلي ،زیربرنامه اي با یك نام اما چندین تعریف
است كه با امضاهاي مختلف مشخص مي شوند .زیربرنامه كلي را
زیربرنامه ي مجددا تعریف شده نیز مي نامند.
)Procedure Enter (Student:integer;Sect:in out Section
is
Begin
;End
Procedure Enter(S:in Section;Tab:in out Classlist) Is
Begin
End
82
تعریف زیربرنامه به عنوان شی داده:
تعریف زیربرنامه ها مستقل از اجراي آن است.برنامه
c++,c
منبع توسط كامپایلر به شكل اجرایي در مي آید .در حین اجراي
برنامه ،بخش ایستاي تعریف زیربرنامه ها ،غیر قابل دستیابي و غیر
قابل مشاهده است.
تمایزي بین این مرحله (تعریف واجرا)وجود
Prolog,lisp
ندارد .با تعریف زیربرنامه ها مي توان مثل اشیاي داده زمان اجرا
برخورد كرد(.زبانی مفسری است).
ترجمه:
ترجمه عملیاتي است كه تعریف زیربرنامه ها را به شكل رشته
كاراكتري گرفته ،شي داده زمان اجرا را تولید مي كند.
اجرا:
83
تعریف نوع:
یک زبان برنامه نویسی بایدامکاناتی جهت تعریف نوع جدیدباتوجه به
نوع های اولیه موجود درزبان فراهم سازد.هرنوع شامل یک name
ویکdescriptionمی باشد.
مثال:
Pascal
84
مزایای تعریف نوع:
•
•
•
•
ساده کردن ساختاربرنامه
جلوگیری ازتکرارtypeهای موجوددرزبان
ساده ترکردن انتقال پارامترها
یک شکل جدیدازبسته بندی وپنهان سازی اطالعات به وجودمی
آورد.
هم ارزی نوع:
كنترل نوع ،چه به صورت ایستا و چه به صورت پویا ،مقایسه بین
نوع آرگومان واقعي و نوع داده اي است كه عملیات انتظار آن را
دارد .اگر انواع یكسان باشند ،آرگومان پذیرفته مي شود و عملیات
ادامه مي یابد .اگریكسان نباشند ،یا خطا محسوب مي شود یا تبدیل
85
برای بررسی هم ارزبودن دونوع داده ای دوراه حل
وجوددارد:
هم ارزی نام
هم ارزی
ساختار
86
• هم ارزی نام:
دو نوع داده وقتي هم ارز هستند كه نام آنها یكسان باشد.مزیت هم
ارزی نام پیاده سازی آسان این نوع هم ارزی می باشد.
;Type Vect1:array [1...10] of integer
Vect2: array [1…10] of integer:
;Var X, Z: Vect1; Y: vect2
)Procedure sub (A: Vect1
Begin
;end
Begin
X:=Z
;X: =Y
87
معایب هم ارزی نام:
.1هر شیئي كه در انتساب به كار مي رود باید داراي نام باشد ،یعني انواع
داده بي نام وجود ندارند.
متغیرwنوع مستقلی دارداما نمي تواند به عنوان آرگومان زیربرنامه ها
باشد ،زیرا نوع آن فاقد نام استVar W: array [1….10] of .
;real
.2یك تعریف نوع باید در سراسر برنامه یا بخش بزرگي از برنامه قابل
استفاده باشد
زیرا نوع شي داده اي كه از طریق زنجیره اي از زیربرنامه ها به
صورت آرگومان انتقال
داده شد ،نمي تواند دوباره در هراسامی زیربرنامه ها تعریف شود .باید از
تعریف
نوع عمومي استفاده كرد .تعریف كالس هاي درc++نمونه ای ازآن است.
88
• هم ارزی ساختاری :
دو نوع داده وقتي هم ارز هستند كه اشیاي داده آنها عناصر داخلي
یكساني داشته
باشند .معموال،معناي عناصر داخلي یكسان این است كه تمام اشیاي
داده از یك نمایش
حافظه استفاده كنند به عنوان مثالVect 1،و Vect 2براساس این
تعریف ،هم ارز
هستند .زیرا تعداد عناصر ،نوع و ترتیب آنها در اشیاي داده
Vect2وVect1یكسان
است .نمایش حافظه هر دو نوع اشیاي نیز یكسان است.مزیت آن این
است که
انعطاف پذیری برنامه افزایش می یابد.
89
معایب هم ارزی ساختاری:
.1وقتي دو نوع از نظر ساختاري هم ارز باشند ،در موردركوردها،
آیا اسامي فیلدها باید یكسان باشند،؟ یا اگر تعداد و نوع فیلدها و
ترتیب آنها یكسان باشد ،كافي است ،اگر اسامي فیلدهاي ركورد
یكسان باشند ،آیا ترتیب فیلدها باید یكي باشد؟
.2جهت تشخیص معادل بودن typeبایدهزینه پرداخت شودیعنی
زمان راازدست می دهیم کامپایلربایدزمان صرف کندکه
آیادوtypeبرابرندیانه؟
.3دو متغیر ممكن است به طور یتصادفي از نظر ساختاري یكسان
باشند،درحالی که ازدیدبرنامه نویس متفاوت باشند.دراین موقع
زبان برنامه نویسی کمکی به کنترل نوع ایستانمی تونه بکن.
90
مثال :
Type meter=integer
;liters=integer
;Var Len: meter
;Vol: Liters
تساوی دوشی داده ای:
تساوي اشیاي داده .وقتي كامپایلر مشخص مي كند كه دو شي داده از
یك نوع اند ،آیا آن دو شيء با هم مساویند؟فرض کنید
دومتغیرA,BازنوعXهستند.تحت چه شرایطی A=Bاست؟
دوتعریف زیرزیررادرC++برایSETوSTACKدرنظربگیرید:
91
تساوی پشته ای:
اگرفرض کنیم topstackبه شی داده موجوددرdataاشاره می کندکه
درباالی پشته قرارداردتساوی بین x,yبه صورت بیان می کنیم:
X.topstack=y.topstack .1
.2برای تمامی iهای بین0وtopstack-1داریم
]x.data[i]=y.data[i
92
:تساوی مجموعه
تساوی،استA,Bتعداداشیای موجوددرnumberinsetاگرفرض شود
:رابه صورت زیرتعریف می کنیمA,Bبین
A.numberinset=B.numberinset .1
A.data[0[…..A.data[numberinset-1 .2
.استB.data[0[…..B.data[numberinset-1]جایگشت
93
تعریف انواعی که پارامتردارند:
دربرخی اززبان هامانندAdaاین امکان وجودداردکه درتعریف نوع
ازپارامتراستفاده شودوبتوان اشیاداده ازنوع یکسان وبااشکال متفاوت
ایجادکرد.
مثال:
Type section(maxsize:integer) is
Record
;Room:integer
;Instructor:integer
;Classsize :integer
;End record
94
دراینجاmaxsizeبه عنوان پارامتردرتعریف نوع sectionآمده است.
دراین تعرین می توان متغیری به صورت زیرتعریف کرد:
;)X:section(100
;)Y:section(25
ازجهت پیاده سازی کامپایلرابتدابایدارزش پارامتررامحاسبه کردسپس
باتوجه به ارزش پارامتروتایپ مشخص شده،نوع جدیدی
ازمتغیرتعریف خواهدکرد.درحقیقت متغیربایددو مرحله طی کند.
.1ارزشیابی پارامتر
.2تعریف تایپ جدید
95
موفق و پیروز باشید.
فاطمه رازی
فاطمه رحیمی
96