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