آشنایی با کلاسها و اشیا (1)

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

سری چهارم از آموزش زبان سی شارپ


استفاده از کلاسها و اشیا در سی شارپ
همه برنامه های سی شارپ از کلاسها بهره می برند. یک برنامه ویندوزی شامل یک پنجره خود از کلاسی به نام Form استفاده می کند.
در سی شارپ مفهوم ماژولها داده های عمومی و داده های مشترک که جز مفاهیم کلاس نیستند، وجود ندارد.
یک کلاس ترکیبی از متدهای Public (عمومی) و Private (خصوصی) است. معمولا ما هر کلاس را در یک فایل می نویسیم. البته این یک قانون نیست.
وقتی که یک کلاس را می سازیم، این کلاس به تنهایی موجودیتی ندارد ولی می توانیم یک نمونه Instance از آن را با استفاده new ایجاد نماییم. وقتی یک نمونه از یک کلاس را می سازیم می توانیم داده هایی را برای شروع ساخت نمونه به کلاس پاس بدیم. این عمل را با استفاده از constructor انجام می دهیم. یک سازنده (constructor) یک متد هم نام با نام کلاس است که هیچ نوع داده خروجی ندارد و پارمترهای ورودی آن می توانند از صفر به بالا باشند که به ازاء هر نمونه شی ساخته شده ارسال می شوند.

برنامه نمونه تبدیل دما
در این قسمت یک برنامه نمونه خواهیم نوشت. این برنامه یک مبدل دما از سانتیگراد به فارنهایت است. اگر خاطرتان باشد، آب در صفر درجه منجم شده و در صد درجه بخار می شود (البته بر حسب سانتی گراد) و در 32 درجه فارنهایت منجمد و در 212 درجه فارنهایت به بخار تبدیل می شود. خوب حالا میشه به راحتی درجه سانتیگراد رو به درجه فارنهایت تبدیل کرد.
مقیاس تبدیل ما همین درجه انجماد و بخار است که برابر با 100 درجه سانتی گراد و 180 درجه فارنهایت است، پس مقیاس تبدیل ما برابر با 100/180 یا 5/9 است. و چون آب در 32 درجه فارنهایت منجمد می شود پس 32 درجه دیگر اختلاف خواهیم داشت. در نتیجه:
C=(F-32)*5/9
F=5/9*C+32
ما در برنامه این امکان را به کاربر می دهیم تا درجه حرارت مورد نظر خود را وارد نمایید و سپس مشخص کند که به کدام واحد تبدیل شود. در آخر با زدن دکمه تبدیل (Convert) عمل تبدیل واحد صورت می گیرد.
تصویر این برنامه را در شکل زیر می بینید:
تصویر برنامه تبدیل دما
این هم کد برنامه تبدیل:

// LIST 1
private void btnConvert_Click(object sender, EventArgs e)
{ float temp, newTemp;

//convert string to input value
temp = Convert.ToSingle(txtTemprature.Text);

//see which scale to convert to
if (opFahrenheit.Checked)
newTemp = 9 * temp / 5 + 32;
else
newTemp = 5 * (temp - 32) / 9;

//put result in label text
lblResult.Text = newTemp.ToString();
txtTemprature.Text = ""; //clear entry field
}

یک کلاس در سی شارپ یک ماژول است که می تواند دارای دو تابع یا روال از نوع Public و Private باشد. این تابع ها یا روالها در کلاس متد (Method) نامیده می شوند.
برای ایجاد یک کلاس در محیط ویژوال استدیو از منوی Project گزینه Add class را انتخاب می کنیم. وقتی که نامی را برای کلاس انتخاب می کنیم، ویژوال استدیو کلاسی را با همان نام و با محتویات خالی ایجاد می نماید. بطور مثال اگر نام فایل را Temprature انتخاب کنیم کدی مانند کد زیر توسط ویژوال استدیو ایجاد می شود:

// LIST 2
using System;
using System.Collections.Generic;
using System.Text;

namespace Temprature_Convertor
{ class Temprature
{
}
}

برای اینکه در خصوص متدهای نوشته شده توضیحاتی را ارئه نمایید می توانید از Summary استفاده کنید. برای این مننظور به روش زیر عمل کنید:

// LIST 3
///
/// Temprature Class for Converting 2way Celesuis and Fahrenheit
///
class Temprature
{
}

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

// LIST 4
private int mDegree;
public Temprature(int Degree)
{ mDegree = Degree; }
public float GetCelesuis()
{ return 5 * (mDegree - 32) / 9; }
public float GetFahrenhiet()
{ return 9 * mDegree / 5 + 32; }

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

// LIST 5
public float GetKelvin()
{ return GetCelesuis() + (float) 273.16; }

وظیفه این متد تبدیل درجه حرارت فارنهایت به سانتیگراد است.

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

// LIST 6
private void btnConvert_Click(object sender, EventArgs e)
{ int Degree = System.Convert.ToInt32(txtTemprature.Text);
Temprature temp = new Temprature(Degree);
if (opCelesius.Checked)
lblResult.Text = temp.GetCelesuis().ToString(); else lblResult.Text = temp.GetFahrenhiet().ToString(); txtTemprature.Text = "";
}

اگر این کد رو با کد لیست 1 مقایسه کنید می بینید که در کد لیست 6 هیچ گونه دستوری در خصوص حل مسله دیده نمی شود ولی در کد لیست 1 شما دستورات حل مسله را به وضوح می تونید ببینید. حتی با یک تغییر در کد کلاس می تونید عمل تصمیم گیری جهت تبدیل رو هم به کلاس واگذار کنید و کاربر رو با کمترین پیچیدگی روبرو کنید. برای این منظور باید سازنده کلاس تغییر پیدا کرده و یک متد جدید هم به اون اضافه کنیم تا اون متد عمل تبدیل رو انجام بده. در این حالت میشه متدهای قبلی رو از حالت Public خارج کرده و به متدهای Private تبدیل کنیم، زیرا کاربر احتیاجی به این متدها جهت تبدیل نخواهید داشت. به کد زیر دقت کنید:

/// LIST 7
class SimpleTemprature
{ private int mDegree;
private bool mConvertWay;
public SimpleTemprature(int Degree,bool convertWay)
{ mDegree = Degree;
mConvertWay = convertWay;
}
public float GetConvertedTemorature()
{ if (mConvertWay)
  return GetCelesuis();
else
  return GetFahrenhiet();
}
private float GetCelesuis()
{
  return 5 * (mDegree - 32) / 9;
}
private float GetFahrenhiet()
{
  return 9 * mDegree / 5 + 32;
}
}

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

تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، کلاس، شی، عمومی، خصوصی، روال، تابع، متد، برنامه نویسی، کد نمونه، سازنده، نمونه شی، سانتیگراد، فارنهایت، برنامه مبدل واحد دما
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#, Class, Object, Public, Private, Subroutin, Function, Method, Programming, Sample Code, Source Code, Constructor, Instance, Celesuis, Fahrenhiet, Converting Tempratue Program


مطالب مشابه :


آشنایی با windows data type

در این وبلاگ سعی میکنم مطالبی در مورد سی شارپ و وابسته هاش بنویسم.امید وارد براتون مفید باشه.




آموزش تصویری سی شارپ

آشنایی با ویژوال استودیو، ساختن پروژه و نوشتن اولین برنامه سیشارپ. Visual Studio به شما اجازه




پکیج استثنایی و فوق العاده ” سی شارپ رو قورت بده ”

- برنامه ارسال ایمیل با سی شارپ - چندین سورس بازی با سی - آشنایی با محیط سی شارپ




مجموعه کامل آموزش برنامه نویسی سی شارپ پکیج دو

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




آشنایی با کلاسها و اشیا (1)

آشنایی با کلاسها و اشیا (1) سری چهارم از آموزش زبان سی شارپ استفاده از کلاسها و اشیا در سی




برچسب :