العودة   منتديات عميد التعريب > >

الملاحظات

قواعد البيانات : ADO.NET : Access: SQL ـ كل ما يتعلق بتعلم Microsoft SQL Server 2008 Express و دروس عن منتج ADO.NET و دورة كاملة فى الاكسس و تعلم إنشاء قواعد البيانات في فجوال بيسك دوت نت بالفيديو و برنامج Sql Server 2000 و تعليم الكريستال ريبورت و تعلم لغة sql للمبتدئين و برنامج DbVisualizer للتعامل مع جميع قواعد البيانات و تعلم إنشاء تقارير Crystall reports في VB.Net بالفيديو



إضافة رد

قديم 2017-06-25, 00:03   رقم المشاركة :1
معلومات العضو
عميد مبدع
إحصائية العضو





مستوى التقييم: 2
نجوى فواد is on a distinguished road
المنتدى : قواعد البيانات : ADO.NET : Access: SQL ـ
Arrow بايثون كائنية التوجه


منتديات عميد التعريب - المصدر الأول لتعريب البرامج و التطبيقات للعالم العربي

لغة البرمجة

تتميز لغة البرمجة بايثون باللغة غرضية التوجه منذ البدايات ولذلك فإن إنشاء الصفوف والأغراض تعتير عملية سهلة وفي هذا القسم سيتعلم المستخدم كيفية استخدام الدعم الذي تقدمه لغة البرمجة بايثون غرضية التوحه.
التالي هو مقدمة للبرمجة غرضية التوجه.

مراجعة لمصطلحات البرمجة غرضية التوجه
  • الصف: هو نموذج يتم تعريفه من قبل المستخدم لغرض ما والذي يعرف مجموعة من السمات التي تصف أي غرض من الصف وهذه السمات يمكن ان تكون بيانات وطرق.
  • متحول الصف: وهو المتحول الذي تتم مشاركته من كافة المساحات ضمن الصف ويتم تعريف هذا المتحول ضمن الصف لكن خارج طرق الصف.
  • عضو البيانات: متحول الصف أو متحول المسافة التي تضبط البيانات المجتمعة مع الصف وأغراضها.
  • تابع التحميل الزائد: إسناد أكثر من مفهوم أو مهمة للتابع الخاص وتختلف هذه العملية المنجزة باختلاف نماذج الأغراض أو المدخلات المتضمنة.
  • متحول المسافة: المتحول الذي يتم تعريفه ضمن الطريقة ويعود حصراً لمسافة الصف الحالية.
  • الوراثة: وتعني نقل المميزات من صف إلى صف آخر مشتق منه.
  • المسافة: الأغراض المستقلة لصف محدد.
  • المثيل: تحديد مسافة الصف.
  • الطريقة: تعرف خاص للتابع المعرف في تعريف الصف.
  • الغرض: مسافة مميزة من تركيبة البيانات والمعرفة ضمن صفها.
  • مشغل التحميل الزائد: إسناد أكثر من تابع إلى مشغل خاص.
إنشاء الصفوف

تستخدم التعليمة class لإنشاء صفوف جديدة وتعريفها ويتم وضع اسم الصف كالتالي:

class ClassName:'Optional class documentation string'class_suite
  • للصف سلسلة وثائق والتي يمكن الوصول إليها عن طريق __doc__ .
  • تتألف الـ class_suite من كافة التعليمات المعرفة كأعضاء للصف وسمات البيانات والتوابع.
مثال

class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salaryإنشاء أغراض المسافة

لإنشاء مسافة ما ضمن الصف يجب استدعاء الصف باستخدام اسم الصف وإسناد المدخلات.

"This would create first object of Employee class"emp1 = Employee("Zara", 2000)"This would create second object of Employee class"emp2 = Employee("Manni", 5000)الوصول إلى السمات

يتم الوصول إلى سمات الأغراض باستخدام المشغل dot مع الغرض ويتم الوصول إلى متحول الصف باستخدام اسم الصف كالتالي –

emp1.displayEmployee()emp2.displayEmployee()print "Total Employee %d" % Employee.empCountوالآن عند وضع كافة المفاهيم سوية:

#!/usr/bin/pythonclass Employee:** 'Common base class for all employees'** empCount = 0** def __init__(self, name, salary):***** self.name = name***** self.salary = salary***** Employee.empCount += 1* *** def displayCount(self):**** print "Total Employee %d" % Employee.empCount** def displayEmployee(self):***** print "Name : ", self.name,* ", Salary: ", self.salary"This would create first object of Employee class"emp1 = Employee("Zara", 2000)"This would create second object of Employee class"emp2 = Employee("Manni", 5000)emp1.displayEmployee()emp2.displayEmployee()p rint "Total Employee %d" % Employee.empCountفتظهر النتيجة التالية:

Name: Zara,Salary: 2000Name: Manni,Salary: 5000Total Employee 2ويمكن إضافة سمة الجمع والإزالة والتعديل للصف والأغراض –

emp1.age = 7 # Add an 'age' attribute.emp1.age = 8 # Modify 'age' attribute.del emp1.age # Delete 'age' attribute.يمكن استخدام التوابع التالية بدلاً من استخدام التعليمات الاعتيادية :
  • التابع getattr(obj, name[, default]) : للوصول إلى سمة الغرض.
  • التابع hasattr(obj,name) :لاختبار فيما إذا كانت السمة موجودة أم لا.
  • التابع setattr(obj,name,value)لضبط السمة إذا كانت غير موجود وبعدها يتم إنشاؤها.
  • التابعdelattr(obj, name) : لحذف السمة.
hasattr(emp1, 'age')*** # Returns true if 'age' attribute existsgetattr(emp1, 'age')*** # Returns value of 'age' attributesetattr(emp1, 'age', 8) # Set attribute 'age' at 8delattr(empl, 'age')*** # Delete attribute 'age'سمات الصفوف المبنية

جميع السبات في بايثون لها السمات التالية ويمكن الوصول إليها باستخدام المشغل dot مثل أي سمة أخرى-
  • __dict__ : القاموس الحاوي على الفراغات الاسمية للصف.
  • __doc__ : سلسلة الصف أو لاشيئ إذا كانت غير معرفة.
  • __name__ : اسم الصف.
  • __module__ : اسم الوحدة التي تم تعريف الصف عندها وهذه السمة تقابل السمة “__main__” في النمط التفاعلي.
  • __bases__ : الصف الفارغ المحتمل والحاوي على الصف الأساسية وفق تراتبية حدوثها في قائمة الصف الأساسية.
ومن أجل الصف السابق يمكن استخدام كافة السمات –

#!/usr/bin/pythonclass Employee:** 'Common base class for all employees'** empCount = 0** def __init__(self, name, salary):***** self.name = name***** self.salary = salary***** Employee.empCount += 1* *** def displayCount(self):**** print "Total Employee %d" % Employee.empCount** def displayEmployee(self):***** print "Name : ", self.name,* ", Salary: ", self.salaryprint "Employee.__doc__:", Employee.__doc__print "Employee.__name__:", Employee.__name__print "Employee.__module__:", Employee.__module__print "Employee.__bases__:", Employee.__bases__print "Employee.__dict__:", Employee.__dict__فتظهر النتيجة التالية:

Employee.__doc__: Common base class for all employeesEmployee.__name__: EmployeeEmployee.__module__: __main__Employee.__bases__: ()Employee.__dict__: {'__module__': '__main__', 'displayCount':, 'empCount': 2, 'displayEmployee': , '__doc__': 'Common base class for all employees', '__init__': }تدمير الكائنات

تقوم لغة البرمجة بايثون بحذف الأغراض التي لاحاجة لها بشكل تلقائي وذلك لتوفير مساحة ضمن الذاكرة وتسمى هذه العملية بجمع النفايات حيث يبدأ جامع النفايات خلال عملية تنفيذ البرنامج ويتوقف عندما يصل العداد المرجعي للغرض المنفذ إلى الصفر.
يزداد هذا العداد عندما عندما يسند له اسم جديد او عند وضعه في مكان جديد مثل (قائمة أو صف أو قاموس). ويتناقص عندما يتم حذفه باستخدام التعليمة del ويعاد إسناد المرجع للعداد أو يخرج خارج التنفيذ وعندما يصل للصفر فإن بايثون تقوم بجمعه تلقائياً.

a = 40***** # Create object b = a****** # Increase ref. count* of c = [b]**** # Increase ref. count* of del a****** # Decrease ref. count* of b = 100**** # Decrease ref. count* of c[0] = -1** # Decrease ref. count* of تقوم هذه الأداة __del__() بطباعة اسم الصف للمسافة التي هي على وشك الإزالة-

#!/usr/bin/pythonclass Point: def __init( self, x=0, y=0): self.x = x self.y = y def __del__(self): class_name = self.__class__.__name__ print class_name, "destroyed"pt1 = Point()pt2 = pt1pt3 = pt1print id(pt1), id(pt2), id(pt3) # prints the ids of the obejctsdel pt1del pt2del pt3فتظهر النتيجة التالية

308340132430834013243083401324Point destroyedتوريث الصف

بدلاً من إنشاء صف جديد فإنه من الممكن اشتقاق صف من صف آخر موجود مسبقاً وذلك بوضع الصف الجديد بين قوسين بعد اسم الصف الجديد.
يتم توريث كافة سمات الصف الأصلي للصف الوليد ويمكن استخدام هذه السمات مع الصف الجديد كما لو أنها أنشئت ضمنه وكذلك الأمر بالنسبة للطرق والبيانات.

الشيفرة البرمجية

class SubClassName (ParentClass1[, ParentClass2, ...]):** 'Optional class documentation string'** class_suiteمثال

#!/usr/bin/pythonclass Parent:******* # define parent class** parentAttr = 100** def __init__(self):***** print "Calling parent constructor"** def parentMethod(self):***** print 'Calling parent method'** def setAttr(self, attr):***** Parent.parentAttr = attr** def getAttr(self):***** print "Parent attribute :", Parent.parentAttrclass Child(Parent): # define child class** def __init__(self):***** print "Calling child constructor"** def childMethod(self):***** print 'Calling child method'c = Child()********* # instance of childc.childMethod()***** # child calls its methodc.parentMethod()**** # calls parent's methodc.setAttr(200)****** # again call parent's methodc.getAttr()********* # again call parent's methodفتظهر النتيجة التالية:

Calling child constructorCalling child methodCalling parent methodParent attribute : 200وبشكل مشابه يمكن اشتقاق صف من صفوف متعددة كالتالي-



class A:******* # define your class A.....class B:******** # define your calss B.....class C(A, B):** # subclass of A and B.....يمكن استخدام التابع issubclass() أو التابع isinstance() لتفحص العلاقات بين صفين أو مسافتين.
  • التابع issubclass(sub, sup)يعيد القيمة صح إذا كان الصف الفرعي المعطىsub فعلاً صفاً فرعياً للصف sup .
  • التابع isinstance(obj, Class)يعيد القيمة صح إذا كان obj مسافة للصف أوClassأو مسافة للصف الفرعي للصف.
تجاهل الطرق

يمكن زيادة التحميل بالنسبة لطرق الصفوف لعدة أسباب أهمها الحاجة لوجود توابع خاصة أو مختلفة في الصف الفرعي.

مثال

#!/usr/bin/pythonclass Parent:******* # define parent class** def myMethod(self):***** print 'Calling parent method'class Child(Parent): # define child class** def myMethod(self):***** print 'Calling child method'c = Child()********* # instance of childc.myMethod()******** # child calls overridden methodفتظهر النتيجة التالية

Calling child methodالطرق الأساسية زائدة التحميل

الرقم التسلسليالطريقة والوصف وعينة الاستدعاء1__init__ ( self [,args…] ) تعمل كجامع للنفايات مع أي مدخل.
الاستدعاء وفق: obj = className(args)2__del__( self ) تحذ الغرص.
الستدعاء وفق : del obj3__repr__( self ) تمثل السلسلة القابلة للتقييم.
الاستدعاء وفق: repr(obj)4__str__( self ) تمثيل السلسلة القابلة للطباعة.
الاستدعاء وفق : str(obj)5__cmp__ ( self, x ) مقارنة الأغراض.


الاستدعاء وفق: cmp(obj, x)

تجاهل المشغلات

لنفترض إنشاء صف Vector لتمثيل شعاعين ثنائيي البعد. ماذا سيحدث لو حاول المشغل إضافة الجمع إليهما؟!
يمكن للمستخدم تعريف الطريقة __add__في الصف لإنجاز عملية جمعوبعدها يسلك المشغل الخاص بالجمع سلوكاً مسبق التوقع.

مثال

#!/usr/bin/pythonclass Vector:** def __init__(self, a, b):***** self.a = a***** self.b = b** def __str__(self):***** return 'Vector (%d, %d)' % (self.a, self.b)* *** def __add__(self,other):***** return Vector(self.a + other.a, self.b + other.b)v1 = Vector(2,10)v2 = Vector(5,-2)print v1 + v2فتظهر النتيجة التالية

Vector(7,8)تخبئة البيانات

يمكن أن تكون سمات الغرض ظاهرة أو غير ظاهرة خارج تعريف الصف ولجعل هذه السمات غير ظاهرة خارج تعريف الصف يتم تسميتها بوضع خطين سفليين قبلها ( __ ).

مثال

#!/usr/bin/pythonclass JustCounter:** __secretCount = 0* ** def count(self):***** self.__secretCount += 1***** print self.__secretCountcounter = JustCounter()counter.count()counter.count()print counter.__secretCount

فتظهر النتيجة التالية

12Traceback (most recent call last): File "test.py", line 12, in print counter.__secretCountAttributeError: JustCounter instance has no attribute '__secretCount'

تقوم لغة البرمجة بايثون بحماية هذه الأعضاء من خلال التغيير الداخلي للاسم ليتضمن اسم الصف. ويمكن الوصول إلى هذه السمات مثل object._className__attrName .
من الممكن استبدال السطر الأخير كالتالي :

.........................print counter._JustCounter__secretCount

فتظهر النتيجة التالية

122
الموضوع بايثون كائنية التوجه منتديات عميد التعريب.






نجوى فواد غير متواجد حالياً   رد مع اقتباس

إضافة رد

مواقع النشر (المفضلة)

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML متاحة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
جدول يوم عرفة - استغلال الوقت في التوجه الى الله في يوم عرفه سعود القرشي الشريعة و الحياة 0 2017-09-07 06:06
جدول يوم عرفة - استغلال الوقت في التوجه الى الله في يوم عرفه سعود القرشي الشريعة و الحياة 0 2017-08-31 04:15
مطور Wonder Boy: The Dragon?s Trap يحدثنا عن التوجه الفني جاد الله سعيد شئوون الألعاب 0 2017-04-10 02:50
_ باحثون يابانيون يحذرون من قيلولة الظهيرة الطويلة Mr.Millennium طب و صحة 0 2016-09-21 11:26
دعم الملك يعزز التوجه نحو اقتصاد ومجتمع المعرفة قمرهم كلهم شؤون الإنترنت 0 2013-01-10 04:03


الساعة الآن 17:37

جميع المشاركات المكتوبة تعبّر عن وجهة نظر صاحبها .. ولا تعبر عن وجهة نظر إدارة المنتدى بأي شكل من الأشكال



ساهم معنا
تبرع لتساعد على الاستمرار ومواصلة تعريب البرامج للعالم العربي.
ساهم في صمود وبقاء ونشر اللغة العربية في العالم من أجل الأجيال القادمة.
تودع مبالغ التبرعات في احد الحسابات التالية
اسم البنك
رقم الحساب
بنك الراجحي _ من خارج السعودية
IBAN - SA2880000141608010128882
بنك الراجحى _ من داخل السعودية 141608010128882



Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Search Engine Optimisation provided by DragonByte SEO (Pro) - vBulletin Mods & Addons Copyright © 2017 DragonByte Technologies Ltd.
جميع الحقوق محفوظة لموقع منتديات عميد التعريب 2010 - 2017 ©