چنانچه درباره مکآپ مطالعهای داشته باشید ممکنست تعجب کرده باشید از اینکه باید برنامهریز 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+) را اضافه کنید.