پلی مورفیسم در OOP چیست؟ برنامه نویسی شی گرا (OOP): چند شکلی

12.01.2024 دستگاه های صوتی

خوب. چند شکلی هرگز نباید جدا از سایر مفاهیم اساسی - انتزاع، کپسولاسیون و وراثت - در نظر گرفته شود. مفعول و مانند آن از بدیهیات ضمیمه شده اند (اگرچه اینها هم بدیهیات هستند).

در واقع، بیایید یک لیوان، یک لیوان، یک کتری، یک دستگاه قهوه ساز، یک دوچرخه و یک اسکیت برد را در نزدیکی تصور کنیم. همه آنها چه چیزی مشترک دارند؟ خوب، حداقل اینکه آنها وجود دارند. یعنی اینها اشیایی هستند که خلق شده اند. اما چگونه خلق شدند؟ طبق نقشه ها به احتمال زیاد در کارخانه سازنده. خوب، بیایید سازنده را یک طراحی بنامیم. خوب کلاس چطور؟ و این چیه؟ اما در جهان ما نیست - این جوهر انتزاعی است که فقط در افکار ما زندگی می کند. در دنیای واقعی وجود ندارد و هرگز نخواهد بود، فیزیک چنین است - اهمیتی نمی دهد که پرندگان و پستانداران خویشاوندان دور داشته باشند - فقط امکان انتخاب طبیعی را فراهم می کند. و ما مردم برای هم خویشاوندی پیدا می کنیم.

ما اشیاء و کلاس‌ها را مرتب کرده‌ایم، اما عینک و دوچرخه‌هایمان چطور؟ قبلاً فهمیدیم که همه چیز یک شی است، یعنی تقریباً همه اشیاء را می توان از یک ابر اجداد، ابرکلاس به ارث برد که در برخی از زبان ها پیاده سازی شده است. اما مثلاً اسکیت برد و لیوان چه وجه اشتراک دیگری دارند؟ البته شما می توانید عمیق تر بروید و در نظر بگیرید که همه آنها از مولکول ساخته شده اند و همه آنها از جامد ساخته شده اند. با این حال، این همه مزخرف و SRSG است، بنابراین پاسخ ساده است - هیچ چیز. یعنی اینها اشیاء کاملاً متفاوت با عملکردهای کاملاً متفاوت هستند. علاوه بر این، طبیعتاً مدل‌ها و سلسله مراتب کامپیوتری با فیزیک و شیمی بسیار متفاوت خواهند بود. و این طبیعی است، سوال کفایت مدل ها فقط زمانی مطرح می شود که مدل نامناسب باشد و تا آن زمان می توانید هر چیزی را تا زمانی که کار می کند برش دهید.

اینجا. ما یک Object ابر اجداد داریم که همه اشیا به طور پیش فرض از آن ارث می برند. اجازه دهید فرض کنیم که این واقعیت که اجسام از اتم تشکیل شده اند همان چیزی است که همه اشیا به ارث می برند. اما تمام اضافات و ویرایش ها چند شکلی هستند. بنابراین، ما چرخ هایی از اتم ها ساختیم و آنها را به یک تخته وصل کردیم - خوب، این یک اسکیت برد است. می توانید روی آن بایستید و غلت بزنید، یا به شدت بپیچید و سه متر بالاتر از زمین پرواز کنید، فقط منیت درخشان خود را تابش کنید. در حالی که شیشه جایی است که ما یک ظرف متراکم از اتم ها را درآورده ایم که تحت تأثیر گرانش آب از آن بیرون نمی ریزد. و کاربرد مستقیم لیوان این است که آب را بریزید و آن را روی دهان بگذارید تا آب مستقیماً به معده برود. این کاری است که پسرهای واقعی انجام می دهند، بدون نگرانی در مورد سکسکه یا ترس از غرق شدن، بنابراین شما آن را دارید - چندشکلی.

با این حال، بقیه چطور؟ ما همچنین انتزاع، کپسولاسیون و وراثت داریم. خوب، بیایید با ارث شروع کنیم، این نزدیکترین است. چه وجه اشتراکی بین لیوان و لیوان داریم؟ خوب، می‌توانید داخل هر دو آب بریزید، اما لیوان دسته‌ای دارد که می‌توان آن را نگه داشت. یعنی شما می توانید با یک کلاس عمومی خاص - ظرفیت بیایید. با این حال، این کلاس چیست؟ به عنوان مثال، شما می توانید یک لیوان برای این کلاس بگیرید، سپس تمام ظروف به طور پیش فرض شیشه ای هستند و هر چیز دیگری شیشه های تغییر یافته است. اما برخی از مردم کوزه ها را ترجیح می دهند، مثلاً برخی جوجه ها آن را روی سر خود می بندند، به این فکر می کنند که راحت است. خوب، بگذارید آنها را بپوشند، اما به نوعی باید تصمیم بگیرند که چه چیزی مهم تر و ایده آل تر است. بنابراین - ایده آل دست نیافتنی اصلی است - این یک کلاس انتزاعی نامیده می شود. یعنی ظرفی که نمی توان ایجاد کرد که نقشه کاملی برای آن وجود ندارد. و تمام نقشه هایی که به شکل کامل گسترش یافته اند کلاس های ارثی از کلاس ظرفیت هستند.

در اینجا به انتزاع می رسیم. این وراثت سلسله مراتبی ما را به ایده اصلی 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 را به یاد می آورند، آنها عملاً استفاده نشده و فراموش شده اند، اما رابط پنجره ویندوز برای میلیون ها کاربر آشنا است و اشیاء در PHP، جاوا اسکریپت و سایر زبان های فناوری اینترنت توسط صدها هزار توسعه دهنده کد استفاده می شوند. و میلیون ها بازدید کننده از منابع وب در مورد آنها می دانند.

این احتمالاً تنها راه صحیحی است که OOP باید در آن توسعه می‌یابد: کپسوله‌سازی، وراثت، چندشکلی برای توسعه‌دهنده، اما نه برای کاربر. مشخصه این است که این موقعیت در توسعه طراحی بصری (رابط) نرم افزارها و برنامه های کاربردی ویندوز مانند Turbo Vision و Graph Vision اصلی بود.

مفهوم پشت محصولاتی مانند Air Art Technology و Object Magazine به طور قابل توجهی متفاوت بود. در اینجا، شی انتزاعی اولین اجداد ساختار اطلاعات بود که کد پردازش اطلاعات را در سطح انتزاعی محصور می کرد. اشیاء پنجره ها، دکمه ها و عناصر طراحی بصری در اینجا درجه دوم بودند.

در نسخه اول (ویندوز و غیره)، پارادایم OOP: کپسوله سازی، وراثت، چندشکلی در سطح یک نیای انتزاعی تعیین شد و اجرای کد در سطح هر یک از فرزندان خاص در امتداد شاخه ارثی شکل گرفت. به ساختار و محتوای مورد نیاز.

در گزینه دوم (مجله فن آوری و آبجکت ایر آرت) سطح شی انتزاعی مهم است. اینکه یک نسل خاص چه خواهد داشت این نکته نیست، نکته اصلی این است که شاخه ارثی آن نیازهای همه والدین را تا انتزاع ریشه برآورده می کند.

شی و سیستم اشیاء: الگوریتم

یک مفهوم شی گرا ایده آل فقط می تواند اشیاء و سیستم های اشیاء را دستکاری کند.

در زبان های برنامه نویسی مدرن، یک شی (کلاس) معمولاً به عنوان توصیف یک شی و نمونه ای از یک شی درک می شود و برای استفاده از توصیف یک شی، زبان ها به برنامه نویس اجازه می دهند با اشیاء ثابت کار کند، در حالی که یک شی پویا - توضیحات، با محتوا و ساختار منحصر به فرد خود، اما با استفاده از همان روش ها (خواص) توصیف.

رویه فعلی مفهوم یک شی را به یک ابزار، یعنی به یک زبان برنامه نویسی، رابط، دسترسی به پایگاه داده، اتصال شبکه مرتبط می کند، اما چیزی وجود ندارد که نشان دهنده علایق مشتری باشد، مشکل در حال حل شدن است.

این برای 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 و جاوا اسکریپت، پیشرفته ترین توسعه دهندگان را راضی می کند.

OOP مدرن - چندشکلی، وراثت و توانایی تشکیل خصوصیات شی - راحت و کاربردی است، نحو زبان و ابزارهای کمکی سهولت استفاده و کارایی کد را تضمین می کند.

دیدگاه های ایده شی

بسیار دشوار است که بگوییم برنامه نویسی کلاسیک چقدر طول می کشد و OOP چگونه توسعه می یابد. ظاهراً توسعه دهندگان ابزار قصد ندارند زمینه مصرف کننده (کاربر، مشتری) را در نظر بگیرند.

ابزارهای OOP - چندشکلی، وراثت، کپسوله‌سازی و انتزاع - توسعه‌دهنده هستند.

سیستم های اطلاعاتی و منابع وب مدرن در تلاش هستند تا واقعیت را منعکس کنند، از عملکرد اشیاء واقعی اطمینان حاصل کنند و محیطی را برای عملکرد آنها ایجاد کنند که به قدری ساده باشد که برای مصرف کننده ای که از برنامه نویسی دور است و کاملاً در منطقه خود غوطه ور است در دسترس باشد. صلاحیت.

برنامه نویسی شی گرا(OOP) رویکردی برای ایجاد برنامه‌ها بر اساس استفاده از کلاس‌ها و اشیایی است که با یکدیگر تعامل دارند.

یک کلاس (کلاس جاوا) ساختار و رفتار اشیا را توصیف می کند. یک دستگاه از طریق مجموعه‌ای از ویژگی‌ها (ویژگی‌ها) و رفتار از طریق مجموعه‌ای از عملیات (روش‌ها) موجود برای اشیا توصیف می‌شود. کلاس ها را می توان بر اساس کلاس های موجود با افزودن یا نادیده گرفتن ویژگی ها و روش ها ایجاد کرد.

کلاس ها نشان دهنده قالب هایی هستند که اشیاء توسط آنها ساخته می شوند. اشیا عناصر برنامه ای هستند که دارای مجموعه ای از ویژگی ها و رفتار مشابه هستند (یعنی عناصری هستند که بر اساس یک کلاس ساخته شده اند). هر شی دارای حالت خاصی است، آن را با ارزش تمام خواص آن تعیین می شود. چندین کلاس می توانند در یک برنامه وجود داشته باشند و اشیاء کلاس های مختلف می توانند با یکدیگر تعامل داشته باشند (از طریق متدها).

ارث، گسترش می یابد

وراثت بخشی جدایی ناپذیر جاوا است. هنگام استفاده از وراثت، در نظر گرفته می شود که یک کلاس جدید که ویژگی های کلاس پایه (والد) را به ارث می برد، تمام ویژگی هایی را که والد دارد، دارد. کد از عملوند استفاده می کند گسترش می یابدو به دنبال آن نام کلاس پایه آمده است. با این کار دسترسی به تمام فیلدها و متدهای کلاس پایه باز می شود.

با استفاده از وراثت، امکان ایجاد یک "کلاس جاوا" عمومی وجود دارد که ویژگی های مشترک برای مجموعه ای از عناصر مرتبط را تعریف می کند. سپس می‌توانید از آن به ارث برده و کلاس‌های اضافی ایجاد کنید که می‌توانید ویژگی‌های اضافی را که مختص آن‌ها است تعریف کنید.

کلاس اصلی ارثی در جاوا superclass نامیده می شود فوق العاده. کلاس وراثت نامیده می شود زیر کلاس. بنابراین، یک زیر کلاس نسخه تخصصی یک سوپرکلاس است که تمام ویژگی های سوپرکلاس را به ارث می برد و عناصر منحصر به فرد خود را اضافه می کند.

بیایید مثالی از توضیح کلاس جاوا "یک دانشجو دانشجو که دارای نام، نام خانوادگی، سن و شماره گروه است. ما یک کلاس دانشجویی بر اساس کلاس فوق العاده کاربر کاربر ایجاد خواهیم کرد که قبلا نام، نام خانوادگی و سن تعریف شده است:

کاربر کلاس عمومی ( سن int ؛ رشته نام ؛ نام رشته

اکنون یک کلاس Student جداگانه ایجاد می کنیم که ویژگی های کلاس super را به ارث می برد. هنگام ارث بردن یک کلاس، باید سازنده های کلاس والد را نیز نادیده بگیرید:

کلاس عمومی Student کاربر را گسترش می دهد (گروه int; // سازنده عمومی Student(int سن، رشته firstName، string lastName) ( super(سن، نام، نام خانوادگی)؛ ) isMyGroup (int g) (بازگشت g == گروه؛ ))

کلمه کلیدی گسترش می یابدنشان می دهد که ما از کلاس User ارث می بریم.

کلمه کلیدی فوق العاده

در سازنده کلاس Student، سازنده کلاس والد را از طریق عملگر فراخوانی می کنیم فوق العاده، تمام مجموعه پارامترهای لازم را به آن منتقل می کند. در جاوا کلمه کلیدی فوق العادهنشان دهنده یک سوپرکلاس است، یعنی. کلاسی که کلاس فعلی از آن مشتق شده است. کلمه کلیدی super را می توان برای فراخوانی سازنده سوپرکلاس و دسترسی به یک عضو سوپرکلاس پنهان شده توسط یک عضو زیر کلاس استفاده کرد.

بیایید ببینیم چگونه اتفاق می افتد وراثتاز نظر ایجاد شی:

دانشجو دانشجو = دانشجوی جدید(18، "کیسا"، "وروبیانینوف"، 221);

ابتدا سازنده کلاس Student باز می شود، سپس سازنده superclass User فراخوانی می شود و سپس عملیات باقی مانده در سازنده Student انجام می شود. این توالی از اقدامات کاملاً منطقی است و به شما امکان می دهد اشیاء پیچیده تری را بر اساس موارد ساده تر ایجاد کنید.

یک سوپرکلاس می تواند چندین نسخه سربارگذاری شده از سازنده های خود داشته باشد، بنابراین متد super() را می توان با پارامترهای مختلف فراخوانی کرد. برنامه سازنده ای را اجرا می کند که با آرگومان های مشخص شده مطابقت دارد.

شکل دوم کلمه کلیدی فوق العادهمانند یک کلمه کلیدی عمل می کند این، فقط در این مورد ما همیشه به سوپر کلاس زیر کلاسی که در آن استفاده می شود اشاره می کنیم. شکل کلی به شرح زیر است:

در اینجا عضو می تواند یک متد یا یک متغیر نمونه باشد. این فرم در مواردی مناسب است که نام اعضای یک زیر کلاس، اعضای یک سوپرکلاس با نام های مشابه را پنهان می کند.

کلاس A ( int i; ) // ارث بری از کلاس A کلاس B A را گسترش می دهد (int i; // نام متغیر مطابقت دارد و متغیر i را در کلاس A B(int a, int b) پنهان می کند (super.i = a; // دسترسی به متغیر i از کلاس A i = b; // دسترسی به متغیر i از کلاس B در زیر کلاس " + i) است؛ ) ) کلاس MainActivity ( زیر کلاس B = جدید B(1, 2); subClass.show();

در نتیجه باید در کنسول ببینیم:

من از سوپرکلاس 1 i در زیر کلاس 2 است

نادیده گرفتن روش، Override

اگر در یک سلسله مراتب کلاس، نام و امضای نوع یک متد زیر کلاس با ویژگی‌های یک متد سوپرکلاس مطابقت داشته باشد، متد زیر کلاس، متد سوپرکلاس را لغو می‌کند. هنگامی که یک متد overrid شده از زیر کلاس خود فراخوانی می شود، همیشه به نسخه زیر کلاس آن متد اشاره می کند. و نسخه superclass متد مخفی خواهد شد.

اگر نیاز به دسترسی به نسخه‌ای از روش لغو تعریف شده در یک سوپرکلاس دارید، باید از کلمه کلیدی استفاده کنید. فوق العاده.

نادیده گرفتن را با اضافه بار اشتباه نگیرید. نادیده گرفتن روش تنها در صورتی رخ می دهد که نام و نوع امضای دو روش یکسان باشد. در غیر این صورت، دو روش به سادگی بارگذاری می شوند.

حاشیه نویسی در جاوا SE5 ظاهر شد @Override. اگر می‌خواهید روشی را نادیده بگیرید، از @Override استفاده کنید و اگر اشتباهاً به جای بازنویسی، آن را بیش از حد بارگذاری کنید، کامپایلر با خطا مواجه می‌شود.

در جاوا فقط از یک کلاس می توان ارث برد.

کپسوله سازی

در علوم کامپیوتر، کپسوله‌سازی (لاتین: en capsula) بسته‌بندی داده‌ها و/یا عملکردها در یک شی واحد است.

اساس کپسوله سازی در جاوا کلاس است. کپسوله سازی به این معنی است که فیلدهای یک شی به طور مستقیم برای مشتریان آن قابل دسترسی نیستند - آنها از دسترسی مستقیم از خارج پنهان هستند. کپسوله سازی با اجازه دادن به شی برای کنترل دسترسی به داده های خود، از داده های یک شی در برابر دسترسی ناخواسته محافظت می کند.

اصلاح کننده های دسترسی

هنگام توصیف یک کلاس، از اصلاح کننده های دسترسی استفاده می شود. اصلاح کننده های دسترسیرا می توان از منظر دید کپسوله سازیبنابراین و وراثت. وقتی از منظر کپسوله‌سازی مشاهده می‌شود، اصلاح‌کننده‌های دسترسی به شما این امکان را می‌دهند که دسترسی ناخواسته را به اعضای کلاس از خارج محدود کنید.

اعضای عمومی یک کلاس، عملکرد خارجی را تشکیل می دهند که برای کلاس های دیگر در دسترس است. اعضایی که مستقل از عملکرد خارجی هستند معمولاً خصوصی اعلام می شوند و همچنین روش های کمکی که فقط جزئیات پیاده سازی هستند و ماهیت جهانی ندارند. با مخفی کردن پیاده سازی یک کلاس، می توانید منطق داخلی یک کلاس جداگانه را بدون تغییر کد سایر اجزای سیستم تغییر دهید.

توصیه می شود از دسترسی به خصوصیات کلاس فقط از طریق متدهای آن استفاده کنید (اصل لوبیاکلاس ها، "POJO")، که به شما امکان می دهد مقادیر فیلد را تأیید کنید، زیرا ردیابی دسترسی مستقیم به ویژگی ها بسیار دشوار است، به این معنی که ممکن است مقادیر نادرستی در مرحله اجرای برنامه به آنها اختصاص داده شود. این اصل به مدیریت داده های کپسوله شده اشاره دارد و به شما امکان می دهد تا به سرعت نحوه ذخیره داده ها را تغییر دهید. اگر داده‌ها نه در حافظه، بلکه در فایل‌ها یا پایگاه داده ذخیره می‌شوند، تنها چند روش از یک کلاس به جای وارد کردن این قابلیت در تمام قسمت‌های سیستم نیاز به تغییر دارند.

کد برنامه ای که با استفاده از اصل کپسوله سازی نوشته شده است، اشکال زدایی آسان تر است. برای اینکه بفهمیم در چه مقطعی از زمان و چه کسی ویژگی شی مورد نظر ما را تغییر داده است، کافی است خروجی اطلاعات اشکال زدایی را به متد شی که از طریق آن به ویژگی این شی دسترسی پیدا می کند، اضافه کنیم. هنگام استفاده از دسترسی مستقیم به ویژگی های شی، برنامه نویس باید خروجی اطلاعات اشکال زدایی را به تمام بخش های کد که شی مورد علاقه ما در آن استفاده می شود، اضافه کند.

نمونه ای از توضیحات ساده ربات

ربات کلاس عمومی (دوگانه خصوصی x = 0؛ // مختصات فعلی X خصوصی دو برابر y = 0؛ // مختصات فعلی Y خصوصی دوره دوگانه = 0؛ // دوره فعلی (بر حسب درجه) دوبل عمومی getX() (بازگشت x؛) public void setX(double x) ( this.x = x; ) public double getY() ( بازگشت y; ) public void setY(double y) ( this.y = y; ) public double getCourse() (دوره برگشت؛ ) // تعیین دوره عمومی void setCourse(دوره دوره) ( this.course = course; ) // حرکت به یک فاصله public void forward(int distance) ( // دسترسی به فیلد شی X x = x + فاصله * Math.cos ( course / 180 * Math.PI // دسترسی به فیلد شیء Y y = y + distance * Math.sin(course / 180 * Math.PI ) // Print robot مختصات public void printCoordinates() ( System.out); .println(x + "," + y);

مثال ربات ارائه شده از مجموعه‌ای از روش‌ها استفاده می‌کند تنظیمو گرفتن. این جفت متد اغلب ستتر/گیرنده نامیده می شود. از این روش ها برای دسترسی به فیلدهای یک شی استفاده می شود. نام روش ها با نام فیلد که با حرف بزرگ شروع می شود خاتمه می یابد.

در روش ها تنظیمما مقدار را از طریق یک پارامتر رسمی به رویه منتقل می کنیم. در کد رویه، با استفاده از کلمه کلیدی، یک مقدار به یک متغیر شی/کلاس اختصاص می دهیم این.

این دوره = دوره ...

استفاده از کلمه کلیدی اینلازم است، زیرا نام پارامتر رسمی با نام متغیر شی منطبق است. اگر نام ها متفاوت بود، امکان پذیر بود ایناستفاده نکن.

پلی مورفیسم

چند شکلی یکی از مفاهیم اساسی در برنامه نویسی شی گرا به همراه وراثت و کپسوله سازی است. کلمه پلی مورفیسم ریشه یونانی دارد و به معنای "دارای اشکال متعدد" است. برای درک معنای چندشکلی در رابطه با برنامه نویسی شی گرا، نمونه ای از ایجاد یک ویرایشگر گرافیکی برداری را در نظر بگیرید که در آن لازم است از تعدادی کلاس در قالب مجموعه ای از گرافیک های اولیه استفاده شود - مربع, خط, دایره, مثلث، و غیره. هر یک از این کلاس ها باید یک متد تعریف شده داشته باشند قرعه کشیبرای نمایش اولیه مربوطه بر روی صفحه نمایش.

بدیهی است که شما باید کدی بنویسید که برای نمایش تصویر، به صورت متوالی در تمام موارد اولیه ای که باید روی صفحه نمایش داده شوند، تکرار می شود و روش ترسیم را روی هر یک از آنها فراخوانی می کند.

فردی که با چندشکلی آشنا نیست به احتمال زیاد چندین آرایه ایجاد می کند: یک آرایه جداگانه برای هر نوع اولیه، و کدی را می نویسد که از طریق عناصر هر آرایه به ترتیب تکرار می شود و روش ترسیم را روی هر عنصر فراخوانی می کند. نتیجه تقریباً کد زیر خواهد بود:

// تعریف آرایه های گرافیکی اولیه Square s = new Square ; خط l = خط جدید. دایره c = دایره جدید ; مثلث 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(); }

نقطه ضعف کدهای نوشته شده در بالا تکرار کدهای تقریباً یکسان برای نمایش هر نوع اولیه است. همچنین ناخوشایند است که با مدرن سازی بیشتر ویرایشگر گرافیکی ما و افزودن قابلیت ترسیم انواع جدیدی از گرافیک های اولیه، به عنوان مثال Text، Star و غیره، با این رویکرد باید کد موجود را تغییر دهیم و تعاریف آرایه های جدید را اضافه کنیم. به آن، و همچنین پردازش عناصر موجود در آنها.

با استفاده از پلی مورفیسم، می توانید اجرای چنین عملکردی را به طور قابل توجهی ساده کنید. اول از همه، بیایید یک کلاس والد Shape مشترک برای همه کلاس های خود ایجاد کنیم.

کلاس عمومی Shape ( public void draw() ( System.out.println ("Stub"); ))

پس از این، ما کلاس های نسل مختلف ایجاد می کنیم: مربع، خط، دایره و مثلث:

کلاس عمومی Point Shape را گسترش می دهد ( public void draw() ( System.out.println ("Square"); )) کلاس public Line Shape را گسترش می دهد ( public void draw() ( System.out.println ("Line"); )) کلاس عمومی دایره شکل را گسترش می دهد ( public void draw() ( System.out.println ("Circle"); ) ) کلاس عمومی Triangle گسترش Shape ( public void draw() ( System.out.println ("مثلث"); ))

در نوادگان روش ترسیم را لغو کرده ایم. در نتیجه یک سلسله مراتب کلاس به دست آوردیم که در شکل نشان داده شده است.

حال بیایید ویژگی شگفت انگیز چندشکلی را بررسی کنیم:

// تعریف و مقداردهی اولیه آرایه Shape a = new Shape (new Shape(), new Triangle(), new Square(), new Circle()); // حلقه زدن عناصر آرایه برای (int i = 0; i< a.length; i++) { a[i].draw(); }

خطوط زیر به کنسول خروجی می شود:

دایره مربع مثلث خالی

به این ترتیب، هر کلاس نزولی به جای فراخوانی متد draw از کلاس والد Shape، متد ترسیم خود را فراخوانی کرد.

چندشکلی یک شرط نظریه نوع است که بر اساس آن نام ها (مثلاً متغیرها) می توانند اشیایی از طبقات مختلف را نشان دهند، اما دارای والد مشترک هستند. در نتیجه، هر شیئی که با نام چندشکلی مشخص می شود، می تواند به شیوه خاص خود به مجموعه ای کلی از عملیات پاسخ دهد.

روش اضافه بار، اضافه بار

در برنامه نویسی رویه ای، مفهوم چندشکلی نیز وجود دارد که با مکانیسم در نظر گرفته شده در OOP متفاوت است. چندشکلی رویه ای به معنای امکان ایجاد چندین رویه یا توابع با نام یکسان، اما اعداد یا انواع مختلف پارامترها است. این گونه توابع به همین نام، اضافه بار نامیده می شوند و خود پدیده، اضافه بار نامیده می شود. اضافه بار توابع در OOP نیز وجود دارد و به آن اضافه بار متد می گویند. نمونه ای از استفاده از روش اضافه بار در زبان جاوا، کلاس PrintWriter است که به طور خاص برای چاپ پیام ها به کنسول استفاده می شود. این کلاس متدهای println زیادی دارد که در انواع و/یا تعداد پارامترهای ورودی متفاوت است. اینجا تنها تعداد کمی از آنها هستند:

Void println() // رفتن به یک خط جدید void println(x boolean) // مقدار یک متغیر بولی (درست یا نادرست) را چاپ می کند void println(رشته x) // یک رشته را چاپ می کند - مقدار یک پارامتر متنی

چندشکلی ژنتیکی شرایطی است که در آن تنوع ژن‌ها در درازمدت وجود دارد، اما فراوانی نادرترین ژن در جمعیت بیش از یک درصد است. حفظ آن به دلیل جهش ثابت ژن ها و همچنین نوترکیب مداوم آنها رخ می دهد. بر اساس تحقیقات انجام شده توسط دانشمندان، پلی مورفیسم ژنتیکی گسترده شده است، زیرا می تواند چندین میلیون ترکیب ژن وجود داشته باشد.

سهام بزرگ

انطباق بهتر یک جمعیت با یک محیط جدید بستگی به مقدار زیادی از چندشکلی دارد و در این مورد تکامل بسیار سریعتر اتفاق می افتد. تخمین تعداد کل آلل های چندشکلی با استفاده از روش های ژنتیکی سنتی عملی نیست. این به دلیل این واقعیت است که حضور یک ژن خاص در ژنوتیپ با تلاقی افرادی که دارای ویژگی های فنوتیپی متفاوتی هستند که توسط ژن تعیین می شود به دست می آید. اگر می دانید چه بخشی از یک جمعیت خاص از افراد با فنوتیپ های مختلف تشکیل شده است، می توانید تعداد آلل هایی را که تشکیل یک صفت خاص به آن بستگی دارد، تعیین کنید.

چطور شروع شدند؟

ژنتیک در دهه 60 قرن گذشته به سرعت شروع به توسعه کرد، در آن زمان بود که از آنزیم های موجود در ژل ها استفاده شد که امکان تعیین چندشکلی ژنتیکی را فراهم کرد. این روش چیست؟ با کمک آن است که پروتئین ها در یک میدان الکتریکی حرکت می کنند که به اندازه پروتئین در حال حرکت، پیکربندی آن و همچنین بار کل در قسمت های مختلف ژل بستگی دارد. پس از این، بسته به محل و تعداد لکه هایی که ظاهر می شوند، ماده شناسایی شده شناسایی می شود. برای ارزیابی پلی مورفیسم پروتئین در یک جمعیت، ارزش بررسی حدود 20 جایگاه یا بیشتر را دارد. سپس با استفاده از روش ریاضی تعداد و نسبت همو و هتروزیگوت ها تعیین می شود. بر اساس تحقیقات، برخی از ژن ها می توانند تک شکل باشند، در حالی که برخی دیگر می توانند به طور غیرمعمول چندشکلی باشند.

انواع پلی مورفیسم

مفهوم چندشکلی بسیار گسترده است و شامل یک نوع انتقالی و متعادل است. این به ارزش انتخابی ژن و انتخاب طبیعی بستگی دارد که بر جمعیت فشار وارد می کند. علاوه بر این، می تواند ژنتیکی و کروموزومی باشد.

پلی مورفیسم ژن و کروموزومی

چندشکلی ژن در بدن با بیش از یک آلل نشان داده شده است. کروموزومی نشان دهنده تفاوت های درون کروموزوم ها است که به دلیل انحرافات رخ می دهد. در همان زمان، تفاوت هایی در مناطق هتروکروماتیک وجود دارد. در غیاب آسیب شناسی که منجر به اختلال یا مرگ شود، چنین جهش هایی خنثی هستند.

پلی مورفیسم انتقالی

چندشکلی انتقالی زمانی اتفاق می‌افتد که آللی که زمانی رایج بود در یک جمعیت با دیگری جایگزین می‌شود که به حامل آن سازگاری بیشتری می‌دهد (که به آن آللیسم چندگانه نیز گفته می‌شود). با یک تنوع معین، یک تغییر جهت در درصد ژنوتیپ ها وجود دارد که به دلیل آن تکامل رخ می دهد و پویایی آن انجام می شود. پدیده مکانیسم صنعتی می تواند مثال خوبی باشد که پلی مورفیسم انتقالی را مشخص می کند. پروانه‌ای ساده نشان می‌دهد که با پیشرفت صنعت، رنگ سفید بال‌هایش را به تیره تغییر داده است. این پدیده در انگلستان مشاهده شد، جایی که بیش از 80 گونه پروانه از گل های کرم رنگ پریده به گل های تیره تبدیل شدند که برای اولین بار پس از سال 1848 در منچستر به دلیل توسعه سریع صنعت مورد توجه قرار گرفت. قبلاً در سال 1895، بیش از 95٪ از پروانه ها رنگ تیره بال های خود را به دست آوردند. چنین تغییراتی با این واقعیت مرتبط است که تنه درختان دودی تر شده اند و پروانه های رنگ روشن طعمه آسان برفک ها و رابین ها شده اند. تغییرات به دلیل آلل های ملانیستیک جهش یافته رخ داده است.

پلی مورفیسم متعادل

تعریف "چند ریختی متعادل" عدم تغییر در هر نسبت عددی اشکال مختلف ژنوتیپ ها را در جمعیتی که در شرایط محیطی پایدار است مشخص می کند. این به این معنی است که از نسلی به نسل دیگر نسبت ثابت می ماند، اما ممکن است کمی در یک مقدار مشخص، که ثابت است، نوسان کند. در مقایسه با پلی مورفیسم متوازن و انتقالی - چیست؟ این در درجه اول یک فرآیند تکاملی ایستا است. I. I. Shmalhausen در سال 1940 نیز نام آن را هترومرفیسم تعادلی گذاشت.

نمونه ای از پلی مورفیسم متعادل

نمونه بارز چندشکلی متعادل وجود دو جنس در بسیاری از حیوانات تک همسری است. این به دلیل این واقعیت است که آنها دارای مزایای انتخابی برابر هستند. نسبت آنها در یک جمعیت همیشه برابر است. اگر در یک جمعیت چندهمسری وجود داشته باشد، نسبت انتخابی نمایندگان هر دو جنس می تواند مختل شود، در این صورت نمایندگان یک جنس یا می توانند به طور کامل از بین بروند یا به میزان بیشتری نسبت به نمایندگان جنس مخالف از تولید مثل حذف شوند.

مثال دیگر می تواند گروه خونی بر اساس سیستم ABO باشد. در این حالت، فراوانی ژنوتیپ های مختلف در جمعیت های مختلف ممکن است متفاوت باشد، اما در عین حال، از نسلی به نسل دیگر ثبات آن را تغییر نمی دهد. به بیان ساده، هیچ ژنوتیپی برتری انتخابی نسبت به دیگری ندارد. طبق آمار، مردان دارای اولین گروه خونی نسبت به سایر اعضای جنس قوی با سایر گروه های خونی، امید به زندگی بیشتری دارند. علاوه بر این، خطر ابتلا به زخم اثنی عشر در حضور گروه اول بیشتر است، اما می تواند سوراخ شود و در صورت تاخیر در کمک باعث مرگ می شود.

تعادل ژنتیکی

این حالت شکننده می تواند در نتیجه وقوع در یک جمعیت مختل شود و باید با فرکانس خاصی و در هر نسل رخ دهد. مطالعات نشان داده است که پلی مورفیسم های ژن های سیستم هموستاتیک، که رمزگشایی آنها روشن می کند که آیا روند تکاملی این تغییرات را ترویج می کند یا برعکس، آنها را خنثی می کند، بسیار مهم هستند. اگر روند فرآیند جهش یافته را در یک جمعیت خاص دنبال کنید، می توانید ارزش آن را برای سازگاری نیز قضاوت کنید. اگر جهش در مرحله انتخاب حذف نشود و مانعی برای گسترش آن وجود نداشته باشد، می تواند برابر با یک باشد.

بیشتر موارد نشان می‌دهند که ارزش چنین ژن‌هایی کمتر از یک است و در صورت عدم توانایی چنین جهش‌یافته‌هایی در تولیدمثل، همه چیز به صفر می‌رسد. جهش‌هایی از این دست در فرآیند انتخاب طبیعی کنار گذاشته می‌شوند، اما این اتفاق می‌افتد. تغییرات مکرر در همان ژن را که حذفی را که با انتخاب انجام می شود جبران می کند، حذف نکنید. سپس به تعادل می رسد، ژن های جهش یافته می توانند ظاهر شوند یا برعکس ناپدید شوند. این منجر به یک فرآیند متعادل می شود.

نمونه ای که می تواند به وضوح آنچه را که اتفاق می افتد مشخص کند، کم خونی سلول داسی شکل است. در این مورد، یک ژن جهش یافته غالب در حالت هموزیگوت به مرگ زودرس ارگانیسم کمک می کند. ارگانیسم های هتروزیگوت زنده می مانند اما بیشتر مستعد ابتلا به بیماری مالاریا هستند. پلی مورفیسم متعادل ژن کم خونی داسی شکل را می توان در مناطق پراکنش این بیماری گرمسیری ردیابی کرد. در چنین جمعیتی، هموزیگوت ها (افراد با ژن های مشابه) حذف می شوند و انتخاب به نفع هتروزیگوت ها (افراد با ژن های مختلف) عمل می کند. با توجه به انتخاب چند ناقلی که در مخزن ژنی جمعیت رخ می دهد، ژنوتیپ ها در هر نسل حفظ می شوند که سازگاری بهتر ارگانیسم را با شرایط محیطی تضمین می کند. در کنار وجود ژن کم خونی سلول داسی شکل، انواع دیگری از ژن ها وجود دارند که مشخصه پلی مورفیسم هستند. این چه می دهد؟ پاسخ به این سوال پدیده ای به نام هتروزیس خواهد بود.

جهش های هتروزیگوت و پلی مورفیسم

پلی مورفیسم هتروزیگوت عدم وجود تغییرات فنوتیپی در حضور جهش های مغلوب را فراهم می کند، حتی اگر مضر باشند. اما در عین حال، آنها می توانند در یک جمعیت به سطح بالایی تجمع کنند که می تواند از جهش های مضر غالب فراتر رود.

فرآیند تکاملی

فرایند تکامل پیوسته است و پیش نیاز آن چندشکلی است. این به معنای سازگاری مداوم یک جمعیت خاص با زیستگاه آن است. ارگانیسم‌های جنس‌های مختلف که در یک گروه زندگی می‌کنند می‌توانند در حالت هتروزیگوت باشند و سال‌ها از نسلی به نسل دیگر منتقل شوند. همراه با این، تظاهرات فنوتیپی آنها ممکن است وجود نداشته باشد - به دلیل ذخیره عظیم تنوع ژنتیکی.

ژن فیبرینوژن

در بیشتر موارد، محققان پلی مورفیسم ژن فیبرینوژن را به عنوان پیشرو برای ایجاد سکته مغزی ایسکمیک در نظر می گیرند. اما در حال حاضر مشکلی که در آن عوامل ژنتیکی و اکتسابی می‌توانند در بروز این بیماری تأثیر بگذارند، مطرح می‌شود. این نوع سکته به دلیل ترومبوز عروق مغزی ایجاد می شود و با مطالعه چندشکلی ژن فیبرینوژن می توان به فرآیندهای زیادی پی برد که با تأثیرگذاری بر آنها می توان از ابتلا به این بیماری جلوگیری کرد. در حال حاضر، دانشمندان به اندازه کافی ارتباط بین تغییرات ژنتیکی و پارامترهای بیوشیمیایی خون را مطالعه نکرده اند. تحقیقات بیشتر امکان تأثیرگذاری بر روند بیماری، تغییر مسیر یا به سادگی پیشگیری از آن در مراحل اولیه توسعه را ممکن می‌سازد.

پلی مورفیسمتوانایی یک ماده با ترکیب یکسان است که بر اساس شرایط خارجی، در چندین شکل بلوری (اصلاحات چند شکلی) با ساختارهای مختلف وجود داشته باشد (برای مواد ساده این پدیده گاهی اوقات آلوتروپی نامیده می شود).

پدیده پلی مورفیسم اولین بار توسط شیمیدان و کانی شناس آلمانی E. Mitscherlich در سال 1821 کشف شد. چندشکلی در طبیعت گسترده است و یکی از ویژگی های مشخصه مواد کریستالی است. تغییرات چند شکلی، که در ساختار داخلی متفاوت هستند، بنابراین خواص متفاوتی دارند. بنابراین، مطالعه چند شکلی برای تمرین بسیار مهم است.

شرایط خارجی که چندشکلی را تعیین می کند، اولاً شامل دما و فشار است، بنابراین هر تغییر چندشکلی محدوده دما و فشار خاص خود را دارد که در آن در حالت ترمودینامیکی پایدار (تعادل) وجود دارد و خارج از آن نمی تواند پایدار باشد، اگرچه می تواند در فراپایدار وجود داشته باشد، یعنی. حالت غیر تعادلی

کربن، سیلیکون، فسفر، آهن و سایر عناصر در تغییرات چندشکلی مختلف وجود دارند. خواص فیزیکی تغییرات مختلف یک ماده می تواند به طور قابل توجهی متفاوت باشد. به عنوان مثال، تغییرات کربن که به شکل الماس (سیستم مکعبی) یا به شکل گرافیت (سیستم شش ضلعی) متبلور می شوند، با وجود هویت ترکیب، از نظر خواص فیزیکی به شدت با یکدیگر متفاوت هستند. اگر یک تبدیل چندشکلی با تغییرات جزئی در ساختار همراه باشد، خواص فیزیکی ماده به طور ناچیز تغییر می کند. هر ماده خاص باید دو، سه یا چند تغییر چند شکلی داشته باشد. تغییرات مختلف معمولاً با حروف یونانی نشان داده می شوند α, β, γ و غیره، با حروف اول معمولاً به تغییراتی اشاره دارد که در دماهای بالاتر پایدار هستند.

هنگامی که یک اصلاح در دمای بالا به یک اصلاح با دمای پایین تبدیل می شود، معمولاً شکل خارجی اصلی کریستال ها حفظ می شود، در حالی که ساختار داخلی ماده دستخوش تغییر می شود. این حفظ یک شکل خارجی که با ساختار تازه تشکیل شده شبکه کریستالی مطابقت ندارد، پارامورفوزیس نامیده می شود. پارامورفوس ها در طبیعت شناخته شده اند β -کوارتز (تقارن مثلثی) با توجه به α -کوارتز (تقارن شش ضلعی)، کلسیت CaCO 3 (تقارن مثلثی) بر روی آراگونیت (تقارن متعامد) و غیره.

صرف نظر از ماهیت تغییرات ساختاری که در طی تحولات چندشکلی رخ می دهد، دو نوع از آنها متمایز می شوند: تبدیل انانتیوتروپ (برگشت پذیر) و تک تروپیک (غیر قابل برگشت).

تبدیل برگشت پذیر یک تغییر به دیگری، که در فشار ثابت و دمای انتقال معین (نقطه) انجام می شود، که در آن این تغییرات در حالت تعادل هستند، یعنی. به همان اندازه پایدار است که انانتیوتروپیک نامیده می شود. این را می توان به صورت شماتیک به صورت زیر نشان داد:

α↔ β↔مایع

آن ها انتقال α → β انانتیوتروپ است. نمونه‌هایی از تبدیل‌های چندشکل انانتیوتروپیک، تبدیل بین اشکال چندشکل SiO 2 ˸ هستند.

چند شکلی - مفهوم و انواع. طبقه بندی و ویژگی های دسته "چند ریختی" 2015، 2017-2018.

  • - چند شکلی افراد

    افراد انسانی با داشتن تعدادی ویژگی مشترک، در عین حال از نظر کیفیت گونه ای با یکدیگر یکسان نیستند. آنها از نظر جسمی، روانی و اجتماعی با یکدیگر تفاوت دارند. این تفاوت ها عبارتند از: قد، رنگ پوست و مو، ظاهر فرد، راه رفتن،... .


  • - مخل به حفظ انواع افراطی و حذف انواع متوسط ​​کمک می کند. منجر به حفظ و تقویت پلی مورفیسم می شود.

  • - تمایز درون گونه ای بشریت. نژادها به عنوان بیان چندشکلی ژنتیکی بشریت. وحدت گونه های بشریت.

    تمایز درون گونه ای بشریت: از زمان ظهور H. sapiens، امر اجتماعی در انسان به جوهره او تبدیل شده است و تکامل بیولوژیکی تغییر کرده است و خود را در ظهور چندشکلی ژنتیکی گسترده نشان می دهد. تنوع ژنتیکی در سطح... .