۷.۰۱.۱۳۸۸

شیء گرائی - آموزش دلفی ( بخش چهارم)

  • شي گرايي: در نظر بگيريد براي رانندگي مجبور بوديد از تمام نكات فني و همه اتفاقاتي كه در موتور و پيستونها اتفاق مي افتد با خبر بوديد واقعاً گيج كننده مي شد، اينطور نيست! در واقع برنامه نويسي ابتدا بدين صورت بود و فقط افراد خاصي مي توانستند اين كار را انجام دهند ولي با ظهور شي گرايي همه چيز عوض شد. حالا ببينيم يك شي دقيقاً چكار ميكند. اول اينكه يك شي طوري طراحي شده كه برنامه نويسي همانند دنياي اطراف ما بنظر برسد. يك شي همه چيزهاي مربوط را دور هم جمع ميكند مثلا توابع ، زيرروالها، متغييرها و حتي پايگاه داده مربوط همه و همه در يك جا و به صورت يك موجوديت. كار ديگر شي اين است كه جزئيات را از ديد شما پنهان مي كند به طوري كه شما بدون آن كه از ماهيت دروني آنها آگاه باشيد مي توانيد به راحتي از آنها استفاده كنيد. همانطور كه بدون آنكه از جزئيات دروني و مدارهاي يك تلوزيون باخبر باشيد با آن كار ميكنيد و اين به يكي از آرزروهاي ديرينه برنامه نويسان يعني سادگي و عدم پيچيدگي پاسخ داد. حال بياييد ببينيم يك شي چگونه اين كارها را انجام مي دهد.

شي هاي يك زبان مانند دلفي همانند اشياي دنياي واقعي مثل ماشين و متورسيكلت اهرمهايي براي كنترل نياز دارند كه اين وظيفه را Method ها به عهده مي گيرند. متدها نقش زيرروالها را در زبانهاي قديمي ايفا مي كنند. شي ها براي حفظ حالت جاري از Properties استفاده ميكنند مثلاً شما با ديدن كيلومتر ماشين به سرعت آن پي مي بريد و در اشيا با خواندن يك Properties همان كار را انجام مي دهيد. در واقع Properties يا خاصيتها نقش متغييرها و به طور كلي ساختمان دادهها را در زبانهاي قديمي ايفا مي كنند البته تفاوتهايي بين يك متغيير و Properties وجود دارد كه شما به تدريج به آن پي مي بريد. حالا به مفاهيم مشكل تر شي گرايي مي رسيم.

اشيا قابليتي بنام ارث بري دارند در واقع هر شي مي تواند خصوصيات خود را به فرزند خود منقل كند و يا به عكس مي تواند از والد خود خصوصياتي را به ارث ببرد. حالا سعي ميكنم با مثالي اين را تشريح كنم. فرض كنيم شما مي خواهيد شي اي ايجاد كنيد مثل قناري شما ابتدا مي توانيد شي به نام پرنده بوجود آورده و همه خصوصيات پرنده را در آن ايجاد كنيد. سپس شي بنام قناري ايجاد مي كنيد كه خصوصيات مربوط به پرندگان را مي تواند از شي پرنده به ارث ببرد و بقيه خصوصيات را براي آن مشخص كنيد و اگر بعداً خواستيد پرنده ديگري مثل گنجشك را معرفي كنيد هنوز هم مي توانيد از شي پرنده استفاده كنيد و اين يعني راحت تر شدن كد نويسي. قانون مهمي كه بايد بخاطر داشته باشيد و به سادگي از آن رد نشويد اين است كه هر شي مي تواند بجاي والد خود بكار گرفته شود چون همه خصوصيات آن را دارد ولي يك والد نمي تواند بجاي فرزند خود بكار رود اين مثل اين است كه دوست شما ، شما را به يك ميهماني دعوت كند و بگويد ميتوانيد پرنده خود را بياوريد و شما مي توانيد قناري را با خود ببريد ولي در صورتي كه مي گفت فقط مي توانيد گنجشك با خود بياوريد شما نمي توانستيد هر پرنده ديگري را با خود ببريد. اين نكته مهم در آنجا كاربرد دارد كه در صورتي كه پارامتر يك زيرروال از نوع يك شي باشد همه فرزندان آن شي مي توانند به آن زيروال ارسال شوند. براي فهم اين موضوع عجله نكنيد و فقط قانون را بياد داشته باشيد. مطلب ديگري كه راجع به شي گرايي بايد بدانيد Class و instance مي باشد . در واقع اشيا فقط يك قالب مي باشند كه نمي توانند به تنهايي مورد استفاده قرار گيرند. براي مثال وقتي شما مي گوييد قناري منظورتان قناري خاصي نيست. ولي وقتي يك قناري را با اسمي كه براي آن گذاشته ايد صدا مي زنيد يك قناري خاص را در نظر داريد. در واقع قناري به طور كلي وجود خارجي ندارد بلكه يك قناري خاص كه مثلاً اسم آن تويتي است وجود خارجي دارد در واقع Class مانند قناري و Instance مانند تويتي است و اين به معني اين است كه ما همواره ابتدا كلاسها را تعريف كرده و سپس براي استفاده يك نمونه يا Instance از آن را بوجود مي آوريم.

رويداد گرايي: در زبانهاي قديمي دستورات خط به خط انجام مي شد تا برنامه به پايان برسد و اين يك روند قابل پيشبيني را ايجاد ميكرد ولي با به وجود آمدن روشهاي رويدادگرا برنامه منتظر يك اتفاق مي ماند تا عكس العمل نشان دهد. در اشياي روزمره هم همين طور است مثلاً يك ماشين حساب تازماني كه شما دكمه اي را فشار ندهيد عمل نمي كند. در اينجور زبانها بايد برنامه را طوري طراحي كنيد كه كدهايتان براي عكس العمل نشان دادن به كار كاربر نوشته شده باشد. اين خلاصه اي از شي گرايي و رويداد گرايي بود. من پيشنهاد مي كنم حتماً كتابي در اين زمينه بخوانيد واين مطالب را فقط به عنوان معرفي شي گرايي در نظر بگيريد. فكر كنم براي امروز كافي باشه بزودي مقاله بعدي هم مي رسه پس منتظر نشينيد و هرچي مي تونيد تو اين مدت ياد بگيريد و آموخته هاتون رو به ديگران منتقل كنيد.

هیچ نظری موجود نیست:

http://up.iranblog.com/images/0z5dgraxwa4j49a5ts77.gif http://up.iranblog.com/images/gv83ah5giec9g8jkopmc.gif