جمعه, ۵ بهمن, ۱۴۰۳ / 24 January, 2025
مجله ویستا

شی گرائی


شی گرائی

کلاسها قالب هایی برای اشیا هستند

● کلاس ها (Classes)

کلاسها قالب هایی برای اشیا هستند. کلاسها را می توان، "طرحهای اولیه" برای اشیا فرض کرد. آنها تمام عضوهای یک شئ را تعیین می کنند، و رفتارهای یک شئ را تعریف می کنند. وقتی که یک کلاس مقدار دهی شد، یک نمونه درون حافظه ای از آن کلاس ساخته می شود. این نمونه شئ نامیده می شود. برای نمونه سازی از کلاس از کلمه کلیدی New استفاده می شود.

▪ Declares a variable of the Widget type

▪ Dim myWidget As Widget

▪ Instantiates a new Widget object and assigns it to the myWidget

▪ variable

● myWidget = New Widget()

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

● اشیا و اعضا(Members)

اشیا ترکیبی از عضوها هستند. اعضا، تشکیل شده از خصوصیات(Properties)، فیلدها، متدها و رویدادها (events) و هر چیزی که اطلاعات و اعمالی داشته باشد. فیلدها و خصوصیات، اعضای داده هر شئ‌ای هستند. متدها اعمالی هستند که شئ می تواند انجام دهد و رویدادها اطلاعاتی هستند که یک شئ به اشیا دیگر می فرستد یا از آنها دریافت می کند در زمانیکه اتفاقی در برنامه می افتد. در مثال واقعی مان، شئ ماشین، فیلدها و خصوصیاتی مانند Color ،Make ،Model ،Age، GasLevel دارد. این اطلاعات وضعیت شئ ماشین را توصیف می کند. شئ ماشین شاید چندین متد مانند Accelerate, shiftgears, turn داشته باشد. متدها رفتاری که شئ می تواند اجرا کند را نشان می دهند. ماشین شاید رویداد EngineOverheating از طرف شئ "موتورش" داشته باشد، یا وقتی با شئ "درخت" تعامل می کند، شاید رویداد "تصادف" برای آن اتفاق بیفتد.

● کپسوله سازی( Encapsulation)

کپسوله سازی روشی است که یک شئ را مستقل از اینترفیسش پیاده سازی کنیم. یک برنامه با یک شئ بواسطه اینترفیسش تعامل می کند، که شامل خصوصیات عمومی و متدهایش است. تا زمانی که این اینترفیس ثابت باقی می ماند، برنامه می تواند به تعامل با کامپوننت ادامه دهد. حتی اگر پیاده سازی اینترفیس کاملا بین دو نسخه کاملا بازنویسی شده باشد. اشیا فقط از طریق متدها و خصوصیات عمومیشان با دیگر شئ ها تعامل می کنند. داده های داخلی یک شئ، نباید در اینترفیس قرار بگیرد. بنابراین فیلدها به ندرت Public تعریف می شوند. به مثال ماشینمان برگردیم: اگر شئ ماشین با شئ راننده تعامل کند، اینترفیس ماشین شاید شامل متدهای GoForward، Backward و متد Stop باشد. این همه‌ی اطلاعاتی است که راننده برای تعامل با ماشین نیاز دارد. ماشین شاید شامل شئ "موتور" نیز باشد، اما راننده نیازی به شناخت شئ موتور ندارد. همه اطلاعتی که راننده درباره این متدها دارد این است که می توانند فراخوانی شوند و آنها مقادیر ویژهای را برمی گردانند. بنابراین اگر شئ موتور تغییری کند، تا زمانیکه اینترفیس به درستی به کار خود ادامه می دهد این امر تفاوتی برای راننده ایجاد نمی کند.

● چند شکلی(Polymorphism)

چند شکلی توانایی کلاسهای متفاوت، در پیاده سازی های مختلف از اینترفیسهای عمومی مشابه است. به عبارت دیگر، چندشکلی به متدها و خصوصیات یک شئ اجازه می دهد، بدون توجه به چگونگی پیاده سازی اعضای آنها، فراخوانی شوند. برای مثال شئ Driver می تواند بوسیله اینترفیس عمومی Car با شئ Car تعامل کند.اگر شئ دیگری مانند شئ Truck یا شئ SportCar اینترفیس عمومی مشابهی را داشته باشند، شئ Driver می تواند با آنها بدون توجه به پیاده سازی خاص آن اینترفیس تعامل کند این جا دو راه اصلی برای تامین چندشکلی وجود دارد: چندشکلی اینترفیس(interface polymorphism) و چندشکلی وراثتی (inheritance polymorphism).

● چندشکلی اینترفیس(interface polymorphism)

اینترفیس یک قرارداد برای رفتار است. در واقع اینترفیس اعضای یک کلاس را تعیین می کند، اما توضیحاتی درباره‌ی پیاده سازی همه جزییات آن نمی دهد. یک شئ می تواند اینترفیسهای زیاد و متفاوتی را پیاده سازی کند، و کلاسهای متفاوت زیادی می توانند یک اینترفیس مشابه را پیاده سازی کنند. همه اشیایی که اینترفیس مشابهی را پیاده سازی می کنند می توانند با دیگر اشیا درون اینترفیس تعامل کنند. به عنوان مثال شئ car مثال قبل شاید اینترفیس IDrivable را پیاده سازی کند(به عنوان قرار داد، اینترفیس ها معمولا با I شروع می شوند)، که متدهای GoForward, GoBackward,Halt را تعیین می کند. کلاس های دیگر مانند Truck، Forklift یا Boat شاید این انیترفیس را پیاده سازی کنند و بنابراین می توانند با شئ Driver تعامل داشته باشند. شئ Driver از پیاده سازی انیترفیس که با آن تعامل دارد بی اطلاع است.

● چندشکلی وراثتی (inheritance polymorphism)

وراثت به شما امکان می دهد که اعمال یک کلاس از پیش تعریف شده را، در یک کلاس جدید با هم ترکیب کنید و اعضای متفاوت مورد نیاز را در آن پیاده سازی کنید. کلاسی که از کلاس دیگری ارث می برد "مشتق" آن کلاس، یا "وارث" آن کلاس نامیده می شود. یک کلاس می تواند مستقیما فقط از یک کلاس ارث ببرد، که آن کلاس که از آن ارث می برد را کلاس پایه (base class) می نامند. کلاس جدید اعضای مشابهی با کلاس پایه دارد، و اعضای اضافی که مورد نیاز باشند می توانند افزوده شوند. به علاوه، در کلاس جدید بوسیله overriding پیاده سازی کلاس پایه، اعضای پایه می توانند تغییر کنند. کلاسهای وارث، همه ویژگی های کلاس پایه را نگه می دارند و می توانند با دیگر اشیایی که نمونه هایی از کلاس پایه هستند تعامل کنند. به عنوان مثال،اگر کلاس car یک کلاس پایه باشد، sportscar شاید کلاس مشتق شده از آن باشد. کلاس sportscar شاید کلاس پایه برای کلاس مشتق شده ی دیگری باشد مثل کلاس ConvertibleSportsCar. هر کلاس مشتق شده جدید، ممکن است اعضای اضافی را پیاده سازی کند، اما اعمالی که در کلاس اولیه car تعریف شده همچنان باقی می مانند.