recent
أخبار ساخنة

مستويات الحماية ( محددات الوصول للعضو )

** مستويات الحماية ( محددات الوصول للعضو ) .:

هي عملية تحديد مدى التعامل مع الأعضاء ( البيانات والعمليات ) . هل هذه الأعضاء خاصة بالصنف المعرفة فيه ، أم يمكن استخدام نطاق الصنف وهي ثلاث مستويات .::

1- مستوى الحماية الخاص private :
وفيه يتم تعريف الأعضاء التي يتم استخدامها في الصنف ، ولا يمكن الوصول إليها من خارج الصنف .

2- مستوى الحماية المحمي protected :
الأعضاء المعرفة في هذا المستوى تشبه الأعضاء الخاصة غير أنه يمكن توريثها إلى أي صنف آخر .

3- مستوى الحماية العام Public :
وفيه يتم تعريف الأعضاء العامة التي يمكن الوصول إليها من خارج الصنف .




* ملاحظات :.
1- دائماً تتبع محددات الوصول للعضو بنقطتين ( : ) مثلاً
كود
Private:

2- يمكن أن تظهر عدة مرات وبأي ترتيب في تعريف الصنف .
3- يتم إعادة تعريف البيانات الأعضاء في مستوى الحماية الخاص Private لأن من مبادئ البرمجة الشيئية " إخفاء البيانات " .
4- يتم إعادة تعريف الدوال الأعضاء في مستوى الحماية العام لآن هذه الدوال يتم استدعاؤها من خلال البرنامج الرئيسي .
5- من الممكن أن يكون لدينا بيانات عامة وعمليات خاصة غير أن هذا الاستخدام غير شائع .



** الأصناف Classes :





تعريف الصنف : هو عبارة عن وحدة تحوي مجموعة من البيانات ( الخاصة والعامة )بالإضافة إلى تعريف الدوال ( العمليات ) حيث يطلق على الدوال المعرفة داخل الصنف بـ " أعضاء دالية " member Function .





* الإعلان عن الصنف :





أمثلة :.

مثال 1: مثال على صنف الوقت .::
كود
class Time
{
private:
int hor ,minute ,second;
public:
void settime(int,int,int);
void printstandard ();
void printmilitary();
};






مثال 2 : مثال على صنف المستطيل :.

كود
class rectangle
{
int x,y;
public:
void set_value(int,int);
int area();
};


بمجرد تعريف الصنف يمكن استخدامه كنوع جديد حيث يطلق عليه ( نوع معرّف من قبل المستخدم).





** تعريف الكائنات .::

يتم تعريف الكائنات في البرنامج الرئيسي وفقاً للصيغة التالية :

كود
class_name object_name


حيث :
class_name : اسم الصنف ( نفس اسم الصنف الذي كتبناه في بداية البرنامج )
object_name : اسم الكائن ، وهو اختياري ، يستخدم للوصول لعناصر الصنف .





مثال.::
كود
rectangle rect;


حيث rectangle اسم الصنف ، و rect اسم الكائن .

وإذا أردنا أن نعرف أكثر من كائن بنفس الوقت ، نفس العملية السابقة ، فقط نفصل بين كل كائن والآخر باشارة الفاصلة ( , ) . والمثال التالي يوضح ما سبق .::

كود
rectangle rect1,rect2,rect3;






** استدعاء الأعضاء :.

أعضاء الصنف لا يمكن أن نصل إليها من خارج الصنف إلا عن طريق الكائنات ويتم ذلك بالصيغة التالية :
كود
Object_name.member


حيث .::
Object_name : اسم الكائن .
member : اسم العضو الذي نريد الوصول إليه .
مثال : إذا أردنا الوصول للدالة area() باستخدام الكائن rect نكتب الآتي :

كود
rect1.area()






البرنامج الأول : نقوم بكتابة برنامج يقوم بحساب مساحة المستطيل ( باستخدام الأصناف ) ..

كود
#include <iostream.h>
#include <cstdlib>
using namespace std; 
class rectangle
{
int x ,y;
public :
void set_value(int a,int b)
{
x=a;
y=b;
}

int area()
{
return x*y;
}
};
main()
{
rectangle rect1,rect2;
rect1.set_value(3,4);
rect2.set_value(5,6);
cout<<"Rect1 Area = "<<rect1.area()<<endl;
cout<<"Rect2 Area = "<<rect2.area()<<endl;
      system("PAUSE");

}


شرح للبرنامج :.
في البداية عرفنا متغيرات خاصة Private وهما x ,y وهنا ملاحظة وهي طالما أننا عرفنا ذلك في بداية الصنف ولم نحدد مستوى الحماية فإن مستوى الحماية الإفتراضي هو Private .
بعد ذلك أنشأنا دالة باسم set_value بوسيطين في مستوى الحماية العام Public وظيفة هذه الدالة هي مساواة القيم التي يحددها المستخدم بالمتغيرات الخاصة ، أو بمعنى أخر وظيفتها الوصول للمتغيرات الخاصة x,y .
بعد ذلك أنشأنا دالة area() وظيفتها إرجاع مساحة المستطيل وهي عملية حسابية
الطول × العرض .
ثم في الدالة الرئيسية main() قمنا في البداية في باشتقاق كائنين rect1 و rect2 بعد ذلك قمنا باستدعاء دالة set_value وحددنا قيم الوسائط ..
ثم بعد ذلك استدعينا دالة حساب المساحة area() لكل من الكائنين rect1 , rect2 .





** البرنامج الثاني : برنامج يقوم بحساب مساحة ومحيط الدائرة ( مستخدماً الأصناف ) .::
كود
#include <iostream.h>
#include <cstdlib>
using namespace std; 
class circle
{
private :
int r;
float area1,c;
public :
void get_r()
{
cout<<"Enter radius \n";
cin>>r;
}
void area()
{
area1=r*r*3.14;
}
void cir()
{
c=2*r*3.14;
}
void display ()
{
cout<<area1<<endl;
cout<<c<<endl;
}
};
main()
{
circle c;
c.get_r();
c.area();
c.cir();
c.display();
      system("PAUSE");

}


نفس المثال السابق تقريباً من حيث الفكرة حيث :..
r = نصف القطر . area1=المساحة. c = المحيط .
cir = دالة ايجاد المحيط . display= طباعة المساحة والمحيط . area= المساحة .
google-playkhamsatmostaqltradent