مقدمهاي بر 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 مثلاً مثلث، اشاره كند. كه روشهاي خاص دوراني نيز قابل شناخت نميباشند.)
در اين مورد بايد بخاطر داشت كه حتي اگر متغيره موردي از نوع خاص هم باشد، در گذر زمان، به بيان نوع اصلي يا به نسل آن برميگردد. معني اين حرف اينست كه ميتوان فهرستي از «اشكال» را داشت كه هر يك طرحي از كل باشد كه انواع اصلي مخلوطي از مجموعه دواير، مستطيلها، مثلثها و انواع آن باشند. در نتيجه، تشخيص اينكه كلام را بايد روش اصلي ناحيه بايد از طولاني دست باشد. اين كار با استفاده از طرح «روش رايج مخابره پيام» انجام ميشود كه در آن جدولهائي از موقعيت روشها براي هدايت به روش صحيح به كار گرفته ميشوند. اين روش را بعداً مفصلتر توضيح خواهيم داد.
ساختار نهائي اضافه بر پاسكال، لغات كليدي است. چنانچه روشي را كنار گذاشتهايد تا كد نهائي خاص براي نوع مورد نظرتان اضافه كنيد، اما هنوز مايليد از روش قبلي استفاده نمائيد ميبايد از لغت بجا مانده بدنبال تمام روش استفاده كنيد.
برچسب ها:
پاسگال مقاله پاسگال اشنایی با پاسگال Object Pascal