Методи (1)

Цел на урока: Да пишем и използваме методи в наша програма.

В професионалното програмиране, каквото имаме при всяка софтуерна компания се използват методи. Основните ползи от използването на методи са, че можем да преизползваме кода, т.е. един код да го използваме на много места в нашата програма, вместо да го Copy&Paste. Друго предимство е, че кода е по-подреден – по-лесно можем да намерим кода, който търсим, защото в софтуерните компании има хиляди редове код и в такива ситуации е трудно да намерим къде има грешка.

- “Разделяй и владей” – това е една основна техника в програмирането, която взаимства името си от древните Римляни. Техниката се състои в разбиване на дадена задачи на подзадачи. Например, ако искаме да напишем програма за игра на морски шах, можем да разбием задачата на следните подзадачи – 1) съставяне на поле (3Х3); 2) поставяне на ‘Х’ или ‘О’ – трябва да се редуват; 3) проверка дали имаме победител или играта е завършила на равно. След това реализираме всяка от подзадачите чрез метод и като ги сглобим получаваме желаната програма.

1. Определение - съставна част от програма, която решава даден проблем и може да приема параметри

2. Ползи от методите

а) Преизползване на кода – пишем един код, който да можем да използваме след това бързо и лесно колкото пъти пожелаем. Така, ако ни се наложи да променяме кода го променяме само на 1 място, независимо колко пъти сме го използвали и това указва влияние на цялата програма.

Copy & paste          Copy + Paste

б) По-добро структуриране на кода – в големите проекти е задължително да разделим задачата на подзадачи, за да можем бързо и лесно да се ориентираме коя част от кода за какво отговаря.  Всяка подзадача реализираме чрез отделен метод и ако решим да променяме само тази подзадача променяме само дадения метод.

Well structured code

 3. Използване на методи

а) деклариране – обявяваме, че ще използваме метода, като му даваме име и списък с параметри в скоби.

[Public] Sub <method_name> ([parameters_list])

б) имплементиране – реализира логиката на метода. Тук пишем кода на метода.

в) извикване - стартиране на кода на метода (имплементацията) за конкретни параметри. Извикването става чрез името на метода и параметри, за които искаме да се изпълни този метод.

4. Параметри

Предава се информация между метод и извикващата я програмна част.

а) формални - използват се при дефинирането на подпрограмата. Въвеждат се в скобите при декларирането на метода чрез ключовата дума ByVal (от By Value), трябва да имат тип. И след това се използват в тялото на метода.

Formal parameter - Baking dish

Ако приемем, че кухненският уред печка е метод, който опича всичко което му сложим и приема като параметър една тава. Тавата в случая е като формален параметър – тя задава типа и формата, която можем да изпичаме. По същия начин параметрите имат тип – Integer, String, Double и тн. (виж примерната задача по-долу).

б) фактически – използват се при извикването на подпрограмата за изпълнение. Целта им е да определят за какви конкретни стойности искаме да изпълним метода.

Real parameters - Pizza    Real parameters - Banitsa    Real parameters - Bean

Ако продължим примера с тавата от горе – фактическите параметри представляват конкретни стойности – пица, баница, манджа, който сме сложили в тавата. Това, което прави метода печка е да изпече всяка конкретна стойност на своя параметър тава, който се постави в нея.

Scholarship - final result

Как да пишем методи? Тялото на един метод се различава от програмите, които до момента сме писали единствено по това, че трябва да използваме параметрите на метода (ако има такива). Т.е. първия въпрос, който трябва да си зададем при писане на метод е: “Какви параметри трябва да има моя метод?”. Нека разгледаме следната задача:

Искаме да отпечатаме всички числа от 1 до 20 в етикет1.

Example1 - without method

Сега искаме да направим решим тази задача с метод. И тъй като целта на метода е да бъде универсален и да можем да го използваме много пъти, а не само за числата от 1 до 20. Ще искаме да направим метод, който отпечатва числата от А до В и то не в етикет1, а в коя да е контрола – ще я означим с параметър С. Можем да вземем горната програма и да направим следните промени:

1 -> А

20 -> В

Label1 -> C

И така получаваме следния метод:

Example1 - with method

След това можем да направим следните извиквания на метода:

1) В Бутон1: PrintNumbers(1, 20, Label1) – това ще отпечата числата от 1 до 20 в Label1

2) В Бутон2: PrintNumbers(5, 27, TextBox2) – това ще отпечата числата от 5 до 27 в TextBox2

Example1 - result

Примерна задача: Искаме да направим електронен дневник на училище, който по въведен среден успех на ученик да пресмята дали трябва да получава стипендия или не (при успех > 5.00, ученикът получава стипендия). Първо ще реализираме задачата за 3 ученика.

Решение:

Първо разполагаме върху формата 6 текстови полета, 3 етикета и 1 бутон.

Започваме с деклариране на метода – това се прави най-горе точно след Public Class Form1,  извън всякакви други събития.

За този метод ще ни трябват 2 параметъра – среден успех на ученик и контрола, в която искаме да отпечатваме резултата, защото за ученик 1, искаме да отпечатваме резултата в етикет 1, за ученик 2 – в етикет 2, за ученик 3 – в етикет 3 и тн.

Public Sub Scholarship(ByVal score As Double, ByVal control As Object)

Тук променливата control е от тип Object, който е универсален тип променлива и може да съхранява всякакви стойности, дори и на контроли. В този случай го използваме за контролата, в която ще отпечатваме резултат.

След това започваме с имплементацията на метода, която се пише вътре в тялото на метода, между Public Sub … и End Sub:

Dim message As String
If score > 5.0 Then
    message = “Get scholarship”
Else
    message = “No scholarship”
End If
control.text = message

Използваме помощна променлива message за съхраняване на резултат – дали ученикът получава стипендия или не.

Тук обръщаме внимания, че за отпечатване на резултата използваме control.text, което за ученик 1 ще бъде Label1.Text, за ученик 2 – Label2.Text, за ученик 3 - Label3.Text. Това ще видим по-късно при извикването на метода.

След като сме реализирали метода трябва да го извикаме. Внимание – Ако не извикаме метода, кода в него няма да се изпълни и нищо няма да се случи в нашата програма. Извикването става при настъпване на някое събитие – в нашия случай при натискаме на бутон:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Scholarship(TextBox2.Text, Label1)
    Scholarship(TextBox4.Text, Label2)
    Scholarship(TextBox6.Text, Label3)
End Sub

В момента на извикване на метода Scholarship(TextBox2.Text, Label1) формалните параметри на метода – score control автоматично приемат стойностите на фактическите параметри, с които сме извикали метода - TextBox2.Text, Label1. Т.е. score = Textbox2.Text, control = Label1. И метода се изпълнява за тези стойности – на всякъде в метода, където пише score го заместваме с Textbox2.Text и навсякъде, където пише control го заместваме с Label1.

Следва цялото решение на програмата:

Scholarship - solution

Задачи за упражнение:

1. Да се напише метод, който по въведена страна – отпечатва лицето на квадрат. Да се извика програмата за 3 различни квадрата, чиято страна се въвежда от потребителя.

1.* Променете програмата, така че да показва обиколката на квадрат. При въведена < 0 – да изписва съобщение за грешка.

2. Да се напише метод, който по въведени име и ЕГН, намира възрастта и отпечатва на екрана информация в следния формат: Name: Penka, Age: 18. (Ползвайте метода: DateDiff (interval, date1, date2)).

3. Да се напише метод, който по въведени 3 числа намира от отпечатва най-голямото от тях.

4. Да се напише метод, който движи като анимация контрола с определена скорост в определена посока. Да се направят извиквания на метода за различна контрола, посока (хоризонтала/вертикала) и скорост.

5*. Всяка задача от предишните уроци може да се направи с метод и след това да се извика с подходящи параметри.

Comments are closed.