PDA

View Full Version : آموزش: یاد گیری آسان کلاس و شی گرایی در سی شارپ - شماره یک



alireza264
شنبه 06 تیر 1394, 19:35 عصر
سلام با توجه به اینکه اکثر منابع فارسی آموزش شی گرایی از کلماتی سنگین وثقیل استفاده کردند ویا مرجع کاملند و بعنوان خودآموز نمیشه ازشون استفاده تصمیم گرفتم برا ی بعضی از دوستان تازه وارد آموزش گرایی رو بصورت ساده و خلاصه اما تفریبا جامع ارائه کنم و مباحث تکمیلی هر بحث رو به عهده دوستان بذرام
و از سایر دوستان هم می خوام در این مسیر همراه هم باشیم. اما یه نکته مهم لطفا فقط راجع به مباحث ارائه شده در تاپیک صحبت کنیم و سایر تکنیک ها رو بذاریم برای تاپیک های دیگه مرتبط تا پرکندگی مطلب پیش نیاد.

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


اولین ومهمترین مطلب دونستن انواع نوع داده در سی شارپ هستش
نوع داده data type
سی شارپ شامل دو دسته بندی برای data type (نوع داده) است:
Value Type
Reference Type
تفاوت بین این دو نوع در مقداری است که آن متغیر دارد.
برای value type، متغیر یک مقدار واقعی را در خود نگه میدارد مثل: 22 یا 15.75


int x;
int y=12;
string a, b=“Ali”;



اما برای Reference type، متغیر یک ارجاع ( آدرس) به مقدار ( Value ) را در خود نگه میدارد .مانند فهرست کتاب که فقط به شما میگه مطلب مورد نظر کجاست این نوع معمولا در کلاس ویا تعریف نمونه ای از کلاس مورد استفاده قرار میگیرد.

class Car
{
public string Color;
public string Model;
public int MaxSpeed;
}
Car BMW = new Car(); // ایجاد یک شی از نوع کلاس car



درمثال بالا متغیر BMW ، مقادیر وارد شده شی را در خودش ذخیره نمیکند، بلکه مقادیر وارد شده در قالب تعیین شده شیء در حافظه Ram ذخیره میشود و متغیر BMW فقط آدرس جایی که مقادیر وارد شده شیء قرار دارد را نگهداری میکند

با درک مفهوم بالا شما اکنون حدود 50 درصد از هر مطلب شی گرای رو یاد گرفتید

مفاهیم برنامه نویسی شی گرا
یک زبان برنامه نویسی در صورتی شی گرا ست که شامل مفاهیم زیر باشد:
CLASS کلاس
OBJECT شی
ABSTRACTION انتزاع
ENCAPSULATION کپسوله سازی
INTERFACE واسطه
DATA HIDING / INFORMATION HIDING مخفی کردن داده ها یا اطلاعات
INHERITANCE ارث بری
POLYMORPHISM چند ریختی

کلاس Class

Class قالب ، ساختار و رفتار یک Object را تعریف میکند.
در واقع Class مشخص کننده data و code است که code روی data عمل میکند.
یک کلاس با کلمه کلیدی class ساخته میشود. فرم کلی یک کلاس که شامل instance variable و method است،

class className
{
// declare instance variables
access type var-name1;
access type var-name2;

// declare methods
access ret-type methodName1(parameters)
{
// body of method
}
}



Access نوع دسترسی به متغیر و متد مربوطه را مشخص میکند و اختیاری است (به طور پیشفرض private )) است
Type و ret-type نوع داده ای فیلدها و متد را مشخص میکند و باید حتما مشخص گردد
نکته : اعضایی از کلاس که دسترسی آنها private باشد فقط در همان کلاس و اعضای همان کلاس قابل دسترسی هستند. اما اگر دسترسی عضوی از نوع public باشد آن عضو در همه جای برنامه قابل دسترسی است.

شی Object
یک Object بیان کننده چیزیست که در دنیای واقعی قابل درک باشد.
Object یک سری فعالیتهای مرتبط به هم را انجام میدهد .
هر Object ویژگی ها و رفتارهای خاص خود را دارد.
Object نمونه ای از یک Class است.
وقتی یک کلاس را تعریف میکنیم، هم data و هم code ای که روی این دیتا عمل میکند را تعریف میکنیم.
در حالت کلی مواردی که در یک کلاس قرار میدهیم در دو دسته 1- اعضا داده ای Data Members و2 – اعضا تابعی Function Members تقسیم بندی میشوند.
اعضا داده ای data members (fields) شامل instance variable و static variable هستند.
اعضای تابعی function members شامل method، constructor، destructor، indexer، event، operators و properties هستند.


class Car
{
public string Color;
public string Model;
public int MaxSpeed;
}

Car BMW = new Car();
BMW.Color = "Yellow";
BMW.Model = "McLaren";
BMW.MaxSpeed = 300;



متد Method

Method ها شبیه به Procedure ها، Function ها و … در دیگر زبانهای برنامه نویسی هستند.
Method ها و متغیرها (instance variables) تشکیل دهنده اجزای اصلی کلاس هستند.
اصولاً Method ها، متغیرهایی که در کلاس تعریف میشوند را تغییر میدهند ویا کار وفرآیندی را انجام میدهند اما در بیشتر موارد باعث میشوند که بتوانیم به متغیرهای Private کلاس دسترسی داشته باشیم.
هر Method فقط یک وظیفه را بر عهده دارد، ونمیتواند چند وظیفه را داشته باشد
معمولاً قسمتهای مختلف برنامه از طریق Method های یک کلاس با آن کلاس در ارتباط هستند.
فرم کلی یک Method بهشکل زیر است

access ret-type name(parameter-list)
{
// body of method
}





class MyClass
{
class MyClass
{
private int x1, y1;
public int x2, y2;

public int MySum1(int a, int b)
{
return a + b;
}


public int MySum2()
{
return x2 + y2;
}

public void SetValue(int a, int b)
{
x1 = a;
y1 = b;
}

}



نحوه استفاده


MyClass myclas = new MyClass();
int x = myclas.MySum1(5, 6);

myclas.x2 = 4;
myclas.y2 = 10;
int y = myclas.MySum2();

myclas.SetValue(15, 8);



استفاده از پارامترها وپایان یافتن یک Method
طریقه تعریف کردن پارامتر شبیه تعریف یک متغیر است.اما این پارامترها فقط در محدوده خود آن متد شناخته قابل استفاده هستند
در دو حالت یک متد پایان می یابد:
۱ – زمانی که برنامه به انتهای متد برسد.
۲ – زمانی که با کلمه return مواجه شود.


class MyClass
{
public int c;
public void MySum(int a, int b)
{
c = a + b ;
}

// متدی که یک عدد را گرفته و زوج وفرد بودنش را تعیین کند و مقداری را برگرداند
public bool IsEven(int number)
{
if (number % 2 == 0)
return true;
else
return false;
}
}



سازنده(Constructor ) و چگونگی استفاده از آن
سازنده یا Constructor : همزمان با ساخت شیء ، آن را مقداردهی نیز میکند.
نام سازنده باید نام همان کلاسی باشد که سازنده در آن قرار دارد.
سازنده از لحاظ syntax مشابه به method است با این تفاوت که هیچ مقداری را برنمیگرداند و معمولا دسترسی آن بصورت public است .فرم کلی سازنده به شکل زیر است:


Class class-name
{
access class-name(param-list)
{
// constructor code
}
}



نکته :همه کلاسها یک constructor دارند و اگر constructor را تعریف نکنیم سی شارپ به صورت اتوماتیک یک سازنده پیش فرض( default constructor ) برای کلاس می سازد و به همه متغیرهای کلاس یک مقدار پیشفرض می دهد. به value type های عددی مقدار صفر، برای بولین مقدار false و برای رشته ها ، تاریخ و reference type ها مقدار null را در نظر میگیرد. اما اگرخودمان constructor را بسازیم دیگر از سازنده پیش فرض( default constructor ) استفاده نمیشود



class Car
{
public string Color;
public string Model;
public int MaxSpeed;
// سازنده کلاس
public Car(string carColor, string carModel, int carMaxSpeed)
{
Color = carColor;
Model = carModel;
MaxSpeed = carMaxSpeed;
}
}



نحوه استفاده


Car BMW = new Car("Black", "BMW", 250);



List
تعداد سلول های آرایه ثابت است و امکان تغییر تعداد سلول ها یک آرایه بهصورت پویا وجو ندارد اما تعداد عناصر List بهصورت پویا میتواند تغییر کند. با استفاده از List نیازی نیست که اندازهی آن را ابتدای کار مشخص شود و در واقع با استفاده از List آرایهای میسازیم که اندازهی آن ثابت نیست.
List در فضای نام using System.Collections.Generic; قرار دارد و فرم کلی آن به شکل زیر است:


List <Datatype> ListName = new List <Datatype>();



مثال

List <int> list = new List <int>();
list.Add(52);
list.Add(124);
list.Add(5);
list.Add(19);



تعریف یک لیست از کلاس

class Car
{
public string Color;
public string Model;
public int MaxSpeed;

public Car(string carColor, string carModel, int carMaxSpeed)
{
Color = carColor;
Model = carModel;
MaxSpeed = carMaxSpeed;
}
}


نحوه استفاده

List<Car> CarCollection = new List<Car>();

CarCollection.Add(new Car (“Red", "BMW", 200));
CarCollection.Add(new Car (“Blue", "Benz", 250);
CarCollection.Add(new Car (“White", “Toyota", 180));


string NamColor = CarCollection[0].Color;
string NamModel = CarCollection[0].Model;
int MaxSpeed = CarCollection[0].MaxSpeed;



Collectionها
می توانیم کلکسیونی از کلاس ها را ایجاد کنیم. به عنوان مثال می توان کلاسی ایجاد کرد که آن خوداز چندین نمونه ، از کلاس های ایجاد شده باشد. این کلاس خصوصیاتی مانند حذف و اضافه نمونه ها از کلکسیون را دارا می باشد.
Collection در فضای نام using System.Collections; قرار دارد
هنگام تعریف Collection باید از کلمه CollectionBase در مقابل نام Collection استفاده کنیم یا به عبارت دیگرباید از CollectionBase ارثبری کنیم

public class Car
{
public string Color;
public string Model;
public int MaxSpeed;

public Car(string carColor, string carModel, int carMaxSpeed)
{
Color = carColor;
Model = carModel;
MaxSpeed = carMaxSpeed;
}
}

public class My_cars : CollectionBase
{
public void Add(Car new_car)
{
List.Add(new_car);
}

public void Remove(Car old_car)
{
List.Remove(old_car);
}
}



در مثال بالا دو کلاس تعریف شده است. اولین کلاس، کلاس Car است که ویژگی های یک عنصر از کلکسیون کلاس ما می باشد. دومین کلاس، کلکسیون کلاس است My_cars که شامل مجموعه ای از اشیاء از نوع کلاس Car است.
کلاس CollectionBase دارای خاصیت List است که مجموعه ای از اشیاء را در خود جای می دهد همچنین دارای متدهایی مانند Add و Removeو... برای حذف یا اضافه کردن و ... اشیاء است و به سادگی می توان با استفاده از خاصیت List و متد مربوطه عملیلات مورد نظر را انجام داد. و نیازی به تعریف یک لیست از نوع کلاس نمی باشد زیرا خود داری خاصیت List می باشد
نکته مهم : متدهای خاصیت List یک شیء را قبول می کنند نه یک کلاس را .
نحوه استفاده :

My_cars mycar = new My_cars();
mycar.Add(new Car("Red", "BMW", 200));
mycar.Add(new Car("Blue", "Benz", 250));