Илья Кислицын дата публикации 02-06-2013 09:41 Delphi в нашей стране очень популярна, но у нас совсем неизвестен отличный инструмент для этой среды — СтройКод (StroyCode). Это бесплатная программа от японской компании SoftConstructors. Для СтройКода нет документации на русском языке. Да и на японском ее почти нет. В этой статье я расскажу то, с чем смог разобраться самостоятельно.
СтройКод генерирует паскалевские исходники по заданным в нем исходным данным. В программе вы задаете классы, свойства, события, методы и так далее. Затем нажимаете F9 и программа создает модуль Pas. Полученный модуль можно использовать в Delphi.
Из вышесказанного может показаться, что это очередной UML-редактор. Однако, нет! Здесь можно полноценно программировать, создавая не только описание, но и всю реализацию. И программирование в СтройКоде не уступает по скорости программированию в Delphi!
СтройКод снижает порог вхождения в программирование. Новичкам даже не нужно знать синтаксис паскаля. Позволяет изучить ООП, хотя и не все аспекты. Для профессионалов тоже очень удобная вещь. "Набросать" иерархию классов можно в несколько кликов.
Самое интересное в этой программе — наполнение исходных данных. Это что-то! Этот процесс очень простой, но, как ни странно, описать его очень сложно. Тут лучше один раз попробовать, чем сто раз увидеть. Но, все-таки, я постараюсь этот процесс описать.
После запуска программы вы видите большой текстовый редактор, в котором мигает курсор. Но не пытайтесь здесь что-то печатать. Наверху есть палитра с кнопками. Щелкните по кнопке Object. В редакторе появится почти синий почти прямоугольный объект — поздравляю, вы только что объявили класс.
А как удалить этот класс? Щелкните на клавиатуре Backspace. Или движением мыши выделите этот объект и в контекстном меню нажмите Delete. То есть объект в этом редакторе ведет себя как большой-большой символ в тексте. Но давайте вернем объект обратно (Edit-Undo).
Самое главное: нужно обязательно создать один объект-генератор, который из всего этого сгенерирует паскалевский исходник. Щелкните в палитре кнопку Pascal.
Теперь можно нажать F9. И программа создает вот такой код:
unit Unsaved;
interface
type
TObject1 = class(TObject)
public
constructor Create; virtual;
end;
implementation
constructor TObject1.Create;
begin
end;
end.
|
|
Вернемся в редактор СтройКода. Нужно щелкнуть в белое поле внутри созданного класса, чтобы курсор теперь мигал там. Внутри класса — другой текстовый редактор. Заметьте, в палитре при этом изменились кнопки. То есть программа подсказывает, какие объекты в класс можно вставлять. Вставим Event (событие).
А как вставить параметр в это событие, думаю, вы догадаетесь.
Нажимаем F9 и получаем код:
unit Unsaved;
interface
type
TObject1Event1Event = procedure(Sender: TObject; X: NativeInt) of object;
TObject1 = class(TObject)
private
FOnEvent1: TObject1Event1Event;
protected
procedure DoEvent1(X: NativeInt);
public
constructor Create; virtual;
property OnEvent1: TObject1Event1Event read FOnEvent1 write FOnEvent1;
end;
implementation
constructor TObject1.Create;
begin
end;
procedure TObject1.DoEvent1(X: NativeInt);
begin
if Assigned(FOnEvent1) then
FOnEvent1(Self, X);
end;
end.
|
|
Создадим потомка от нашего TObject1. Для этого надо вернуть курсор в основной редактор, в палитре щелкнуть Object, в созданном классе дважды щелкнуть в поле правее от имени — там выбирается предок.
Как уже говорилось, в СтройКоде можно не только описывать интерфейсную часть модуля, но и делать всю реализацию. Для этого в палитре есть целая куча разных кнопок. Особенно мне понравился объект-цикл For Each, который позволяет бегать по любым данным, которые можно хоть как-то представить в виде массива. Например, по символам в строке или по пунктам в перечислимом типе. Ему достаточно указать лишь переменную или перечислимый тип.
Покажу реализацию посложнее:
Соответствующий сгенерированный код:
function GetAirplanFlightMass(AAirplanFlight: TAirplanFlight; out AMass: NativeInt): Boolean;
var
I: NativeInt;
Item: TPassanger;
J: NativeInt;
Item1: TLuggage;
begin
if AAirplanFlight.Active then
begin
Summ := AAirplanFlight.AirplanInfo.EmptyMass;
for I := 0 to AAirplanFlight.PassengerCount - 1 do
begin
Item := AAirplanFlight.Passengers[I];
for J := 0 to Item.LuggageCount - 1 do
begin
Item1 := Item.Luggages[J];
Summ := Summ + Item1.Mass;
end;
end;
Result := True;
end
else
Result := False;
end;
|
|
При переименовании переменных, методов, классов — они переименовываются автоматически везде, где используются.
В программе нет разделения на процедуры и функции. Все называется методами. Если вы укажете методу тип возвращаемого результата, то в паскале у вас получится функция. Иначе процедура. Похоже на C++.
Даже если вы пытаетесь реализовывать функцию, в ней не будет переменной Result. Есть только команда Return с указанием результата. Тоже как в C++.
В СтройКоде свои названия у простых типов данных. Например, логическое — это bool, целое — int. При генерации они преобразуются соответственно в Boolean и новомодный NativeInt.
Программирование в СтройКоде — сплошные щелки мышью. Клавиатура понадобится только для ввода названий классов, переменных и так далее. Очень удобно, можно даже программировать на планшете.
А вот над какой проблемой я бился долго: файл в СтройКоде надо обязательно сохранять с именем без пробелов, так как это имя присваивается файлу Pas (и пишется внутри после слова unit). Иначе не компилируется.
Один файл СтройКода — это один модуль Pas. Файлы СтройКода можно подключать друг к другу, как в uses в паскале. Файлы СтройКода внутри текстовые.
К сожалению, СтройКод не умеет импортировать паскалевские исходники в себя, даже созданные им самим. Поэтому править созданные СтройКодом исходники нежелательно.
Главный недостаток — программа в режиме демо! Хотя она бесплатная и никакая функциональность не ограничена. Но, видимо, с режимом демо связано то, что не все команды доступны. Например, я так и не смог разобраться, как работать с типами Pointer и простыми массивами. Программа позволяет указать в выражениях переменные неразрешенного типа (новичков это запутает). Иногда генерируется неправильный код. В общем, на практике ей пользоваться можно не всегда. С нетерпением жду новых версий и снятия режима демо.
Наверняка сделают генерацию исходников и на других языках программирования. Ведь раз у них есть отдельный генератор для паскаля, поэтому ничто не мешает добавить, например, для C# или Ruby.
Может быть, сделают компиляцию и запуск своей программы прямо из СтройКода. Это было бы очень удобно. Тогда можно даже не знать, на каком языке программируешь.
Было бы неплохо, если бы добавили импорт из Pas. Хочется перевести в СтройКод свои проекты.
Я отправил письмо разработчикам, что готов перевести эту программу на русский язык. Если мне ответят, я смогу увидеть кое-какие внутренности программы, познакомиться с ее возможностями поближе. Тогда, возможно, напишу более развернутую статью.
Ссылка на проект: http://softconstructors.com/en/applications/stroycode/
Ссылка на страницу скачивания программы: http://softconstructors.com/en/applications/stroycode/download.html
PS: Возможно, в этой статье что-то описано неправильно или использованы неправильные термины, так как, повторюсь, никакой документации по программе нет, все изучалось по наитию.
Обсуждение материала [ 20-01-2014 02:20 ] 25 сообщений |