Архитектурное проектирование в программе расчета интеграла
ПОСТАНОВКА ЗАДАЧИ
Разработать программу вычисления определенного двойного интеграла ,где полином зависящий от трех переменных х, у, z, а - целочисленные показатели. Количество полиномов может изменяться от 1 до 20. Область интегрирования задана вещественными числами (a, b, c, d) в виде прямоугольника (см. рисунок)
Примечание. Вначале в программе все интегралы надо найти аналитически, а затем задавая значения I, J, a, b, c, d, z вычислить численное значение.
ВЫЧИСЛЕНИЕ ИНТЕГРАЛА
Если внимательно присмотреться, або на условие задачи, то окажется что интеграл состоит только из степенных функций. Перед нами стоит простая задача – вычислить сначала производную степенной функции, а потом двойной интеграл от степенной функции.
полином зависящий от трех переменных х, у, z, где – целочисленные показатели. Степенных функций не больше 20.
Рис 2.1 – необходимые формулы
УДОБНЫЙ ИНТЕРФЕЙС
Мною была выбран язык Java. Главный аргумент в его пользу заключается в том, что программа работает на любой операционной системе (Windows, Linux, Mac OS Х, Solaris).
Также Java ничем не уступает С++ по скорости работы. Главным недостатком является не настолько удобный вызов программы (чем исполняемый файл .ехе).
В Java есть 2 основных пакета для создания графических интерфейсов (Graphics User Interface). Это Abstract Windows Toolkit (AWT) и Swing. AWT использует виджеты операционной системы, поэтому эта библиотека немного быстрее. Но на мой взгляд, Swing более хорошо спроектирован.
Для группировки компонент интерфейса используются контейнеры (Container). Для создания основного контейнера для приложения чаще всего используется контейнер JFrame (есть еще JWindows и JApplet). Проще всего унаследоваться от JFrame тем самым получить доступ ко множеству методов, например:
setBounds(x, y, w, h) - указывает координаты верхней левой вершины окна, а также его ширину и высоту.
setResizable(bool) - указывает, можно ли изменять размер окна.
setTitle(str) - устанавливает название окна.
setVisible(bool) - собственно отображает окно.
setDefaultCloseOperation(operation) - указывает операцию, которая будет произведена при закрытии окна.
Основные элементы управления:
JLabel - элемент для отображения фиксированного текста;
JTextField - простой edit-box;
JButton - обычная кнопка (button);
JCheckBox - элемент выбора (аналог checkbox);
JRadioButton - радио кнопка
Как видите, все довольно просто и логично.
При отображении элементов управления используются специальные менеджеры - LayoutManager. У всех LayoutManager'ов есть методы для добавления у удаления элементов.
FlowLayout - используется для последовательного отображения элементов. Если элемент не помещается в конкретную строку, он отображается в следующей.
GridLayout - отображения элементов в виде таблицы с одинаковыми размерами ячеек.
BorderLayout - используется при отображении не более 5 элементов. Эти элементы располагаются по краям фрейма и в ценрте: North, South, East, West, Center.
BoxLayout - отображает элементы в виде рядка или колонки.
GridBagLayout - позволяет назначать месторасположение и размер каждого виджета. Это самый сложный, но и самый эффективный вид отображения.
Стоит еще обратить внимание на обработку событий. Для этого используются так называемые Event Listeners.
ВХОДНЫЕ ДАННЫЕ
private int i = 0, u = 0;
private double[][] CONST = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
private int[][] POWx = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
POWy = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
POWz = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
private double A = 0;
private double B = 0;
private double C = 0;
private double D = 0;
private double Z = 0;
i,u – показатель необходимого полинома.
CONST – двумерный массив для констант.
POWx – двумерный массив для показателей степеней, POWy, POWz.
A, B, C, D, Z – константы
Все входные параметры изначально приравниваются 0, но в ходе выполнения программы, они будут менять свои значения.
ВЫХОДНЫЕ ДАННЫЕ
private double result = 0;
Выходными данными будет только текст аналитического расчета, указания в окне, и результат.
АРХИТЕКТУРНОЕ ПРОЕКТИРОВАНИЕ В ПРОГРАММЕ РАСЧЕТА ИНТЕГРАЛА
Всего программа состоит из трех классов:
IntegralFrame, MathText, и Main.
А также подклассов суперкласса IntegralFrame:
btnResultEventListener, monomBoxActionListener,
polinomBoxActionListener, btnOkActionListener,
и самый большой – AnalyticalCalculation.
Все подклассы можно было вынести в отдельные классы, но в этом нет необходимости при столь небольшой программе.
monomBoxActionListener– слушатель выпадающего списка 20 мономов
polinomBoxActionListener – слушатель выпадающего списка из 2 полиномов
btnOkActionListener – слушатель нажатия кнопки btnОК (присвоение данных)
AnalyticalCalculation – класс, выводящий аналитический и числовой результат расчета в отдельном окне.
btnResultEventListener – слушатель нажатия кнопки btnResult. В нем содержится экземпляр класса AnalyticalCalculation, что приводит в движение расчет.
MathText- отдельный класс, содержащий метод pwr() –метод, который корректно выводит показатели степеней.
Main –главный класс программы, содержащий экземпляр класса IntegralFrame, и приводящий в движение мир.