Лекция 12. Файлы проекта располагаются в одном каталоге (папке) P

...

. Файлы проекта располагаются в одном каталоге (папке) P.

16.7. Сохранение проекта – приложения под Windows

Выполняется командой Файл \ Сохранить все….

16.8. Запуск и компиляция приложения

Сборка проекта выполняется командой Отладка/Начать отладку

При этом образуются исполняемые и объектные файлы, перекомпилируются все модули, входящие в проект.

Решение, находящееся, например, в папке P, включает:

Решение P Demo Properties Ссылки bin Debug Demo.exe Demo.pdb Demo.vshost.exe Release obj Решение Проект Свойства Ссылки Двоичные файлы Файлы отладки Управляемый исполняемый файл База данных для компилятора Служебный файл Файлы выпуска Объектные файлы

Исполняемые (bin) и объектные (obj) файлы образуются при компиляции (построении). Возможны два режима решения:

Команда Построение => Построить решение. Построение в режиме отладки: в компонуемые файлы включаются символы отладки и режим оптимизации исключается. Это может увеличить размеры файлов. Файлы размещаются в папках Debug.

Команда Построение => Перестроить решение (в версии Express отсутствует). Построение отлаженного проекта, когда в компонуемые файлы символы отладки не включаются и компилятор использует режим оптимизации кода (например, исключает не использованные переменные). Это может уменьшить размеры файлов. Файлы размещаются в папках Release.

16.9. Шаблон кода:

Стандартные модули (по умолчанию)

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; //с формой под Windows

namespace WindowsFormsApplication1 //пространство имен приложения1

{

public partial class Form1: Form //объявление класса Form1

{

public Form1() // объявление объекта Form1

{

InitializeComponent(); // объявление компонентов

} // на Form1

}

}

Интерфейс Windows.Forms состоит из сотен типов, которые объединены в пространстве имен namespace.

16.10. Разработка приложения

Состоит из двух этапов:

- Создание интерфейса приложения,

- Определение функциональности приложения с написанием адекватных процедур.

Интерфейс приложения определяет способ взаимодействия пользователя и приложения, т.е. внешний вид формы при выполнении приложения и то, каким способом пользователь управляет приложением.

Для создания интерфейса необходимо:

- выбрать нужные объекты на Панели элементов;

- определить внешний вид и функциональные возможности компонентов;

- используя Конструктора Формы, расположить компоненты на форме.

Функциональность приложения определяется процедурами, которые выполняются при возникновении определенных событий, происходящих при действиях пользователя с элементами формы.

Для обеспечения функциональности приложения необходимо:

- задать в Окне Свойства значения свойств и процедур обработки событий;

- написать программный код для заданных процедур обработки событий.

16.11. Простейшее приложение

Представляет собой заготовку, обеспечивающую все необходимое для приложения. Это форма, для которой уже созданы файлы с описанием формы и шаблоном кода.

Форма отображается при первом запуске ИСР и содержит основные элементы окна Windows:

- заголовок Form1,

- кнопки минимизации, максимизации и закрытия окна, изменения размеров окна и кнопку вызова системного меню.

При создании приложений на форму помещаются компоненты, для которых устанавливаются свойства и создаются обработчики событий.

К простейшему приложению разработчик может добавлять другие формы (Form2…). Например, графический интерфейс с выводом двух функций Sin(x) и Cos(x):

 
 


Form1

Form2

16.12. Создание интерфейса приложения

Интерфейс приложения составляют компоненты.

Свойства компонента это атрибуты, определяющие способ отображения и функционирования компонент.

Для изменения значения свойств с помощью Окна элементов необходимо:

- щелкнуть мышью по его имени в левой колонке страницы Свойство;

- установить значение в соответствующей ячейке правой колонки:

- нажать клавишу <Enter>,

С П И С О К
Типы свойств:

- простые – это те, значения которых являются числами или строками. Например, Text, Name, Left, Top, Width, Height;

- перечисляемые – это те, которые могут принимать значения из предложенного набора (списка). Например, тип Bool принимает значение True или False или ForeColor список цветов

- вложенные – это те, которые поддерживают вложенные значения (или объекты). Имеются два вида: множества (…) Например, Items и комбинированные значения (+)..

Изменять свойства объектам можно двумя способами:

1) С помощью Окна Свойства (в режиме проектирования приложения – задаются стартовые значения свойств компонентов);

2) Программно – путем создания адекватных процедур с соответствующими строками кода (переопределение свойств в процессе выполнения).

При выполнении приложения свойства компонентов можно изменять с помощью операторов присваивания.

Например,

· изменение программно надписи кнопки Button1:

button1.Text="Решить";//надпись кнопки

· изменение размеров многострочного редактора richTextBox 1:

richTextBox 1. Height = 100; // высота

richTextBox 1. Width = 150; // ширина

· изменение текста и цвета шрифта в метке label1:

label1.Text = "Студент"; //текст со словом Студент

label1.ForeColor=Color.Red; //цвет шрифта красный

 
 
Объект.Свойство = Значение свойства


16.13. Определение функциональности приложения

Событие – это то, что происходит во время работы программы. В C# каждому событию присваивается имя.

Реакция окна на разного рода действия пользователя определяет функциональность приложения.

Обработчик событий – определяет действие, которое можно поручить выделенному компоненту. Каждый компонент имеет набор стандартных обработчиков событий, отображающихся в Окне Свойство на вкладке События.

Чтобы при нажатии на кнопке "Закрыть" кнопка реагировала на событие завершения работы, необходимо создать процедуру обработки события, которая будет вызываться при возникновении данного события (например, OnClick).

1) выделить на форме компонент;

2) перейти на страницу событий Окна Свойства;

3) сделать двойной щелчок в области значения события, например OnClick, (ИСР автоматически создаст в модуле формы заготовку процедуры-обработчика).

4) в редакторе кода, вместе, где установится курсор написать код, который будет выполняться при нажатии кнопки Button1, т.е набрать строку Close();

При наборе кода включается интерактивный подсказчик, который лучше использовать для избегания ошибок в наборе слов.

Все остальное среда создает автоматически.

Обработчики щелчка по объектам, например Button1Click, можно создать и быстрее, путем двойного щелчка по объекту, находящемуся на Форме.

private void button1_Click(object sender, EventArgs e)

Слова

Private – метод закрыт и предназначен для внутреннего использования в классе

void – начало метода – процедура,

Button1_Click – собственно имя процедуры,

() – список параметров.

Для удаления процедуры-обработчика достаточно удалить заготовку и код, который программист вносил в нее самостоятельно. После этого при сохранении или компиляции модуля обработчик будет удален автоматически из всех файлов проекта.

Пример. Создать проект для изучения некоторых простых свойств объектов.

Последовательность действий:

1) Создаем Приложение Windows Forms.

2) Устанавливаем на форму нужные компоненты

3) Устанавливаем стартовые значения объектам, например Кнопке надпись Задача.

4) Создаем обработчик события Form1_Activated – (активизация формы) при исполнении которого свойства объектов меняются программно на иные.

5) Отлаживает проект путем устранения синтаксических ошибок.

6) Проверяет полученные результаты на соответствие поставленной задачи.

3. Изменяет значения Text кнопки button1 на надпись Пример

4. Создаем обработчик события Form1_Activated для выделенной Формы Form1

Записываем код процедуры Form1_Activated.

4. Создаем обработчик события button1_Click для выделенной кнопки button1

Записываем код процедуры button1_Click. Аналогично для button2.

Листинг программы:

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 WindowsFormsApplication1

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Activated(object sender, EventArgs e)

{

button1.Text = "Задача"; // надпись на кнопке

richTextBox1.Height = 100; // высота объекта

richTextBox1.Width = 150; // ширина объекта

label1.ForeColor=Color.Red; // цвет шрифта красный

label1.Text = "Студент"; // вывод текста

label1.ForeColor=Color.Red; // цвет шрифта красный

richTextBox1.Text = "Мы изучаем C#";// вывод текста

}

private void button1_Click(object sender, EventArgs e)

{

label1.Text = "Студент ПГУТИ"; // вывод текста

richTextBox1.ForeColor = Color.Blue; // цвет шрифта синий

richTextBox1.Text = "Мы активно работаем"; //вывод текста

}

private void button2_Click(object sender, EventArgs e)

{

Close(); // закрытие формы

}

}

}

Результат исполнения методов: Активизация формы и Щелчок по кнопке «Задача»

16.14. Отладка

Тестирование – процесс проверки работоспособности программы, в процессе которой выявляются разного рода ошибки.

Процесс поиска и устранения ошибок называется отладкой.

Классификация ошибок

Программ без ошибок не бывает. Ошибки допускает любой программист: и начинающий, и имеющий тридцатилетний опыт. Компилятор генерирует исполняемую программу лишь в том случае, если исходный текст не содержит синтаксических ошибок.

В процессе выполнения программы возникают ошибки следующих видов:

· Синтаксические (ошибки времени компиляции),

· Логические (алгоритмические – ошибочные рассуждения),

· Динамические (ошибки времени выполнения) – исключительные ситуации.

Синтаксические ошибки возникают при нарушении синтаксиса языка. Они выявляются и устраняются при компиляции программы. Сообщения о найденных ошибках отображаются в Окне Списка ошибок. Например,

При обнаружении в программе неточностей, которые не являются ошибками, компилятор выводит подсказки и предупреждения.

Логические ошибки являются следствием реализации неправильного алгоритма и проявляются при выполнении программы. Сообщения компилятором не выдаются, но программа работает не корректно и выдаёт не правильные результаты.

Например, два выражения y=sin(x)/x+5 и y=sin(x)/(x+5) дадут разные результаты.

Поэтому при получении результата его надо анализировать. Составляются тесты и отлаживаются программы на тех значениях входных данных, результат при которых легко проверить путем подсчета его «вручную».

Например, при х=0 sin(x)= 0 и

результат первого выражения y=sin(x)/x+5 даст y=1+ 5 = 6,

а второго выражения y=sin(x)/(x+5) даст y=0/(0+5)=0 / 5 = 0

Динамические ошибки возникают при выполнении программы и являются следствием неправильной работы операторов, подпрограмм, методов программы и операционной системы.

Исключительная ситуация (exception) представляет собой нарушение условий выполнения программы, вызывающее прерывание или полное прекращение ее работы.

Например, если пользователь в редактор textBox2 ввел букву, вместо цифры, то ИСР сгенерирует окно ошибки и проект будет закрыт.

Чтобы этого не произошло, вводим свой обработчик исключительных ситуаций и в окне появляется надпись об ошибочном вводе данных.

Например:

После внесения изменения в textBox2 и нажатия кнопки «Вычислить» можно продолжить выполнение программы или прервать ее выполнение. Обработка исключительной ситуации состоит в нейтрализации динамической ошибки, вызвавшей ее.

17.0. Ввод и вывод данных в Windows-Приложениях

В оконном приложении все данные, вводятся в компоненты с клавиатуры, и они воспринимаются программой в строковом виде. Поэтому, прежде чем проводить арифметические операции их необходимо сформировать, т.е. преобразовать в числовой эквивалент. Для этого используются функции преобразования:

int.Parse(s) Целое, изображением которого является строка s.

double.Parse(s) Вещественное, изображением которого является строка.

После расчёта полученный результат выводится в компоненты через их свойства «text» поэтому числовые значения необходимо преобразовать в их строковые отображения. Для этого используются следующие методы:

S.ToString() Строка, являющаяся изображением вещественного / целого числа s, в соответствии с заданным форматом.

String.Format(s,x) Строка, являющаяся изображением вещественного числа x с заданным форматированием s.

Строка формата задается методу String.Format в следующем виде:

{ N [, M ] [: formatString ] }

Здесь число N задает номер преобразуемого аргумента, передаваемого методу String.Format в качестве параметра. Необязательное число M задает ширину области текстовой строки (в символах), внутри которой необходимо поместить цифры преобразуемого значения. Если это число отрицательное, цифры числа выравниваются по левой границе данной области, а если положительное – по правой границе области.

Например,

int а = int.Parse(textBox1.Text); //преобразование текста-числа, введенного

// в textBox1 в целое число

double b = double.Parse(textBox1.Text); //преобразование текста-числа, введенного

// в textBox1 в вещественное число

label3.Text = S.ToString()+ " руб."; // преобразование числа S в строку

label1.Text =String.Format(“{0,5:d}”,x); преобразование целого числа x в строку, где d – количество (здесь 5) целых чисел в изображении числа в компоненте label1.Text.

label1.Text =String.Format(“{0:f 2}”,x); // преобразование вещественного числа x в строку c форматным выводом символов в компонент label1 через его свойство Text,

где 0 – индекс переменной, f – мантисса c 2 символами после запятой.

label1.Text =String.Format(“{0,8:f 3}”,x); // преобразование числа x в строку c форматным выводом символов в компонент label1, где 0 – индекс переменной, 8 – количество выводимых символов (включая зпт.), f – мантисса c 3 символами после зпт.

label1.Text =String.Format(“{0}”,x); // форматирование по умолчанию.

17.1 Ввод из поля редактирования и вывод в метку, и окно сообщения

В качестве поля редактирования используется компонент textBox (однострочный текстовой контейнер). Ввод данных осуществляется через свойство text.

Пример расчета суммы оплаты за купленные детали, с выводом результата в метку label3. Вывод данных осуществляется то же через свойство text.

textBox2
textBox1

private void button1_Click(object sender, EventArgs e)

{

try //охраняемый блок

{

double cena = double.Parse(textBox1.Text); // преобразование в вещественное

int kol = int.Parse(textBox2.Text); // преобразование в целое число

double S = cena * kol; // расчет стоимости

label3.Text = "S= " + String.Format("{0,8:f2}", S) + " руб."; //вывод результата

}

catch //перехватчик исключения и формирование ошибки

{ // Вывод в метку

label3.Text = " Нельзя вводить буквы ";

// Вывод в окно сообщения MessageBox

MessageBox.Show("Надо вводить цифры");

}

}

17.2 Окно сообщения

Окно сообщения используется для привлечения внимания пользователя.

Программа может проинформировать об ошибке в исходных данных или запросить подтверждение выполнения необратимой операции, например удаление файла или вычисления при не корректных данных.

Функция MessageBox() выводит на экран окно с текстом и командной кнопкой ОК.

Кроме того, она позволяет поместить в окно с сообщением:

- один из стандартных значков (х,?,!, i),

- количество и тип командных кнопок,

- определить, какую из кнопок нажал пользователь.

Формат вызова:

MessageBox.Show (Сообщение, Заголовок, Кнопки, Тип),

где Сообщение – текст, который будет выведен в окне;

Заголовок – текст в строке заголовка окна;

Кнопки – список кнопок, отображаемых в окне сообщения;

Тип – тип сообщения (информация, предупреждение, ошибка – каждому соответствует свой значок) указывающий какой из значков будет отображен в окне

Тип сообщения задается именной константой, приведенной в таблице.

Разные типы сообщения имеют разные значки.

Таблица

Константа Тип сообщения Значок
Warning Error Information Question Внимание Ошибка Информация Подтверждение ! х i ?

Пример1: MessageBox.Show("Надо вводить цифры"); //1 аргумент без значка

Пример2: MessageBox.Show("Функция не определена","Вычисления"); // 2 аргумента

Пример3:

MessageBox.Show("Сумма к оплате: "+" S= " + String.Format("{0,8:f2}", S) + " руб.", "Стоимость "); // 2 аргумента

Сообщение получено путем объединения нескольких строк:

"Сумма к оплате: "+ " S= " + String.Format("{0,8:f2}", S) + " руб."

Заголовок окна Стоимость.

Пример4: MessageBox.Show("Функция не определена", "Вычисления", MessageBoxButtons.OK, MessageBoxIcon.Information); // 4 аргумента

Пример расчета покупки деталей:

private void button1_Click(object sender, EventArgs e)

{

try //охраняемый блок

{

double cena = double.Parse(textBox1.Text); // преобразование в вещественное

int kol = int.Parse(textBox2.Text); // преобразование в целое число

double S = cena * kol; // расчет стоимости

DialogResult rsl = MessageBox.Show("Рассчитать сумму к оплате?: ", "Оплата", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (rsl == DialogResult.Yes) // подтверждение

{

label1.Text = "S= " + String.Format("{0,8:f2}", S) + " руб.";

}

}

catch //перехватчик исключения

{

MessageBox.Show("Надо вводить цифры ", "Ошибочный ввод данных", MessageBoxButtons.OK, MessageBoxIcon.Warning); // внимание

}

}

18.0 Процедуры и функции

При написании программ в C# программист разрабатывает процедуры обработки событий, вызов которых берет на себя ИСП.

Пользователь может разработать свои собственные процедуры и функции, которые представляют собой последовательность инструкций, предназначенных для выполнения некоторой работы. Чтобы ее выполнить, надо вызвать подпрограмму.

18.1 Структура процедуры

1. Заголовок

2. Раздел объявления типов, локальных переменных

3. Раздел исполнения

Пример вычисления стоимости покупки товара со скидкой, если стоимость покупки составит более 500 рублей и без нее, если стоимость покупки – менее 500 рублей с использованием процедуры Summa.

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 WindowsFormsApplication1

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

}

// Объявление процедуры Summa

public void Summa(out double S, out double Skidka,

double C, int K)

{

Skidka = 0;

S = C * K;

DialogResult rsl = MessageBox.Show("Рассчитать сумму к оплате?: ", "Оплата", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (rsl == DialogResult.Yes)

{

MessageBox.Show("Сумма = " + String.Format("{0,8:f2}", S) + " руб.", "Оплата без скидки", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

if (S > 500)

{

Skidka = S * 0.8;

MessageBox.Show("Сумма со скидкой = " + String.Format("{0,8:f2}", Skidka) + " руб.", "Оплата со скидкой", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

private void button1_Click(object sender, EventArgs e)

{

try //охраняемый блок

{

double S, Skidka;

double cena = double.Parse(textBox1.Text);

int kol = int.Parse(textBox2.Text);

Summa(out S, out Skidka, cena, kol);

label1.Text = "Сумма = " + String.Format("{0,8:f2}", S) + " руб.";

label2.Text = "Скидка = " + String.Format("{0,8:f2}", Skidka) + " руб.";

}

catch //перехватчик исключения и формирование ошибки

{

MessageBox.Show("Надо вводить цифры ", "Ошибочный ввод данных", MessageBoxButtons.OK, MessageBoxIcon.Error);

} // ошибка

}

}

}

Интерфейс проекта в режиме запуска

1. Сумма к оплате < 500 рублей и скидка не предоставляется:

2. Сумма к оплате > 500 рублей и предоставляется скидка:

18.2 Структура функции

С именем функции связано значение, поэтому имя функции можно использовать в выражении. (Имя функции может входить как операнд в выражение).

1. Заголовок

2. Раздел объявления типов, локальных переменных

3. Раздел исполнения

Пример вычисления корней квадратного уравнения

a*x 2 + b*x + c =0

Рассмотрим процедуру обработки события нажатия кнопки Button1, в которой вызывается функция D – расчета дискриминанта квадратного уравнения.

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 WindowsFormsApplication1

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

}

public double d (double p1, double p2, double p3) // функция дискриминант с параметрами p1, p2, p3

{

return p2*p2 - 4*p1*p3;

}

private void button1_Click(object sender, EventArgs e)

{

double x1,x2;

double a = double.Parse(textBox1.Text);

double b = double.Parse(textBox2.Text);

double c = double.Parse(textBox2.Text);

if (a == 0)

MessageBox.Show("Коэффициент при второй степени неизвестного х равен 0 ", "Уравнение не квадратное!", MessageBoxButtons.OK, MessageBoxIcon.Error);

else

{

if (d(a, b, c) > 0)

{

DialogResult rsl = MessageBox.Show("Корни расчитать?: ", "Имеются действительные корни!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (rsl == DialogResult.Yes)

x1 = (-b + Math.Sqrt(d(a, b, c))) / 2 * a;

x2 = (-b - Math.Sqrt(d(a, b, c))) / 2 * a;

label1.Text = "Корни уравнения: x1= " + String.Format("{0,6:f3}", x1) +

" x2= " + String.Format("{0,6:f3}", x2);

}

else

{

MessageBox.Show("Уравнение не имеет действительных корней! ", "Дискриминант < 0", MessageBoxButtons.OK, MessageBoxIcon.Warning);

label1.Text = "Ответ:";

}

}

}

private void button2_Click(object sender, EventArgs e) // очистка объектов

{

textBox1.Clear();

textBox2.Clear();

textBox3.Clear();

label1.Text = " ";

}

private void button3_Click(object sender, EventArgs e) // завершение работы

{

Application.Exit();

}

}

}

Интерфейс проекта в режиме запуска

1. Случай, когда при вводе данных допущена ошибка вида: а=0

2. Случай, когда при вводе данных d>0

В случае вывода данных с новой строки используется символ \n. Например:

label1.Text = "Корни уравнения:\n x1= " + String.Format("{0,6:f3}", x1) + "\n x2= " + String.Format("{0,6:f3}", x2); даст результат:

3. Случай, когда при вводе данных d< 0

4. Работа кнопки «Очистить»

19. Модули

Повторное использование функций и процедур, оформленных в виде отдельных файлов, называется модулем.

Программа состоит из главной программы и (возможно) нескольких модулей.

Применение модулей позволяет:

- использовать метод бригадного программирования,

- сократить объем основной программы,

- облегчить процесс отладки,

- отлаживать программу по частям,

- при изменении модуля перекомпилируется только он, а не вся программа.

По своей структуре Модуль = Программа. Может храниться и компилироваться отдельно. Имеет определенное назначение, но не используется автономно, а только в составе программы. Модуль может использоваться другими программами или модулями. Чтобы использовать средства модуля, его необходимо подключить, указав имя этого модуля в разделе using

Компилятор распознает модуль по его заголовку, и после компиляции создает объектный код.

19.1 Свойства модуля

Модуль имеет:

- один вход и один выход – на входе программный модуль получает определенный набор исходных данных, выполняет обработку данных и возвращает один набор результатных данных;

- функциональную завершенность – модуль выполняет перечень операций для реализации каждой отдельной функции в полном составе, достаточных для завершения начатой обработки;

- логическую независимость – результат работы модуля зависит только от исходных данных, и не зависит от работы других модулей;

- слабые информационные связи с другими программными модулями – обмен информации между модулями должен быть по возможности минимизирован;

- обозримый по размеру и сложности программный элемент.

Приложения имеют модульную структуру. Модуль состоит из:

Спецификации – правила использования модуля и

Тела – способа реализации процесса обработки.

При составлении алгоритма необходимо учитывать:

· каждый модуль вызывается на выполнение вышестоящим модулем и, закончив работу, возвращает управление вызвавшему его модулю;

· принятие основных решений в алгоритме выносится на максимально «высокий» по иерархии уровень;

· для использования одной и той же функции в разных местах алгоритма создается один модуль, который вызывается на выполнение по мере необходимости.

 
 


Функция 1 и Функция 2 выполняются с помощью одного и того же Модуля1.

Функция 3 реализуется одним программным Модулем v.

Функция 4 – в виде последовательности выполнения Модулей (2, 3... p).

Функция 5 – с помощью иерархии связанных модулей.

19.1. Структура модуля

Модуль имеет следующую структуру:

- Заголовок (имямодуля),

- Интерфейс (описание)

- Реализация (действия),

- Конец (завершение модуля).

Имя модуля служит для его связи с другими модулями и основной программой. Например: using System; // Заголовок

В описательной части содержится объявление всех глобальных объектов модуля (типов, констант, переменных и методов), которые должны стать доступными основной программе и/или другим модулям.

В исполняемой части содержится описания методов, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные, если они используются в интерфейсе.

Окончание завершает модуль.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow