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

الملاحظات

قواعد البيانات : ADO.NET : Access: SQL ـ كل ما يتعلق بتعلم Microsoft SQL Server 2008 Express



إضافة رد
 
أدوات الموضوع انواع عرض الموضوع

قديم 2017-06-25, 12:03 AM   رقم المشاركة :1
معلومات العضو
عميد
بايثون كائنية التوجه
إحصائية العضو





معدل تقييم المستوى: 5
نجوى فواد 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()print "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__</span>فتظهر النتيجة التالية:

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/python</span>class 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
الموضوع

بايثون كائنية التوجه

منتديات عميد التعريب.


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

قديم 2019-10-12, 05:17 PM   رقم المشاركة :2
معلومات العضو
EmileMaf
عميد
بايثون كائنية التوجه
إحصائية العضو





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


It seems to me, you are not right


EmileMaf غير متواجد حالياً   رد مع اقتباس
إضافة رد

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

الكلمات الدلالية (Tags)
=, child, class, def, employee, print, التوجه, الصف, بايثون, كائنية

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

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

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



الساعة الآن 12:21 AM


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, vBulletin Solutions Inc.
Search Engine Optimisation provided by DragonByte SEO v2.0.42 (Pro) - vBulletin Mods & Addons Copyright © 2019 DragonByte Technologies Ltd.
منتديات عميد التعريب 2010 - 2019