Пример из существующего проекта
Данный пример демонстрирует работу компонент доступа TDBGrid, TDBText, TDBImage, TDataSource, TTable и TDBMemo, а также - компоненты стандартного диалога TSaveDialog. Уже на стадии проектирования вы сможете просматривать соответствующую таблицу базы данных и с помощью линейки прокрутки компоненты сетки TDBGrid открывать "живые" факты из жизни обитателей моря. Чтобы начать работу с существующим проектом приложения, выполните следующие действия:
- По команде главного менюFile | Open Project откройте диалог выбора проектов.
- Войдите в каталог \...\CBuilder\Examples\Dbtasks\FishFact.
- Выберите проектный файл с именем Fish fact и нажмите кнопкуOpen
- Open
(Рис.2.14).
Рис. 2.14. Пример приложения, использующего существующий проект.
Источник данных приложения определяется свойствами компоненты TTable:
свойство DatabaseName указывает на базу данных BCDEMOS, а свойство TableName - на таблицу BIOLIFE.
Если захотите, скомпилируйте и соберите этот пример. После запуска вы снова получите доступ к изображениям и описаниям рыб в установленной таблице базы данных (Рис. 2.15). Сохраните информацию о заинтересовавшей вас рыбе в виде текстового файла, открывая кнопкой Save стандартный диалог компоненты TSaveDialog. КнопкаExit осуществляет выход из приложения.
Рис. 2.15. Приложение FISH FACTS в работе.
2.3.2 Пример использования модулей данных
Архитектура приложений C++Builder для баз данных основана на применении технологии RAD и объектно-ориентированного программирования как к пользовательскому интерфейсу, так и к бизнес-логике баз данных. Модули данных (Data Modules) поддерживают естественное отделение кодов бизнес-логики обработки данных и компонент пользовательского интерфейса, размещенных на форме.
Объекты модулей данных, доступные на этапе визуального проектирования и скрытые во время работы приложения, действуют как централизованный источник информации, который организует не только сам доступ к базам данных, но и бизнес-логику их обслуживания.
Реализация различных способов доступа к элементам баз данных сосредоточена в компонентах вкладкиData Access Палитры компонент. Эти интерфейсные элементы заключают в себе такие характеристики источника информации, как спецификации конкретной базы данных, таблиц, запросов и ссылок к полям в некоторой записи.
Использование модулей данных из Хранилища объектов дает вам возможность моментально адаптировать их к вашей задаче, перетаскивая нужные вам объекты и компоненты на форму создаваемого приложения. Изменения, внесенные вами в бизнес-логику конкретного модуля данных или в интерфейсные компоненты, никак не отражаются на использовании того же модуля другими разработчиками.
Чтобы создать на основе готового модуля приложение "Заказчики" с данными о заказчиках товара, производимого некоторой компанией, выполните следующие действия:
=> Выполните командуFile | New из главного меню. => На вкладке Data Modules выберите значок Customer Data, а затем нажмите
кнопкуОК.
=> Дважды щелкните мышью на таблице Customers модуля данных. Откроется список Customerdata->Customers полей таблицы заказчиков (Рис. 2.16).
Рис. 2.16. Поля таблицы заказчиков Customers модуля данных Customer Data.
=> Удерживая нажатой клавишуShift, выберите нужные вам поля из списка. => Перетащите выбранные поля и разместите их на форме. => Перетащите компоненту навигатора базы данных DBNavigator из вкладки Data Control Палитры и в ее свойстве DataSource укажите источник данных
CustomerData->CustomerSource.
Теперь вы сможете просматривать "живые" данные всех записей в таблице заказчиков уже на стадии проектирования формы приложения (Рис. 2.17). Для этого нажимайте кнопки со стрелками на панели, расположенной в верхней части списка полей таблицы заказчиков. С помощью Инспектора объектов модифицируйте по своему усмотрению свойства компонент полей (например, в свойствах Caption замените все названия на русскоязычные).
Рис. 2.17. Форма приложения для доступа к таблице заказчиков.
Когда вы скомпилируете и соберете приложение, вы увидите те же данные, что и на стадии проектирования.
Рис. 2.18. Приложение "Заказчики" в работе.
Теперь, пользуясь кнопками панели навигатора, вы сможете редактировать данные -вставлять новые записи, Bычеркивать ненужные, менять содержание полей и т.д. Рис. 2.18 показывает результат введения в таблицу атрибутов вымышленного отечественного заказчика (после нажатия кнопки "+"). Внимание: На этом примере вы можете впервые столкнуться со сложностями в использовании русского шрифта при попытках модифицировать оригинальные таблицы демонстрационной базы данных BCDEMOS, входя щей в комплект C++Builder
Теперь, пользуясь кнопками панели навигатора, вы сможете редактировать данные -вставлять новые записи, Bычеркивать ненужные, менять содержание полей и т.д. Рис. 2.18 показывает результат введения в таблицу атрибутов вымышленного отечественного заказчика (после нажатия кнопки "+"). Внимание: На этом примере вы можете впервые столкнуться со сложностями в использовании русского шрифта при попытках модифицировать оригинальные таблицы демонстрационной базы данных BCDEMOS, входя щей в комплект C++Builder
Standard. He думаю, что такое ограничение корпорация Borland ввела сознательно. Не относитесь к этой проблеме слишком серьезно - ведь нашей задачей является обучение современной методике программирования СУБД, для чего демонстрационная база дает достаточный экспериментальный материал (хотя и англоязычный), а вовсе не модификация самой BCDEMOS.
Естественно, что разработчики настоящих приложении имеют дело с реальными базами данных, внутреннее устройство которых они обязаны знать досконально.
2.3.3 Пример использования Мастера форм
Прежде, чем начать работу с последним примером этой главы, просмотрите Словарь баз дачных (Database Dictionary), выполнив команду главного меню Database | Explorer (Проводник базы данных). Открывшееся окно словаря (Рис. 2.19) состоит из двух панелей. В древовидном перечне левой панели найдите таблицу базы данных, которую вы собираетесь связать с формой проектируемого приложения. Для разработки приложения "Моя записная книжка" я создал в Excel таблицу с именем NOTEBOOK. He беда, если вы не захотите построить собственную рабочую таблицу в рамках Excel, Access, Paradox или какой-нибудь другой системы - при изучении примера можно воспользоваться англоязычным прототипом CLIENTS из базы данных BCDEMOS.
Описание выбранной таблицы представлено тремя вкладками правой панели. На вкладкеDefinition вы найдете характеристики таблицы (дата, время создания, тип). ВкладкаEnter SQL позволяет вводить и редактировать команды на языке структурированных запросов SQL к таблицам базы данных, расположенных на локальном или удаленном сервере. Если вы вводите команды изменения данных таблицы INSERT, UPDATE или DELETE, убедитесь, что опция меню Options | Live Queries не выбрана. Чтобы выполнить текущую команду SQL, нажмите кнопку с изображением молнии справа от поля редактирования. Вкладка Data показывает текущее содержание таблицы:
Рис. 2.19. Содержание таблицы NOTEBOOK а окне Проводника базы данных.
Для использования Мастера форм при создании приложения выполните следующие действия:
=> С помощью командыDatabase | Form Wizard из главного меню вызовите Мастер форм, который проведет вас по диалоговым страницам характеристик создаваемой формы.
=> На первой странице (Рис. 2.20) укажите, что создаете простую форму на основе компонентных объектов таблицы базы данных (Create a form using TTable objects). Нажмите кнопку Next.
Рис. 2.20. Первая страница диалога Мастера форм.
=> На второй странице (Рис. 2.21) найдите вашу собственную таблицу NOTEBOOK.DBF (или ее прототип CLIENTS.DBF) из базы данных с псевдонимом BCDEMOS, которая будет использоваться формой приложения. В данном примере обе таблицы хранятся в каталоге CAProgram Files\Borland\CBuilder\Examples\DATA. Нажмите кнопкуNext.
Рис. 2.21. Вторая страница диалога Мастера форм.
=> На третьей странице (Рис. 2.22) выберите нужные вашему приложению поля таблицы из списка Available Fields и нажатием кнопки ">" перенесите их в список Ordered Selected Fields. В данном примере выбраны 5 полей. Нажмите кнопку Next.
Рис. 2.22. Третья страница диалога Мастера форм.
=^> На четвертой странице (Рис. 2.23) задайте расположение выбранных полей на форме - вертикально. Нажмите кнопкуNext.
Рис. 2.23. Четвертая страница диалога Мастера форм.
=> На пятой странице (Рис. 2.24) задайте положение названий относительно полей - слева. Нажмите кнопкуNext.
Рис. 2.24. Пятая страница диалога Мастера форм.
=> На шестой странице (Рис. 2.25) можно дополнительно потребовать создать для формы новый модуль данных. Нажмите кнопкуFinish, завершая разработку формы приложения базы данных под управлением Мастера форм.
Рис. 2.25. Шестая страница диалога Мастера форм.
Далее, как обычно, можно воспользоваться Инспектором объектов, чтобы адаптировать компоненты формы к более удобному для вас представлению (Рис. 2.26).
Рис. 2.26. Форма приложения, созданная Мастером форм.
Когда вы скомпилируете и соберете приложение, исходные данные таблицы появятся в том виде. как вы их видели в Словаре баз данных.
Рис. 2.27. Приложение "Моя записная книжка' и работе. Теперь, пользуясь кнопками панели навигатора, вы сможете редактировать содержимое записной книжки - вставлять новые записи, вычеркивать ненужные, редактировать содержание полей и т.д. Рис. 2.27 отображает запись, которая стала начальной в результате вычеркивания первой записи в исходной таблице NOTEBOOK (после нажатия кнопки "-").
Естественно, что оригинальная таблица CLIENTS способна предоставить вам другие данные (Рис. 2.28).
Рис. 2.28. Работа приложения базы данных с таблицей CLIENTS.
В последнем примере Мастер форм проявил себя как чрезвычайно полезный для новичков и удобный в обращении встроенный инструмент C++Builder, который позволяет разработать полностью функциональное приложение базы данных буквально за несколько минут. Проектирование формы приложения, по существу, заключается в выборе опций, предлагаемых диалоговыми страницами Мастера форм. Мастер форм самостоятельно закладывает фундамент прототипа вашего приложения, вообще не прибегая к "ручному" программированию. Конечно, чтобы удовлетворить конкретным требованиям поставленной задачи, вам не обойтись без написания специфических кодов для обработки событий, ошибок и отображения данных в различных видах.
Итоги
C++Builder для операционных систем Windows 95 и NT обеспечивает высокую скорость визуальной разработки методом перетаскивания компонент на форму приложения. Мы убедились в высокой продуктивности и гибкости повторно используемых компонент, в особенности - элементов пользовательского интерфейса с базами данных, что в сочетании с высокопроизводительными компилятором и загрузчиком действительно позволяет быстро переходить от начального прототипа приложения к работающей программе.
3. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ И C++
Объект - это абстрактная сущность, наделенная характеристиками объектов окружающего нас реального мира. Создание объектов и манипулирование ими - это вовсе не привилегия языка C++, а скорее результат методологии программирования, воплощающей в кодовых конструкциях описания объектов и операции над ними. Каждый объект программы, как и любой реальный объект, отличается собственными атрибутами и характерным поведением. Объекты можно классифицировать по разным категориям: например, мои цифровые наручные часы "Cassio" принадлежат к классу часов. Программная реализация часов входит, как стандартное приложение, в состав операционной системы вашего компьютера.
Каждый класс занимает определенное место в иерархии классов, например, все часы принадлежат классу приборов измерения времени (более высокому в иерархии), а класс часов сам включает множество производных вариаций на ту же тему. Таким образом, любой класс определяет некоторую категорию объектов, а всякий объект есть экземпляр некоторого класса.
Объектно-ориентированное программирование (ООП) — это методика, которая концентрирует основное внимание программиста на связях между объектами, а не на деталях их реализации. В этой главе основные принципы ООП (инкапсуляция, наследование, полиморфизм, создание классов и объектов) интерпретируются и дополняются новыми понятиями и терминологией, принятыми интегрированной средой визуальной обработки C++Builder. Приводится описание расширений языка новыми возможностями (компоненты, свойства, обработчики событий) и последних дополнений стандарта ANSI C++ (шаблоны, пространства имен, явные и непостоянные объявления, идентификация типов при выполнении программы, исключения).
Глава носит обзорный характер, она призвана познакомить читателя со специальной терминологией ООП, к которой автор вынужден прибегать на протяжении всей книги. Это вызвано тем, что C++Builder является типичной системой ООП и претендует на кульминационную роль в истории его развития.