Файл: Варианты построения интерфейса программ: особенности и эволюция (Понятия и классификация языков программирования).pdf
Добавлен: 30.03.2023
Просмотров: 290
Скачиваний: 2
СОДЕРЖАНИЕ
1. ПОНЯТИЯ О ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
1.1. Понятия и классификация языков программирования
1.2. Язык С++, среда разработки C++ Builder
2. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ. ПРИМЕНЕНИЕ ПОЛЬЗОВАТЕЛЬСКИХ МЕНЮ
2.1. Основы модульного программирования в C++
2.2. Принципы создания пользовательского интерфейса
3. ПРАКТИЧЕСКОЕ ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ И СОЗДАНИЕ ИНТЕРФЕЙСА В С++ BUILDER
3.1. Проектирование функций в C++ Builder
3.2. Создание меню в С++ Builder
3.3. Разработка пользовательского интерфейса в консольных приложениях
Также рассмотрены все основные понятия популярного языка программирования C++, среды интегрированный разработки программных продуктов C++ Builder.
2. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ. ПРИМЕНЕНИЕ ПОЛЬЗОВАТЕЛЬСКИХ МЕНЮ
2.1. Основы модульного программирования в C++
Когда программа использует большой размер и становится сложной для восприятия, есть резон разделять ее на несколько небольших логических по содержанию функций, из которых каждая выполнять будет свою определенную задачу.[20]
В результате программы будут более структурированными и легкими для понимания.
Кроме того, при разработке функций не требуется создания одинаковых фрагментов кода.
Непосредственное разделение программы на несколько функций – это базовый принцип для структурного программирования.
Функция – это специальная именуемая независимая часть программного продукта, что может многократно вызываться из другой части программного продукта, манипулировать информацией и выполнять возвращение полученных результатов.
Все функции имеют также собственное имя, по которому осуществляется ее вызов.
В программировании различают 2 виды функций:
– встроенные стандартные функции (sin(), sqrt (), …);
– функции, что создаются пользователями для собственных потребностей. [18]
Создаваемая функция в программе должна быть объявленной и определенной.
Непосредственное объявление функции должно быть описано в программе раньше за ее непосредственное использование.
Определение может находиться в самых разных местах программы, кроме тела других функций. [20]
Объявление функции содержит также прототип и имеет такую форму:
<тип_результата> <имя > (<список аргументов и типов данных>)
Результат возвращается при помощи оператора return. Прототип для функции также может находиться в программе и непосредственно в заголовочных файлах.
Также, кроме объявления, все спроектированные функции должны иметь свое определение.
Определение функции содержит в себе тело функции – команды, что выполняет непосредственно функция, и команды для возврата результата (в С++ команда return) [1]:
<тип_функции> <имя> (<список_параметров>)
{
<тело >
return <результат>
}
Для определения, к примеру, среднего значения 2-х чисел, определение подпрограммы sr будет таким: [6]
float sr(float a1, float b1)
{
float s;
s = (a1 + b1)/2;
return s;
}
Приведенная функция имеет возможность вычислить среднеарифметическое для двух действительных чисел a1, b1 и в точку вызова передать его значение.
При этом, в случае, в котором определение функции размещается в программе ранее точки для вызова, писать отдельно объявления и саму реализацию функции необходимости нет, объявление функции можно также избегать. [6]
Если функции выполняют при этом вычисления и действия, не требующие возвращение результатов, то их тип указывают как void (пустой тип).
Для таких функций может отсутствовать оператор return или не иметь значения, которое возвращается.
Самым основным примером таких функций считаются отзывы событий в C++ Builder:
void __fastcall TForm1 :: Buton1Click (TObject * Sender)
{
}
В ниже представлено на примере создание собственной функции для вычисления и поиска наибольшего с 3 действительных чисел, вывод результатов вычислений с помощью оператора return:
void m3(float x_1, float y_1, float z_1)
{
if (x_1> y_1 && x_1> z_1)
cout << x_1;
else
if (y_1> x_1 && y_1> z_1)
cout << y_1;
else
cout << z_1;
}
Выполнение функций реализуется в случае, когда в коде программы может быть встречен оператор вызова, то есть имя функции с четко определенными параметрами.
При этом формальные параметры последовательно принимают значения фактических.
Важными правилами являются количество, порядок записи, соответствие разных типов аргументов, иначе это все может приводить непосредственно к серии ошибок.
Если же функции объявлены с самым разным типом данных, кроме типа void, то при вызове ее нужно присваивать значение переменной аналогичного типа, что и функция. [16]
Например, функцию sr() можно вызвать:
int a_1 = 5, x_1 = 2, y_1 = 3, z_1, s_1, s_2;
1) z_1 = sr (5, 4); // Z_1 = 4.5
2) s_1 = sr (a1, 11); // S_1 = 8
3) s_2 = sr (x1, y1) // S_2 = -0.5
Рекурсивной называется функция, выполняющая вызов самой себя. Указанная рекурсия считается прямой.
Также существует и называемая косвенная рекурсия, для которой две или же больше функций вызывают несколько раз саму себя.
Понятие рекурсии иллюстрируется матрешками. Это также значит, что понятие рекурсии может свести сложную задачу к реализации ее уменьшенных копий. [18]
Последовательно уменьшая размерность указанных задач, а рекурсия в конце концов приводит к известному решению, также применяя который можно получать легко решение начальных задач.
Более классические примеры реализации рекурсии находятся в математике, поскольку рекуррентные соотношения помогают определять элемент последовательности. К примеру, рекурсивное соотношение в значениях Фибоначчи:
F (m) = F (m-1) + F (m-2),
тут F (0) = F (1) = 1.
Если же провести рассмотрение указанной последовательности, начиная с младших к старшим компонентам, способ ее построения задасться циклическим алгоритмом, но в случае наоборот – с заданного n, а методика определения через предыдущие будет рекурсивной.[10]
Очевидно, что рекурсия не может являться безусловной, ведь в указанном случае она была бы бесконечной. Рекурсия внутри имеет условие завершения своего алгоритма, по которому каждый следующий шаг уже не будет выполняться.
Рекурсивные функции на первый взгляд лишь похожи на классические куски программ.
Внешне создается впечатление, что текст функции воспроизводится каждый раз.
На самом деле эффект воспроизводится в ПК. Но копируется вовсе не весь при этом текст из функции, а некоторые ее части, связанные с локальными данными (фактические и формальные параметры, локальные значения, точка поворота). [19]
Алгоритмическая часть программы (разные операторы, выражения) для рекурсивных функций, глобальные переменные не изменяются вовсе, они присутствуют в единственных экземплярах.
Все вызовы рекурсии порождают новый "экземпляр" специальных параметров, локальных переменных, а при этом старые "экземпляры" далеко не уничтожаются, а просто сохраняются в стеке.
Здесь имеет место случай, когда одному и тому же имени переменной в работе программы соответствуют определенное количество ее экземпляров. [18]
Указанные переменные имеют возможность создать группу (фреймы стека). Сам стек "запоминает историю" всех вызовов в качестве последовательности фреймов.
Программа для конкретного момента работает непосредственно с последним вызовом, фреймом.
Для завершения процесса рекурсии программа может возвратить к предыдущей версии рекурсивно выполненной функции, а также к предыдущему фрейму в программном стеке.
2.2. Принципы создания пользовательского интерфейса
Создание качественного интерфейса требует большего, чем просто соблюдение простых инструкций. Оно предполагает при реализации принцип, который определяется так: «интересы пользователя являются превыше всего», соответствующую методологию разработки ПО.
Главное достоинство интерфейса программы заключается в том, что все пользователи должны чувствовать, что они управляют ПО, а не ПО управляет ими.
Для вызова у пользователя этого ощущения так называемой «внутренней свободы» каждый программный интерфейс должен обладать свойствами.
Естественный интерфейс – интерфейс, что не вынуждает пользователей изменять существенно привычные способы решения задач.
В частности, сообщения, а также полученные результаты, выдаваемые приложением, не должны вовсе требовать каких-то дополнительных разъяснений.
Согласованность программного интерфейса имеет возможность для пользователей перенести имеющиеся знания на новые задания, осваивать разные аспекты быстрее, благодаря этому фокусировать внимание на решаемых проблемах, а не тратить свое время для уяснения применения компонентов управления.
Дружественность интерфейса. Пользователи обычно изучают практически все возможные особенности обработки данных с новыми программными продуктами. [2]
Эффективный интерфейс должен принимать постоянно во внимание именно указанный подход. На таком каждом шаге работы должен он разрешить только определенный набор действий и предупреждать пользователей о внештатных ситуациях, где все они могут вредить программе или же данным.[4]
Эстетическая привлекательность интерфейса. Реализация визуальных компонентов является важнейшей частью для разработки современного программного интерфейса.
Корректное представление всех используемых визуальных объектов обеспечивает очень хорошую передачу информации о поведении, взаимодействии компонентов.
В это же время надо помнить, что все использованные визуальные элементы, появляющиеся на экране, потенциально будут требовать внимания пользователя.
Меню является популярным вариантом для организации разного рода запросов по вводу информации в программу.
Существует несколько форматов представления пользовательского меню:
-
- список объектов;
- меню в виде блоков;
- меню в виде строк;
- меню в виде пиктограмм.
Меню в виде строк данных может появляться вверху экрана и часто остается на этой позиции на протяжении всего пользовательского диалога. Таким образом, помощью меню удобно отображать разные варианты данных для ввода.
Меню можно с равным успехом применять для ввода как управляют их сообщений, так и данных. Приемлемая структура меню зависит от его размера и организации, от способа выбора пунктов меню и реальной потребности пользователя в поддержке со стороны меню.
Во втором разделе курсовой работы рассмотрены основные понятия и принципы модульного программирования, описаны понятия функций, виды функций в С++, рассмотрен принцип реализации рекурсивных функций.
Также рассмотрены все основные принципы для создания пользовательских меню.
3. ПРАКТИЧЕСКОЕ ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ И СОЗДАНИЕ ИНТЕРФЕЙСА В С++ BUILDER
3.1. Проектирование функций в C++ Builder
Рассмотрим использование пользовательских функций по примеру разработки программного продукта по демонстрации касательной в движении по графику функций.
Рассмотрим интерфейс программы:
Рис.4. Пользовательский
На форме помещены компоненты:
– Кнопка «Нарисовать»;
– Кнопка «Касательная»;
– Кнопка «Очистить»;
– Кнопка «Выход»;
– выпадающий список с функциями;
– компонент для создания графика;
– надпись о точке соприкосновения непосредственно с касательной;
– таймер;
– главное меню.
Для работоспособности создаваемой программы, кроме событий, созданы такие подпрограммы:
– функция очистки данных с полей:
void clear()
{
//установка таймера
Form1->Timer1->Enabld=false;
//установка флага
o_f=false;
//очистка серии 3
Form1->Series3->Clear();
//очистка серии 2
Form1->Series2->Clear();
//очистка серии 1
Form1->Series1->Clear();
//удаление значений выпадающего списка ComboBox1
Form1->ComboBox1->Clear();
//ввод данных выпадающего списка по умолчанию
Form1->ComboBox->Text="Укажите кривую";
//начальные настройки диаграммы
Form1->Chart->Title-> Clear();
//добавление слова «График»
Form1->Chart->Title-> Add("График ");
//индикаторы для положения касательной
Form1->Label->Caption="Касательная";
}
Также рассмотрим пользовательскую функцию, при помощи которой создается график.
//название функции
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
// очистка поля
Chart1->Title-> Clear();
//очистка серии 3
Series3->Clear();
//очистка серии 2
Series2->Clear();
//очистка серии 1
Series1->Clear();
//остановка таймера
Timer1->Enabld=false;