Увага! Всі конференції починаючи з 2014 року публікуються на новому сайті: conferences.neasmo.org.ua
Наукові конференції
 

NET ПЛАТФОРМАСЫНДА C# ТІЛІНДЕ ПРОГРАММАЛАУ ТЕХНОЛОГИЯСЫ

Автор: 
Ақгүл Найзағараева (Астана, Казахстан)

Объекті бағдарланған программалау - қазіргі программалау тілдерінің негізгі технологиясы. Бұл технологияда негізгі мүше объект болып табылады және программаның басқа бөлігінен тәуелсіз, кейбір функционалдық есептерін шешу үшін оның бөліктері де жеткілікті. Соңғы кезде объекті бағдарланған технология негізінде кез келген Windows- қосымшаны немесе Web-қосымшаны құруға арналған жалпы платформа қажет болды. Бұл мәселені Microsoft корпорациясының програмистері шешті және жаңа технологиялар мүмкіндіктері қолданылатын .Net платформасын құрды.

Net Framework платформасы –қолданбалы программаларды құруға және орындауға арналған базалық платформа. Платформа негізгі екі компоненттен тұрады: жалпы тілді орындау ортасы және класстар кітапханасы. Microsoft .Net платформасында жиырмадан астам программалау тілі(C++, Visual Basic, C#, Delphi ) қолданылады және кітапханадағы бір тілдің модулі екінші тілге қолдану мүмкіндігі бар.

Ақпараттық жүйелер мамандығының «Программалау технологиясы» курсының объекті бағдарланған программалау бөлімінде С# тілінде программалау негіздері оқытылады. Бұл курстың негізгі мақсаты - объекті бағдарланған программалаудың негізгі принциптерін, технологиясын, құрылымы мен моделдерін оқыту. С# тілінде жазылған программа мәтіндік файл болып табылады және тіл операторларынан, түсініктемелерден тұрады. С# тілі объекті бағдарланған программалау тілдерінің тобына жатады. Объекті бағдарланған программалау тілдерінің негізгі концепциясы – құрылатын қосымша өзара байланысқан негізгі объектілерден тұрады. Объектілер дегеніміз бірнеше рет қолданылатын программалық модулдерден, яғни байланысқан мәліметтер мен процедуралардан тұрады. Күрделі программалар бірнеше біртипті объектілерді қолдануы мүмкін. Бұл жағдайда әр объект үшін әдістер мен айнымалылар туралы информацияны жазу тиімсіз. Бұл мақсатқа объектілер класы деген түсінік енгізілген. Класс дегеніміз біртипті объектілерге арналған шаблон және объектілі айнымалылар типтері мен әдістерін анықтайтын информациялардан тұрады. Кез келген программалық әрекет класс әдісінің ішінде орындалады. Объектіге бағдарланған программалауда әрекет объектіге хабарларды беру арқылы инициализацияланады. Хабар әрекетті жүзеге асыру үшін сұраулардан тұрады. Хабарға реакция ретінде алушы қабылданған сұрауды қанағаттандыру үшін кейбір әдісті жібереді. Объектіге бағдарланған тәсілдің принциптері:

  • Барлық объектілер кластардың экземплярлары болып табылады. Бір кластың барлық объектілері бірдей хабардың жауабына бір ғана әдісті қолданады.

  • Мұралау принципі. Кластар қасиеттерін мұралауда және иерархиялық құрылымда ұйымдастырылады. Туынды класс аталымды кластың атрибуттарын мұралайды.

  • Полиморфизм принципі. Объектілер тек өзіне лайықты түрдегі бір ғана хабарға жауап береді.

Объектіге бағдарланған тәсілдің негізгі идеялары келесі ережелерге тіреледі:

-программа кейбір нақты процестің, дүниенің нақты бөлігінің моделі болып табылады;

-нақты дүниенің немесе оның бөлігінің моделі объектілердің бір-бірімен өзара әсерінің жиынтығы сияқты сипатталанады;

-объектінің күйін анықтайтын шамалардың параметрінің жиынтығымен және объект орындайтын операциялардың (әрекеттердің) жиынтығымен сипатталынады;

-объектілердің арасындағы өзара әсер бір объектіден екіншіге арнайы хабарды жіберумен жүзеге асырылады;

-объектімен алынған хабар белгілі әрекетті орындауды талап етеді, мысалы, объектінің күйін өзгерту;

- параметрлердің бір ғана жиынтығымен орындауға қабілетті объектілер бір типті объектілер болып табылады.

Программалау тілінің көз қарасына қарай объектілер класын деректің типіндей, ол жеке объектіні осы типтің дерегіндей қарауға болады. Сонымен, объектіге бағдарланған тәсілмен программаны дайындағанда программада қолданылған объектілердің кластарының анықталуын және олардың сипаттамасын құруды, содан кейін объектілерге қажетті экземплярлардың жасалуын және олардың арасындағы өзара әсерді анықтауды болжайды.

Объектілер және кластар үшін кіру ережелері :

- Private ретінде хабарланған элементтер функция-мүшелерге, кластың өрістеріне және туынды кластардың функция-мүшелеріне кіре алады.

- Public ретінде хабарланған элементтер кез-келген функцияларға кіре алады.

- Ашық (public) базалық класс ретінде қолданған кезде, оның ашық элементтері туынды класының ашық элементі болады, ал қорғалған (protected) элементтері-туынды класының қорғалған элементтері болады.

- Жабық (рrivate) класс базалық класс ретінде қолданылған, және оның қорғалатын элементтері.

Net платформасында С# тілінде программалау технологиясын тестілеу программасын құру қосымшасымен қарастырамыз. Қосымша негізгі мына модульдерден тұрады: мұқабалық форма, тіркелу, тестілеу бөлімі, бағалау бөлімі.

Тестілеу бөліміне дейін студент немесе қолданушы жеке мәліметтерін енгізеді. Тіркелу модулінің коды:

public string[] name =new string[5];

public string fam;

public string kurs;

public string specialnost;

private void button1_Click(object sender, EventArgs e)

{name[0] = "exam_pascal.xml"; name[4] = textBox1.Text;

name[1] = textBox2.Text; name[2] = textBox3.Text;

name[3] = textBox4.Text;

Form3 f3 = new Form3(name); f3.Show(this); this.Hide(); }

private void textBox4_TextChanged(object sender, EventArgs e)

{if ((textBox1.Text != "") && (textBox2.Text != "") && (textBox3.Text != "") && (textBox4.Text != "")) button1.Enabled = true;

else button1.Enabled = false; }

Тестілеу модулінің коды:

public string[] name = new string[5]; public string[] options ={"30"};

public int sec; public int min;

public int l; RadioButton[] radioButton;

Label[] label; XDocument xdoc; DirectoryInfo di;

IEnumerable<XElement> xel;

string fpt; string fnm;

int[] test; int tv = 0;

int mode = 0; int otv; int right; int nr; int n;

public Form3(string[] args)

{InitializeComponent();

radioButton = new RadioButton[4]; label = new Label[4];

name = args; for (int i = 0; i < 4; i++)

{radioButton[i] = new System.Windows.Forms.RadioButton();

radioButton[i].Location = new System.Drawing.Point(135, 20+i*16);

radioButton[i].Name = "radioButton"+i.ToString();

radioButton[i].Size = new System.Drawing.Size(14, 13);

radioButton[i].Visible = false;

radioButton[i].Click += new System.EventHandler(this.radioButton1_Click);

radioButton[i].Parent = this;

label[i] = new System.Windows.Forms.Label(); label[i].AutoSize = true;

label[i].Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

label[i].Location = new System.Drawing.Point(155, 20 + i*16);

label[i].MaximumSize = new System.Drawing.Size(400, 0);

label[i].Name = "label" + i.ToString();

label[i].Size = new System.Drawing.Size(45, 16);

radioButton[i].Visible = false;

label[i].Parent = this;} radioButton5.Checked = true;

if (args.Length > 0)

{if (args[0].IndexOf(":") == -1)

{di = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));

fpt = di.FullName + "\\"; fnm = args[0];}

else{

fpt = args[0].Substring(0, args[0].LastIndexOf("\\") + 1);

fnm = args[0].Substring(args[0].LastIndexOf("\\") + 1);

}}else

{label1.ForeColor = Color.DarkRed;

label1.Text = "Тест файлының аты көрсетілмеген!";

mode = 2; return; }

try{

xdoc = XDocument.Load(fpt + fnm); xel = xdoc.Elements();

label1.Text = xel.Elements("info").ElementAt(0).Value;

n = xel.Elements("queries").Elements().Count();

test = new int[n];

Boolean[] b; b = new Boolean[n];

for (int i = 0; i < n; i++)

{b[i] = false;}

Random rnd = new Random();

int r;

for (int i = 0; i < n; i++)

{do r = rnd.Next(n);

while (b[r] == true);

test[i] = r; b[r] = true;}

mode = 0; tv = 0;}

catch (Exception aException)

{label1.ForeColor = Color.DarkRed; label1.Text = aException.Message;

mode = 2; return; }}

private void button1_Click(object sender, EventArgs e)

{

{switch (mode)

{case 0:

qw(test[tv]); tv++; mode = 1;

break;

case 1:

if (otv == right) nr++;

if (tv < n)

{qw(test[tv]); tv++;

}else

{for (int j = 0; j < 4; j++)

{label[j].Visible = false; radioButton[j].Visible = false;

}pictureBox1.Visible = false;

ShowResult();mode = 2; }

break;

}}}

private void qw(int i)

{ int j;

for ( j= 0; j < 4; j++)

{label[j].Visible = false; radioButton[j].Visible = false;}

radioButton5.Checked = true; label1.Text = xel.Elements("queries").Elements().ElementAt(i).Element("q").Value;

right = System.Convert.ToInt32(xel.Elements("queries").Elements().ElementAt(i).Element

("q").Attribute("right").Value);

string src = xel.Elements("queries").Elements().ElementAt(i).Element

("q").Attribute("src").Value;

if (src.Length != 0)

{try

{pictureBox1.Image = new Bitmap(fpath + src);

pictureBox1.Visible = true;

radioButton[0].Top = pictureBox1.Bottom + 16;

label[0].Top = radioButton[0].Top - 3;

}catch

{if (pictureBox1.Visible)

pictureBox1.Visible = false; radioButton[0].Top = label1.Bottom + 10;

label[0].Top = radioButton[0].Top - 3;}

}else

{pictureBox1.Visible = false; radioButton[0].Top = label1.Bottom + 10;

label[0].Top = radioButton[0].Top - 3;} j = 0;

foreach (XElement a in xel.Elements("queries").Elements().ElementAt(i).Element("as").Elements())

{label[j].Text = a.Value; label[j].Visible = true;

radioButton[j].Visible = true;

if (j != 0)

{radioButton[j].Top = label[j - 1].Bottom + 10;

label[j].Top = radioButton[j].Top - 3;

}j++;

}button1.Enabled = false; }

private void radioButton1_Click(object sender, EventArgs e)

{if ((RadioButton)sender == radioButton[0]) otv = 1;

if ((RadioButton)sender == radioButton[1]) otv = 2;

if ((RadioButton)sender == radioButton[2]) otv = 3;

if ((RadioButton)sender == radioButton[3]) otv = 4;

button1.Enabled = true;}

Тестілеу нәтижесі бөлімінің коды:

 

private void ShowResult()

{int k; int i;int p = 0;k = xel.Elements("levels").Elements().Count();

for (i = 0; i < k-1; i++)

{p = System.Convert.ToInt32(xel.Elements("levels").Elements().ElementAt

(i).Attribute("p").Value);

if (nr >= p)

break;}

label3.Text ="Всего вопросов: " + n.ToString() + "\n" +

"Правильных ответов: " + nr.ToString() + "\n" + "Оценка: " + xel.Elements("levels").Elements().ElementAt(i).Value;

label5.Text = "Aty "+name[4]; label6.Text = "Тегі "+name[1];

label2.Text = "Курс " +name[2]; label7.Text = "Мамандық" +name[3];

}

private void Form3_Load(object sender, EventArgs e)

{sec = 0; min = 0;

timer1.Enabled = true;

l = 0; }

private void updatelabel()

{label4.Text = " Время: " + min.ToString() + "мин " + sec.ToString() + "сек";

}

private void timer1_Tick(object sender, EventArgs e)

{if (sec == 60) { sec = 0; min++; }

sec++; if (min == 30)

{timer1.Enabled = false; Form4 form4 = new Form4();

form4.Show(this); this.Hide();}

else updatelabel(); }

}

Қорыта айтқанда, Net платформасында С# тілінде программалау технологиясының ерекшелігі - кез келген программаны, яғни Windows- қосымша, Web-қосымша, мәліметтер қорымен жұмыс істеуге арналған қосымшаларды құру мүмкіндігі. Екінші ерекшелігі, файлдар мен программаларды қорғау деңгейінің жоғарылығы: басқарушы кодтарда программаның орындалу тәсілі және файлдық жүйе туралы ақпарат болмайды. Бұл технологияны меңгерген студент немесе қолданушы жоғары деңгейлі қолданбалы программалар құрады.

 

Әдебиеттер:

 

  1. Фаронов В. Создание приложений с помощью C#. -М.:Эксмо, 2008,576c.

  2. Абрамян М. Visual C# на примерах. -БХБ-Петербург, 2008 ,375c.

  3. Культин Н. Microsoft Visual C# в задачах и примерах. –CПб.: БХБ-Петербург, 2009 ,320c.