چنانچه درباره مکآپ مطالعهای داشته باشید ممکنست تعجب کرده باشید از اینکه باید برنامهریز 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 مثلاً مثلث، اشاره کند. که روشهای خاص دورانی نیز قابل شناخت نمیباشند.)