ویژگی (برنامه نویسی کامپیوتری) کیست؟ توضیح بده.
در برنامه نویسی کامپیوتر ، یک ویژگی یک مفهوم زبانی است که مجموعه ای از روش ها را نشان می دهد که می تواند برای گسترش عملکرد یک کلاس استفاده شود. منطق.در برنامه نویسی شی گرا، رفتار گاهی بین کلاس هایی که به یکدیگر مرتبط نیستند به اشتراک گذاشته می شود. برای مثال، بسیاری از کلاس‌های نامرتبط ممکن است متدهایی برای سریال‌سازی اشیا به JSON داشته باشند. از لحاظ تاریخی، چندین رویکرد برای حل این مشکل بدون تکرار کد در هر کلاسی که به رفتار نیاز دارد، وجود داشته است. روش‌های دیگر شامل وراثت چندگانه و میکس‌ها هستند، اما اینها دارای اشکالاتی هستند: اگر ترتیب اعمال میکس‌ها تغییر کند، یا اگر روش‌های جدیدی به کلاس‌های والد یا میکس‌ها اضافه شوند، ممکن است رفتار کد به‌طور غیرمنتظره‌ای تغییر کند.ویژگی‌ها با اجازه دادن به کلاس‌ها برای استفاده از ویژگی و به دست آوردن رفتار مطلوب، این مشکلات را حل می‌کنند. اگر یک کلاس از بیش از یک ویژگی استفاده کند، ترتیب استفاده از ویژگی‌ها مهم نیست. متدهای ارائه شده توسط ویژگی‌ها دسترسی مستقیم به داده های کلاس دارند.خصوصیات.ویژگی‌ها جنبه های پروتکل ها (رابط ها) و میکس ها را ترکیب می کنند. مانند یک رابط، یک ویژگی یک یا چند امضای متد را تعریف می‌کند که کلاس‌های پیاده‌سازی باید پیاده‌سازی‌هایی را ارائه کنند. مانند یک mixin، یک ویژگی رفتار اضافی را برای کلاس پیاده‌سازی ارائه می‌کند.در صورت تداخل نامگذاری بین متدهای ارائه شده توسط ویژگی‌ها مختلف، برنامه نویس باید صریحاً ابهام کند که کدام یک از آن متدها در کلاس استفاده می شود. بنابراین به صورت دستی "مشکل الماس" وراثت چندگانه را حل می کند. این با سایر روش‌های ترکیب‌بندی در برنامه‌نویسی شی‌گرا متفاوت است، جایی که نام‌های متضاد به طور خودکار با قوانین محدوده حل می‌شوند.عملیاتی که با ویژگی‌ها قابل انجام است عبارتند از: اگر روشی از یک ویژگی حذف شود، آن متد باید توسط کلاسی که آن ویژگی را مصرف می‌کند، یا توسط کلاس والد آن کلاس ارائه شود. این به این دلیل است که روش های ارائه شده توسط این ویژگی ممکن است روش حذف شده را صدا کنند.ترکیب ویژگی جابجایی است (یعنی ویژگی‌ها داده شده "A" و "B" ، "A" + "B" معادل "B" + "A" است) و انجمنی (یعنی ویژگی‌ها داده شده "A" ، "B" ، و "C" ، ( "A"+ "B" ) + "C" معادل "A" + ( "B" + "C" ) است). محدودیت‌ها.در حالی که ویژگی ها نسبت به بسیاری از گزینه ها مزایای قابل توجهی دارند، اما محدودیت های خاص خود را دارند.روش های مورد نیاز.اگر یک ویژگی به طبقه مصرف کننده نیاز داشته باشد تا روش های خاصی را ارائه دهد، آن ویژگی نمی تواند بداند که آیا آن روش ها از نظر معنایی با نیازهای ویژگی معادل هستند یا خیر. برای برخی از زبان‌های پویا، مانند Perl، روش مورد نیاز فقط با نام متد قابل شناسایی است، نه با امضای کامل متد ، که تضمین مناسب بودن روش مورد نیاز را دشوارتر می‌کند.مستثنی کردن متدها.اگر روشی از یک ویژگی حذف شود، آن روش به روشی «الزامی» برای آن ویژگی تبدیل می‌شود، زیرا روش‌های دیگر آن ویژگی ممکن است آن را نام ببرند.زبان های پشتیبانی شده.ویژگی ها در اصل از زبان برنامه نویسی Self می آیند و توسط زبان های برنامه نویسی زیر پشتیبانی می شوند:مثال‌ها.سی‌شارپ.در سی شارپ 8.0 می توان پیاده سازی را به عنوان عضوی از یک رابط تعریف کرد.using System;namespace CSharp8NewFeatures;interface ILogger // Traditional interface methods void Log(string message); void LogError(Exception exception); // Default interface method void LogWarning(string message) Console.WriteLine(message);class Logger : ILogger public void Log(string message) Console.WriteLine(message); public void LogError(Exception exception) Console.WriteLine(exception.ToString());class Program static void Main(string[] args) ILogger logger = new Logger(); logger.LogWarning("Some warning message");PHP.این مثال از یک ویژگی برای تقویت کلاس های دیگر استفاده می کند:// The templatetrait TSingleton private static $_instance = null; private function __construct() {} // Must have private default constructor and be aware not to open it in the class public static function getInstance() if (null === self::$_instance) { self::$_instance = new self(); return self::$_instance;class FrontController use TSingleton;// Can also be used in already extended classesclass WebSite extends SomeClass use TSingleton;این امکان شبیه سازی جنبه های وراثت چندگانه را فراهم می کند:trait TBounding public $x, $y, $width, $height;trait TMoveable public function moveTo($x, $y) // …trait TResizeable public function resize($newWidth, $newHeight) // …class Rectangle use TBounding, TMoveable, TResizeable; public function fillColor($color) // …Rust.یک ویژگی در Rust مجموعه‌ای از روش‌ها را اعلام می‌کند که یک نوع باید پیاده‌سازی کند. کامپایلرهای Rust نیازمند توضیح ویژگی‌ها هستند که ایمنی ژنریک ها را در Rust تضمین می کند.// type T must have the "Ord" trait// so that "&gt;" and "&lt;" operations can be donefn max&lt;T: Ord&gt;(a: &amp;[T]) -&gt; Option&lt;&amp;T&gt; { let mut result = a.first()?; for n in a { if *n &gt; *result { result = &amp;n; Some(result)برای ساده‌سازی اجرای خسته‌کننده و مکرر ویژگی‌هایی مانند codice_3 و codice_4 ، می‌توان از ماکرو codice_5 برای درخواست از کامپایلرها برای تولید خودکار پیاده‌سازی‌های خاص استفاده کرد. ویژگی‌ها قابل مشتق عبارتند از: codice_6 ، codice_7 ، codice_3 ، codice_9 ، codice_10 ، codice_11 ، codice_12 ، codice_4 و codice_14 .