ما هو تعدد الأشكال في OOP. البرمجة الشيئية (OOP): تعدد الأشكال

12.01.2024 أجهزة الصوت

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

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

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

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

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

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

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

وبالتالي فإن التجريد مستحيل بدون التغليف والوراثة، كما أن تعدد الأشكال مستحيل دون الوراثة نفسها. حسنًا، تعدد الأشكال مستحيل أيضًا بدون التغليف، وهو ببساطة عديم الفائدة بدون الميراث وتعدد الأشكال. هذه هي المثلثات مع الفطائر. من المؤسف أنهم كذبوا بشأن الفطيرة. وعن عيد الميلاد.

البرمجة هي عملية تطوير حلول للمشكلات الديناميكية "الحية" في شكل هياكل جامدة من التعليمات البرمجية والبيانات والوظائف والخوارزميات. إجراء تشكيل بناء جملة صارم من دلالات غامضة. مشاكل العالم الحقيقي هي مشكلة كبيرة معروفة في الخوارزمية: من أجل تحقيق الحل المطلوب، يجب وضع المشكلة في هياكل نحوية دقيقة.

لقد حاولت OOP مرتين "كسر" مفهوم البرمجة القديم هذا، لكن "أغلال" النمط الكلاسيكي لترميز البيانات والخوارزميات لا تزال قوية.

المستوى والمؤهلات

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

ومن الموضوعي أيضًا أن المطور لا يصر، ولا يطالب العميل بحل حقيقي لمشاكل حقيقية. لقد اعتاد الجانبان على أن يكونا مقيدين بالأدوات المتاحة والقدرات المألوفة.

أشكال تعدد الأشكال OOP، وأفكار تغليف التعليمات البرمجية ووراثة الخصائص (الطرق) تقع في مجال البرمجة، ولكن ليس في مجال المشكلة التي يتم حلها.

ومن الأمثلة على ذلك مكتبة PHPOffice/PHPWord. لاستخدامه، تحتاج إلى مؤهلات المطور، وتحتاج إلى إنشاء نظام الكائنات الخاص بك، ولكن المستوى الحالي للعميل (متطلبات العميل) عبارة عن تركيبة تافهة يغطيها المبرمج بتطويره الخاص (وإلا لا يمكن تلبية المتطلبات ). الوضع هو شيء من هذا القبيل:

في هذه الحالة، يكون استخدام المكتبة هو مهمة تنسيق المستندات، على سبيل المثال، يجب تنسيق الدبلوم أو الأطروحة وفقًا للمعيار. قدم العميل مطالبه، وذهب المبرمج في طريقه إلى أبعد من ذلك بكثير.

تم إجراء تحليل كامل للمستند، وتجميعه بالتنسيق المطلوب، والعمل مع الجداول من أي مستوى تداخل، ودمج الخلايا وتقسيمها، والطباعة في أي اتجاه، وما إلى ذلك.

تعدد الأشكال و OOP

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

  • التغليف؛
  • تعدد الأشكال؛
  • ميراث.

يضيف البعض أيضًا: التجريد، وغالبًا ما يتم استخدام هذه النقطة الرئيسية كأساس لوصف جوهر OOP.

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

إن المبدأ الديمقراطي ليس من سمات مجال تكنولوجيا المعلومات، ولكن ينبغي أن يعطى حقه: إن الجمع والتعايش بين العديد من الآراء حول نفس الشيء هو تعدد الأشكال الحقيقي في العمل.

التعاريف الشعبية لتعدد الأشكال

OOP هي المرحلة التالية في تطوير تكنولوجيا المعلومات. قليل من الناس يجادلون في هذا، لكن البديهيات والأحكام الرئيسية تختلف كثيرًا من حيث الدلالات بحيث لا تستحق الاهتمام خارج مجملها.

  1. تعدد الأشكال في البرمجة هو القدرة على توفير نفس الواجهة لأشكال أساسية مختلفة (أنواع البيانات).
  2. تعدد الأشكال هو قدرة الأشياء على أن يكون لها تطبيقات مختلفة.
  3. تعدد الأشكال هو قدرة الوظيفة على...
  4. الكلاسيكية (من منشئ C/C++): "واجهة واحدة - العديد من التطبيقات."
  5. تعدد الأشكال البارامترية يعني...
  6. تعدد الأشكال هو شرط لنظرية النوع ...
  7. التجريد مستحيل بدون تغليف ووراثة، كما أن تعدد الأشكال مستحيل بدون وراثة...

يمكننا أن نتفق على أن كل هذا يشير إلى نفس الشيء: لكن شكل التعبير عن الفكر والجوهر والمضمون ليسا متشابهين. ولكن لا يزال هناك شيء مشترك.

الكيان: المطور - العميل

يفترض تطوير البرمجيات الكلاسيكية وجود مبرمج ومهمة (عميل، عميل). يقوم المبرمج بفحص المشكلة، وإضفاء الطابع الرسمي عليها، وإنشاء التعليمات البرمجية التي تؤدي إلى الحل. ينكر العميل كل ما هو مقترح أو جزء منه فقط، مشيراً إلى أوجه القصور، ويقوم المبرمج بعمله مرة أخرى.

تشير هذه الدورة من عملية حل المشكلات إلى دمج كيانين مختلفين تمامًا هنا بشكل واضح:

  • لا يستطيع الكمبيوتر حل المشكلة بنفسه؛
  • هناك حاجة إلى برنامج حتى يتمكن الكمبيوتر من "فهم" و"حل" المشكلة.

المهمة هي مجال اختصاص العميل، والبرنامج عبارة عن خوارزمية "لتكييف" المهمة مع قدرات الكمبيوتر - مجال اختصاص المبرمج. ودور الأخير هو "تكييف" الكمبيوتر مع متطلبات المهمة، وهذا غير ضروري!

عروض خلاصة. هناك أشياء - هذا هو مجال العميل؛ هناك تنفيذ الكائنات - وهذا هو مجال المبرمج. لا يوجد اتصال "تكنولوجي" بين العميل والمطور. الفكرة جذرية، ولم يتم تنفيذها حتى يومنا هذا، ولكن هناك شيء يعمل بالفعل بثبات.

النوافذ والأزرار والأشياء الأخرى

إن تاريخ Air Art Technology، وObject Magazine، وTurbo Vision، وGraph Vision أصبح تاريخًا بالفعل. قليل من الناس يتذكرون تطبيقات OOP هذه، فهي غير مستخدمة ومنسية عمليًا، لكن واجهة نافذة Windows مألوفة لملايين المستخدمين، ويتم استخدام الكائنات في PHP وJavaScript ولغات تكنولوجيا الإنترنت الأخرى من قبل مئات الآلاف من مطوري الأكواد، والملايين من زوار موارد الويب يعرفون عنها.

ربما تكون هذه هي الطريقة الصحيحة الوحيدة التي يجب أن يتم تطوير OOP بها: التغليف، والميراث، وتعدد الأشكال للمطور، ولكن ليس للمستخدم. ومن المميز أن هذا المنصب كان هو الرئيسي في تطوير التصميم المرئي (الواجهة) لبرامج Windows وبرامج التطبيقات مثل Turbo Vision وGraph Vision.

كان المفهوم الكامن وراء منتجات مثل Air Art Technology وObject Magazine مختلفًا بشكل كبير. هنا، كان الكائن المجرد هو السلف الأول لبنية المعلومات، حيث قام بتغليف كود معالجة المعلومات على المستوى المجرد. كانت عناصر النوافذ والأزرار وعناصر التصميم المرئي ثانوية هنا.

في الإصدار الأول (ويندوز وغيرها)، تم تحديد نموذج OOP: التغليف، الميراث، تعدد الأشكال على مستوى سلف مجرد، وتم تشكيل تنفيذ الكود على مستوى كل سليل محدد على طول فرع الميراث وفقًا إلى الهيكل والمحتوى المطلوب.

في الخيار الثاني (Air Art Technology and Object Magazine)، يكون مستوى الكائن التجريدي مهمًا. ما سيحصل عليه سليل معين ليس هو الهدف، الشيء الرئيسي هو أن فرع الميراث الخاص به يلبي متطلبات جميع الآباء وصولاً إلى التجريد الجذري.

كائن ونظام الكائنات: الخوارزمية

يمكن للمفهوم المثالي الموجه للكائنات التعامل مع الكائنات وأنظمة الكائنات فقط.

في لغات البرمجة الحديثة، يُفهم الكائن (الفئة) عادةً على أنه وصف لكائن ومثيل لكائن، ومن أجل استخدام وصف كائن، تسمح اللغات للمبرمج بالعمل مع كائنات ثابتة، بينما كائن ديناميكي - أوصاف بمحتواها وبنيتها الفريدة، ولكن باستخدام نفس أساليب (خصائص) الوصف.

الممارسة الحالية تربط مفهوم الكائن بالأداة، أي لغة البرمجة، والواجهة، والوصول إلى قاعدة البيانات، والاتصال بالشبكة، ولكن لا يوجد شيء يشير إلى اهتمامات العميل، والمشكلة التي يتم حلها.

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

اعتمد المبرمجون OOP كوسيلة لتحسين جودة وإنتاجية عملهم، لكنهم لم يتنازلوا عن جزء واحد من "أراضيهم" للعميل. ظلت المفاهيم الأساسية لـ OOP - التغليف والميراث وتعدد الأشكال - في منطقة التطوير ولم يتم زرعها في منطقة المهمة.

الكائن ونظام الكائنات: المشكلة والحل

كمبيوتر - مبرمج - مهمة. الرابط الأوسط زائدة عن الحاجة. من الناحية المثالية، يجب أن يكون هناك دائرتان فقط معتمدتان نسبيًا: (الكمبيوتر - المبرمج) - المهمة. أي أن المستخدم أو العميل أو الزائر لديه أداة لحل مشكلته. لا يهتم العميل بكيفية تنفيذ الأداة.

من الناحية المثالية، هذا مجرد جهاز كمبيوتر قادر على فهم ما يريده العميل ويفعل ما يريد. كيف سيبدو: برنامج محلي أو موقع ويب يمكن الوصول إليه من خلال المتصفح، برنامج خاص لمعالجة المعلومات الموزعة، نظام معلومات للعميل - لا يهم.

ومن المهم ألا يكون هناك ارتباط غير ضروري بين المهمة والكمبيوتر، ولكن يتم فهم الأولى وحلها بواسطة الثانية. ولتحقيق هذا الهدف يجب ربط الكمبيوتر والعميل بنظام واحد من الكائنات، ويتم تحديد معنى وبنية ومحتوى كل كائن من قبل العميل، ويتم تنفيذ أساليب وخصائص الكائنات من قبل المبرمج.

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

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

البرمجة التقليدية والكائنية

الافتراضات الأساسية لـ OOP: التغليف والميراث وتعدد الأشكال بالشكل الذي أصبحت به مألوفة ومطلوبة، تؤدي إلى تحسن ملحوظ في جودة وموثوقية الكود، وتسريع عمل المبرمج بشكل كبير ولها الكثير إلى غير ذلك من الصفات الإيجابية.

لكن الأمور لا تزال موجودة: البرمجة الكلاسيكية ليست أقل شأنا من مواقفها، ويتم تنفيذ العديد من الأفكار الموجهة للكائنات في الكود الكلاسيكي.

ومع ذلك، فإن أفكار OOP والتكرار أدت إلى تأثير مناسب على بناء جملة مشغلي بناء الجملة الكلاسيكي، على منطق بناء كود عادي لا علاقة له بأسلوب الكتابة والتفكير الموجه للكائنات.

تم تحويل القوائم وقوائم الانتظار، وظهر مفهوم العنصر الأول والأخير من المصفوفة، وظهرت حلقات "لكل"، وأصبحت الخيارات المرجعية للتسمية والاستخدام والتنفيذ أكثر شيوعًا من ذي قبل.

في الواقع، حقيقة أن المتغيرات فقدت وجهها "الواضح" (نوع المتغير يمكن أن يتغير حسب الحاجة، وليس هناك حاجة لوصف متغير على الإطلاق) تشير إلى أن الكلاسيكيات، في الواقع، أصبحت منذ فترة طويلة موضوعية. الموجهة والاعتراف بالمبادئ الأساسية لـ OOP: التغليف والميراث وتعدد الأشكال كأفكار ذات أهمية كبيرة.

على ماذا يعتمد: كائن أم نظام؟

التجريد باعتباره الموقف المفاهيمي الرئيسي لـ OOP، بغض النظر عن مكان وجود منطقة المسؤولية (التنفيذ) للكائن - على مستوى الكائن المجرد الأول أو على مستوى سليل معين - يترك السؤال مفتوحًا: من أين نبدأ كل شيء، من الكائن أو من النظام؟

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

إذا بنيناها على نظام من الكائنات، فسنحصل على نظام من الأنظمة. من الصعب تخيل ذلك فيما يتعلق بمهمة محددة، ومن الصعب أيضًا فهم مكان بدء التطوير. على العموم، فإن تعدد أشكال OOP مع اختلافاته في الكيانات وأشكال التنفيذ وعدد المعلمات الفعلية في الوظائف يعطي فكرة عن النظام الذي يكمن في البداية على النحو التالي:

  • حول خيارات حل المشكلة (على سبيل المثال، القائمة)؛
  • حول الشروط الأولية (تطبيق المشكلة في ظروف وبيانات مختلفة)؛
  • حول أوضاع التشغيل (الاختبار والإعداد والتشغيل).

لكن هذا وأمثاله لا يعطي أي سبب لتأسيس حل المشكلة على نظام من الكائنات. غالبًا ما يكون كافيًا تحديد كائن بداية واحد.

تاريخ عملية حل المشكلات

أهم مبادئ OOP: تعدد الأشكال والتجريد - إعطاء الأولوية للكائن الأولي كنظام من الكائنات. في النقاش حول أيهما يجب أن يأتي أولاً، الدجاجة أم البيضة، هنا تفوز الدجاجة.

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

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

المبرمج في OOP هو الأقل اهتمامًا بمفهوم الملف وقاعدة البيانات والخوارزمية - هذه تفاصيل؛ هنا يفكر المبرمج في الكائنات، لكن الكائنات موجودة في الوقت المناسب وتتغير في سياق تحقيق المطلوب.

وهكذا، في البداية يكمن الكائن كنظام من الكائنات ومنطق هذا النظام - المقياس الزمني: إطلاق مهمة، تشكيل الكائن الأول، إدخال البيانات أو جمعها، تشكيل الكائن التالي، لكن لا شيء يمنع الكائن الأول من الانتقال إلى الحل التالي.

يعمل كل مستوى من الكائنات كنظام مستقل من الكائنات، أي أنه كائن واحد، لكنه في سياق العملية التي بدأت ومعنى الزمن، فهو نظام من الكائنات على المقياس الزمني. من أجل التنفيذ الكامل لـ OOP، يضمن تعدد الأشكال والميراث وعامل الوقت معًا ديناميكيات الأول، أي أن الكائن لا يمكن أن يتغير بمرور الوقت فحسب، بل يمكنه أيضًا إنشاء كائنات غير مقصودة من قبل المطور، تم إنشاؤها عن طريق تنفيذ المهمة أثناء العملية، التي صممها العميل.

تعدد أشكال OOP الحقيقي، مثال

إن تعقيد المشكلات التي يمكن لـ OOP القيام بها لا يمكن مقارنته بما هو ممكن في الإصدار الكلاسيكي من برامج الكتابة. بالطبع، من الممكن دائمًا حل أي مشكلة بالطريقة المعتادة، لكن السؤال عن مقدار "تكلفة" الوقت والجهد غالبًا ما يجعل النتيجة عديمة الفائدة.

تم تطوير مكتبة PHPOffice/PHPWord منذ وقت ليس ببعيد، ولكن من أجل استخدام إمكانياتها، يتعين عليك دائمًا إنشاء نظام الكائنات الخاص بك. على سبيل المثال، ملف *.docx بسيط:

هو أرشيف مضغوط للعديد من الملفات والمجلدات بتنسيق Office Open XML (OpenXML، OOXML). تتم كتابة كل ملف في علامات XML، وعند إضافة وتغيير وحذف الحروف والكلمات والجداول والقوائم والعناصر الأخرى، تبدأ محتويات الملفات في تمثيل سلسلة من العلامات التي لا تحتوي دائمًا على عناصر كاملة غالبًا ما يكون عنصرًا واحدًا؛ مكتوبة مع العديد من العلامات.

إذا تخيلت هذا الملف كسلسلة من العلامات، فستحصل على صورة مثيرة للاهتمام:

من السهل ملاحظة أن الفقرة الأولى والوحيدة من المستند ممثلة بالعديد من العلامات. أما بالنسبة للجدول والجداول المضمنة فيه، فلا يمكن إدراك حجم وصف جميع العناصر، ولكن يمكن الوصول إليه من خلال تطبيق موجه للكائنات.

في الواقع، في الشكل، اللون الأخضر هو نتيجة اختبار العلامات، والأصفر هو المعلمات ونوع العلامة، والبيج هو المحتوى. يتم توجيه الكائنات التي تم إنشاؤها إلى المعالجة الآلية. فقط عمليات فتح ملف المستند وتنسيقه وكتابته تصبح متاحة للشخص.

الحل بسيط وعملي، ولكن التنفيذ موجه نحو الكمبيوتر أكثر من التوجه البشري بسبب حجم الوظائف المنجزة والعلاقات المعقدة بين الكائنات.

حالة منطقة OOP

إن تطوير أنظمة إدارة مواقع الويب، وتقنيات إعداد وإدارة الخوادم، والخبرة في تطوير مواقع الويب الديناميكية، جعل البرمجة الموجهة للكائنات في متناول الجميع. تكمن المشكلة في كيفية تغيير تفكيرك والتعود على التفكير على مستوى الكائنات، وليس في سياق التعليمات البرمجية المنفذة بشكل متسلسل.

عادة، يستغرق الانتقال من البرمجة الكلاسيكية إلى البرمجة الشيئية من شهرين إلى ثلاثة أشهر، ولكن التكاليف تستحق العناء. إن إمكانات لغات البرمجة الحديثة، وفي المقام الأول PHP وJavaScript، سوف ترضي المطور الأكثر تطورًا.

OOP الحديث - تعدد الأشكال والميراث والقدرة على تكوين خصائص الكائن - مريح وعملي، ويضمن بناء جملة اللغة والأدوات المساعدة سهولة الاستخدام وكفاءة التعليمات البرمجية.

وجهات نظر حول فكرة الكائن

من الصعب جدًا تحديد المدة التي ستستمر فيها البرمجة الكلاسيكية وكيف ستتطور OOP. على ما يبدو، لا يخطط مطورو الأدوات للنظر في سياق المستهلك (المستخدم، العميل).

أدوات OOP - تعدد الأشكال، والميراث، والتغليف، والتجريد - موجهة نحو المطورين.

تسعى أنظمة المعلومات الحديثة وموارد الويب إلى عكس الواقع وضمان عمل الأشياء الحقيقية وإنشاء بيئة لعملها بسيطة للغاية بحيث تكون في متناول المستهلك البعيد عن البرمجة ومنغمس تمامًا في مجاله. كفاءة.

البرمجة الشيئية(OOP) هو أسلوب لإنشاء برامج تعتمد على استخدام الفئات والكائنات التي تتفاعل مع بعضها البعض.

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

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

الميراث يمتد

الميراث جزء لا يتجزأ من جافا. عند استخدام الميراث، يؤخذ في الاعتبار أن الفئة الجديدة التي ترث خصائص الفئة الأساسية (الأصل) لديها جميع الخصائص التي يمتلكها الأصل. يستخدم الكود المعامل يمتد، متبوعًا باسم الفئة الأساسية. يؤدي هذا إلى فتح الوصول إلى جميع مجالات وأساليب الفئة الأساسية.

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

تسمى الفئة الرئيسية الموروثة في Java بالطبقة الفائقة ممتاز. تسمى الطبقة الموروثة فئة فرعية. وبالتالي، فإن الفئة الفرعية هي نسخة متخصصة من الفئة الفائقة التي ترث جميع خصائص الفئة الفائقة وتضيف عناصرها الفريدة.

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

مستخدم فئة عامة ( int age; String firstName; String lastName; // مُنشئ public User(int age, String firstName, String lastName) ( this.age = age; this.firstName = firstName; this.lastName = lastName; ) )

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

يقوم طالب الفصل العام بتوسيع المستخدم ( int group; // المُنشئ public Student(int age, String firstName, String lastName) ( super(age, firstName, lastName); ) boolean isMyGroup(int g) ( return g == group; ) )

الكلمة الرئيسية يمتديوضح أننا نرث من فئة المستخدم.

الكلمة الرئيسية سوبر

في مُنشئ فئة الطالب، نستدعي مُنشئ الفصل الأصلي من خلال المشغل ممتاز، وتمرير مجموعة المعلمات الضرورية بالكامل. في جافا الكلمة الأساسية ممتازيدل على الطبقة المتفوقة، أي. الفئة التي يشتق منها الفصل الحالي. يمكن استخدام الكلمة الأساسية super لاستدعاء مُنشئ فئة فائقة وللوصول إلى عضو فئة فائقة مخفي بواسطة عضو فئة فرعية.

دعونا نرى كيف يحدث ذلك ميراثمن حيث إنشاء الكائن:

Student Student = new Student(18, "Kisa"، "Vorobyaninov"، 221);

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

يمكن أن تحتوي الفئة الفائقة على عدة إصدارات مثقلة من منشئاتها، لذلك يمكن استدعاء الأسلوب super() بمعلمات مختلفة. سيقوم البرنامج بتنفيذ المُنشئ الذي يطابق الوسائط المحددة.

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

هنا يمكن أن يكون العضو أسلوبًا أو متغير مثيل. هذا النموذج مناسب في الحالات التي تخفي فيها أسماء أعضاء فئة فرعية أعضاء فئة فائقة بنفس الأسماء.

Class A ( int i; ) // ترث من الفئة A توسع الفئة B A ( int i; // اسم المتغير يطابق ويخفي المتغير i في الفئة A B(int a, int b) ( super.i = a; // access إلى المتغير i من الفئة A i = b; // الوصول إلى المتغير i من الفئة B ) void show() ( System.out.println("i from superclass is " + super.i); System.out.println(" i في الفئة الفرعية هو " + i); ) ) class MainActivity ( B subClass = new B(1, 2); subClass.show(); )

ونتيجة لذلك، يجب أن نرى في وحدة التحكم:

أنا من الطبقة الفائقة هو 1 أنا في الفئة الفرعية هي 2

تجاوز الأسلوب، تجاوز

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

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

لا تخلط بين التجاوز والتحميل الزائد. لا يحدث تجاوز الطريقة إلا في حالة تطابق أسماء وتوقيعات الطريقتين. وبخلاف ذلك، سيتم تحميل الطريقتين ببساطة.

ظهر التعليق التوضيحي في Java SE5 @تجاوز؛. إذا كنت بحاجة إلى تجاوز طريقة ما، فاستخدم @Override وسيقوم المترجم بإلقاء خطأ إذا قمت بتحميلها عن طريق الخطأ بدلاً من تجاوزها.

في Java، يمكنك الوراثة من فئة واحدة فقط.

التغليف

في علوم الكمبيوتر، التغليف (باللاتينية: en capsula) هو تجميع البيانات و/أو الوظائف في كائن واحد.

أساس التغليف في Java هو الفصل. التغليف يعني أن حقول الكائن لا يمكن الوصول إليها مباشرة لعملائه - فهي مخفية عن الوصول المباشر من الخارج. يحمي التغليف بيانات الكائن من الوصول غير المرغوب فيه عن طريق السماح للكائن بالتحكم في الوصول إلى بياناته.

معدّلات الوصول

عند وصف فئة، يتم استخدام معدلات الوصول. معدّلات الوصوليمكن رؤيتها من المنظور التغليفهكذا و ميراث. عند عرضها من منظور التغليف، تسمح لك معدّلات الوصول بتقييد الوصول غير المرغوب فيه إلى أعضاء الفصل من الخارج.

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

يُنصح باستخدام الوصول إلى خصائص الفصل فقط من خلال أساليبه (المبدأ فاصولياالفئات "POJO")، والتي تسمح لك بالتحقق من صحة قيم الحقول، حيث يصعب للغاية تتبع الوصول المباشر إلى الخصائص، مما يعني أنه قد يتم تعيين قيم غير صحيحة لها في مرحلة تنفيذ البرنامج. يشير هذا المبدأ إلى إدارة البيانات المغلفة ويسمح لك بتغيير طريقة تخزين البيانات بسرعة. إذا لم يتم تخزين البيانات في الذاكرة، ولكن في الملفات أو قاعدة البيانات، فلن يلزم تغيير سوى عدد قليل من أساليب فئة واحدة، بدلا من إدخال هذه الوظيفة في جميع أجزاء النظام.

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

مثال لوصف بسيط للروبوت

روبوت فئة عامة (خاص مزدوج x = 0؛ // إحداثي X الحالي خاص مزدوج y = 0؛ // تنسيق Y الحالي دورة مزدوجة خاصة = 0؛ // الدورة الحالية (بالدرجات) public double getX() ( return x;) public void setX(double x) ( this.x = x; ) public double getY() ( return y; ) public void setY(double y) ( this.y = y; ) public double getCourse() ( دورة العودة; ) // تحديد الدورة public void setCourse(double Course) ( this.course = Course; ) // الانتقال إلى مسافة public voidward(int distance) ( // الوصول إلى حقل الكائن X x = x + distance * Math.cos ( دورة / 180 * Math.PI)؛ // الوصول إلى حقل الكائن Y y = y + distance * Math.sin(course / 180 * Math.PI ) // طباعة إحداثيات الروبوت public void printCoerates() ( System.out .println(x + "،" + y)؛

يستخدم مثال الروبوت المقدم مجموعات من الأساليب التي تبدأ بـ تعيينو يحصل. غالبًا ما يُطلق على هذا الزوج من الأساليب اسم setter/getter. تُستخدم هذه الطرق للوصول إلى حقول الكائن. تنتهي أسماء الطرق باسم الحقل الذي يبدأ بحرف كبير.

في الأساليب تعييننقوم بتمرير القيمة من خلال معلمة رسمية في الإجراء. في رمز الإجراء، نقوم بتعيين قيمة لمتغير كائن/فئة باستخدام الكلمة الأساسية هذا.

هذه الدورة = الدورة ...

استخدام كلمة رئيسية هذاضروري، لأن يتطابق اسم المعلمة الرسمية مع اسم متغير الكائن. لو كانت الأسماء مختلفة لكان ممكنا هذالا تستخدم.

تعدد الأشكال

يعد تعدد الأشكال أحد المفاهيم الأساسية في البرمجة الشيئية، إلى جانب الميراث والتغليف. كلمة تعدد الأشكال هي من أصل يوناني وتعني "وجود أشكال عديدة". لفهم ما يعنيه تعدد الأشكال فيما يتعلق بالبرمجة الموجهة للكائنات، فكر في مثال لإنشاء محرر رسومات متجهة حيث من الضروري استخدام عدد من الفئات في شكل مجموعة من الأوليات الرسومية - مربع, خط, دائرة, مثلث، إلخ. يجب أن يكون لكل فئة من هذه الفئات طريقة محددة يرسملعرض البدائية المقابلة على الشاشة.

من الواضح أنه سيتعين عليك كتابة بعض التعليمات البرمجية التي، لعرض الصورة، سوف تتكرر بشكل تسلسلي عبر جميع البدائيات التي يجب عرضها على الشاشة واستدعاء طريقة الرسم على كل منها.

من المرجح أن يقوم أي شخص غير معتاد على تعدد الأشكال بإنشاء عدة مصفوفات: مصفوفة منفصلة لكل نوع بدائي، وكتابة التعليمات البرمجية التي تتكرر عبر العناصر من كل مصفوفة بالتسلسل وتستدعي طريقة الرسم على كل عنصر. ستكون النتيجة الكود التالي تقريبًا:

// تعريف صفائف الرسوم الأولية Square s = new Square ; السطر ل = السطر الجديد؛ الدائرة ج = الدائرة الجديدة ; مثلث t = مثلث جديد؛ // املأ جميع المصفوفات بالكائنات المناسبة. . . // تكرار التكرار عبر جميع خلايا المصفوفة. ل(int i = 0; i< s.length; i++){ // вызов метода draw() в случае, если ячейка не пустая. if (s[i] != null) s.draw(); } for(int i = 0; i < l.length; i++){ if (l[i] != null) l.draw(); } for(int i = 0; i < c.length; i++){ if (c[i] != null) c.draw(); } for(int i = 0; i < t.length; i++){ if (t[i] != null) t.draw(); }

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

باستخدام تعدد الأشكال، يمكنك تبسيط تنفيذ هذه الوظيفة إلى حد كبير. أولاً، لنقم بإنشاء فئة رئيسية مشتركة للشكل لجميع فئاتنا.

شكل الطبقة العامة (رسم الفراغ العام () ( System.out.println("Stub"); ) )

بعد ذلك، نقوم بإنشاء فئات فرعية مختلفة: المربع والخط والدائرة والمثلث:

تمتد نقطة الطبقة العامة الشكل ( رسم الفراغ العام () ( System.out.println ("مربع")؛ )) ) يمتد خط الطبقة العامة الشكل ( رسم الفراغ العام () ( System.out.println ("Line")؛ ) ) دائرة الطبقة العامة توسع الشكل (رسم الفراغ العام () ( System.out.println("Circle"); ) ) الطبقة العامة المثلث يمتد الشكل (رسم الفراغ العام () ( System.out.println("Triangle"); ) )

في أحفادنا تجاوزنا طريقة السحب. ونتيجة لذلك، حصلنا على التسلسل الهرمي للفئة، كما هو موضح في الشكل.

الآن دعونا نتحقق من الميزة المذهلة لتعدد الأشكال:

// تحديد وتهيئة مصفوفة الأشكال a = new Shape (new Shape(), new Triangle(), new Square(), new Circle()); // التكرار عبر عناصر المصفوفة for(int i = 0; i< a.length; i++) { a[i].draw(); }

ستتم طباعة الأسطر التالية على وحدة التحكم:

دائرة مربعة مثلثة فارغة

بهذه الطريقة، تستدعي كل فئة فرعية طريقة الرسم الخاصة بها، بدلاً من استدعاء طريقة الرسم من فئة الشكل الأصلية.

تعدد الأشكال هو أحد شروط نظرية النوع، والتي بموجبها يمكن للأسماء (على سبيل المثال، المتغيرات) أن تشير إلى كائنات من فئات مختلفة، ولكن لها أصل مشترك. وبالتالي، فإن أي كائن يُشار إليه باسم متعدد الأشكال يمكن أن يستجيب بطريقته الخاصة لمجموعة عامة معينة من العمليات.

طريقة التحميل الزائد، التحميل الزائد

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

Void println() // انتقل إلى سطر جديد void println(boolean x) // يطبع قيمة متغير منطقي (صواب أو خطأ) void println(String x) // يطبع سلسلة - قيمة معلمة النص

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

مخزون كبير

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

كيف بدأ كل شيء؟

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

أنواع تعدد الأشكال

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

تعدد الأشكال الجينية والكروموسومية

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

تعدد الأشكال الانتقالي

يحدث تعدد الأشكال الانتقالي عندما يتم استبدال أليل كان شائعًا في مجتمع ما بآخر يوفر لحامله قدرة أكبر على التكيف (وتسمى أيضًا الأليلية المتعددة). مع مجموعة معينة، هناك تحول اتجاهي في النسبة المئوية للأنماط الجينية، بسبب حدوث التطور وتنفيذ ديناميكياته. ويمكن أن تكون ظاهرة الآلية الصناعية مثالا جيدا يميز تعدد الأشكال الانتقالي. ويظهر ذلك من خلال فراشة بسيطة، والتي مع تطور الصناعة، غيرت اللون الأبيض لجناحيها إلى اللون الداكن. بدأت هذه الظاهرة بالملاحظة في إنجلترا، حيث تحول أكثر من 80 نوعًا من الفراشات من أزهار كريمية شاحبة إلى أزهار داكنة، وهو ما لوحظ لأول مرة بعد عام 1848 في مانشستر بسبب التطور السريع للصناعة. بالفعل في عام 1895، اكتسب أكثر من 95٪ من العث لونًا داكنًا لأجنحتها. ترتبط هذه التغييرات بحقيقة أن جذوع الأشجار أصبحت أكثر دخانًا، وأصبحت الفراشات ذات الألوان الفاتحة فريسة سهلة لطيور الدج والروبان. حدثت التغييرات بسبب أليلات ميلانيستية متحولة.

تعدد الأشكال المتوازن

يميز تعريف "تعدد الأشكال المتوازن" عدم وجود تحول في أي نسب عددية لمختلف أشكال الأنماط الجينية في مجتمع يعيش في ظروف بيئية مستقرة. وهذا يعني أن النسبة من جيل إلى جيل تظل كما هي، ولكنها قد تتقلب قليلاً ضمن قيمة معينة، وهي ثابتة. بالمقارنة مع تعدد الأشكال الانتقالي المتوازن - ما هو؟ إنها في المقام الأول عملية تطورية ثابتة. I. I. شمالهاوزن في عام 1940 أعطاها أيضًا اسم تغاير الشكل المتوازن.

مثال على تعدد الأشكال المتوازن

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

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

التوازن الجيني

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

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

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

الطفرات المتغايرة وتعدد الأشكال

يوفر تعدد الأشكال المتغاير عدم وجود تغييرات مظهرية في وجود طفرات متنحية، حتى لو كانت ضارة. ولكن في الوقت نفسه، يمكن أن تتراكم في السكان إلى مستوى عال، والذي يمكن أن يتجاوز الطفرات السائدة الضارة.

عملية تطورية

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

جين الفيبرينوجين

في معظم الحالات، يعتبر الباحثون تعدد أشكال جين الفيبرينوجين بمثابة مقدمة لتطور السكتة الدماغية. ولكن في الوقت الحالي، تظهر المشكلة التي تكون فيها العوامل الوراثية والمكتسبة قادرة على التأثير على تطور هذا المرض. يتطور هذا النوع من السكتات الدماغية بسبب تجلط الدم في الشرايين الدماغية، ومن خلال دراسة تعدد أشكال جين الفيبرينوجين، يمكن للمرء أن يفهم العديد من العمليات، التي يمكن من خلالها الوقاية من المرض. في الوقت الحاضر، لم يدرس العلماء بشكل كاف الروابط بين التغيرات الجينية ومؤشرات الدم البيوكيميائية. مزيد من البحث سيجعل من الممكن التأثير على مسار المرض، أو تغيير مساره، أو ببساطة منعه في مرحلة مبكرة من التطور.

تعدد الأشكالهي قدرة مادة لها نفس التركيبة على الوجود، بناءً على ظروف خارجية، في عدة أشكال بلورية (تعديلات متعددة الأشكال) بهياكل مختلفة (بالنسبة للمواد البسيطة، تسمى هذه الظاهرة أحيانًا التآصل).

تم اكتشاف ظاهرة تعدد الأشكال لأول مرة من قبل الكيميائي وعالم المعادن الألماني إي. ميتشرليش في عام 1821. تعدد الأشكال واسع الانتشار في الطبيعة وهو أحد الخصائص المميزة للمواد البلورية. وبالتالي فإن التعديلات متعددة الأشكال، التي تختلف في البنية الداخلية، لها خصائص مختلفة. ولذلك، فإن دراسة تعدد الأشكال أمر في غاية الأهمية للممارسة.

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

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

عندما يتم تحويل تعديل درجة الحرارة العالية إلى تعديل درجة حرارة أقل، عادة ما يتم الحفاظ على الشكل الخارجي الأصلي للبلورات، في حين يخضع الهيكل الداخلي للمادة للتغييرات. يُطلق على هذا الحفاظ على الشكل الخارجي الذي لا يتوافق مع البنية المشكلة حديثًا للشبكة البلورية اسم Paramorphosis. البارامورفوسات معروفة في الطبيعة β -الكوارتز (التماثل الثلاثي) وفقا ل α -الكوارتز (التماثل السداسي)، الكالسيت CaCO 3 (التماثل الثلاثي) على الأراغونيت (التماثل المعيني)، إلخ.

وبغض النظر عن طبيعة التغيرات الهيكلية التي تحدث أثناء التحولات متعددة الأشكال، يتم التمييز بين نوعين منها: التحولات المتناظرة (القابلة للعكس) والتحولات الأحادية (غير القابلة للانعكاس).

التحول العكسي لتعديل واحد إلى آخر، يتم إجراؤه عند ضغط ثابت ودرجة حرارة انتقالية معينة (نقطة)، حيث تكون هذه التعديلات في حالة توازن، أي. مستقرة على قدم المساواة، ودعا enantiotropic. يمكن إظهار ذلك بشكل تخطيطي على النحو التالي:

α ↔ β↔سائل

أولئك. الانتقال α → β هو مضاد للأكسدة. من أمثلة التحولات متعددة الأشكال المتناظرة للمضادات التحويلات بين الأشكال متعددة الأشكال لـ SiO2˸

تعدد الأشكال - المفهوم والأنواع. تصنيف ومميزات فئة "تعدد الأشكال" 2015، 2017-2018.

  • - تعدد أشكال الأفراد

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


  • - التخريب يفضل الحفاظ على الأنواع المتطرفة والقضاء على الأنواع المتوسطة. يؤدي إلى الحفاظ على تعدد الأشكال وتعزيزه.

  • - التمايز بين الإنسانية. الأجناس كتعبير عن تعدد الأشكال الجينية للإنسانية. وحدة الأنواع للإنسانية.

    التمايز بين الأنواع البشرية: منذ ظهور الإنسان العاقل، أصبح جوهره اجتماعيًا وتغير التطور البيولوجي، مما تجلى في ظهور تعدد الأشكال الجيني الواسع. التنوع الجيني على المستوى... .