مقاله مقدمهای بر Object Pascal
توجه : به همراه فایل word این محصول فایل پاورپوینت (PowerPoint) و اسلاید های آن به صورت هدیه ارائه خواهد شد
مقاله مقدمهای بر Object Pascal دارای ۳۷ صفحه می باشد و دارای تنظیمات در microsoft word می باشد و آماده پرینت یا چاپ است
فایل ورد مقاله مقدمهای بر Object Pascal کاملا فرمت بندی و تنظیم شده در استاندارد دانشگاه و مراکز دولتی می باشد.
توجه : در صورت مشاهده بهم ریختگی احتمالی در متون زیر ،دلیل ان کپی کردن این مطالب از داخل فایل ورد می باشد و در فایل اصلی مقاله مقدمهای بر Object Pascal،به هیچ وجه بهم ریختگی وجود ندارد
بخشی از متن مقاله مقدمهای بر Object Pascal :
مقدمهای بر 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 به دادهها برمیگردند. نموداری مثل شکل ۱=: شکل ۲ باعث میشود که نحوه شکل ۱ بر دادههای شکل ۲ منطبق شود.
حوزههای یک موضوع خود میتوانند مرجعهائی باشند برای موضوعات دیگر. مثلاً میتوانید برای تعریف 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 به عنوان یک شکل بیان میشود، تشخیص یک دوران باعث میشود به چیزی دورانی باشد و بنابراین طرح دوار نام این روش خواهد بود. این روش با مقادیری از مشخصههای دو بایتی در ابتدای هر شیئی کامل میشود. (تصویر ۱) این قضیه نکات مهمی را گوشزد میکند. تشخیص و اظهار یک موضوع برابر است با یک دوران یعنی «امنیت» زیرا هر حوزهای از روشها که برای اشیاء بدست که میباشد برای هر مورد دواری نیز صادق است.
اما تشخیص بر عکس آن به معنای شکل با امنیت نیست زیرا حوزهها و روشهای اضافی 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 توسط لینکر متصل گردد.
۲-بایستی که به جامپ تیبل جابجا میشوند مخصوص آن اسم متد میباشد. روتین توزیع کننده متد آن بایتها را چک میکند و آنها را در مقابل ارزشهای ذخیره شده در متد تیبل جفت میکند (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
علامت «+۲» برای Info proc یک مثل عمل Haek است. ورودی جامپ تیبل برای Jump X Class info proc است در جایی که X آدرس Class inf proc میباشد. ما نمیخواهیم که کد را آنجا اجرا کنیم. ما فقط میخواهیم به اطلاعات داخل آن نگاه کنیم. با «+۲» ما حالتی را ایجاد کردهایم که به Class info proc دسترسی داشته باشیم و جایی که پرینتر اصلی (ارجح) آدرس ذخیره شده بعد از JMP اینستراکشن درون جامپ تیبل میباشد.
%-OB NEW روتین %-Set Class index را فراخوانی میکند که AS را از این «handle» کم کرده و نتیجه را در بخش ۲ بایت شناساگر انباشته میکند. زمانی که یک متد فراخوانی میگردد %-Method را به بخش ۲ بایت از آبجکت اضافه میکند. بنابراین دسترسی به بخش Class info proc را بازسازی میکند.
The method Dispatch Routine روش جاری مخابره پیام
در جدولهای ۲ و ۳ چگونگی کلی فراخوانی یک متد را مشاهده کردیم. همانطور که قبلاً هم دیدیم پارامترهای متد بتنهایی توسط هندل به ابجکت کشانده شدهاند به صورتی که هر کدام بدست ذخیره شدن هدایت شده باشند.
سپس ما یک JSR را به سلکتورپراک انجام دادیم در این مورد داریم: Shape$ Ratate مثل همه سلکتورپراکها Shape$ Ratate به سادگی یک JSR به روتین اتصال %-Method میباشد. در متد اتصال روتین ابتدا ما قسمت هندل به ابجکت را از قسمتی که در آن انباشته میکنیم یا محل ذخیره، به اصطلاح تصرف میکنیم یا میرباییم. سپس ما از بخش بالایی ابجکت کلاس شناساگر بایتها را میگسترانیم.
با اضافه کردن A5 به این بایتها امکان دسترسی به دایرهی Class info proc را خواهیم داشت. متد «Seleator» ۲ بایت مبدأ، بعد از اینستراکشن JSR به سلکتورپراک است. ما به جستجو از میان متد تیبل در Class info proc برای جفت کردن این انتخابگر میپردازیم. تا زمانی که Rotate از دایره خارج نشده است ما نمیتوانیم جفتی در این تیبل پیدا کنیم. سپس به بخش روتین مناسب Shape-Rotate میرود.
Type cheking
در گذشتهای نه چندان دور متذکر شدم که اگر شما از تایپ استفاده کنید مجبور هستید تا به گمارش یک تعریفی از Object type به دیگری داشته باشید، چک کننده run time هم ایجاد میشود. این چک کردن برای آن است که ببیند نوع تایپ ابجکت همانند آن چیزی است که نگارش شده یا یک زاده از متغیر در سمت چپ گمارش است. این چک کردن در زمانی ایجاد میشود که شما Member funtion را فراخوانی میکنید. روتینی که این کار را انجام میدهد به نام %-OBCHK است.
۲ پارامتر را میگیرد و یک هندل به ابجکت و یک پوینتر به ورودی جامپ تیبل از Class info proc برای کلاس که چه عضوی تست شده است. اگر تست موفقیتآمیز باشد %=OBCHK ابجکت Hondle را برمیگرداند و اگر در تست جواب ندهد آن را حذف و معدوم میسازد. این به نام روتین برلین فراخوانی میشود. روتین %-IN obj برای انجام یک تست واقعی است.
اطلاعات آماده شدهاند از این قرار بعلاوه برای کسی که میخواهد امکانات Object-orientel را در زبانهایش بکار گیرد باید کافی باشد. Object Assebler بحثی است که در پیش میباشد، یک مثالی است که چگونه ما میتوانیم یک متد تیبل نوبت از زبان دیگر بگیریم و مشابه آن ایجاد کنیم. و ساخت یک Object file سازگار و متناوب (متغیر) در برنامهنویسی مخصوصاً در Object Pascul را انجام دهیم و به پایان برسانیم.
با وجود اینکه فواید زیادی در استفاده یک زبان سطح بالا وجود دارد میخواهیم که قادر باشیم فرار کنیم از جمع کردن زبان زمانی که مجبور هستیم. بخشهای بحرانی یک کاربرد Code-time را بهرهور سازیم.
استفاده کردن از زبان قدرتمند ماکرو توسط اسمبلگر MPW 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 میسازد و اقدام به آنالیز آن برای بهینهسازیهای بالقوه میکند.
- در صورتی که به هر دلیلی موفق به دانلود فایل مورد نظر نشدید با ما تماس بگیرید.