В статье рассматриваются вопросы эффективного обучения студентов языку программирования. Приводится пример простейшей программы на Java и Delphi, разбираются этапы создания программы.
Исследуем вопрос о том, какой программной среде лучше учить будущих разработчиков прикладного программного обеспечения в вузе. Обратимся к рейтингам языков программирования, приведенным на сайте http://www.tiobe.com и http://www.eweek.com/. Данные рейтинги показывают (на февраль 2012г.), что на первом месте находится Java – 17%, на втором C – 16%, на третьем C# – 9%, на 11 месте Delphi – 2%. Означает ли это, что на Java в 11 раз удобней и быстрее разрабатывать программы и другими средами можно пренебречь в обучении?
Рассмотрим, к примеру, задачу создания оконного приложения, рассчитывающего формулу «z=x/y», на Java и Delphi.
Для разработки программы на Java и на Delphi необходимы следующие этапы:
Рассмотрим теперь наглядность и сложность реализации поставленной задачи. Основной код модуля программы на Java следующий:
package demo;
import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; import java.awt.Toolkit;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DecimalFormat; import javax.swing.JButton;
import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea;
public class Frame1 extends JFrame { private JButton jButton1 = new JButton();
private JTextArea jTextArea1 = new JTextArea(); private JTextArea jTextArea2 = new JTextArea(); private JTextArea jTextArea3 = new JTextArea(); private JLabel jLabel2 = new JLabel();
private JLabel jLabel3 = new JLabel(); private JLabel jLabel4 = new JLabel(); private JLabel jLabel5 = new JLabel();
public Frame1() { try { jbInit();
} catch (Exception e) { e.printStackTrace(); }
}
private void jbInit() throws Exception { this.getContentPane().setLayout(null); this.setSize(new Dimension(302, 216)); this.setTitle(«Простейшая программа на Java»); this.setResizable(false);
jButton1.setText(«РЕШИТЬ»); jButton1.setBounds(new Rectangle(35, 100, 205, 40)); jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { jButton1_actionPerformed(e);
} });
jTextArea1.setBounds(new Rectangle(95, 15, 140, 20));
jTextArea1.setFont(new Font(«Tahoma», 0, 12));
jTextArea2.setBounds(new Rectangle(95, 40, 140, 20));
jTextArea2.setFont(new Font(«Tahoma», 0, 12));
jTextArea3.setBounds(new Rectangle(95, 70, 140, 20));
jTextArea3.setFont(new Font(«Tahoma», 0, 12)); jTextArea3.setEditable(false); jLabel2.setText(«a=«);
jLabel2.setBounds(new Rectangle(40, 15, 34, 14)); jLabel3.setText(«b=«);
jLabel3.setBounds(new Rectangle(40, 40, 35, 15)); jLabel4.setText(«c=a/b»);
jLabel4.setBounds(new Rectangle(40, 65, 35, 15)); jLabel5.setText(«by Talipov SN, Pavlodar, 2012»); jLabel5.setBounds(new Rectangle(65, 155, 165, 15)); this.getContentPane().add(jLabel5, null); this.getContentPane().add(jLabel4, null); this.getContentPane().add(jLabel3, null); this.getContentPane().add(jLabel2, null); this.getContentPane().add(jTextArea3, null); this.getContentPane().add(jTextArea2, null); this.getContentPane().add(jTextArea1, null); this.getContentPane().add(jButton1, null);
}
private void jButton1_actionPerformed(ActionEvent e) {
// ОСНОВНОЙ КОД ПРОГРАММЫ
String a, b, c; // Строковые переменные Double x, y, z; // Вещественные переменные
a = jTextArea1.getText(); // Получение значения из окна 1 b = jTextArea2.getText(); // Получение значения из окна 2 try { // Начало защищенного блока
x = Double.parseDouble(a); // Преобразование текстового значения в вещественное y = Double.parseDouble(b); // Преобразование текстового значения в вещественное z = x / y; // Вычисление выражения
// Проверка на: 0/0, z/0
if ((Double.isNaN(z) == true) || Double.isInfinite(z) == true) {
throw new Exception(«error»); // Если нет решения, то генерирование ошибки
}
DecimalFormat df = new DecimalFormat(«#0.00»); // Описание формата вещественного числа c = String.valueOf(df.format(z)); // Преобразование числа в строку
jTextArea3.setText(c); // Вывод ответа в окошко
} catch (Exception ee) { // Обработчики ошибок защищенного блока Toolkit.getDefaultToolkit().beep(); // Звуковой сигнал
jTextArea3.setText(«Неверные данные!»); // Обработка ошибки ввода или вычисления
} // Конец защищенного блока
}
}
Рассмотрим аналог программы на Delphi: unit Demo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel;
Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton;
procedure Button1Click(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var Form1: TForm1; implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
// ОСНОВНОЙ КОД ПРОГРАММЫ
var x,y,z: real; // Описание переменных begin
try // Начало защищенного блока
x:=strtofloat(edit1.Text); // Получение значения x из окна 1 y:=strtofloat(edit2.Text); // Получение значения y из окна 1 z:=x/y; // Вычисление выражения edit3.Text:=formatfloat('#0.00',z);
except // Обработчики ошибок защищенного блока
edit3.Text:='Неверные данные!';// Обработка ошибки ввода или вычисления beep; // Звуковой сигнал
end; // Конец защищенного блока end;
end.
При сравнении двух программ получается, что на Java необходимо написать 353 слова-примитива, на Delphi - 116 слов, что более чем в 3 раза меньше. Выходит, что на Java в три раза больше текста в коде программы и в три раза больше этапов в создании готовой программы, причем в программе на Java больше слов-примитивов не из-за синтаксиса, а из-за сложности языка программирования. А если было бы необходимо решить задачу с использованием баз данных, то сложность различалась бы не в разы, а в десятки раз.
Какой же язык программирования предпочесть для реализации поставленной задачи? По быстроте написания, по простоте и предварительной подготовки программиста однозначно выигрывает Delphi из двух рассмотренных. По платформо-незавизимости и расширяемости – Java. Поэтому ограничивать будущих специалистов по программированию одним языком программирования, хоть и наиболее распространенным и передовым, представляется неверным и узким подходом, что может уменьшить количество программистов-практиков на рынке труда.