500 K

Май 2011

 


Программирование в Visual FoxPro: Приемы эффективной работы, часть III
Джим Бут (Jim Booth)

В предыдущей статье из этой серии мы рассмотрели понятия инкапсуляции и связности, чтобы разобраться в том, как создаются подпрограммы, обладающие целостной внутренней структурой, и обсудили также сопряжение, чтобы выяснить вопросы, требующие решения при создании подпрограмм, которые успешно взаимодействуют с другими подпрограммами. Мы начали эту серию статей об эффективных методах программирования с того, что рассмотрели, из чего состоят подпрограммы, и почему вообще нам надо о них заботиться.
В этом месяце мы впервые обратимся к объектно-ориентированному программированию и проектированию. До сих пор мы обсуждали и рассматривали примеры простых подпрограмм, демонстрировавших методологию, известную как модульное программирование. Из этих представлений нам стало понятно, что если следовать нескольким общим принципам, можно создавать подпрограммы, которые являются целостными, надежными и повторно используемыми. Однако, модульное программирование оставляет серьезный пробел в нашей способности на практике добиться конечных целей рассмотренных идей. Возьмем, например, инкапсуляцию: как можно обеспечить в подпрограмме полноценную инкапсуляцию, если используемые этой подпрограммой данные хранятся в переменных, пребывающих, в сущности, в «изменчивом» состоянии в оперативной памяти и доступных любым другим подпрограмме или коду, которым, возможно, понадобится изменить сами эти переменные или их значения?
 


Пользуйтесь инструментом Toolbox!
Этот инструмент позволяет сделать все то, что можно сделать с помощью инструментальной панели Form Controls, только лучше и проще. Плюс, он предоставляет намного больше функциональных возможностей.
Тамар Е. Гранор, д-р философии (Tamar E. Granor, Ph.D.)


До настоящего времени все внимание в своей колонке я уделяла языку программирования FoxPro, рассказывая о его командах и функциях. В этом номере журнала мне хочется рассмотреть один инструмент из числа недавно появившихся и предпочитаемых мной инструментальных средств – «инструментальный ящик» Toolbox, представленный в версии VFP 8. После того, как построитель экрана Screen Builder времен FoxPro 2.x был трансформирован в версии VFP 3 в конструктор форм (Form Designer), этот компонент обеспечивал три способа размещения элементов управления в формах и классах.
Самым простым и очевидным средством, которое позволяет «бросать» элементы управления в форму, является инструментальная панель Form Controls. По умолчанию, она автоматически открывается при открытии окна конструктора форм или конструктора классов (Class Designer). Чтобы «бросить» в форму элемент управления, вы сначала щелкаете мышью по нужному элементу в панели Form Controls, а затем – в форме, в том месте, где должен находиться этот элемент. Панель Form Controls так «бросается в глаза», что многие разработчики никогда не искали ничего иного.
Диспетчер Project Manager предлагает второй подход к решению этой задачи. Перейдите на вкладку классов Classes или раскройте раздел с библиотеками классов Class Libraries на общей вкладке All, затем раскройте соответствующую библиотеку и можете «перетащить и бросить» необходимый элемент управления в подходящее место. Для многих VFP-разработчиков такой способ создания форм и классов стал стандартным.
Существовал также третий вариант. Утилита просмотра классов Class Browser – это отдельный инструмент, который Кен Леви (Ken Levy) написал, как ни удивительно, на языке программирования VFP. Эта утилита позволяет открыть одну или несколько библиотек классов (или даже целый проект) и исследовать их содержимое. Элемент управления можно «бросить» в форму или в класс, если щелкнуть мышью по классу этого элемента в окне утилиты Class Browser, а затем перетащить значок класса из верхнего левого угла в нужную позицию в форме. (В сущности, этот способ работает даже в случае выполняющихся форм, так что можно проделать «фокус в гостиной»: создать пустую форму, «бросить» в нее работающие элементы управления и затем использовать их.)
Хотя все три названные методики работают, у каждой из них есть свои капризы и недостатки – особенности, из-за которых они оказываются неудобными или неэффективными, или случаи, с которыми они не в состоянии совладать. Я не буду составлять здесь каталог всех проблем, возникающих при использовании старых инструментов, но перечислю те основные, которые докучают лично мне.
В случае панели Form Controls, самое проблематичное – обеспечить видимость ваших собственных библиотек классов. Эта инструментальная панель в состоянии продемонстрировать или встроенные элементы управления VFP, или все зарегистрированные элементы управления ActiveX, либо элементы управления из какой-либо одной библиотеки классов. Хотя панель Form Controls «запоминает» свое состояние, в котором вы оставили ее, закрывая VFP-приложение, и восстанавливает это состояние при следующем выполнении, из списка удаляются все библиотеки классов кроме той, которая демонстрировалась в момент закрытия VFP.
Вы можете зарегистрировать свои библиотеки классов на вкладке элементов управления Controls в диалоге задания настроек Tools | Options с тем, чтобы они были доступны в каждом сеансе работы с VFP, но простого механизма, который позволял бы организовать разные списки библиотек для разных проектов, не существует.
Другая проблема заключается в том, что по умолчанию все элементы управления, созданные из одного базового класса, внешне выглядят одинаково, и приходится полагаться на предусмотренные для них подсказки, чтобы выяснить, какой именно элемент вам нужен. По моему опыту, при редактировании библиотечных классов порядок следования элементов управления меняется, поэтому даже на их очередность ориентироваться нельзя. (Можно поменять используемый для класса значок в диалоге, предоставляющем информацию о классе Class Info, который открывается в конструкторе классов, но, насколько мне известно, это делают лишь несколько человек.)
У всех трех инструментов обнаруживается еще один общий, крупный недостаток: отсутствие способа, позволяющего легко создавать новые формы на базе пользовательского класса форм. Для меня, подобные действия в процессе разработки совсем не редкость, а обходные пути для решения этой проблемы (регистрация класса форм в диалоге Tools | Options или использование команды CREATE FORM с предложением AS) неудобны: при регистрации класса форм в диалоге Tools| Option не учитывается, что вам, может быть, надо использовать в работе несколько классов форм.

Разработка, управляемая тестами, постфактум
Эрик Селье (Eric Selje)
 


Прелюдия:
Заниматься разработкой, управляемой тестами (Test-Driven Development, TDD), проще всего в том случае, если вы делаете это с самого начала. Но после того, как уже написана масса программного кода, возможно, покажется, что начать его тестирование постфактум крайне трудно. Однако, если вы меняете какую-то часть готового кода, проведение тестирования – это лучший способ убедиться в том, что никакая уже существующая функциональность не была нарушена. Может возникнуть ощущение замкнутого круга, но создание для унаследованного программного кода тестов, которыми можно воспользоваться, чтобы убедиться, что все в порядке, себя оправдывает.
В I части этой статьи будут рассмотрены концепции разработки, управляемой тестами (TDD), и рефакторинга. Во II части, которая будет опубликована в очередном номере журнала, мы сделаем следующий шаг и обсудим, как незамедлительно модифицировать оснастку FoxUnit с тем, чтобы тесты для готовых бизнес-объектов создавались автоматически, и вы быстро и безболезненно, насколько это возможно, подготовили и провели тестирование готового программного кода.
 


Диаграммы внутри строк объекта Grid
Джун Тангунан (Jun-Tangunan)

Этот трюк изначально был применен Бредом Шульцем (Brad Schulz) и с его разрешения я решил опубликовать настоящую статью, чтобы заинтересованные разработчики смогли применить его в своих приложениях.
Когда мое руководство пожелало создать инструмент по мониторингу потребления топлива, я вспомнил об этом приеме.
Я создал работающий пример и добавил несколько расширений к изначальной идее Бреда, например, теперь диаграмма содержит значение процента. Я также реализовал средство изменения цвета диаграммы:
 


Live Backup v2.0
Джун Тангунан (Jun Tangunan)

Live Backup - это инструмент, который я разработал для создания резервных копий различных файлов. Инструмент не ограничен только таблицами Foxpro. Он способен создавать резервные копии любых файлов из нескольких папок/дисков. Он способен создавать резервные копии файлов на сетевых ресурсах.
Полный проект в исходных текстах читатели смогут найти на нашем сайте.


Возврат на основную страницу

К архивам

© Edel Ltd. Все права защищены. 2011 г.

Hosted by uCoz