В настоящее время существует большое количество интегрированных сред разработки (от англ. Integrated development environment, или сокр. IDE) программного обеспечения (ПО), предназначенные как для одного, так и для нескольких языков программирования [1, 2, 3].
Однако, несмотря на существенное многообразие IDE, большинство из них имеют схожие черты, такие как наличие текстового редактора программ, компилятора и (или) интерпретатора, встроенного отладчика и т.д.; оконные приложения строятся из схожего набора визуальных компонентов (кнопки, текстовые поля, списки и пр.), а сами программы сводятся к набору методов, описывающих реакции на различные события и т.п.
Чтобы проиллюстрировать все вышесказанное рассмотрим реализацию одних и тех же задач программирования в трех современных IDE: NetBeans, Embarcadero Delphi и Android Studio. В первой и третьей IDE при написании программ используется язык Java, во второй IDE — Delphi.
Условия задач выглядят следующим образом:
- Дано натуральное число (более четырех знаков). Необходимо: определить самую большую цифру этого числа; ответить на вопрос, верно ли, что в числе все цифры одинаковые?
- Найти все трехзначные числа из промежутка (100; 990], такие, что произведение их цифр, кратных трем, равно 27;
- Определить количество целых чисел в диапазоне [10; 100], у которых цифры идут в порядке возрастания, а также вывести эти числа на экран;
- Вычислить значение функции F(x, y) для значений аргументов x и y, вводимых пользователем с клавиатуры, или выданных случайным образом в диапазоне [5; 10):
Для реализации оконного приложения, реализующего решение данных заданий, в IDE NetBeans можно использовать стандартные компоненты для ввода и/или вывода данных, такие как: JLabel, JTextField и JTextArea, а также командные кнопки JButton, предназначенные для осуществления требуемых расчетов. Компоненты можно группировать, исходя из их принадлежности к тому или иному заданию, используя для этого компонент JPanel.
Таким образом, для реализации приложения были использованы, по числу заданий, 4 компонента JPanel одинаковых размеров, в свойстве border которых был выбран тип границ «Рамка с надписью», где были прописаны номера заданий, а также 4 командные кнопки для выполнения требуемых расчетов.
Компонент jPanel1 содержит следующие компоненты:
- jTextField1 — текстовое поле, используемое для ввода пользователем исходного натурального числа (более 4 знаков);
- jTextField2 — текстовое поле, предназначенное для вывода самой большой цифры числа;
- jLabel3 — надпись, в которую будет записываться ответ на вопрос, верно ли, что в числе все цифры одинаковые?
- jLabel1 и jLabel2 — надписи, используемые для идентификации полей jTextField1 и jTextField2 соответственно.
Компоненты jPanel2 и jPanel3, помимо кнопок JButton, содержат компоненты jTextArea1 и jTextArea2 соответственно, которые используются для вывода результатов.
Компонент jPanel4 содержит следующие компоненты:
- jTextField3 — текстовое поле, используемое для ввода значения переменной x;
- jTextField4 — текстовое поле, предназначенное для вывода на экран сгенерированного случайным образом значения переменной y в диапазоне [5; 10);
- jTextField5 — текстовое поле, предназначенное для вывода на экран рассчитанного значения функции F(x, y).
На рис. 1 показана структура готового приложения.

Метод обработки события mouseClicked для кнопки jButton1 имеет вид:
int n, max = 0;
n = Integer.parseInt(jTextField1.getText());
int k = n % 10;
boolean b = true;
while (n >= 1){
if (n % 10 > max){
max = n % 10;
}
if (k != n % 10){
b = false;
}
n /= 10;
}
jTextField2.setText(String.valueOf(max));
String r = "Все цифры одинаковые? Ответ: ";
if (b){
jLabel3.setText(r + "да.");
} else{
jLabel3.setText(r + "нет.");
}
Метод обработки события mouseClicked для кнопки jButton2 имеет вид:
jTextArea1.setText("");
int n = 0;
for (int i = 101; i <= 990; i++) {
int t = Math.abs(i), p = 1;
while (t >= 1) {
if ((t % 10) % 3 == 0) {
if (t % 10 != 0) {
p *= t % 10;
}
}
t /= 10;
}
if (p == 27) {
n++;
jTextArea1.append(String.valueOf(i).concat("\n"));
}
}
jTextArea1.append("Всего чисел: " + n + ".");
Метод обработки события mouseClicked для кнопки jButton3 имеет вид:
jTextArea2.setText("");
int n = 0;
for (int i = 10; i <= 100; i++) {
boolean b = true;
int t = i;
while (t >= 10) {
if (t % 10 <= (t / 10) % 10) {
b = false;
}
t /= 10;
}
if (b) {
n++;
jTextArea1.append(String.valueOf(i).concat("\n"));
}
}
jTextArea2.append("Всего чисел: " + n + ".");
Метод обработки события mouseClicked для кнопки jButton4 имеет вид:
double x, y, f;
x = Double.parseDouble(jTextField3.getText());
y = Double.parseDouble(jTextField4.getText());
if (x <= -2){
f = Math.sin(y) + Math.pow(x, 5);
} else if ((-2 < x) && (x < 0)){
f = (Math.pow(x, 3) + 7 * Math.pow(y, 2)
– 3) / Math.PI;
} else{
f = Math.cos(x) — Math.pow(y, 2);
}
jTextField5.setText(String.valueOf((double) Math.round(f*100)/100));
Для генерации случайного значения переменной y в момент запуска приложения необходимо записать в обработчик события windowOpened или windowActivated следующий код:
double d = Math.random()*200 — 100;
d = (double) Math.round(d*100)/100;
jTextField4.setText(String.valueOf(d));
На рис. 2 показано окно разработанного приложения в момент работы с ним.

При реализации этих же задач в виде консольного приложения код во многом будет повторяться. Основное отличие будет заключено в реализации операций ввода/вывода данных, поскольку консольное приложение не имеет оконной формы и не содержит визуальных элементов управления.
Во второй части статьи будут рассмотрены реализации данных задач в средах разработки Embarcadero Delphi и Android Studio, и, кроме того, будут сделаны общие выводы.