اشیاء دارای خصوصیت ها (Properties) و رفتار (Behavior) هستند. شئ گرایی در زبان سی شارپ از همین ویژگیهای اشیاء استفاده میکند و اشیایی که خصوصیات و رفتارهای یکسانی دارند را در قالب یک کلاس (Class) قرار میدهد. برای مثال زرافه، اختاپوس و عقاب، در کلاس حیوان قرار میگیرند. پس اشیاء نمونه هایی از یک کلاس هستند. خصوصیات در سی شارپ به وسیلهی فیلدها (Fields) و ویژگی ها (Properties) تعریف میشوند. متدها (Method) نیز رفتار یک شئ را پیادهسازی میکنند. به فیلدها و متدها، اعضای کلاس (Class Members) نیز میگویند.
ساخت کلاس ها و اشیاء در سی شارپ (#Create Classes and Objects in C)
برای ساخت کلاس در زبان سی شارپ از کلمه کلیدی class استفاده میشود. در صورتیکه یک ویژگی درون کلاس تعریف شود به آن فیلد میگویند. در قطعه کد زیر به زبان سی شارپ کلاس Animal با فیلد name با مقدار اولیهی Lion برای این فیلد نمایش داده شده است.
class Animal
{
string name = “Lion”
static void Main(string[] args)
{
Animal myObject = new Animal();
Console.WriteLine(myObject.name);
}
}
در بخش بالا، قطعه کد ساخت یک کلاس در زبان سی شارپ و نحوه ساخت یک شئ در زبان سی شارپ نمایش داده شده است.
سازنده در سی شارپ (#Constructor in C)
سازنده (Constructor) در زبان سی شارپ یک متد مخصوص در هر کلاس است که با ساختن شئ بهصورت خودکار صدا زده میشود تا تمامی اعضای کلاس آماده و مقداردهی اولیه شوند. یکی از مزیتهای استفاده از سازنده این است که فیلدهای اشیاء را مقداردهی اولیه میکند که باعث جمع و جورتر شدن کدها می شوند. معمولاً اولین متد هر کلاس را به سازنده اختصاص میدهند.
class Animal
{
public string name;
public Animal(string Name)
{
name = Name;
}
static void Main(string[] args)
{
Animal Mammal1 = new Animal("Bear");
Console.WriteLine(Mammal1.name);
}
}
در بخش بالا، قطعه کد یک سازنده در زبان سی شارپ که یک ورودی می گیرد و استفاده آن به عنوان فیلد کلاس، نمایش داده شده است.
ویژگی ها در سی شارپ (#Properties in C)
جهت محقق شدن کپسوله سازی (Encapsulation) و پنهان ماندن داده های حساس از دید کاربران در زبان سی شارپ میتوانیم برای اشیاء، کلاس ویژگی (Properties) تعریف کنیم. برای خواندن داده از get و برای نوشتن آن از set استفاده می کنیم. در قطعه کد زیر ویژگی Name به عنوان فیلد در کلاس آورده نشده و به عنوان یک ویژگی کپسولهسازی شده است.
public class Animal
{
public string Name {get; set;}
public int Type {get; set;}
}
در بخش بالا، قطعه کد دو ویژگی برای یک کلاس با قابلیت خواندن و نوشتن برای سطح دسترسی عمومی نمایش داده شده است.
سطح دسترسی در سی شارپ (#Access Modifier in C)
در زبان سی شارپ میتوان برای هر کلاس و فیلد سطح دسترسی تعیین کرد. متدها و ویژگی ها نیز از این قاعده مستثنا نیستند. مهمترین سطوح دسترسی در زبان سی شارپ public و private هستند. در سطح دسترسی public، دسترسی از تمام کلاسها به قطعه کد مربوطه میسر است و در سطح دسترسی private، تنها در خود کلاس امکان دسترسی به قطعه کد مورد نظر وجود دارد. انواع سطح دسترسی دیگر عبارتاند از: protected, internal, protected internal and private protected
ارث بری در سی شارپ (#Inheritance in C)
در زبان سی شارپ متد ها و ویژگی های کلاس پدر به کلاس فرزندان داده می شود. برای مثال حیوان کلاس پدر و پرنده کلاس فرزند آن است. استفاده از ارث بری به ما مزیتهایی مانند قابلیت استفاده مجدد (Reusability) و همچنین استفاده از مزیت چند ریختی (Polymorphism) را میدهد که در ادامه به آن اشاره خواهیم کرد. اگر میخواهید کلاسی بدون امکان ارث بری از آن بسازید از کلمه کلیدی sealed استفاده کنید.
public class Fish : Animal
{
public string name = "Shark";
}
public class Program
{
static void Main (string[] args)
{
Fish myObj = new Fish();
myObj.livingIn();
}
}
در بخش بالا، قطعه کد ارثبری یک کلاس از کلاس دیگر و ساخت شئ از کلاس فرزند نمایش داده شده است.
چند ریختی در سی شارپ (#Polymorphism in C)
قابلیت چند ریختی (Polymorphism) به معنای قابل استفاده بودن یک نوع متد برای انواع مختلف اشیاء است. به بیان دیگر، چندریختی به ما قابلیت استفاده از هدف یک متد با اعمال ورودیهای متفاوت را میدهد. برای پیادهسازی چند ریختی در زبان سی شارپ، برای هر نوع شئ یک متد مختص بهآن مینویسیم. بهتر است نام تمامی این متدها یکسان باشد تا هنگام صدا زدن متد تمامی ریختهای آن در دسترس باشد.
class Bird : Animal
{
public override void animalSound()
{
Console.WriteLine("a bird says: chick chick");
}
}
class Program
{
static void Main(string[] args)
{
Animal myBird = new Bird();
myBird.animalSound();
}
}
در بخش بالا، قطعه کد چندریختی که ریختهای مختلف آن در دو کلاس پدر و فرزند است نمایش داده شده است.
انتزاع و رابط ها در سی شارپ (#Abstraction and Interface in C)
ساخت کلاس های انتزاعی و رابط ها (Abstract Class and Interface) در سی شارپ باعث پنهان سازی جزئیات مشخص و فقط نمایش جزئیات مهم اشیاء به کاربر میگردد. تفاوت کلاس با کلاس انتزاعی (Abstract Class) این است که نمیتوان یک شئ از کلاس انتزاعی ساخت و فقط بهوسیلهی کلاسهای فرزند آن میتوان به متدهای آن دسترسی داشت. متدهای یک کلاس انتزاعی نیز میتوانند انتزاعی باشند. این نوع متدها بدنه (Body) ندارند و بدنه آن توسط فرزندهای آن ساخته میشود.
رابط ها (Interface) در سی شارپ یک کلاس کاملاً انتزاعی است. یعنی متدهای آن بدنه و قابلیت تعریف فیلد را ندارند. جهت استفاده از متدها در فرزندان از کلمه کلیدی override استفاده میشود. در غیر اینصورت اگر متد در کلاس انتزاعی بدنه داشته باشد، همان بدنه بهعنوان خروجی نمایش داده میشود.
abstract class Animal
{
public abstract void animalSound();
public void sleep()
{
Console.WriteLine("Zzz");
}
}
class Frog : Animal
{
public override void animalSound()
{
Console.WriteLine("The Frog says: krr krr");
}
}
// or we use an interface instead like below
interface IAnimal
{
void animalSound();
}
در بخش بالا، قطعه کد ساختن یک کلاس انتزاعی و ساختن یک رابط نمایش داده شده است.
جمع بندی
شئ گرایی در زبان سی شارپ به ما امکان پیاده سازی یک ساختار واضح و امن برای برنامه (Application) را میدهد. از مزیت های شئ گرایی در سی شارپ میتوان به عدم تکرار غیر ضروری، نگهداری، تغییر و رفع عیب (Debug) آسان اشاره کرد. همچنین به ما امکان قابلیت استفاده مجدد، زمان توسعه و کدنویسی کمتر و انعطاف پذیری بالا را میدهد.
شئ گرایی در زبان سی شارپ (#OOP in C) چگونه پیاده سازی می شود؟
اشیاء به کلاسهای مختلف دستهبندی میشوند. هر شئ دارای ویژگیها و رفتارهای مربوط به کلاس خود و کلاس های والد خود میباشد که بهترتیب با استفاده از فیلدها یا ویژگیها (Fields or Properties) و متدها قابل پیادهسازی است. با استفاده از خواص سازنده، ارث بری، چند ریختی و انتزاع، شئ گرایی در زبان سی شارپ بسیار دسترسپذیرتر و گستردهتر میشود. برای حفظ امنیت سطوح مختلف دادهها نیز میتوان از خاصیت سطح دسترسی استفاده کرد.
برای شئ گرایی در زبان سی شارپ چه مفاهیمی نیاز است؟
جهت پیادهسازی شئ گرایی در زبان سی شارپ بهتر است ابتدا مفاهیم کلاس و شئ که نمونهای از یک کلاس است را درک کنید. خواص سازنده، ویژگیها، سطوح دسترسی، ارثبری، چندریختی، انتزاع و روابط در پیادهسازی مفهوم شئ گرایی در زبان سی شارپ کمکهای میسرسازی و امنیتی فراوانی میکنند.
مزایای شی گرایی در سی شارپ چیست؟
- سازماندهی ساختار دادهها
- سادهسازی کار با اطلاعات واقعی در دنیای برنامه نویسی
- عدم نیاز به تکرار غیرضروری کدها
- تغییر، رفع عیب و نگهداری آسان
- انعطاف پذیری بالا و حجم کد کمتر
- پشتیبانی و توسعه دائمی شرکت مایکروسافت