بیشترتوضیحاتافزودن یادداشت جدید
شي گرايي: در نظر بگيريد براي رانندگي مجبور بوديد از تمام نكات فني و همه اتفاقاتي كه در موتور و پيستونها اتفاق ميافتد با خبر بوديد واقعاً گيج كننده ميشد، اينطور نيست! در واقع برنامه نويسي ابتدا بدين صورت بود و فقط افراد خاصي ميتوانستند اين كار را انجام دهند ولي با ظهور شي گرايي همه چيز عوض شد. حالا ببينيم يك شي دقيقاً چكار ميكند. اول اينكه يك شي طوري طراحي شده كه برنامه نويسي همانند دنياي اطراف ما بنظر برسد. يك شي همه چيزهاي مربوط را دور هم جمع ميكند مثلا توابع ، زيرروالها، متغييرها و حتي پايگاه داده مربوط همه و همه در يك جا و به صورت يك موجوديت. كار ديگر شي اين است كه جزئيات را از ديد شما پنهان ميكند به طوري كه شما بدون آن كه از ماهيت دروني آنها آگاه باشيد ميتوانيد به راحتي از آنها استفاده كنيد. همانطور كه بدون آنكه از جزئيات دروني و مدارهاي يك تلوزيون باخبر باشيد با آن كار ميكنيد و اين به يكي از آرزروهاي ديرينه برنامه نويسان يعني سادگي و عدم پيچيدگي پاسخ داد. حال بياييد ببينيم يك شي چگونه اين كارها را انجام ميدهد. شي هاي يك زبان مانند دلفي همانند اشياي دنياي واقعي مثل ماشين و متورسيكلت اهرمهايي براي كنترل نياز دارند كه اين وظيفه را Method ها به عهده ميگيرند. متدها نقش زيرروالها را در زبانهاي قديميايفا ميكنند. شي ها براي حفظ حالت جاري از Properties استفاده ميكنند مثلاً شما با ديدن كيلومتر ماشين به سرعت آن پي ميبريد و در اشيا با خواندن يك Properties همان كار را انجام ميدهيد. در واقع Properties يا خاصيتها نقش متغييرها و به طور كلي ساختمان دادهها را در زبانهاي قديميايفا ميكنند البته تفاوتهايي بين يك متغيير و Properties وجود دارد كه شما به تدريج به آن پي ميبريد. حالا به مفاهيم مشكل تر شي گرايي ميرسيم. اشيا قابليتي بنام ارث بري دارند در واقع هر شي ميتواند خصوصيات خود را به فرزند خود منقل كند و يا به عكس ميتواند از والد خود خصوصياتي را به ارث ببرد. حالا سعي ميكنم با مثالي اين را تشريح كنم. فرض كنيم شما ميخواهيد شي اي ايجاد كنيد مثل قناري شما ابتدا ميتوانيد شي به نام پرنده بوجود آورده و همه خصوصيات پرنده را در آن ايجاد كنيد. سپس شي بنام قناري ايجاد ميكنيد كه خصوصيات مربوط به پرندگان را ميتواند از شي پرنده به ارث ببرد و بقيه خصوصيات را براي آن مشخص كنيد و اگر بعداً خواستيد پرنده ديگري مثل گنجشك را معرفي كنيد هنوز هم ميتوانيد از شي پرنده استفاده كنيد و اين يعني راحت تر شدن كد نويسي. قانون مهميكه بايد بخاطر داشته باشيد و به سادگي از آن رد نشويد اين است كه هر شي ميتواند بجاي والد خود بكار گرفته شود چون همه خصوصيات آن را دارد ولي يك والد نميتواند بجاي فرزند خود بكار رود اين مثل اين است كه دوست شما ، شما را به يك ميهماني دعوت كند و بگويد ميتوانيد پرنده خود را بياوريد و شما ميتوانيد قناري را با خود ببريد ولي در صورتي كه ميگفت فقط ميتوانيد گنجشك با خود بياوريد شما نميتوانستيد هر پرنده ديگري را با خود ببريد. اين نكته مهم در آنجا كاربرد دارد كه در صورتي كه پارامتر يك زيرروال از نوع يك شي باشد همه فرزندان آن شي ميتوانند به آن زيروال ارسال شوند. براي فهم اين موضوع عجله نكنيد و فقط قانون را بياد داشته باشيد. مطلب ديگري كه راجع به شي گرايي بايد بدانيد Class و instance ميباشد . در واقع اشيا فقط يك قالب ميباشند كه نميتوانند به تنهايي مورد استفاده قرار گيرند. براي مثال وقتي شما ميگوييد قناري منظورتان قناري خاصي نيست. ولي وقتي يك قناري را با اسميكه براي آن گذاشته ايد صدا ميزنيد يك قناري خاص را در نظر داريد. در واقع قناري به طور كلي وجود خارجي ندارد بلكه يك قناري خاص كه مثلاً اسم آن تويتي است وجود خارجي دارد در واقع Class مانند قناري و Instance مانند تويتي است و اين به معني اين است كه ما همواره ابتدا كلاسها را تعريف كرده و سپس براي استفاده يك نمونه يا Instance از آن را بوجود ميآوريم. رويداد گرايي: در زبانهاي قديميدستورات خط به خط انجام ميشد تا برنامه به پايان برسد و اين يك روند قابل پيشبيني را ايجاد ميكرد ولي با به وجود آمدن روشهاي رويدادگرا برنامه منتظر يك اتفاق ميماند تا عكس العمل نشان دهد. در اشياي روزمره هم همين طور است مثلاً يك ماشين حساب تازماني كه شما دكمه اي را فشار ندهيد عمل نميكند. در اينجور زبانها بايد برنامه را طوري طراحي كنيد كه كدهايتان براي عكس العمل نشان دادن به كار كاربر نوشته شده باشد. اين خلاصهاي از شي گرايي و رويداد گرايي بود.
مفاهيم شي گرايي در ديدگاه شئگرا از سه دريچه به مسايل مينگرند. يكي نگرش به مسايل به عنوان مجموعهاي از اشياء مرتبط با هم است. اشيا در قالب موجوديتهاي مفعول شناخته ميشوند. در اثر فعل اشيا بر يكديگر ساختار سيستم در حال سكون مشخص ميشود. دريچه ديد ديگر، نگرش به تغيير رفتار و عملكرد هر شئ در طول زمان و به دنبال رويدادهاي حاصل از ارتباط آن با ساير اشياء است مفاهيم شئگرايي ديدگاه شئگرا در ديدگاه شئگرا از سه دريچه به مسايل مينگرند. يكي نگرش به مسايل به عنوان مجموعهاي از اشياء مرتبط با هم است. اشيا در قالب موجوديتهاي مفعول شناخته ميشوند. در اثر فعل اشيا بر يكديگر ساختار سيستم در حال سكون مشخص ميشود. دريچه ديد ديگر، نگرش به تغيير رفتار و عملكرد هر شئ در طول زمان و به دنبال رويدادهاي حاصل از ارتباط آن با ساير اشياء است. ديدگاه سوم، جريان گردش دادهها و اطلاعات درون سيستم مشخص ميكند. شئگرايي تجربه بهتري از جهان خارج است. در تئوري، اين بدان معناست كه اگر مسئله تغيير كند (تغيير در نيازهاي سيستم) راه حل به آساني قابل تغيير است، زيرا نگاشت بين مسئله و راه حل آسان است. شناخت اشياء در شناخت شئگرا ديدگاه اوليه آناليست تعيين اجزاء تشكيل دهنده سيستمها است. اجزاء سيستمها در قالب اشياء مشخص ميشوند. يك شئ موجوديتي[1] است كه هم ميتواند مفعول باشد و هم فاعل. افعال در قالب عمليات مشخص ميشوند. گوناگوني اشياء مانعي براي شناخت است. لذا اشياء را براساس صفات مشتركشان كلاسهبندي ميكنند. براي نمونه، كلاس پرندگان يا كلاس سوابق در واقع نوع دو دسته از اشياء را مشخص ميكنند. كلاس اشياء نشاندهنده صفات، خواص و افعال مشترك اشياء مفعول است. كلاس اشياء از تجريد [2] اشياء ايجاد ميشود. اصولا ًانسان براي شناخت هر چيزي تجزيه و تحليل ميكند. يكي ديگر از كارهاي فوقالعاده ذهن است، تجريد است. تجريد غير از تجزيه است. در عمل تجريد جهت شناخت، تجزيه انجام نميشود. ذهن انسان پس از اينكه چند چيز مشابه را درك كرد، صفات مشترك آنها را بدست ميآورد و صفت محض هر يك از آنها را از صفت مشترك تميز ميدهد و از آن صفت مشترك يك صفت كلي ميسازد كه بر همه اشياء كثيره يعني بر همه اشيايي كه از آنها اين صفت كلي و مشترك بدست آمده، صدق ميكند.در اين حالت گفته ميرود كه اين مفهوم كلي از اشياء انتزاع يا تجريد شده است، مثل مفهوم دانشجو كه از محمد و آيدين و غيره انتزاع ميشود. در واقع با تجريد، جزئيات خاص را ناديده گرفته، كليتها را مجزا ميكنند. تشخيص كليتها راهي براي شناخت توسط ذهن انسان است. براي اين منظور ذهن اشياءرا تعميم ميدهد. براي نمونه كارخانه يك كليت است. چنانچه يك كليت در ذات و حقيقت اشياء مربوطه ميباشد و در واقع ماهيت اشياء مربوطه، قائم به آن ميباشد،آنرا كل ذاتي گويند. وگرنه آن كل عرضي است. براي نمونه كليت جسم براي انسان يك كليت ذاتي است. اما آنچه شئ در وجود خود به آن محتاج نباشد، عرضي است. براي نمونه خندان، گريان، سفيد پوست، مريض، ... جزء عوارض هستند. اصول منطق حكم ميكند كه لازمه شناخت اشياء تعيين پنج كليت است. اين پنج كليت عبارتند از: نوع، جنس، فصل، عرض عام و عرض خاص. نوع، مفهوم كلياي است كه شامل افراد و عناصر يك مجموعه ميشود. براي نمونه نوع انسان نمايانگر ويژگيهاي كلي و نام كلاس دستهاي از اشياء است. جنس،مفهوم كلياي است كه شامل افراد و عناصر بيش از يك مجموعه ميشود. براي نمونه در جنمله انسان حيواني ناطق است، انسان از جنس حيوان معرفي شدهاست. علاوه بر حيوان بودن ناطق هم است. اين وجه مميزه ناطق بودن فاصله بين انسان و حيوان را مشخص ميكند. اصولاً كليت فصل، مفهوم كلياي است كه باعث ميشود افراد يا عناصر يك نوع مشخصشوند. برطبق تعاريف شئگرايي در زبانهاي برنامهسازي، انسان يك كلاس و حيوان كلاس مافوق براي انسان است. بعبارت ديگر انسان خواص حيوان بودن را از كلاس حيوان به ارث ميبرد. وجه مميزه و ويژگيهاي خاص كلاس انسان، ناطق بودن است كه در داخل اين كلاس مشخص ميشود. بااستفاده از رابطه وراثت ويژگيهاي حيوان بودن از كلاس حيوان به ويژگيهاي انسان افزوده ميشود. كلاس يك دسته از اشياء بايد نمايانگر ماهيت و در واقع كليت ذاتي آن دسته از اشياء باشد. در واقع ماهيت هر چيزي نمايانگر نوع آنست. با تعيين كلاس و سوپر كلاس براي يك شئ درواقع تعريفي براي آن شئ ايجاد ميشود. درجمله، حيوان موجود زنده است، كلاس حيوان به عنوان زيركلاسي از كلاس موجود زنده تعريف شدهاست. موجود زنده كليت جنس را براي نوع حيوان مشخص ميكند. اصولاً، تعريف، قضيهاي است كه ماهيت شئ را بيان ميكند. بنابراين با رجوع به تعاريف ميتوان مجموعه اشياء تشكيل دهنده يك سيستم را مشخص نمود. علاوه بر سه كليت نوع، جنس و فصل ، عوارض (جمع عرض) نيز از عوامل شناخت اشياء هستند. براي نمونه، تعجب كردن، عرض خاص و ويژه انسانها است. عوارض اشياء شامل مكان، فعل يا عملكرد، انفعال، اضافات و كم و كيف ميباشند. مدل اشياء مدل اشياء نمايانگر چگونگي ارتباط ثابت بين اشياء تشكيل دهنده يك كلاس است. لذا، جهت ايجاد مدل اشياء بايد هويت اشياء موجود در سيستم مورد نظر را شناسايي نموده، ارتباط بين آنها را مشخص كرد. براي تعيين هويت اشياء بايد در نظر داشت كه اشياء صرفاً فيزيكي نيستند، مفاهيم نيز ميتوانند به عنوان اشياء مطرح باشند. به عنوان نمونه زمانبندي در سيستمهاي عامل را ميتوان به عنوان يك شئ در نظر گرفت. اصولاً اشياء را در حالت كلي به دو دسته تقسيم ميكنند: -1- اشياء فيزيكي - 2- اشياء مفهومي رفتار اشياء رفتار هر شيء را بطور جداگانه مشخص ميكنند. رفتار شئ نمايانگر چگونگي تغيير حالت آن در اثر رويدادها است. چگونگي صفات و مقادير خواص شئ در يك مدت زمان، حالت را مشخص ميكند. رويدادها محرك افعال تعيين شده بر شئ مفعول هستند. اين افعال موجب تغيير مقادير خواص و صفات شئ و در واقع تغيير حالت آن ميشوند. رويدادها ممكن است موجب ارتباط و تغيير حالت اشياءمرتبط ميشوند. رويدادها را ميتوان از متن ارتباطات لحظهاي و متوالي يك شئ با اشياء اطراف آن در جهت انجام هدفي خاص مشخص نمود. در حالت كلي اتفاقات مؤثر بر يك شئ را به سه دسته ميتوان تقسيم كرد. يك دسته اتفاقاتي هستند كه موجب تولد يا ايجاد يك كلاس از اشياء ميشوند. دسته ديگر اتفاقاتي هستند كه در طول حيات شئ موجب تغييرات در آن ميشوند. دسته سوم اتفاقاتي هستند كه موجب مرگ و حذف يك شئ از داخل سيستم ميشوند. زبان يكپارچه مدلسازي چيست؟ زبان يكپارچه مدلسازي يك نمادگذاري استاندارد براي مدلسازي اشياء در توسعه سيستمهاي شئگرا ميباشد. اين نمادگذاري از اتحاد نمادگذاريهاي بكار رفته در سه متدلوژي و طراحي شئگراي سيستمهاي بوجود امده است: · متدلوژي بوچ كه يك مجموعه از اشياء و ارتباط بين آنها را توصيف ميكند. · متدلوژي رامبو كه به تكنيك مدلسازي اشياء معروف است. نمايش داده ميشود. براي بيشتر سيستمها، يك بازيگر ميتواند با چند مورد استفاده تعامل داشته باشد و يك مورد استفاده ميتواند بوسيله چند بازيكر شدوع شود. مصارف دياگرام موارد استفاده · دياگرام موارد استفاده محدوده سيستم را تعريف ميكند و ما را قادر ميسازد اندازه و محدوده پروژه را در يك پروژه توسعه نرمافزار نشان دهيم. · دياگرام موارد استفاده بسيار شبيه به نيازمنديها است، اما فهرست نيازها به سادگي فراموش شده و خدشهدار ميشوند. قصد عمده از دياگرام موارد استفاده تمركز بيشتر روي نيازها است. · مجموع همه دياگرام موارد استفاده كل سيستم را تشكيل ميدهند. اين يعني هر چيزي كه در دياگرام موارد استفاده نباشد خارج از محدوده سيستم در حال توسعه قرار دارد. بنابراين دياگرام موارد استفاده بايد كامل و بدون نقص و نقاط مبهم باشد. · دياگرام موارد استفاده اجازه ارتباط بين مشتري و تيم توسعه را ميدهد (زيرا نمودارها بسيار ساده هستند و هركسي ميتواند آنرا درك كند( دياگرام موارد استفاده، تيم توسعه را در مرحله توسعه نرمافزار كمك ميكند. · دياگرام موارد استفاده روشي براي طراحي كار توسعه بدست ميدهند و اجازه ميدهند كه زمان طي شده در توسعه را پيشبيني كنيم. · دياگرام مورد استفاده، اساس توليد سيستم تست هستند. نمودار كلاس رسم نمودار كلاس مهمترين فعاليت در همه روشهاي طراحي شئگرا است. از آن ميتوان در مرحله تجزيه و تحليل و طراحي استفاده كرد. علاوه براين، از اين نمودار براي رسم طراحي براي درك نيازهاي مشتري نيز بهره گرفته ميشود. نمودار همكاري زمان مدلسازي يكپارچه، دو نمودار براي تشريح تعامل اشيا به نامهاي نمودار ترتيبي و نمودار همكاري دارد. اين دو نمودار بسيار به هم نزديكند. اين دو نمودار نمودارهاي تعامل ناميده ميشوند. در طول توسعه نرمافزار به روش شئگرا، هر چيزي كه نرمافزار نهايي نياز داشته باشد بوسيله همكاري اشياء صورت خواهد گرفت. ميتوان نمودار همكاري را باي تشريح چگونگي وضعيت اشياء در حال همكاري به كار برد. يك نمودار همكاري به ما اجازه نمايش تعامل بين اشيا در محدوده زمان را ميدهد. نمودار ترتيبي يك نمودار ترتيبي در ارتباط مستقيم با نمودار همكاري بوده ولي شكل متفاوتي دارد. خطوط نقطهچين در اين نمودار نشان دهنده زمان است. موجوديت يا Entity به هر چيزي كه در مورد آن اطلاعي در داخل سيستم نگهداري ميشود، اطلاق ميگردد. تجريد يا Abstraction روشي است براي خلاصه كردن و توصيف اشياء. انتزاع به عمل خاص ذهن گفته ميشود كه آنرا تجريد نيز مينامند. انتزاعي به مفهوم بدست آوردن مشتركات و بالنتيجه كليت اشياء است كنترل دسترسي تشخيصي در پايگاههاي داده شيء گرا يكي از مسائل مهم در پايگاههاي داده مسئله تامين امنيت است . يكي از كنترلهايي كه تامين امنيت در پايگاههاي داده بايستي انجام شود ، كنترل دسترسي ميباشد . يك سيستم كنترل دسترسي ، نحوه دسترسي هر كاربر به دادههاي موجود در پايگاه داده را محدود و كنترل ميكند . يكي از سياستهاي كنترل دسترسي ، كنترل دسترسي تشخيصي ميباشد در اين سياست براي هر كاربر اجازههايي براي دسترسي به دادهها تعين ميگردد . هر درخواست دسترسي صادر شده توسط يك كاربر با توجه به اجازههايي كه وي دارد بررسي و در نهايت قبول يا رد ميشود همچنين در اين سياست يك كاربر ميتواند بر طبق قواعدي و براساس تشخيص خود ،اجارههايي كه دراختيار دارد را به كاربران ديگر واگذار كند يا اجازههايي كه واگذار نموده را پس بگيرد مدلهاي امنيتي و كنترل دسترسي پايگاههاي داده بسيار وابسته به مدل داده پايگاه داده ميباشند . از آنجايي كه پايگاههاي داده شيءگرا از مدل داده شي،گرا كه نسبت به مدل داده رابطهاي از پيچيدگي بيشتري برخوردار است تبعيت ميكند . بنابر اين مدلهاي امنيتي ارائه شده براي پايگاههاي داده رابطهاي براي پايگاههاي داده شيءگرا مناسب نيستند . براي مثال وجود ويژگيهايي همچون ارث بري ، متدها ، و اشياء مركب در مدل داده شيءگرا براي پايگاههاي داده باعث ميشود كه مدلهاي امنيتي كلاسيك براي پايگاههاي داده شيءگرا و مفيد نباشد . به همين دليل لازم است كه مدلهاي امنيتي كلاسيك براي پايگاههاي داده شيءگرا كارا و مفيد نباشند . به همين دليل لازم است كه مدلهاي امنيتي جديدتري براي پايگاههاي داده شيءگرا ارائه شوند اگر چه تاكنون مدلهايي براي كنترل دسترسي تشخيصي در پايگاهاي داده شيءگرا ارائه شدهاند ، ولي تمامياين مدلها داراي نقطه ضعفها و معايبي ميباشند . بخصوص هيچ يك از اين مدلها تماميويژگيهاي مدل داده شيءگرا براي پايگاههاي داده را مد نظر قرار ندادهاند و علاوه بر آن ، اين مدلها براساس مدلهاي داده غير استاندارد برا پايگاههاي داده شيءگرا ميباشند. در اين پايان نامه مدلي براي كنترل دسترسي تشخيصي در پايگاههاي داده شيءارائه شده است كه نسبت به مدلهاي موجود از نقطه ضعفها و معايب كمتري برخوردار است . بخصوص مدل پيشنهادي براساس مدل داده ODMG كه امروزه به عنوان يك استاندارد براي پايگاههاي داده شيءگرا مطرح است ميباشد . علاوه بر اين ، براي شبيه سازي و نمايش نحوه عملكرد اين مدل محيطي ايجاد شده است كه داراي امكانات زير ميباشد امكاناتي براي ايجاد شماي پايگاههاي داده شيءگرا براساس مدل داده ODMG بصورت مجازي امكاناتي براي ايجاد كاربران مجازي در پايگاه داده ايجاد شده امكاناتي براي واگذاري و باز پسگيري دسترسيهاي به موجوديتهاي مختلف توسط كاربراني كه مجاز به اين كار ميباشند امكاناتي براي انجام تحليلهاي امنيتي با استفاده از اين محيط ، شماي سيستمهاي مختلفي براساس مدل داده ODMG ايجاد گرديد . سپس در سيستمهاي ايجاد شده حالتهاي مختلف عملكرد مدل بررسي شد كه نتايج بدست آمده از بررسي عملكرد مدل مطلوب بوده است. برنامه نويسي شي ئ گرا object-oriented programming ميدانيد كه كليه برنامه هاي كامپيوتري داراي دو عضو هستند : كد و داده علاوه بر اين ، يك برنامه را ميتوان بطور نظري حول محور كد يا داده اش سازماندهي نمود . يعني بعضي برنامه ها حول محور " آنچه در حال اتفاق است " ( كد ) نوشته شده و ساير برنامه ها حول محور " آنچه تحت تاثير قرار گرفته است " ( داده )نوشته ميشوند . اينها دو الگوي مختلف ساخت يك برنامه هستند . روش اول را مدل پردازش گرا (process-oriented model) مينامند . در اين روش يك برنامه بعنوان كدهاي فعال روي داده ها در نظر گرفت . زبانهاي رويه اي (procedural) نظير C از اين مدل بنحو موفقيت آميزي استفاده ميكنند . اما همانطوريكه در قسمتهاي قبل عنوان شد ، بموازات رشد و گسترش برنامه ها ، اين روش منجر به بروز مشكلات بيشتر و پيچيده تري خواهد شد . براي مديريت پيچيدگي فزاينده ، دومين روش معروف به برنامه نويسي شي ئ گرا پيشنهاد شده است . برنامه نويسي شي ئ گرا يك برنامه را حول محور داده هاي آن( يعني اشيائ ) و يك مجموعه از رابطها (interfaces) خوش تعريف براي آن داده ها سازماندهي ميكند . يك برنامه شي ئ گرا را ميتوان بعنوان داده هاي كنترل كننده دسترسي به كدها (data controlling access to code) تلقي نمود . بعدا" خواهيد ديد با شروع بكار واحد داده هاي كنترل كننده بسياري ازمزاياي اين نوع سازماندهي نصيب شما خواهد شد . تجريد Abstraction تجريد يك عنصر ضروري در برنامه نويسي شي ئ گرا است . افراد پيچيدگيها را با استفاده از تجريد مديريت مينمايند . بعنوان نمونه ، مردم درباره اتوموبيل هرگز بعنوان مجموعه اي از هزاران قطعات منفك از هم تفكر نميكنند. آنها اتوموبيل را بعنوان يك شي ئ خوب تعريف شده داراي نوعي رفتار منحصر بفرد تلقي ميكنند . اين تجريد به مردم امكان ميدهد تا از يك اتوموبيل استفاده نموده و به خواربار فروشي بروند ، بدون اينكه نگران پيچيدگي اجزايي باشند كه يك اتوموبيل را تشكيل ميدهند . آنها قادرند براحتي جزئيات مربوط به نحوه كار موتور، سيستم هاي انتقال و ترمز را ناديده بگيرند . در عوض آنها مختارند تا از اتوموبيل بعنوان يك شي ئ كلي استفاده نمايند . يكي از شيوه هاي قدرتمند مديريت تجريد با استفاده از طبقه بنديهاي سلسله مراتبي (hierarchical) انجام ميگيرد . اين امر به شما امكان ميدهد تا معني و مفهوم سيستم هاي پيچيده را كنار گذاشته و آنها را به اجزائ كوچك قابل مديريت تقسيم نماييد. از ديد بيروني ، يك اتوموبيل يك شي ئ منفرد است . از ديد داخلي اتوموبيل شامل چندين زير سيستم است : فرمان ، ترمزها ، سيستم صوتي ، كمربندهاي ايمني ، سيستم حرارتي ، تلفن سلولي و غيره . هر يك از اين زير سيستم ها بنوبه خود از واحدهاي تخصصي كوچكتري تشكيل شده اند. بعنوان نمونه ، سيستم صوتي اتوموبيل شامل يك راديو، يك پخش CD و يا يك پخش صوت است . نكته مهم اين است كه شما بدين ترتيب بر پيچيدگي اتوموبيل ( يا هر سيستم پيچيده ديگر ) با استفاده از تجريد سلسله مراتبي ، فائق ميآييد . تجريدهاي سلسله مراتبي سيستم هاي پيچيده را ميتوان در مورد برنامه هاي كامپيوتري نيز پياده سازي نمود. داده هاي يك برنامه پردازش گراي سنتي را ميتوان توسط تجريد اشيائ عضو آن ، منتقل نمود . يك ترتيب از مراحل پردازش را ميتوان به مجموعه اي از پيامها بين اشيائ تبديل نمود. بدين ترتيب ، هر يك از اين اشيائ رفتار منحصر بفرد خودش را تعريف خواهد كرد . ميتوانيد با اين اشيائ بعنوان موجوديتهاي واقعي رفتار كنيد كه به پيامهايي كه به آنها ميگويند چكاري انجام دهند ، مرتبط و وابسته هستند . اين هسته اصلي برنامه نويسي شي ئ گراست . مفاهيم شي ئ گرايي در قلب جاوا قرار گرفته اند ، همچنانكه پايه اصلي ادراكات بشري نيز هستند. مهم اينست كه بفهميد اين مفاهيم چگونه در برنامه هاي كامپيوتري پياده سازي ميشوند . خواهيد ديد كه برنامه نويسي شي ئ گرا يك نمونه قدرتمند و طبيعي براي توليد برنامه هايي است كه بر تغييرات غير منتظره فائق آمده و چرخه حيات هر يك از پروژه هاي نرم افزاري اصلي ( شامل مفهوم سازي ، رشد و سالخوردگي ) را همراهي ميكنند . بعنوان نمونه ، هر گاه اشيائ خوش تعريف و رابطهاي تميز و قابل اطمينان به اين اشيائ را در اختيار داشته باشيد ، آنگاه بطور دلپذيري ميتوانيد قسمتهاي مختلف يك سيستم قديميتر را بدون ترس جابجا نموده يا بكلي از سيستم خارج نماييد . سه اصل oop كليه زبانهاي برنامه نويسي شي ئگرا مكانيسمهايي را در اختيار شما قرار ميدهند تا مدل شي ئگرا را پياده سازي نماييد. اين مدل شامل كپسول سازي (encapsulation) وراثت (inheritance) و چند شكلي (polymorphism) ميباشد . اكنون نگاه دقيقتري به اين مفاهيم خواهيم داشت . كپسول سازي encapsulation كپسول سازي مكانيسمياست كه يك كد و داده مربوط با آن كد را يكجا گرد آوري نموده ( در يك كپسول فرضي قرار داده ) و كپسول بدست آمده را در مقابل دخالت يا سوئ استفاده هاي غير مجاز محافظت مينمايد . ميتوان كپسول سازي را بعنوان يك لفافه (wrapper) درنظر گرفت كه كد داده مربوطه را نسبت به دستيابيهاي غيرمعمول و غير منتظره ساير كدهاي تعريف شده در خارج از لفافه محافظت ميكند . دستيابي به كد و داده موجود داخل لفافه از طريق رابطهاي خوب تعريف شده كنترل خواهد شد. در دنياي واقعي ، سيستم انتقال اتوماتيك در يك اتوموبيل را درنظر بگيريد . اين سيستم صدها بيت از اطلاعات درباره موتور اتوموبيل شما را كپسول سازي ميكند : مثل سرعت حركت شما ، شيب سطح در حال حركت و موقعيت اهرم انتقال . شما بعنوان يك كاربر قفط يك راه براي تاثير نهادن در اين كپسول سازي پيچيده خواهيد داشت: بوسيله تغيير اهرم انتقال دهنده ، اما با استفاده از سيگنالهاي برگشتي يا برف پاك كن شيشه جلو ، نميتوانيد روي سيستم انتقال قدرت اتوموبيل تاثيري بگذاريد. بنابراين دست دنده ( اهرم انتقال دنده ) يك رابط خوب تعريف شده ( والبته منحصر بفرد ) براي سيستم انتقال است . مضاف بر اينكه آنچه درون سيستم انتقال اتفاق ميافتد ، تاثيري بر اشيائ خارج از سيستم نخواهد داشت . بعنوان مثال ، دنده هاي انتقال ، چراغهاي جلو اتوموبيل را روشن نميكنند . از آنجاييكه سيستم انتقال اتوموبيلها كپسول سازي شده ، دهها توليد كننده اتوموبيل قادرند سيستم هاي انتقال دلخواه خود را طراحي و پياده سازي نمايند . اما از نقطه نظر كاربر اتوموبيل همه اين سيستم ها يكسان كار ميكنند. درست همين ايده را ميتوان در برنامه نويسي كامپيوتر نيز پياده سازي نمود . قدرت كدهاي كپسول شده در اين است كه هر كسي ميداند چگونه به آنها دسترسي يافته و ميتواند صرفنظر از جزئيات اجرا و بدون ترس از تاثيرات جانبي از آنها استفاده نمايد . در جاوا كپسول سازي بر اساس كلاس (class) انجام ميگيرد . اگر چه كلاس با جزئيات بيشتري در اين كتاب بررسي خواهد شد ، اما بحث مختصر بعدي در اين مورد سودمند خواهد بود. كلاس توصيف كننده ساختار و رفتاري ( داده و كد ) است كه توسط يك مجموعه از اشيائ اشاعه خواهد يافت . هر شي ئ در يك كلاس شامل ساختار و رفتار تعريف شده توسط همان كلاس است . بهمين دليل ، به اشيائ گاهي " نمونه هايي از يك كلاس " نيز ميگويند . بنابراين ، يك كلاس يك ساختار منطقي است ، يك شي ئ داراي واقعيت فيزيكي است . وقتي يك كلاس بوجود ميآوريد ، در حقيقت كد و داده اي كه آن كلاس را تشكيل ميدهند ، مشخص مينماييد . اين عناصر را اعضائ (members) يك كلاس مينامند . بطورمشخص ، داده تعريف شده توسط كلاس را بعنوان متغيرهاي عضو(member variables) يا متغيرهاي نمونه (instance variables) مينامند . كدي كه روي آن داده ها عمل ميكند را روشهاي عضو (member methods) يا فقط روشها (methods) مينامند . (اگر با Cو C++و آشنا باشيد ميدانيد كه روش در برنامه نويسي جاوا همان تابع (function) در زبانهاي Cو C++و ميباشد . ) در برنامه هاي خوب نوشته شده جاوا روشها توصيف كننده چگونگي استفاده از متغيرهاي عضو هستند . يعني كه رفتار و رابط يك كلاس توسط روشهايي تعريف ميشوند كه روي داده هاي نمونه مربوطه عمل ميكنند . چون هدف يك كلاس پياده سازي كپسول سازي براي موارد پيچيده است ، روشهايي براي پنهان كردن پيچيدگي اجزائ در داخل يك كلاس وجود دارد. هر روش يا متغير داخل يك كلاس ممكن است خصوصي private يا عموميpublic باشد . رابط عمومييك كلاس ، معرفي كننده هر چيزي است كه كاربران خارج از كلاس نياز به دانستن آنها دارند . روشها و داده هاي خصوصي فقط توسط كدهاي عضو يك كلاس قابل دسترسي هستند . بنابراين هر كد ديگري كه عضو يك كلاس نباشد، نميتواند به يك روش خصوصي دسترسي داشته باشد. چون اعضائ خصوصي يك كلاس ممكن است فقط توسط ساير بخشهاي برنامه شما از طريق روشهاي عموميكلاس قابل دسترسي باشند، ميتوانيد مطمئن باشيد كه فعل و انفعالات غير مناسب اتفاق نخواهد افتاد . البته ، اين بدان معني است كه رابط عموميبايد با دقت طراحي شود تا كاركرد داخلي يك كلاس را چندان زياد برملا نكند . وراثت inheritance وراثت رويه اي است كه طي آن يك شي ئ ويژگيهاي شي ئ ديگري را كسب ميكند . اين موضوع بسيار اهميت دارد زيرا از مفهوم طبقه بندي سلسله مراتبي حمايت ميكند . همانطوريكه قبلا" گفتيم ، بسياري از دانشها توسط طبقه بندي سلسله مراتبي قابل فهم و مديريت ميشوند. بعنوان مثال سگهاي شكاري طلايي يكي از انواع طبقه بنديهاي سگها هستند كه بنوبه خود جزئي از كلاس پستانداران خونگرم بوده كه در كلاس بزرگتري تحت عنوان حيوانات قرار ميگيرند . بدون استفاده از سلسله مراتب ، بايد خصوصيات هر يك از اشيائ را جداگانه توصيف نمود . اما هنگام استفاده از سلسله مراتب ، براي توصيف يك شي ئ كافي است كيفيتهايي كه آن شي ئ را در كلاس مربوطه منحصر بفرد و متمايز ميسازد ، مشخص نماييد . آن شي ئ ممكن است خصوصيات عموميرا از والدين خود بارث برده باشد . بدين ترتيب در مكانيسم وراثت ، يك شي ئ ميتواند يك نمونه مشخص از يك حالت عموميتر باشد . اجازه دهيد تا با دقت بيشتري به اين رويه نگاه كنيم. بسياري از افراد، دنيا را بطور طبيعي بعنوان مجموعه اي از اشيائ ميدانند كه در يك روش سلسله مراتبي بيكديگر مرتبط شده اند . نظير حيوانات ، پستانداران و سگها . اگر بخواهيد حيوانات را با يك روش تجريدي توصيف نماييد ، بايد برخي خصوصيات نظير اندازه ، هوش و نوع اسكلت آنها را مشخص نماييد . حيوانات همچنين ويژگيهاي خاص رفتاري دارند ، آنها تغذيه نموده ، تنفس كرده و ميخوابند . اين توصيف از خصوصيات و رفتار را توصيف " كلاس " حيوانات مينامند . اگر بخواهيد توصيف يك كلاس مشخصتر از حيوانات مثل پستانداران داشته باشيد بايد خصوصيات دقيقتري نظير نوع دندانها و آلات پستانداري را مشخص نماييد . اين را يك زير كلاس (subclass) از حيوانات و خود حيوانات را كلاس بالاي (superclass) پستانداران گويند . چون پستانداران نوعي از حيوانات هستند ، بنابراين كليه خصوصيات حيوانات را بارث برده اند. يك زير كلاس ارث برنده درحقيقت كليه خصوصيات اجداد خود در سلسله مراتب كلاس را به ارث ميبرد .