PDA

View Full Version : تبدیل برنامه به شی گرایی(کلاس ها)



hsdnhd
چهارشنبه 23 اردیبهشت 1394, 15:55 عصر
باسلام
من سورس زیر را در فرم قرار دادم.
اما پروژه من باید با استفاده از شی گرایی باشه میخواستم بدونم چطوری باید اینو تبدیل به شی گرایی کنم؟اینو میدونم که باید با استفاده کلاس ها کد ها بنویسم و از توی اونها توابع خودمو بخونم الان میخوام بدونم دیگه چه کارهایی باید انجام بدم؟
واینکه چه نکاتی رو باید رعایت کنم تا برنامه شی گرایی باشه؟
ممنون

using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace snake_and_ladder
{
public partial class Form1 : Form
{
Pen p = new Pen(Color.Black, 5);
public Form1()
{
InitializeComponent();
}
int i = 0;//مشخص کننده ثانیه تایمر
int j = 0;//مشخص کننده دقیقه تایمر
int a=1;//خانه ای که بازیکن در آن قرار داره
Random r;
int ls, le;
public void ladder()
{
Random ran=new Random();
do
{
ls = ran.Next(1,100);
le = ran.Next(ls,100);
} while (le % 10 < ls % 10 );
}
public void test()
{
if (a == 3 || a == 12 || a == 18 || a == 35 || a == 35 || a == 64 || a == 68 || a == 98 || a == 75)
green();
else if (a == 5 || a == 17 || a == 26 || a == 22 || a == 43 || a == 53 || a == 83 || a == 92)
red();
else if (a == 8 || 1 == 15 || a == 20 || a == 78 || a == 94 || a == 97)
black();
else if (a == 100)
{
go();
}
}


private void green()
{
go();
Random ran = new Random();
int dd = ran.Next(i, 99);
i = dd;
go();
test();
}


private void red()
{
go();
Random ran = new Random();
int dd = ran.Next(1, i);
i = dd;
go();
test();
}


private void black()
{
go();
i = 1;
go();
test();
}


private void go()
{
foreach (Control item in this.Controls)
if (item is Label)
if (item.Name.Equals("q" + a.ToString()))
{
item.BackColor = Color.Red;
break;
}
resetcolor();
}


private void st()
{
r = new Random();
int ri = r.Next(1, 7);//عدد تاس
a = ri + a;
if (a > 100)
{
MessageBox.Show("پایان بازی");
}
else
{
b1.Visible = ri >= 1;
b2.Visible = ri >= 2;
b3.Visible = ri >= 3;
b4.Visible = ri >= 4;
b5.Visible = ri >= 5;
b6.Visible = ri >= 6;
}


}
private void resetcolor()
{
q3.BackColor = Color.ForestGreen;
q12.BackColor = Color.ForestGreen;
q18.BackColor = Color.ForestGreen;
q35.BackColor = Color.ForestGreen;
q64.BackColor = Color.ForestGreen;
q68.BackColor = Color.ForestGreen;
q64.BackColor = Color.ForestGreen;
q98.BackColor = Color.ForestGreen;
q75.BackColor = Color.ForestGreen;
q5.BackColor = Color.Gold;
q17.BackColor = Color.Gold;
q26.BackColor = Color.Gold;
q22.BackColor = Color.Gold;
q43.BackColor = Color.Gold;
q53.BackColor = Color.Gold;
q83.BackColor = Color.Gold;
q92.BackColor = Color.Gold;
q8.BackColor = Color.Gray;
q15.BackColor = Color.Gray;
q20.BackColor = Color.Gray;
q78.BackColor = Color.Gray;
q94.BackColor = Color.Gray;
q97.BackColor = Color.Gray;
}
private void label21_Click(object sender, EventArgs e)
{
}
private void label101_Click(object sender, EventArgs e)
{

}
private void timer1_Tick(object sender, EventArgs e)
{


}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
a = 1;
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
private void groupBox1_Enter(object sender, EventArgs e)
{
}
private void timer2_Tick(object sender, EventArgs e)
{
}
private void button9_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
resetcolor();


}
private void button2_Click(object sender, EventArgs e)
{
a = 1;
resetcolor();


}
private void button1_Click_1(object sender, EventArgs e)
{
st();
go();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(p, q94.Left, q94.Top+q94.Height, q83.Left, q83.Top);
}


private void خروجToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}


private void دربارهماToolStripMenuItem1_Click(object sender, EventArgs e)
{
aboutus f1 = new aboutus();
f1.ShowDialog();
}


private void مدیریتکاربرانToolStripMenuItem_Click( object sender, EventArgs e)
{
user f1 = new user();
f1.ShowDialog();
}
}
}

imanx7
چهارشنبه 23 اردیبهشت 1394, 16:03 عصر
منظور تون از شی گرایی چیه ؟!
فکر کنم منظورتون از شی گرایی اینه که میخواین پروژتون تحت معماری سه لایه باشه که هر گروه از توابع تو کلاس خودشون تعریف بشن ودر مواقع مورد نیاز فراخوانیشون کنید !

hsdnhd
چهارشنبه 23 اردیبهشت 1394, 16:10 عصر
منظور تون از شی گرایی چیه ؟!
فکر کنم منظورتون از شی گرایی اینه که میخواین پروژتون تحت معماری سه لایه باشه که هر گروه از توابع تو کلاس خودشون تعریف بشن ودر مواقع مورد نیاز فراخوانیشون کنید !
بله دقیقا همین منظورم هست دقیقا همینه ممنون میشم توضیحاتی دراین باره بهم بدید چون گفتند نمیتونم آخر سر پروژه رو طبق این معماری بنویسم باید ازاولش اینطوری بنویسم.
ممنون

imanx7
پنج شنبه 24 اردیبهشت 1394, 11:49 صبح
بله دقیقا همین منظورم هست دقیقا همینه ممنون میشم توضیحاتی دراین باره بهم بدید چون گفتند نمیتونم آخر سر پروژه رو طبق این معماری بنویسم باید ازاولش اینطوری بنویسم.
ممنون

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



public class Network
{


public Boolean IsIntenet(){
try{
bool BlnIsNet = false;
Ping _Ping = new Ping();
PingReply _PingReply = _Ping.send("www.google.com");
if(_PingReply.status == Success)
BlnIsnet = true;

}catch
{
BlnIsnNet = false;
}




Return BlnIsNet;
}




Public Class CheckRunApp : Network
{


Public void AllowRun(){


if(IsNetwork()){


//Run App Without Problem

}else{


MessageBox.Show("You can not Run App , Please Connect to Internet");


}




}

imanx7
پنج شنبه 24 اردیبهشت 1394, 12:10 عصر
معماری سه لایه : یک نوع معماری پیشنهاد شده از طرف MSDN هستش برای برنامه نویسان سی شارپ
برای این معماری پروژه به سه قسمت تقسیم میشه :
1 - UIL = User Interface Layer
- همون شمای کاربری یا رابط کاربری برنامه
2 - BL = Business Layer
- لایه منطق و کد برنامه (Business اینجا به معنای داد و ستت هست)
3- DL = Data Layer
- لایه دیتابیس و پایپاه داده ای

hsdnhd
یک شنبه 27 اردیبهشت 1394, 08:47 صبح
معماری سه لایه : یک نوع معماری پیشنهاد شده از طرف MSDN هستش برای برنامه نویسان سی شارپ
برای این معماری پروژه به سه قسمت تقسیم میشه :
1 - UIL = User Interface Layer
- همون شمای کاربری یا رابط کاربری برنامه
2 - BL = Business Layer
- لایه منطق و کد برنامه (Business اینجا به معنای داد و ستت هست)
3- DL = Data Layer
- لایه دیتابیس و پایپاه داده ای
ممنون
خب ایناهارو که توی اکثر کتاب ها و توی سایت ها هم نوشتند من میخوام بدونم چطوری باید اینکار ها رو بکنم؟من الان 70 درصد پروژه خودمو نوشتم الان بهم گفتند باید شی گرا باشه خب چطوری باید اینکارهارو انجام بدم لطفا مثال های عملی بزنید ممنون میشم.

hsdnhd
دوشنبه 28 اردیبهشت 1394, 19:40 عصر
کاره زیاد سختی نیست فقط یه مقدار حوصله میخواد البته بستگی به حجم پروژتون داره ... شما باید مختص نیاز به اشیایی که میخواین توو هر کلاس استفاده کنید سنجش کنید و توابع و متد هایی که نیاز دارین رو توو همون کلاس یا اینترفیس بنویسید و در مواقع نیاز ازشون استفاده کنید یه مثال براتون میزنم که بهتر متوجه شید
من جایی از برنامم نیاز دارم که اگه کامپیوتر به اینترنت وصل نبود کاربر اجازه استفاده از نرم افزار رو نداشته باشه

public class Network
{


public Boolean IsIntenet(){
try{
bool BlnIsNet = false;
Ping _Ping = new Ping();
PingReply _PingReply = _Ping.send("www.google.com");
if(_PingReply.status == Success)
BlnIsnet = true;

}catch
{
BlnIsnNet = false;
}




Return BlnIsNet;
}




Public Class CheckRunApp : Network
{


Public void AllowRun(){


if(IsNetwork()){


//Run App Without Problem
}else{
MessageBox.Show("You can not Run App , Please Connect to Internet");
}
}

سلام خب شما تنها یک کلاس تعریف کردی و یک تابع در اون قرار دادید این چطوری شعی گرایی محسوب میشه؟شی گرایی کلا همین تعریف توابع و تعریف کلاس و تقسیم بندی کد ها هست ؟

ebrahim.rayatparvar
دوشنبه 28 اردیبهشت 1394, 20:11 عصر
شما شی گرایی میخوایید ؟ که همید کلاس درست کردن در برنامه میشه شی گرایی.
ولی منظورت اگه معماری 3 لایه باشه که با یه جستجو کوچک در انجمن کلی مطالب برای شما میاد :
http://barnamenevis.org/showthread.php?489263-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D8%B3%D9%87-%D9%84%D8%A7%DB%8C%D9%87-%D8%A8%D8%A7-Entity-Framework&highlight=%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C+%D9 %84%D8%A7%DB%8C%D9%87
http://barnamenevis.org/showthread.php?482714-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%84%D8%A7%DB%8C%D9%87-%D8%A7%DB%8C&highlight=%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C+%D9 %84%D8%A7%DB%8C%D9%87

خارجی :
http://www.codeproject.com/Articles/24625/Coding-an-N-Tier-Application-in-C-without-any-Wiza
http://www.codeproject.com/Articles/27466/Coding-an-N-Tier-Application-in-Csharp-Without-Any

ghasem110deh
دوشنبه 28 اردیبهشت 1394, 20:45 عصر
سلام
ببینید من خودم اینطوری پیاده کردم :
این پروسیجر ، واسه درج اطلاعات :


ALTER PROCEDURE [dbo].[Agent_Insert] @Agent NVARCHAR(MAX),
@Mob NVARCHAR(MAX),
@Pic IMAGE,
@Toz NVARCHAR(MAX)
AS
BEGIN
INSERT INTO Agent(Agent, Mob, Pic, Toz)
VALUES (@Agent, @Mob, @Pic, @Toz) END

لایه دیتا اکسس و پارامترهای مربوطه :

public int Agent_Insert(string Agent, string Mob, byte Pic, string Toz) {
var returnValue = 0;
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand dCmd = new SqlCommand("Agent_Insert", conn))
{
dCmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] prms = new SqlParameter[4];
prms[0] = new SqlParameter("@Agent", SqlDbType.NVarChar);
prms[0].Value = Agent;
prms[1] = new SqlParameter("@Mob", SqlDbType.NVarChar);
prms[1].Value = Mob;
prms[2] = new SqlParameter("@Pic", SqlDbType.Image);
prms[2].Value = Pic;
prms[3] = new SqlParameter("@Toz", SqlDbType.NVarChar);
prms[3].Value = Toz;
dCmd.Parameters.AddRange(prms);
conn.Open();
returnValue = dCmd.ExecuteNonQuery();
conn.Close();
}
}
return returnValue; }

لایه بده ، بستون :

public class Agent_Bll{
public int Insert(string Agent, string Mob, byte Pic, string Toz)
{
return new Agent_Dal().Agent_Insert(Agent, Mob, Pic, Toz);
}

public int Update(int Id, string Agent, string Mob, byte Pic, string Toz)
{
return new Agent_Dal().Agent_Update(Id, Agent, Mob, Pic, Toz);
}

public int Delete(int Id)
{
return new Agent_Dal().Agent_Delete(Id);
}

public DataTable Select()
{
return new Agent_Dal().Agent_Select();
} }

اینم که پشت صحنه فرم یا همون لایه UI :

public static byte[] ImageToByte(Image img) {
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));
}


private void Btn_Insert_Click(object sender, EventArgs e)
{
var result = 0;
try
{ result = new Agent_Bll().Insert(Txt_Agent.Text.Trim(), Txt_Mob.Text.Trim(), pictureBox1.Image(ImageToByte), Txt_Toz.Text.Trim());

فعلا دارم از همین حالت استفاده می کنم !
امیدوارم بدردتون بخوره :)
یا علی !

ghasem110deh
دوشنبه 28 اردیبهشت 1394, 20:55 عصر
اون که معماری سه لایه بود :
واسه کلیت شی گرایی هم این تاپیک دوستمون رو مطالعه کنید :

http://barnamenevis.org/showthread.php?420006-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE

ebrahim.rayatparvar
دوشنبه 28 اردیبهشت 1394, 20:58 عصر
سلام
ببینید من خودم اینطوری پیاده کردم :
این پروسیجر ، واسه درج اطلاعات :


ALTER PROCEDURE [dbo].[Agent_Insert] @Agent NVARCHAR(MAX),
@Mob NVARCHAR(MAX),
@Pic IMAGE,
@Toz NVARCHAR(MAX)
AS
BEGIN
INSERT INTO Agent(Agent, Mob, Pic, Toz)
VALUES (@Agent, @Mob, @Pic, @Toz) END

لایه دیتا اکسس و پارامترهای مربوطه :

public int Agent_Insert(string Agent, string Mob, byte Pic, string Toz) {
var returnValue = 0;
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand dCmd = new SqlCommand("Agent_Insert", conn))
{
dCmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] prms = new SqlParameter[4];
prms[0] = new SqlParameter("@Agent", SqlDbType.NVarChar);
prms[0].Value = Agent;
prms[1] = new SqlParameter("@Mob", SqlDbType.NVarChar);
prms[1].Value = Mob;
prms[2] = new SqlParameter("@Pic", SqlDbType.Image);
prms[2].Value = Pic;
prms[3] = new SqlParameter("@Toz", SqlDbType.NVarChar);
prms[3].Value = Toz;
dCmd.Parameters.AddRange(prms);
conn.Open();
returnValue = dCmd.ExecuteNonQuery();
conn.Close();
}
}
return returnValue; }

لایه بده ، بستون :

public class Agent_Bll{
public int Insert(string Agent, string Mob, byte Pic, string Toz)
{
return new Agent_Dal().Agent_Insert(Agent, Mob, Pic, Toz);
}

public int Update(int Id, string Agent, string Mob, byte Pic, string Toz)
{
return new Agent_Dal().Agent_Update(Id, Agent, Mob, Pic, Toz);
}

public int Delete(int Id)
{
return new Agent_Dal().Agent_Delete(Id);
}

public DataTable Select()
{
return new Agent_Dal().Agent_Select();
} }

اینم که پشت صحنه فرم یا همون لایه UI :

public static byte[] ImageToByte(Image img) {
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));
}


private void Btn_Insert_Click(object sender, EventArgs e)
{
var result = 0;
try
{ result = new Agent_Bll().Insert(Txt_Agent.Text.Trim(), Txt_Mob.Text.Trim(), pictureBox1.Image(ImageToByte), Txt_Toz.Text.Trim());

فعلا دارم از همین حالت استفاده می کنم !
امیدوارم بدردتون بخوره :)
یا علی !

تو لایه بده بستون داده ها رو از روش کپسوله با set و get بگیری بهتر نیست امنیت بالا نمیره؟؟؟ که این جور به راحتی تو لایه ها داده ها مستقیم ندیم و بعدش در موقع set و get کردن میتونیم شرط هایی رو که دارم برای تست مقدار رو هم میشه انجام داد.

RmeXXXXXXXXX
دوشنبه 28 اردیبهشت 1394, 21:03 عصر
پروژه رو آپ کن تا بهت بگم چطوری بنویسش! یا قسمت designer فرمت رو هم بذار!

ghasem110deh
دوشنبه 28 اردیبهشت 1394, 21:07 عصر
تو لایه بده بستون داده ها رو از روش کپسوله با set و get بگیری بهتر نیست امنیت بالا نمیره؟؟؟ که این جور به راحتی تو لایه ها داده ها مستقیم ندیم و بعدش در موقع set و get کردن میتونیم شرط هایی رو که دارم برای تست مقدار رو هم میشه انجام داد.

اینطوری تست نکردم !؟

hsdnhd
دوشنبه 28 اردیبهشت 1394, 21:25 عصر
پروژه رو آپ کن تا بهت بگم چطوری بنویسش! یا قسمت designer فرمت رو هم بذار!
لینک پروژه (http://s6.picofile.com/file/8189115150/snake_and_ladder_Copy.zip.html)

hsdnhd
دوشنبه 28 اردیبهشت 1394, 21:26 عصر
ممنون از توضیحات تمامی دوستان واقعا استفاده کردم.