مقاله مقدمهای بر Object Pascal با word دارای 37 صفحه می باشد و دارای تنظیمات در microsoft word می باشد و آماده پرینت یا چاپ است
فایل ورد مقاله مقدمهای بر Object Pascal با word کاملا فرمت بندی و تنظیم شده در استاندارد دانشگاه و مراکز دولتی می باشد.
توجه : در صورت مشاهده بهم ریختگی احتمالی در متون زیر ،دلیل ان کپی کردن این مطالب از داخل فایل ورد می باشد و در فایل اصلی مقاله مقدمهای بر Object Pascal با word،به هیچ وجه بهم ریختگی وجود ندارد
مقدمهای بر Object Pascal
چنانچه درباره مكآپ مطالعهای داشته باشید ممكنست تعجب كرده باشید از اینكه باید برنامهریز Macintosh peogrommer’s Workshop(MPW) را تهیه كنید و بخصوص اینكه این برنامهریز باید به زبان پاسكال نوشته شده باشد. فعلاً پاسخ مثبت است. در مورد آن كسانی كه تألیفات دیگران را دوست دارند و یا برنامهریزی به زبان دیگر مثلاً C را ترجیح میدهند در حال حاضر شانس زیادی ندارند. دلیل آن دو چندان است. بسیاری از زبانها بروی Macintosh مطالب لازم را كه سیستم مكآپ دارد ندارند و حتی اگر داشته باشند سرعت پاسكال را ندارند.
در این مقاله، ابتدا ساختار O.P را توضیح داده سپس بعضی از معناشناسیهائی مورد استفاده در این ساختار را پیشنهاد میكنیم. در خصوص مراحل مختلفی از سازگاری بحث میكنیم كه یك زبان یا مؤلف دیگر برای استفاده از مكآپ و مراحل رسیدن به هدف آن نیاز دارد. خصوصاً، شغل خاص كه حاوی و زبان معمولی را كه به آن كه مربوط میشود نشان میدهیم. یكی هم راجع به چگونگی اضافه كردن مواد به زبان MPW صحبت خواهیم كرد. در آخر نمائی از آنچه تا بحال فرا گرفتهایم ارائه میكنیم.
Object Pascal
پیوست و ادامهای است بر زبان پاسكال كه با مشورت نیكلاس ویرث، مخترع سیستم پاسكال، در شركت آپل انجام شد. این تداوم ناشی از تلاش نوعی از تشخیص پاسكال به نام كلسكال میباشد كه در كامپیوتر لیزا قابل دسترسی بود. خود مكآپ حاصل تولكیت لیزا، كه كارگاهی كاربردی برای ایجاد كاربردهای لیزا است، میباشد. لیزا تول كیت به زبان كلسكال نوشته شده است.
در سیستم O.P. معناشناسیهای معدودی دیده میشوند. غوده آبجكت، نوع جدیدی از دادههاست. Object شباهت بسیار زیادی به شرح كتبی دارد كه میتواند رشته دادههای مضاعف نوع گشتاری را در خود جای دهد. مضافاً اینكه، فهرستی از روشها و دستورالعملهائی مربوط به متدهای مختلف را برای نوع خاصی از Object مشخص میكنید. این متدها، نقش هر یك از این نوع Object را توضیح میدهد. مثلاً میتوانید نوع ظاهری Object را به شرح زیر تعریف كنید:
type
Shape = object
Bounds : Rect
Color: Pattemm
Pracedave Draw:
Procedure Erase:
Procedure Rotate (angle: integer):
Procedure Meve (delta: Point)
Function Area: integer:
End:
بعلاوه، میتوانید نوعی از Object را كه دارای حوزهها و روشهای Object نوع دیگری باشد نیز شناسائی كنید. نوع جدید میتواند روشها و حوزههای جدیدی را مشخص نموده روشها كه را كه در درون نهفته دارد و موردنظر شماست انتخاب نماید.
Type
Circle = object (Shape)
Radias: integer
Procedure Draw: override:
Function Area: integer: override
Procedure SetRadis (new Raduig: unteger)
End
هر مدلی از Object معمولاً اشاره به گروهی دارد. در مثال بالا، دایره زیرگروه شكل است. شكل گروه اصلی دایره میباشد. هر گروه (نوع Object) میتواند زیرمجموعهها (انشعابات) زیادی داشته باشد، اما فقط یك سرگروه (اصل) دارد. وقتی از مفهوم ارتباط صحبت میشود اكثراً از واژه گروه (Class) استفاده میكنیم. هر وقت از انواع داده پاسكال حرف میزنم، واژه Object را به كار میبرم.
Object ها از نامگذاری روشهای انواع جدید فرمهای پاسكال بوجود آمدهاند. لغت جدید (دایره) را به كار میبرید تا مثالی برای Object نوع دایرهای بزنید. وقتی در مورد متغیرهای از نوع Object از واژه جدید استفاده میشود، به ذخیرهای كافی در گروه اشاره داشته میزان متغیر را تا رسیدن به داده موردنظر (نقطه به نقطه) تنظیم میكند. فلشهای دوبل معمولاً برای تفهیم و بیان عدم مراجعهای كه بطور اتوماتیك توسط مؤلف انجام میشود مورد نیاز است، بنابراین میتوان مستقیماً به حوزههای اطلائی دست یافت، بعنوان مثال:
Acircle.bounds درست است نه Bounds 88 aCricle. برعكس برای استناد به روشی كه برای همان بیان استفاده میكنید باید نوشت: Acricle این طرح به روش نوع شیئی دایره شكل استفاده دارد. از آنجا كه همه متغیرههای نوع Object به دادهها برمیگردند. نموداری مثل شكل 1=: شكل 2 باعث میشود كه نحوه شكل 1 بر دادههای شكل 2 منطبق شود.
حوزههای یك موضوع خود میتوانند مرجعهائی باشند برای موضوعات دیگر. مثلاً میتوانید برای تعریف Shape حوزه جدید Shape بعدی را تعریف كنید و فرمهای بهم پیوستهای داشته باشید با سیستم O.P. میتوانید نوع جریانی را كه میتواند مرجعی ناشناخته باشد شناسائی كنید. در این روش، میتوانید مرجعی دورانی برای انواع Object كه داشته باشید. چنانچه رالف با مشخص كننده یا مأنوسی مواجه شود میتوان پذیرفت كه بزودی مشخص خواهد شد. چنانچه بعداً عنوان نشد، دستگاه علامت error میدهد. اندازه موضوع نامشخص به دلیل اینكه مرجع آن همیشه چهار بایت است زیاد مهم نیست. عمقی كه هر نوع Object بتواند داشته باشد نامحدود است. میتوانید نسلی كوچك از یك دایره و یا نسل كوچك دیگری از آن نوع و امثال آنرا داشته باشید. هر نسلی كه جانشین میشود همه حوزهها و روشهای همه نیاكان خود را بهمراه دارد.
لازمه O.P. اینست كه نوع تعریف شده Object در بالاترین سطح دستگاهها یا برنامه بوده همیشه مدتی قابل ارائه باشد. در مورد یك دستگاه، این قضیه میتواند حالت متقابل داشته و یا بخشی تكمیلب باشد. پیكره یا كد واقعی این روش در دستورالعمل دستگاه و كاربرد یا برنامه كار قطعه ظاهر میشود. چنانچه پیكره روش اظهار شده در پرونده ظاهر نشده، مؤلف نشان خطای «روش كامل نشده است» میدهد. پیكره این روش درست مثل هر عملكرد و روش دیگری است:
Procodure shope. Erase
Begin
Erase Rect (bounds)
End.
Procedure circle. Draw
Begin
Fill Oval (bounds. Colcr)
Frame Oval (bounds)
End
در مورد این دو مثال نكات چندی است كه باید تذكر داده، نام روش با عنوان نام نوع، بیان شده است. واژه نام روش برای تمایز روشی است كه تعریف شده است. وقتی در مورد اصل روش صحبت میشود، همیشه عاملی ضمنی برای خود (Self) وجود دارد. Self به شیئی اشاره دارد كه به روش استفاده میكند. حوزههای Object نیز میتوانند با Self تعریف شوند. مرزها یا Self. اما مؤلف عاملی ضمنی را بوجود آورده بنام رنگ «با استفاده از Self» كه روش را احاطه كرده باعث میشود حوزههای نام مستقیماً قابل دسترسی باشند.
بطور مشابه، با استفاده از واژه Self میتوانید از درون هر روش به روش دیگری استفاده كنید. واژه روش دیگر، تكرار میكنیم فقط واژه روش دیگر كافیست. این موضوع نیاز Self را نسبت به وقتی كه كسی بخواهد موضوعی را به وضعیت عادی دیگری برگرداند مرتفع میسازد. مثلاً در مورد موضوع «مرا به لیست اضافه كنید (Self). در مورد عبارت a Circle. Draw از آنجا كه واژه a Circle زیر مجموعه Circleاست، روش Circle Draw بیش از بیش Shape Draw شناخته شده است. مضافاً اینكه اگر بخواهیم روی موضوع a Cricle Erase كار كنیم، چون Circle در مجموعه روش Erase نیست، باید به روش Shape Erase استفاده كرده، این مطلب بسادگی قابل فهم است. اگركه زیر را اجرا كنیم روش ناآشناتری را خواهیم داشت:
Var ashape: Shape
A Circle: Circle
New (a Circle)
A Circle. Bounds=some Rect
A Circle. Color=white
A Circle. Radius=bo
A shape=a circle
A shape=Draw
وقتی سیستم Shape Draw را اجرا میكنید، نام این روش چیست. Shape Draw یا circle Draw؟ حتی اگر سیستم a shape به عنوان یك شكل بیان میشود، تشخیص یك دوران باعث میشود به چیزی دورانی باشد و بنابراین طرح دوار نام این روش خواهد بود. این روش با مقادیری از مشخصههای دو بایتی در ابتدای هر شیئی كامل میشود. (تصویر 1) این قضیه نكات مهمی را گوشزد میكند. تشخیص و اظهار یك موضوع برابر است با یك دوران یعنی «امنیت» زیرا هر حوزهای از روشها كه برای اشیاء بدست كه میباشد برای هر مورد دواری نیز صادق است.
اما تشخیص بر عكس آن به معنای شكل با امنیت نیست زیرا حوزهها و روشهای اضافی Circle الزاماً با shape object قابل فهم نیست. مثلاً اگر بعدها به دوران شاعای روی آوریم، نمیتوان فهمید كه آیا آن موضوع شكلی معمولی بوده است یا خیر. (در واقع این متغیره شكل میتواند به نسل كاملاً متفاوتی از Shape مثلاً مثلث، اشاره كند. كه روشهای خاص دورانی نیز قابل شناخت نمیباشند.)
در این مورد باید بخاطر داشت كه حتی اگر متغیره موردی از نوع خاص هم باشد، در گذر زمان، به بیان نوع اصلی یا به نسل آن برمیگردد. معنی این حرف اینست كه میتوان فهرستی از «اشكال» را داشت كه هر یك طرحی از كل باشد كه انواع اصلی مخلوطی از مجموعه دوایر، مستطیلها، مثلثها و انواع آن باشند. در نتیجه، تشخیص اینكه كلام را باید روش اصلی ناحیه باید از طولانی دست باشد. این كار با استفاده از طرح «روش رایج مخابره پیام» انجام میشود كه در آن جدولهائی از موقعیت روشها برای هدایت به روش صحیح به كار گرفته میشوند. این روش را بعداً مفصلتر توضیح خواهیم داد.
ساختار نهائی اضافه بر پاسكال، لغات كلیدی است. چنانچه روشی را كنار گذاشتهاید تا كد نهائی خاص برای نوع مورد نظرتان اضافه كنید، اما هنوز مایلید از روش قبلی استفاده نمائید میباید از لغت بجا مانده بدنبال تمام روش استفاده كنید.
Qrocedure my controler. Procosskey stroke (ch:char)
Begin
Ifch=(X) Then
Do samethcing speeial
Else
Inheoited processkey strovk(ch).
End
كنترلر فرضی (A.C) بدون واسطه به نیاكان M.e.(My controller) برمیگردد. یعنی به P.K. (چرخه كه استراك) (بفرض آنكه وجود داشته باشد). اگر موجود باشد. بهترین روش نامیدن آن همیشه در زمان تألیف تعیین میشود-نیازی به روش مخابره زمانی نیست. این روش همواره نزدیكترین ریشه كانی است كه روش را كامل میكند. توجه داشته باشید كه منظور الزاماً ریشه بلافاصله قبلی نیست.
چنانچه ریشه قبلی روش را كامل نكند و ریشه بعدی نسل آنرا انجام دهد، آن روش را بآن نام میتوان شناخت. با استفاده از لغت كلیدی ارثی بجای نامگذاری نیای واقعی نوع موضوع (عالی)، تغییرات بعدی میتواند شامل شما شود كه تكمیل روشی را در نیای اصلی یا عالی دارد و یا حذف كنید. چنانچه این نوع بجا مانده در روش استفاده شده باشد كه از نوع نیاز قبلی موضوع بجا نمانده باشد دستگاه پیام اشتباه میدهد.
O.P سیستم عملكرد عضویتی را نیز بدست میدهد. از این سیستم میتوانید زمانی كه مورد خاصی در كلاسه معینی باشد استفاده نمائید. مثلاً میتوانید بگوئید
If member (a) shape, Circle) then
Num circle:=numcicle +1
چنانچه نوع مورد از همان نوع یا از نسل مورد آزمایش باشد. سیستم member آنرا تائید میكند. در نمونه بالا. Numcircle میتواند ضربهای برای دوایر و هر زیر مجموعهای از دایره باشد، اما برای مربعها، مثلثها یا اشكال معمولی خطری محسوب نمیشود. استفاده از سیستم Member تا حدودی برعكس اصول برنامهریزی مواد است (شما مجاز به شناخت آن با نوع خود نیستند). بنابراین استفاده آن معمولاً جز در موارد و شرایط خاص، منع شده است.
از آنجا كه همه منابع Object بعنوان ابزاری در دادههای تودهها نگهداری شدهاند، ساختارهای زیادی از نوع Padcal هستند كه برای استفاده مطمئن میباشند. یكی از آنها عامل VAR در دستورالعمل جاری است. مؤلف Pascal عنوان عامل VAR را در جایگاه یعنی میكند. اگر توده در زمان انجام پروسه تكمیل شده، عنوان عامل موضوع خوره اعتبار خود را از دست میدهد. در چنین مواردی نویسنده هشدار میدهد. اگر مطمئن هستید دستورالعمل با متن هماهنگ نمیشود، میتوانید قبل از عبارت از ($H-) استفاده كنید. با این كار دیگر نویسنده هشداری اعلام نمیكند. برای برگرداندن متن به حالت اول باید به عبارت. ($H+) را اضافه كنید.
سطوح انطباق
اگر برنامهنویسی هستید كه میخواهید از سیستم Mac App استفاده كنید سطوح گوناگونی از انطباق را باید بررسی كنید. یكی از آنها استفاده از عبارتهای مشخص شده موارد است مثل نوع مورد یا موردی از كل مجموعه. دیگر وقتی است كه از ساختار پرونده موضوع صحبت میكنیم كه عبارتست از ساختار موضوع براساس تعاریف مشخص شده مفهوم مورد نظر، اجزاء بجا مانده و یا انواع روشهاست. مؤلف پاسكال باید همه بخشهای الحاقی به سیستم پاسكال را كه از MWP میگیرد به كاربرد تا علاوه بر ضمائم مشخص شده مورد، آن اضافات را به عنوان عوامل تألیف جداگانه به كارگیرد، عباراتی بر خلاف اظهارات، و حتی موارد زمانی متعددی مثل تألیفات شرطی.
نهایتاً، زبانهائی كه قابل تألیف برای موارد فایل هستند از ساختار تالیفی یكسانی استفاده میكنند، كه نام آنها در فهرست جزوه مرجع MPW آمده است. و بعلاوه پیمانها و روشهای خاص و جدول ساختارهای خاصی را كه در برنامه O.P آمده دربرمیگیرد.
چنانچه زبانی كه برای برنامهریزی انتخاب شده مذموم موضوع مشخص شده O.P را تائید كند و اگر ساختارهای برنامهریزی آن زبان با ساختارهای پاسكال شباهت داشته باشد براحتی میتوان برنامهای نوشت كه توجه اتوماتیكی Mac App به زبان دلخواه را بدهد. حالا مؤلف میتواند متن ترجمه شده و یا اصل تألیف را از Mac App به هر جهت نامفهوم مورد نظری از سیستم Apple را جایگزینی سیستم Mac App نماید. نویسندگانی كه از سیستم ساختار موضوعی MPW استفاده نمیكنند میتوانند از بعضی از متغیرههای موجود در Mac App را انتخاب نمایند. نویسندگانی كه به سیستم Pascal، سیستم كارگاهی M.P را اضافه كردهاند خود میتوانند مستقیماً از منابع Mac App استفاده نمایند. اگر مؤلفه شما فقط تعدادی (نه همه) ضمائم را میدهد، میتوانید منابع Mac App خود را به صورت عدم استفاده از مدلهای تأئید نشده تغییر دهید. البته ضمائم موضوع مشخص شده باید تأئید شده باشند.
برنامه نویسندگانی كه به هنگام كاربرد ساختار پرونده MPW كد گذاری میكنند و از جدول روش O.P و نمادهای مربوطه استفاده مینمایند میتوانند مستقیماً به دو فایل Mac App مرتبط شوند. میتوانند توسط فایلهای O.P از قبیل واحدهای Text و Dialog Box ارتباط برقرار نمایند.
اخیراً بسیاری از برنامه نویسان ساختار فایل MPW را تائید نمیكنند. از اینرو تنها امكان انتخاب آنها از ترجمه Mac App به زبان خاص خودشان است (كه لكنت در وضعیت O.Pترجمهای ناچیز یا حتی بی معنی باشد.)
چنانچه شما بعنوان مؤلف نویسنده از جهت مذهبی (یا اعتقاد عملی) تعهدی در قبال ساختار خاص موضوع فایل ندارید، میخواهم استفاده از سیستم MPW را به شما توصیه كنم. در هر حالتی، بحث سازمان جدول روش خاص ما و نماید مخابره پیامی كه بدنبال آن میآید بسیار مفید است بخصوص اگربخواهید موارد خاصی را به زبان برنامهنویسی اضافه كنید و حتی اگر قصد داشته باشید كه زبان برنامه خود را به نحو كاملاً متفاوتی بنویسید.
ساختار فایل موضوع
همانطور كه قبلاً گفتیم،سیستم A.O.P فائلهائی را برای استفاده از ساختارهای MPW بدست میدهد. ساختار این فایل از مجموعهای از گزارشات طولانی است. یازده نوع گزارش مختلف داریم. مهمترین انواع آنها برای این منظور عبارتند از تحریری، ضمنی و مرجعی، گزارش تحریری كه یا دادههای تحریری جدیدی را شامل میشود. هر دستورالعمل یا كاربردی بوسیله كدی تحریری بیان میشود. این كه معمولاً بعد از یك یا چند گزارش مرجعی و یا ضمنی میآید. گزارشهای مرجعی به مرجع گزارشات تحریری از گزارش ضمنی میپردازد. گزارشهای ضمنی شامل كدهایی رایج و واقعی است.
«The class info proc» پروسه گروه اطلاعاتی
زمانی كه یك نوعی از Object type تعریف میشود یك (مقیاس كد ساختگی) ایجاد میگردد. كه این مدول به نام «Class info proc» پروسه گروه اطلاعاتی شناخته میشود، كه شامل اطلاعاتی مانند اطلاعاتی در ارتباط با سایر این نوع Obgect و اینكه از چه متدهایی و روشهایی برای این نوع استفاده شدهاند میباشد. این مدول هرگز فراخوانی نمیشود و در یك بخش خامی جایگذاری شده به نام Methtable% به همراه بقیه پروسه گروه اطلاعاتی Class info ptoc همچنین این بخش یا Segment یك برنامه كوتاه دارد با نام RTS1% در هنگام شروع كار RTS1% فراخوانی میشود كه تمام سگمنتها را همراه متد تیبلها را در خود جای میدهد.
«The method Call» سیستم متدكال
قبل از اینكه من بخواهم به تنهایی در مورد نوع این متد تیبل صحبت بكنم، ما نیاز داریم كه بدانیم اصولاً چگونه یك متدكال كار میكند. به متدكال زیر توجه فرمایید.
Ashape.Move(dist);
متدكالها در سیستم پاسكال به طور طبیعی، اصولاً از تعرفه Pascal calling استفاده میكنند. در ابتدا پارامترهای جمعآوری و طبقهبندی میشوند (به صورتی كه آنها به صورت یك روش بیانی Preceduredeelaration به نظر میرسند)
سپس یكJSRcoll (Jamp to Subroutirc) ایجاد میگردد. برای متدكال بالا كه ابجكت به صورت زیر ظاهر میشود:
Move. L Dist,-(SP)
Move. L a shape, -(SP)
JSR
JSR به كجار میرود؟ همواره متدكال به اجرای نوع فرم سیستم ashape را بسته میباشد. ما نمیتوانیم كه یك JSR را مستقریم در یك Shape. Move جایگذاری كنیم. در زمان اجرا ashape میتواند یك دایره، مربع یا چیز دیگری باشد در زمانی كه این كد كامپایل شده است.
ما نیازمند یك مكانیسم ارسال هستیم كه ابجكت را كنترل كند تا نوع آن را مشخص نماید. سپس روشی مناسب و در خور آن نوع را انتخاب كند. اما به كد بالا نگاه كنید ما حتی برای تماس روش خاصی را مشخص نكردیم. اكثر زبانهای كه (Obgect oriented) یا زبانهایی كه به object گردیدهاند از یك روش انتخاب كننده برای تشخیص متد استفاده میكنند.
انتخابگر یك تشخیص دهنده منحصر بفرد برای یك اسم متد خاص میباشد. این شیوه میتواند گران باشد به این دلیل كه به فضا و حافظه بیشتری نیازمند است. بعلاوه Object pascal كه متدهای نامربوط از سلسله Object دارای اسم مشابهی باشند در صورتی كه لیستهای پارامتر كاملاً متفاوتی از یكدیگر دارند. به طور كلی كامپایلر به صورت تعریفهای جداگانه متد برخورد میكند. در حقیقت اسم روش برای انتخابگر میتواند گیج كننده باشد.
«The Selector proc» پروسه انتی بگر
این سئوال باقی میماند كه ما چگونه میتوانیم یك انتخاب گر خاص برای هر(Method name) اسم متد ایجاد كنیم؟ ما اجازه میدهیم كه لینكر (Linker) این كار را انجام بدهد. لینكر در هنگام اصلاح بازفرنسهای سگمنت مواجه میشود و آنها را با JSRها ارتباط میدهد، و با داشتن آنها به جامپ تیبل میرود و سپس به مسیر و روتین صحیح میرسد.
زمانی كه سگمنتها لود نشدهاند و در حافظه دوباره لود میشوند ورودیهای جامپ تیبل به طور مناسبی به زور میگردند. جامپ تیبل در نزدیكی یك آدرس رجیستر A5 ذخیره میگردند. همگی JSRها در جدول از فرم JSR X(A5) هستند. جای X به نقطه مبدا در جامپ تیبل برمیگردد. این همان مبدا X است كه لینكر ایجاد میكند و این همانست كه ما به عنوان متد سلكتور استفاده میكنیم. به همین ترتیب به هر اسم متد جدید كه میرسد، در هنگام تالیف و نوشتن از یك تعرف ابجكت مواجه میگردد. یك رویه بسیار كوچك ایجاد میشود. اینرویه منسوب داشته شده به «Selectorpric» است.
اسم آن به فرم Type name$Method Name همانند Shape$move است. توجه داشته باشیم كه سلكتور پراك پروسه انتی بگر برای متدهای باطل شده ایجاد نشده است. و فقط در زمانی است كه در ابتدا با تعریف متد روبرو میشود. متدها به همراه اسمهای همنام در یك شاخه نامربوط از یك سلسله یك سلكتور پراك دارند. برای مثال Employce$Move. محتویات سلكتور پراك به سارگی یك JSR به روتین توزیع كننده متد حقیقی آن است كه با –Method% مشخص میگردد.
این بخش به سلكتور پراك مناسب مربوط میشود كه همه متدكالها را هدایت كرده باشد. بنابراین در توضیح بالا در مورد JSR خواهد شد JSR Shape$Move. تمامی سلكتور پراكها در یك بخش مخصوص دیگری جای گرفتند. «%-Selproc» قدر بحرانی آن زمانی است كه JSR توسط لینكر متصل گردد.
2-بایستی كه به جامپ تیبل جابجا میشوند مخصوص آن اسم متد میباشد. روتین توزیع كننده متد آن بایتها را چك میكند و آنها را در مقابل ارزشهای ذخیره شده در متد تیبل جفت میكند (Match). كه تشخیص دهد كه چه متدی فراخوانی شده است.
«Mettod table format» جدول ساختار روش
همانطور كه در قبل متذكر شدیم متد تیبل برای یك ابجكت تایپ خاص در انتهای Class info proc ظاهر میشود. تیبل در حقیقت یك جفت از رفرنسها است هر جفت برای هر متد بوسیله نوع آن ایجاد شده است. رفرنس اول در هر جفت مربوط به سلكتورپراك و دومین مربوط به اجرای متد حقیقی میباشد. هر كدام از این رفرنسها متعد میباشند كه همواره در كنار سكنت باشند.
به طور طبیعی زمانی كه لینكر در حال اصلاحسازی در كنار رفرنس سگنت میباشد تنها به وصل بایتهای جابجا شده از اینتراكشن نمیباشد. و همچنین بیتها را در اینتراكشن مرتب میكند تا یك AS مرتبط ایجاد كند. برای متد تیبلها هیچ JSR وجود ندارد تنها Offsetها یا مبداءهایی كه احتیاج دارند به اینكه متصل گردند. خوشبختانه یك بیت مخصوص وجود دارد به نام (The AS relatve flay) محل آن در ركورد رفرنس است تا به لینكر گوشزد كند كه تلاش برای ویرایش كلمه قبل از محل شروع (Offset) نكند.
روش جدید
ابجكتهایی كه ایجاد شدهاند از رویه جدید استفاده میكنند. با وجود اینكه پارامتر یك متغیر، Object type باشد كامپایلر آن را شناسایی میكند. این برای Pointer tyepها نسبت به یك رویه نرمال كه جدید است خیلی متفاوت به نظر میرسد. این رویه و %OB NEW دیتارادوی توده كاربرد اختصاص میدهد. (پوینتر نرمال دیتای اختصاص داده شده را از توده یا گروه مخصوص پاسكال میگیرد.)
%-DB NEW همچنین باید دو بایت شناساگر برای ابجكت ایجاد كند. خیلی شبیه به دو بایت دیگری كه خیلی قبل با آنها برخورد كردیم. این یك مبدأ (Offset)A5 در جامپ تیبل میباشد.
این بار رفرنس به Class info proc از Class از پارامتر به NEW است. ترتیب فراخوانی حقیقی برای NEW (یك دایره) به صور زیر است:
PEA a circle
PEA circle’s class info proc +2
Move.W #Size of instanse, -(sp)
JSR %-OBNEW
علامت «+2» برای Info proc یك مثل عمل Haek است. ورودی جامپ تیبل برای Jump X Class info proc است در جایی كه X آدرس Class inf proc میباشد. ما نمیخواهیم كه كد را آنجا اجرا كنیم. ما فقط میخواهیم به اطلاعات داخل آن نگاه كنیم. با «+2» ما حالتی را ایجاد كردهایم كه به Class info proc دسترسی داشته باشیم و جایی كه پرینتر اصلی (ارجح) آدرس ذخیره شده بعد از JMP اینستراكشن درون جامپ تیبل میباشد.
%-OB NEW روتین %-Set Class index را فراخوانی میكند كه AS را از این «handle» كم كرده و نتیجه را در بخش 2 بایت شناساگر انباشته میكند. زمانی كه یك متد فراخوانی میگردد %-Method را به بخش 2 بایت از آبجكت اضافه میكند. بنابراین دسترسی به بخش Class info proc را بازسازی میكند.
The method Dispatch Routine روش جاری مخابره پیام
در جدولهای 2 و 3 چگونگی كلی فراخوانی یك متد را مشاهده كردیم. همانطور كه قبلاً هم دیدیم پارامترهای متد بتنهایی توسط هندل به ابجكت كشانده شدهاند به صورتی كه هر كدام بدست ذخیره شدن هدایت شده باشند.
سپس ما یك JSR را به سلكتورپراك انجام دادیم در این مورد داریم: Shape$ Ratate مثل همه سلكتورپراكها Shape$ Ratate به سادگی یك JSR به روتین اتصال %-Method میباشد. در متد اتصال روتین ابتدا ما قسمت هندل به ابجكت را از قسمتی كه در آن انباشته میكنیم یا محل ذخیره، به اصطلاح تصرف میكنیم یا میرباییم. سپس ما از بخش بالایی ابجكت كلاس شناساگر بایتها را میگسترانیم.
با اضافه كردن A5 به این بایتها امكان دسترسی به دایرهی Class info proc را خواهیم داشت. متد «Seleator» 2 بایت مبدأ، بعد از اینستراكشن JSR به سلكتورپراك است. ما به جستجو از میان متد تیبل در Class info proc برای جفت كردن این انتخابگر میپردازیم. تا زمانی كه Rotate از دایره خارج نشده است ما نمیتوانیم جفتی در این تیبل پیدا كنیم. سپس به بخش روتین مناسب Shape-Rotate میرود.
Type cheking
در گذشتهای نه چندان دور متذكر شدم كه اگر شما از تایپ استفاده كنید مجبور هستید تا به گمارش یك تعریفی از Object type به دیگری داشته باشید، چك كننده run time هم ایجاد میشود. این چك كردن برای آن است كه ببیند نوع تایپ ابجكت همانند آن چیزی است كه نگارش شده یا یك زاده از متغیر در سمت چپ گمارش است. این چك كردن در زمانی ایجاد میشود كه شما Member funtion را فراخوانی میكنید. روتینی كه این كار را انجام میدهد به نام %-OBCHK است.
2 پارامتر را میگیرد و یك هندل به ابجكت و یك پوینتر به ورودی جامپ تیبل از Class info proc برای كلاس كه چه عضوی تست شده است. اگر تست موفقیتآمیز باشد %=OBCHK ابجكت Hondle را برمیگرداند و اگر در تست جواب ندهد آن را حذف و معدوم میسازد. این به نام روتین برلین فراخوانی میشود. روتین %-IN obj برای انجام یك تست واقعی است.
اطلاعات آماده شدهاند از این قرار بعلاوه برای كسی كه میخواهد امكانات Object-orientel را در زبانهایش بكار گیرد باید كافی باشد. Object Assebler بحثی است كه در پیش میباشد، یك مثالی است كه چگونه ما میتوانیم یك متد تیبل نوبت از زبان دیگر بگیریم و مشابه آن ایجاد كنیم. و ساخت یك Object file سازگار و متناوب (متغیر) در برنامهنویسی مخصوصاً در Object Pascul را انجام دهیم و به پایان برسانیم.
با وجود اینكه فواید زیادی در استفاده یك زبان سطح بالا وجود دارد میخواهیم كه قادر باشیم فرار كنیم از جمع كردن زبان زمانی كه مجبور هستیم. بخشهای بحرانی یك كاربرد Code-time را بهرهور سازیم.
استفاده كردن از زبان قدرتمند ماكرو توسط اسمبلگر MPW 68000 این امكان را به من میدهد كه یك مجموعه از ماكروها را بنویسم كه این اجازه را به من میدهد كه یك گروه را تعریف، متدها را فراخوانی و بكار گیرم. و همچنین یك ابجكت جدید ایجاد كنم. تمامی اینها در زبان اسمبلی 68000 میباشد.
برای مثال تعریفهای دایره و Shape كه ما در پاسكال مشاهده میكنیم به صورت زیر است:
(زمانی كه یك خط را ادامه میدهد، كاراكتر (\) برای اسمبلگر نیاز است.)
ابجكت Def macro در حقیقت Class info proc ایجاد میكند و سلكتورپراك نیزهمانطور كه در قبل گفتیم. همانطور كه در ذیل مشاهده میكنید متد A تعریف میشود:
Proc meth از ماكرو (و Func Meth از ماكرو) ماكروی دیگری را میطلبند. ابجكت With این اجازه و این امكان را به رفرنسهای داخلیتر یا اصلیتر میدهد كه به طور صحیح و مناسب فعالیت بكنند مانند كرانهای (AO).
Move self یك ماكروی ساده میباشد كه SELF off را از محل ذخیره میگیرد. این فرض را بر این میگذارد كه شما متد را با یك لینك A6 شروع كردهاید. روتین فوق SELF را در A0 لود میكند و همچنین اختلافهای آن. و باندهای فیلد را به قسمت ذخیره میفرستد بنابراین Eease Rect میتواند فراخوانی شود. بعد از جداسازی قسمت ذخیره و انباشتن توسط انباشتن آدرس برگشتی در بالای پارامتر سینگل (كك) و SELF و بازگشتهای متد و … تصحیح میشود.
متد كالهای ایجاد شده از Methcall macro استفاده میكنند:
برای كشیدن (Draw)Methcall یك JSR برای سلكتورپراك مناسب و صحیح ایجاد میكند. اگر فراخوانی از داخل یك Shape یا یك Subclass از Shape ایجاد شده باشد پارامتر Shape میتواند حذف شود. ماكروهای مهم دیگرinherited و New object باشند:
inhorited همانند چیزی كه در Object pascal است رفتار میكند New object نیازمند یك مرجعی برای حافظه و یك اسم Type است. موضوع New object در حافظه ذخیره شده است كه محل آن توسط پارامتر مشخص میگردد.
توضیح كامل در ارتباط با ماكروها در نشریه مانوال MPW Assemblerو هم در رفرنس راهنمای Mac App وجود دارد. تا زمانی كه این ماكروها ایجاد میشوند زبان میتواند بین كدهای مشابه كه در Object Pascal و فایلهای Mac App Object ایجاد میشوند ارتباط برقرار كند. در حقیقت متدهای خاص در Object Pascal میتوانند در خارج از محیط شناسایی شوند و در زبان اسمبلی كه از ماكروها استفاده میكنند به صورت كد كدینگ شوند.
«The Optimzer and the New Run Time Environmenth»
در اجرا، Applicationهایی كه در Mac APP نوشته شدهاند به خوبی نقش خود را ایفا میكنند و به طور كلی از كیفیت خوبی برخوردارند. با وجود اینكه حقیقت این است كه متد گال قبل از اینكه اجرا شود باید همراه مكانیسم اتصال برود. به هر حال ما متوجه شدیم كه بعضی بهینهسازیهای معنیدار و مهم در كل سلسله Object type كه تا به حال شناخته شده یكبار ممكن گشته است.
ما یك برنامه بهینهساز را توسعه و بسط دادیم كه فایلهای ابجكت را درست قبل از اینكه به متصل شوند پردازش كند. این یك نماینده داخلی از كل سلسله Object thpe میسازد و اقدام به آنالیز آن برای بهینهسازیهای بالقوه میكند.
برای دریافت اینجا کلیک کنید
تعداد کل پیام ها : 0