Алфавит, базовые типы и описание данных. Объектно-ориентированный подход в программировании


Размер: px

Начинать показ со страницы:

Транскрипт

1 Федеральное агентство железнодорожного транспорта Уральский государственный университет путей сообщения Кафедра «Информационные технологии и защита информации» А. В. Кибардин ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ Часть 3 Основы визуального программирования в среде Borland C++ Builder Екатеринбург Издательство УрГУПС 2012

2 УДК (075.8) К38 К38 Кибардин, А. В. Программирование на языке С++. В 3 ч. Ч. 3. Основы визуального программирования в среде Borland C++ Builder: учеб.-метод. пособие / А. В. Кибардин. Екатеринбург: Изд-во УрГУПС, c. Пособие предназначено для изучения основ визуального проектирования и событийно-ориентированного программирования на алгоритмическом языке С++ в среде пакета Borland C++ Bulder. Ориентировано на студентов направления «Мехатроника и робототехника», а также на студентов, аспирантов, слушателей ФПК и подготовительного отделения, обучающихся основам современных информационных технологий. УДК (075.8) Печатается по решению редакционно-издательского совета университета Автор: А. В. Кибардин, доцент кафедры «Информационные технологии и защита информации», канд. физ.-мат. наук, УрГУПС Рецензенты: Г. Б. Смирнов, профессор кафедры «Вычислительная техника», д-р техн. наук, УрФУ им. первого Президента России Б. Н. Ельцина В. И. Радченко, профессор кафедры «Информационные технологии и защита информации», д-р физ.-мат. наук, УрГУПС Уральский государственный университет путей сообщения (УрГУПС), 2012

3 ОГЛАВЛЕНИЕ ВВЕДЕНИЕ... 4 ОСНОВЫ ПРОГРАММИРОВАНИЯ В СРЕДЕ C++ BUILDER... 5 РАБОТА С ИНТЕГРИРОВАННОЙ СРЕДОЙ РАЗРАБОТКИ ПРИЛОЖЕНИЙ..9 РАЗРАБОТКА ИНТЕРФЕЙСА ПРОГРАММЫ. КОМПОНЕНТЫ C++ BUILDER РАЗРАБОТКА ПРОГРАММНОГО КОДА ПРИЛОЖЕНИЯ. СОБЫТИЯ И ОБРАБОТЧИКИ СОБЫТИЙ.17 ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ В ПРОГРАММЕ 20 ДОРАБОТКА ИНТЕРФЕЙСА ПРИЛОЖЕНИЯ ПОДГОТОВКА ПРИЛОЖЕНИЯ К РАСПРОСТРАНЕНИЮ РАБОТА С ГРАФИКОЙ РАБОТА С ФАЙЛАМИ РАБОТА С БАЗАМИ ДАННЫХ НЕКОТОРЫЕ КОМПОНЕНТЫ ДЛЯ ОТОБРАЖЕНИЯ ДАННЫХ ИЗ БД ЗАПРОСЫ К БАЗЕ ДАННЫХ КОМПОНЕНТ ПРОГРАММИСТА БИБЛИОГРАФИЧЕСКИЙ СПИСОК

4 ВВЕДЕНИЕ Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению на рынке программ целого ряда систем программирования, ориентированных на быструю разработку приложений, среди которых следует отметить Microsoft Visual Basic и Borland Delphi. В основе систем быстрой разработки лежит технология визуального проектирования и событийно-управляемого программирования, суть которой заключается в том, что среда разработки берет на себя большую часть работы по генерации программного кода, оставляя программисту работу по конструированию диалоговых окон и написания функций обработки событий, возникающих в программе. Понятно, что такие системы резко повышают производительность работы программиста. Успех и популярность Delphi вызывал желание фирмы Borland распространить метод быстрой разработки на область профессионального программирования, что привело к появлению Borland С++ Builder. C++ Builder среда быстрой разработки, в которой в качестве языка программирования используется расширенный язык С++ (язык С++ Builder). В данном пособии описаны технологии событийно-управляемого и визуального программирования на языке С++ в среде С++ Builder. Для работы с методическими указаниями необходимо владеть основами программирования на языке С++ и знать следующие технологии: структурного программирования; модульного программирования; объектно-ориентированного программирования (ООП). С++ Builder среда быстрой разработки, в которой в качестве языка Этим технологиям посвящено большое количество учебной литературы, в том числе . 4

5 ОСНОВЫ ПРОГРАММИРОВАНИЯ В СРЕДЕ C++ Builder Особенности программирования в среде Windows Система C++ Builder предназначена для разработки программ, работающих в среде Windows. Программирование в Windows имеет следующие особенности: 1) программный код состоит из процедур обработки сообщений, которые Windows посылает приложению (программе); 2) Windows фиксирует возникающие в программах и аппаратуре события и посылает соответствующие сообщения в программу; 3) одновременно могут выполняться несколько программ. Данные программы делят между собой ресурсы компьютера; 4) работающая программа находится в рабочей области памяти и ожидает сообщений от Windows, на которые она должна реагировать; 5) взаимодействие с аппаратным обеспечением происходит через графический интерфейс устройств. Windows предлагает разработчику программы так называемую управляемую событиями среду, когда код программы исполняется как реакция на определенное событие. Windows создает входное сообщение для каждого входного события, генерируемого пользователем с помощью мыши или клавиатуры. Windows сохраняет входные сообщения в очереди системных сообщений. Затем эти сообщения посылаются в очередь сообщений приложения. Сообщение приложению от Windows формируется путем создания записи сообщения в очереди сообщений. Некоторые сообщения от Windows посылаются непосредственно в окно приложения это так называемые внеочередные сообщения. Приложение также может создавать собственные сообщения, помещать в свою очередь сообщений и посылать их другим приложениям. Каждое приложение выполняется в своем собственном окне, имеющем уникальное описание дескриптор. Поскольку в записи сообщения указывается, кому предназначено данное сообщение, то Windows пересылает его по указанному адресу. Приложение должно быть в состоянии обработать любое сообщение. Практически для каждого события Windows имеет стандартную процедуру обработки. В приложении должно быть указано, что при возникновении события NM, для которого в программе нет специального кода, должна выполняться стандартная процедура Windows. Большинство стандартных сообщений программы обрабатывается автоматически, поскольку все объекты C++ Builder имеют встроенный механизм процедуру обработки сообщений. 5

6 Основные понятия ООП в С++ Builder Программирование в С++ Builder основывается на расширенном языке C++ (языке С++ Builder). В C++ вводится специальный тип данных класс. Класс это структура данных, состоящая из следующих элементов: поля; методы; свойства. Поля содержат данные определенного типа. Методы это функции, выполняющие определенные действия. Свойства это поля данных, которые влияют на поведение объекта. Они отличаются от обычных полей тем, что присвоение им значений связано с вызовом соответствующих методов. Для описания класса в языке используется зарезервированное слово class. Класс объявляется в модуле приложения (см. ниже). В C++ базовым классом для всех классов является абстрактный класс TObject: поэтому если нужно создать новый класс данных, то необходимо использовать следующее описание: class TNewObject: TObject тело класса; Напоминаем, что при описании класса в его заголовке перечисляются все классы, являющиеся для него базовыми. Возможность обращения к элементам этих классов регулируется с помощью ключей доступа private, protected и public (см.). Объект является экземпляром класса. Экземпляр класса реализуется переменной данного типа класса, например: TNewObject *NewObject; Управление файлами в С++ Builder В начале работы над проектом C++ Builder предоставляет в распоряжение разработчика фактически готовую программу. Программа состоит из одного окна с заголовком Form1 и обладает функциональными возможностями стандартного окна Windows. При этом создаются следующие файлы прило-жения. Главный модуль проекта Project1.cpp содержит код главной программы, написанной на языке C++. В файле содержатся ссылки на все формы проекта и относящиеся к ним модули. В нем также находится код инициализации приложения: 6

7 // #include #pragma hdrstop // USEFORM("Unit1.cpp", Form1); // WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) try Application->Initialize(); Application->CreateForm(classid(tform1), &Form1); Application->Run(); catch (Exception &exception) Application->ShowException(&exception); catch (...) try throw Exception(""); catch (Exception &exception) Application->ShowException(&exception); return 0; // Модули формы Для каждой формы C++ Builder создает отдельный модуль, который состоит из двух файлов: заголовочного файла и файла кода (содержимое этих файлов показывается в окне редактора кода). Заголовочный файл Unit1.h содержит описание формы и выглядит так: // #ifndef Unit1H #define Unit1H //

8 #include #include #include #include // class TForm1: public TForm published: // IDE-managed Components private: // User declarations public: // User declarations fastcall TForm1(TComponent* Owner); ; // extern PACKAGE TForm1 *Form1; // #endif Файл кода (модуль формы) Unit1.cpp содержит описание функций, в том числе и обработки событий: // #include #pragma hdrstop #include "Unit1.h" // #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; // fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) // Кроме того, C++ Builder, анализируя действия программиста, формирует файл описания свойств формы (форм, если их больше в проекте, чем одна) как компонента стандартной библиотеки визуальных компонентов Unit1.dfm, файл проекта Project1.bpr и файл ресурсов проекта. Результат компиляции проекта (исполняемое приложение) сохраняется в файле Project1.exe. Файлы с расширением.tds и.obj создает компилятор в процессе генерации исполняемого файла. Резервные копии файлов проекта имеют в качестве первого символа расширения символ «~» (*.~*). 8

9 РАБОТА С ИНТЕГРИРОВАННОЙ СРЕДОЙ РАЗРАБОТКИ ПРИЛОЖЕНИЙ Основой C++ Builder является интегрированная среда разработки приложений (IDE). После запуска C++ Builder на экране появится несколько окон, представленных на рис. 1. IDE состоит из главного окна, инспектора объектов, визуального проектировщика форм, окна редактора программ, включающего в себя просмотровщика классов и редактор исходного текста программы. В состав главного окна входят главное меню и несколько панелей инструментов: стандартная, панель просмотра форм и исходного текста, панель отладки, панель выбора настройки среды, пользовательская, а также палитра компонентов. Палитра компонентов включает 19 панелей. В пределах одной панели объединены компоненты, ориентированные на конкретную область применения. Каждый компонент представлен в палитре своим значком. Визуальный проектировщик форм Форма это будущее окно Windows, в котором размещаются различные элементы управления (кнопки, меню, надписи, переключатели и т. д.). Когда созданная программа откомпилирована и запущена на выполнение, форма превращается в обычное окно Windows и выполняет те действия, которые определены для нее разработчиком. Таких окон в программе может быть несколько, но лишь одно из них считается главным, остальные вспомогательными. Компоненты форм Компоненты палитры содержат обобщенные образы элементов управления и имеют соответствующие названия («кнопка», «полоса прокрутки» и т. д.). После размещения компонента в форме в ней реально содержится экземпляр соответствующего компонента, т. е. объект. Инспектор объектов Инспектор объектов предназначен для задания свойств объектов и определения их реакций на различные события. Текущий объект показывается в верхней части инспектора в раскрывающемся списке. Инспектор объектов содержит две страницы: «Properties» (свойства) и «Events» (события). Для изменения конкретного свойства необходимо выделить объект на форме, щелкнуть по странице «Properties», затем щелкнуть мышью в строке соответствующего свойства и в открывшемся окне задать его новое значение. Страница «Events» инспектора позволяет определить реакцию программы на различные события в виде соответствующих функций. 9

10 Главное окно Панели инструментов Инспектор Просмотровщик Визуальный Редактор объектов классов проектировщик исходного форм кода Рис. 1. Главное окно среды разработки приложений Редактор программы Рядом с окном главной формы располагается окно редактора программы. Переключение между формой и редактором кода можно осуществлять либо мышью, либо функциональной клавишей «F12». Окно редактора состоит из двух панелей: просмотровщика классов и редактора исходного текста программы. Просмотровщик классов визуально отображает структуру связей между различными объектами программы и позволяет быстро перемещаться по ее тексту. В окне редактора исходного текста программы отображается программный код. Интуитивный помощник написания кода Редактор кода имеет набор средств, обеспечивающих выполнение целого ряда вспомогательных функций. Эти средства имеют общее название интуитивный помощник написания кода. Он выполняет следующие функции: дополнение кода; 10

11 контекстный список параметров; быстрая оценка значений; всплывающие подсказки об объявлениях идентификаторов; шаблоны кодов. Менеджер проектов Помимо главной формы и модуля с исходным кодом этой формы программа содержит файл проекта, с помощью которого можно осуществлять управление файлами (модулями), являющимися составными частями проекта. Окно менеджера вызывается командой View / Project Manager. Менеджер проекта позволяет выполнять операции с файлами. Действия с файлами выполняются с помощью панели инструментов менеджера проекта. 11

12 РАЗРАБОТКА ИНТЕРФЕЙСА ПРОГРАММЫ. КОМПОНЕНТЫ C++ BUILDER Разработка приложений для Windows с помощью C++ Builder очень проста, так как разработчик располагает обширной библиотекой объектов (VCL). Эта библиотека построена по иерархическому принципу и базируется на классе TObject. Это абстрактный тип, определенный в модуле Classes. Он является предком всех объектов: все объекты порождены от него и имеют унаследованные от TObject свойства. Иерархия объектов C++ Builder представлена на следующей схеме. Объект Невизуальный Визуальный Не элемент управления Элемент управления Оконный Неоконный Компоненты C++ Builder особый вид объектов. Компоненты наряду с методами и обработчиками событий обладают свойствами. Свойства имеют предварительно заданные значения, которые можно изменять как при выполнении программы, так и в ходе ее разработки. Отличие компонентов от объектов в том, что компоненты это визуальные объекты; их можно редактировать в ходе разработки программы, а невизуальные объекты нет. Например, кнопка RadioButton визуальный объект, графически представленный в палитре компонентов. Элементы управления особый вид компонентов. Компоненты, которые не работают в качестве элементов управления, невидимы для пользователя; он ничего не может сделать с их помощью. Например, компонент «меню» видим и доступен только разработчику приложения. При работе с приложением пользователь ничего не может сделать с компонентом «меню». Он видит только результат работы программиста с этим компонентом, а именно меню, в котором можно что-то выбирать. Напротив, кнопка является графическим элементом, видимым пользователем. Пользователь может произвести некоторое действие, например щелчок по данной кнопке. В пределах категории элементов управления существует различие между оконными и неоконными элементами управления. Оконными называются элементы управления, которые: могут становиться активными; могут содержать другие элементы управления; 12

13 обладают дескриптором окна. Неоконными называются элементы управления, которые: не могут становиться активными; не могут содержать другие элементы управления; не обладают дескриптором окна. Создадим приложение, которое может вычислять корни квадратного уравнения. Начнем с разработки пользовательского интерфейса программы. Запустите систему программирования C++ Builder и сразу же сохраните файл проекта и файл модуля, воспользовавшись командой меню File. Поскольку система создает много рабочих файлов вашего проекта, то следует сохранять их в отдельной папке. Отметим тот факт, что вы уже получили работающее приложение, которое выводит на экран пустое окно. С этим окном можно выполнять обычные для окон Windows действия. Убедитесь в этом, запустив приложение на выполнение командой меню Run / Run. В программе пользователю потребуется вводить коэффициенты уравнения a, b и c. Для ввода этих данных воспользуемся компонентом Edit (поле ввода). Компонент размещается на вкладке Standart палитры компонентов. Щелкните по кнопке компонента Edit, затем переместите курсор мыши на форму и щелкните в нужном месте. В результате этих действий на форме появится поле ввода с надписью внутри Edit1. При этом само поле ввода получит имя Edit1, под которым оно будет доступно программе. Имена объектов создаются в С++Builder автоматически по следующему принципу: название компонента плюс порядковый номер размещенного на форме элемента управления. Форма со всеми элементами управления изображена на рис. 2.!!! Разработчик программ может сам задавать элементам управления свои имена, однако это следует делать только через инспектор объектов, а не в редакторе кода. Для этого необходимо в инспекторе объектов выделить свойство Name нужного элемента и задать новое имя. Очистим содержимое поля ввода от надписи. Для этого выделите на форме поле ввода, щелкнув по нему курсором мыши, на странице «Properties» инспектора объектов выберите свойство Text поля ввода и в соседней ячейке удалите надпись Edit1. Разместим надпись над полем ввода, поясняющую, что данное поле ввода предназначается для ввода коэффициента а. Воспользуемся компонентом Label (подпись). Данный компонент размещается на вкладке «Standart». Для задания надписи воспользуйтесь свойством Caption данного элемента управления. Аналогично разместите на форме поля ввода для коэффициентов b и c и сделайте соответствующие надписи над ними. Результаты расчетов, т. е. значения вычисленных корней x1 и x2, можно вывести на форму, воспользовавшись уже известными вам компонентами Edit и 13

14 Label. Разместите на форме еще два элемента Edit и соответствующие надписи над ними. Рис. 2. Вид окна проекта Поместим на форму две кнопки: одну для запуска процесса вычислений, вторую для завершения работы программы. Воспользуемся компонентом Button (кнопка). Компонент Button также находится на вкладке «Standart». Зададим надписи на кнопках: «Вычислить» и «Закрыть». Для этого воспользуйтесь свойствами Caption соответствующих кнопок. Разместим на форме такие важные элементы интерфейса, как строку меню, панель инструментов и строку состояния. Перейдите на вкладку «Win32» панели компонентов и щелкните по значку ToolBar, затем курсором мыши щелкните по форме. В верхней части формы появится панель инструментов, пока еще без кнопок. Для создания кнопок панели инструментов воспользуемся компонентом SpeedButton, находящимся на вкладке «Additional». Разместите на панели инструментов три кнопки, которые будут соответствовать командам «Вычислить», «Справка» и «Выход». Выделите нужную кнопку и воспользуйтесь свойством Glyph. Затем щелкните в строке свойства по прямоугольнику с тремя точками. В результате появится диалоговое окно редактора 14

15 картинок. В этом окне нажмите кнопку «Load»; найдите подкаталог Program Files\Common Files\Borland Shared\Images\Buttons и в списке предложенных файлов выберите подходящий рисунок. В окне редактора нажмите кнопку «ОК». Вернитесь на вкладку «Win32» и выделите значок StatusBar (строка состояния). Щелкните курсором мыши по форме. В нижней части формы появится строка состояния. Перейдите на вкладку «Standart» палитры компонентов и выделите значок MainMenu (главное меню). Щелкните курсором мыши в любом месте формы. Компонент MainMenu невизуальный, поэтому он может находиться где угодно на форме. Дважды щелкните по объекту меню, на экране появится редактор меню. Для того чтобы с помощью него добавить новые пункты меню, необходимо выполнить следующие действия: 1) нажмите клавишу «Enter» активизируется инспектор объектов, который предложит ввести название для текущего пункта меню в строке Caption; 2) введите слово «Уравнение» и нажмите «Enter». Система переключится снова в редактор меню. Нажмите клавишу «Enter» и в инспекторе объектов введите слово «Вычислить». Повторите эти действия еще дважды, чтобы добавить в меню подпункты «Справка» и «Выход». Для завершения разработки интерфейса программы остается добавить еще одну форму с необходимыми элементами управления. Вторая форма будет окном справки программы. Воспользуйтесь командой меню File/New/Form для добавления к проекту второй формы. Исправьте заголовок формы, назвав ее «Справка». Поместите на форму объект Memo1, воспользовавшись компонентом Memo (многострочное поле ввода) на вкладке «Standart». Данный компонент позволяет выводить текст, состоящий из множества строк. Задайте форме и полю Memo1 подходящие размеры. Для этого выделите нужный объект по краям объекта появятся черные квадратики. Захватив курсором мыши один из квадратиков, вы сможете изменить размеры объекта. Непосредственно под полем ввода поместите кнопку, закрывающую окно справки. Для этого воспользуйтесь компонентом BitBtn на вкладке «Additiona»l. В ее свойстве Kind выберите значение bkclose. Это предопределенное значение позволит закрыть данное окно. Остается поместить текст справки в поле ввода. Выделите свойство Lines поля ввода, а затем щелкните дважды по кнопке с тремя точками в строке этого свойства. При этом появится окно текстового редактора, в котором вам следует удалить имя поля и ввести текст справки, например следующее: 15

16 Данная программа вычисляет корни квадратного уравнения. Введите в соответствующих окнах значения коэффициентов уравнения и нажмите кнопку «Вычислить». Для завершения работы нажмите кнопку «Выход». Введя текст справки, нажмите кнопку «ОК». Сохраните модуль второй формы. На этом разработка интерфейса закончена. 16

17 РАЗРАБОТКА ПРОГРАММНОГО КОДА ПРИЛОЖЕНИЯ. СОБЫТИЯ И ОБРАБОТЧИКИ СОБЫТИЙ Приложения, созданные с помощью C++ Builder, это приложения для Windows. Одним из основных свойств таких приложений является управление по событиям. Это означает, что программа выполняется на основе генерируемых сообщений о событиях, которые обрабатываются программным кодом приложения. Такой код необходимо написать для каждого события, на которое должна реагировать программа. Процедура, предназначенная для реагирования на какое-либо событие, называется в С++ Builder функцией обработки события. Выделяются две категории событий: события, обусловленные действиями пользователя, пользовательские события и обычные события программно-управляемые события. Функции обработки пользовательских событий составляют главную часть кода приложения. Они обеспечивают интерактивное взаимодействие приложения и пользователя. В C++ Builder для этого применяются предварительно определенные обработчики событий, которые могут использоваться практически всеми компонентами. Сюда относятся обработчики событий мыши и клавиатуры. К обычным (программно-управляемым) событиям относятся события активизации, завершения, события изменения состояния отдельных компонентов и прочие события, которые являются косвенным результатом действия пользователя. C++ Builder генерирует функции обработки каждого события и дает им имена в соответствии с именами компонентов, для которых эти процедуры предназначены. Например, если дважды щелкнуть по кнопке Button1, в модуле формы будет сгенерирована пустая функция обработки события, которая выглядит следующим образом: void fastcall TForm1::Button1Click(TObject *Sender) Далее необходимо вписать нужный программный код в составной блок. Выделите кнопку «Вычислить», перейдите на страницу «Events» в инспекторе объектов и дважды щелкните по имени обработчика события OnClick. Система добавит в текст модуля пустую функцию обработки щелчка по кнопке. Что должна выполнять эта функция? Во-первых, в ней должно считываться содержимое полей ввода коэффициентов a, b и c; далее считанные значения должны быть превращены в числа, поскольку свойство Text компонента Edit имеет строковый тип; затем должны быть выполнены необходимые вычисления и результат помещен в поля Edit4 и Edit5. 17

18 Добавьте в функцию программный код, приведенный ниже. void fastcall TForm1::Button1Click(TObject *Sender) float a,b,c,d,x1,x2; a=strtofloat(edit1->text); b=strtofloat(edit2->text); c=strtofloat(edit3->text); d=b*b-4*a*c; if (d>=0) else x1=(-b-sqrt(d))/(2*a); x2=(-b+sqrt(d))/(2*a); Edit4->Text=FloatToStr(x1); Edit5->Text=FloatToStr(x2); ShowMessage("Нет действительных корней"); В разделе директив препроцессора модуля формы добавьте строку #include Данный заголовочный файл позволит воспользоваться библиотекой математических функций (в нашем случае функцией вычисления квадратного корня). Отметим в тексте следующие моменты. Для вычислений мы использовали только локальные переменные, так как их не надо использовать в других процедурах. Для превращения строки символов в число и обратного преобразования используются функции StrToFloat() и FloatToStr() соответственно. Для выдачи сообщения «Нет действительных корней» используется функция Windows вызова диалогового окна ShowMessage(). Определим функцию обработки щелчка по кнопке «Выход». Щелкните дважды по данной кнопке и в появившемся окне редактора кода добавьте в функцию Button2Click строку 18

19 Form1->Close(); (Close() метод, закрывающий окно нашего приложения.) Сохраните проект и запустите его на выполнение. Проверьте его работу при различных исходных данных. Если система обнаружит ошибки, устраните их и снова запустите проект на выполнение. Определим теперь события меню и нажатия кнопок на панели инструментов. Для этого нам не понадобится писать никакого кода. Мы свяжем нужные события с уже определенными событиями щелчками по кнопкам «Вычислить» и «Выход». Щелкните по строке меню и затем выберите первый пункт меню «Вычислить». В инспекторе объектов на странице «Events» в строке обработчика On- Click в списке имеющихся функций выберите функцию Button1Click. Щелкните мышью по форме и то же самое проделайте с пунктом меню «Выход», только теперь свяжите его с функцией Button2Click. Выберите пункт меню «Справка», в инспекторе объектов дважды щелкните в строке обработчика OnCliсk, в редакторе кодов в функцию N3Click добавьте команду Form2->ShowModal(); В разделе директив модуля главной формы не забудьте добавить директиву подключения заголовочного файла модуля справки #include "имя_модуля_справки.h". Здесь имя_модуля_справки имя, с которым вы сохранили модуль на диске. Метод ShowModal() вызывает окно справки, причем пока оно не будет закрыто, перейти в главное окно приложения не удастся (модальное состояние окна). Выделите кнопку «Вычислить» на панели инструментов и в инспекторе объектов для обработчика OnClick выберите функцию Button1Click; для кнопки Выход функцию Button2Click. Для кнопки «Справка» создайте процедуру, обрабатывающую щелчок аналогично тому, как вы сделали это для пункта меню «Справка». Осталось определить работу строки состояния StatusBar1. Выделите ее на форме, перейдите на страницу «Properties» инспектора объектов, найдите свойство SimplePanel и присвойте ему значение true. Щелкните дважды по форме и в теле функции FormCreate поместите следующий код: void fastcall TForm1::FormCreate(TObject *Sender) StatusBar1->SimpleText="Введите коэффициенты уравнения"; Сохраните проект и проверьте работу приложения. 19

20 ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ В ПРОГРАММЕ В разработанной программе мы не учли возможные ошибки ввода данных. Во-первых, пользователь может ввести последовательность символов, которая не является числом. Во-вторых, пользователь может ввести значение коэффициента a = 0, что приведет к попытке деления на ноль в операторах, вычисляющих корни уравнения. Обе ситуации называются исключительными. Примерами других исключительных ситуаций являются переполнение, попытка открыть несуществующий файл и т. п. Для контроля за подобными ситуациями в системе C++ Builder существует так называемый механизм обработки исключительных ситуаций. При возникновении исключительной ситуации программа генерирует так называемое исключение и выполнение дальнейших вычислений в данном блоке прекращается. Исключение это объект специального вида, характеризующий возникшую в программе исключительную ситуацию. Особенностью исключений является то, что они сугубо временные объекты. Как только они обрабатываются каким-либо обработчиком, они разрушаются. Если исключение нигде не перехвачено в программе, то оно обрабатывается стандартным методом Tapplication.HandleException. Данный метод обеспечивает выдачу пользователю краткой информации в окне сообщений и уничтожение экземпляра исключения. Наиболее кардинальный способ борьбы с исключениями обработка их с помощью логических блоков try и catch: try //операторы, которые могут вызвать возникновение исключительной //ситуации catch (Тип &e) // команды, обрабатывающие данную исключительную ситуацию Здесь Тип это тип (класс) исключения. В С++ Builder определен целый ряд классов исключений. Рассмотрим два из них, нужных в нашей программе: класс EConvertError, связанный c ошибкой преобразования строк или объектов (в частности, в функции StrToFloat), класс EZeroDivdide, связанный с попыткой деления на нуль числа с плавающей запятой. 20

21 Измените текст функции Button1Click в соответствии с приведенным ниже текстом. void fastcall TForm1::Button1Click(TObject *Sender) float a,b,c,d,x1,x2; try a=strtofloat(edit1->text); b=strtofloat(edit2->text); c=strtofloat(edit3->text); catch(econverterror &e) ShowMessage("Ошибочные данные!"); return; d=b*b-4*a*c; if (d>=0) try x1=(-b-sqrt(d))/(2*a); x2=(-b+sqrt(d))/(2*a); catch(ezerodivide &e) ShowMessage("Коэффициент а не может быть равен нулю!"); return; Edit4->Text=FloatToStr(x1); 21

22 Edit5->Text=FloatToStr(x2); else ShowMessage("Действительных корней нет"); Сохраните изменения в тексте модуля и проверьте отсутствие ошибок.!!! Если вы запустите проект на выполнение и зададите ошибочные данные, то отладчик перехватит исключительную ситуацию и выполнение программы прервется. Нажмите повторно кнопку «Run», и вы увидите работу определенного вами обработчика исключения. Однако после того как вы сделаете законченный проект, исключительные ситуации будут обрабатываться в соответствии с кодом вашей программы. 22

23 ДОРАБОТКА ИНТЕРФЕЙСА ПРИЛОЖЕНИЯ Доработаем интерфейс нашей программы. Во-первых, сделаем так, чтобы для кнопок панели инструментов появлялись подсказки. Выделите на панели инструментов кнопку «Вычислить» и в инспекторе объектов задайте ее свойству Hint значение «Вычислить», а свойству ShowHint значение true. То же самое проделайте для остальных кнопок. Сохраните изменения в проекте. Теперь сделаем возможным использование «горячих» клавиш при работе с меню. Задать «горячие» клавиши можно двумя способами: 1) указать «горячую» букву в заголовке пункта меню. Для этого щелкните по компоненту-меню и в инспекторе объектов в каждом заголовке пункта меню перед нужной буквой поставьте значок &, например так: &Вычислить «Горячие» буквы окажутся подчеркнутыми; 2) выбрать для данного пункта меню свойство ShortCut и в нем в распахивающемся списке выбрать нужную комбинацию Ctrl+буква. Задайте комбинации «горячих» клавиш для пунктов меню и сохраните изменения в проекте. Последнее, что остается нам сделать, это задать последовательность перехода между элементами управления при нажатии клавиши TAB. Это стандартный прием в системе Windows. Выделите все элементы управления на форме и в контекстном меню выберите пункт «Tab Order» (порядок обхода). С помощью кнопок со стрелками перегруппируйте список элементов в следующем порядке: Edit1, Edit2, Edit3, Button1 и нажмите кнопку «ОК». Сохраните изменения в проекте. После запуска программы станет активным поле ввода Edit1. Нажимая клавишу «TAB», вы сможете последовательно обойти остальные поля ввода.!!! Перемещаться по элементам управления в обратную сторону можно с помощью одновременного нажатия клавиш «SHIFT» и «TAB». 23

24 ПОДГОТОВКА ПРИЛОЖЕНИЯ К РАСПРОСТРАНЕНИЮ Мы завершили разработку проекта и остается подготовить его к распространению. Сделаем так, чтобы окно программы всегда появлялось в центре экрана. Задайте свойству Position главной формы значение poscreencenter. Выберем значок для программы (до сих пор использовался стандартный значок С++ Builder). Изменяется значок следующим образом: введите команду Project / Options; выберите вкладку Application; щелкните по кнопке Load Icon; используя диалоговое окно открытия файла, выберите заранее подготовленный файл значка (он должен иметь расширение.ico). Большой набор готовых значков имеется в стандартной библиотеке C++ Builder в подкаталоге \Images\Icons. Выберите нужную картинку и щелкните по кнопке «Открыть»; в строке Title введите подпись «Квадратное уравнение»; щелкните на кнопке «ОК». Программа, созданная в С++ Builder, использует DLL-версию библиотеки времени выполнения (RTL) и специальные динамические библиотеки пакеты. Чтобы программа могла работать на другом компьютере, необходимо перенести библиотеку на этот компьютер месте с exe-файлом этой программы или включить библиотеку и пакеты в exe-файл. Чтобы сделать последнее необходимо выполнить следующее: 1) введите команду Project / Options и выберите вкладку «Packages», сбросьте флажок «Build with runtime packages»; 2) выберите вкладку «Linker» и сбросьте флажок «Use dynamic RTL». Теперь необходимо заново скомпилировать проект. Выполните команду Project Имя_Вашего_Проекта / Build. Теперь в каталоге проекта появился исполняемый файл вашего проекта (файл с расширением.exe) с подключенными библиотеками. 24

25 РАБОТА С ГРАФИКОЙ Рисовать в программе можно непосредственно на поверхности формы, либо выделяя на форме специальные области для рисования это делается с помощью компонентов Image и PaintBox. Форма и указанные компоненты имеют свойство Canvas (Холст), которое позволяет выводить графику. Например, оператор Form1->Canvas->Rectangle(20, 20, 60, 60); рисует на поверхности формы прямоугольник. В следующей таблице приводятся методы свойства Canvas, позволяющие рисовать основные графические примитивы. Таблица 1 Методы вычерчивания графических примитивов Метод MoveTo(x, y) LineTo(x1, y1) Polyline(points, n) Rectangle(x1, y1, x2, y2) y2) y2) FillRect(x1, y1, x2, Ellipse(x1, y1, x2, Arc(x1, y1, x2, y2, x3, y3, x4, y4) Pie(x1, y1, x2, y2, x3, y3, x4, y4) TextOutA(x, y, текст) Действие Перемещает курсор в позицию с заданными координатами (отсчет координат ведется от левого верхнего угла формы или области рисования) Рисует прямую линию от текущей позиции до точки с координатами (x1, y1) Рисует ломаную линию; points массив точек перегиба линии (см. пример ниже), n количество узлов линии Рисует прямоугольник, x1, y1, x2, y2 коорди-наты левого верхнего и правого нижнего углов прямоугольника соответственно. Рисует закрашенный прямоугольник Рисует эллипс. X1, y1, x2, y2 задают координаты прямоугольника, в который вписывается эллипс 1 2 Рисует дугу. Параметры x1, y1, x2, y2 определяют эллипс, частью которого является дуга, x3, y3, x4, y4 задают начальную и конечную точку дуги Рисует сектор эллипса или круга. Сектор вырезается против часовой стрелки от точки с координатами (x3, y3) до точки (x4, y4) Выводит текст, заданный третьим параметром. Параметры x, y определяют начальную точку, с которой начинается вывод 25

26 Для вывода отдельных точек используется свойство Pixels[x][y] свойства Canvas. Например, следующий оператор выводит на форму точку красного цвета с координатами (50, 50): Form1->Canvas->Pilxels=clRed; Здесь clred именованная константа, соответствующая красному цвету. Для окрашивания точки в произвольный цвет используется функция RGB(red, green, blue), где параметры red, green, blue задают доли красного, зеленого и синего цвета в составе данного цвета и могут принимать значения в интервале (0, 255), например: Form1->Canvas->Pilxels=RGB(0, 163, 78); Вышеописанные методы обеспечивают только вычерчивание графических примитивов. Вид графического элемента определяют свойства Pen (Карандаш) и Brush (Кисть) той поверхности (Canvas), на которой рисуется данный элемент. «Карандаш» и «кисть», являясь свойствами объекта Canvas, в свою очередь представляют собой объекты. Свойства объектов Pen и Brush описаны в следующих далее таблицах. Таблица 2 Свойство Color Width Style Свойства объекта Pen Определяет Цвет линии Толщину линии (в пикселах) Вид линии. pssolid сплошная; psclear линия не отображается; psdash пунктирная с длинными штрихами; psdot пунктирная с короткими штрихами; psdashdot чередование длинных и коротких штрихов Таблица 3 Свойства объекта Brush Свойство Определяет Color Цвет закрашивания замкнутой области Style Стиль заполнения области. bssolid сплошная заливка; bshorizontal горизонтальная штриховка; bsvertical вертикальная штриховка; bsfdiagonal диагональная штриховка с наклоном вперед; bsbdiagonal диагональная штриховка с наклоном назад; bscross в клетку; bsdiag- Cross диагональная клетка Свойство Font «холста» позволяет изменять параметры шрифта. В следующей таблице описываются свойства объекта Font. 26

27 Свойство Name Size Style Color Таблица 4 Cвойства объекта Font Определяет Используемый шрифт. Значение свойства название шрифта, например Arial Размер в пунктах Стиль начертания шрифта. Задается следующими константами: fsbold полужирный; fsitalic курсив; fsunderline подчеркнутый; fsstrikeout перечеркнутый Цвет символов. Задается с помощью именованных констант, например clred, или с помощью функции RGB() Пример 1. Вывод в области рисования PaintBox красной точки и прямой линии черного цвета по нажатии кнопки. Запустите новый проект. Поместите на форме проекта компонент PaintBox (вкладка «Win32») и кнопку Button. Для функции обработки нажатия кнопки напишите следующй код: void fastcall TForm1::Button1Click(TObject *Sender) PaintBox1->Canvas->Pixels=clRed; PaintBox1->Canvas->MoveTo(50,50); PaintBox1->Canvas->LineTo(100,100); Пример 2. Вывод заштрихованной окружности непосредственно на поверхность формы. Используем обработчик события OnPaint (перерисовка) формы. Для функции обработки события OnPaint напишите следующий код: void fastcall TForm1::FormPaint(TObject *Sender) Form1->Canvas->Ellipse(40,40,140,140); Пример 3. Использование объектов Pen и Brush. Поместите на форму еще одну кнопку Button. Для функции обработки щелчка по кнопке напишите следующий код: 27

28 void fastcall TForm1::Button2Click(TObject *Sender) Form1->Canvas->Brush->Color=clRed; Form1->Canvas->Brush->Style=bsCross; Form1->Canvas->Pen->Width=3; Form1->Canvas->Ellipse(40,40,140,140); Пример 4. Работа со шрифтом Используйте обработчик события создания формы OnPaint. Добавьте код вывода текста в функцию обработки события перерисовки формы: void fastcall TForm1::FormPaint(TObject *Sender) Builder"); Form1->Canvas->Ellipse(40,40,140,140); Form1->Canvas->Font->Name="Times New Roman"; Form1->Canvas->Font->Size=20; Form1->Canvas->Font->Color=clBlue; Form1->Canvas->TextOutA(100, 5, "Примеры работы с графикой в C++ Сохраните проект и проверьте его работу. Задание Написать программу, выводящую на форму график функции у(x)=sin(x)e x/5 в заданном пользователем интервале и с заданным шагом по x. Компонент TStringGrid (таблица) Данный компонент позволяет отображать данные на форме в виде таблицы. Находится на странице «Additional». Свойства Cells Данное свойство представляет собой массив строк, содержащий строки текста таблицы. Параметры Acol, Arow указывают соответственно номер колонки и номер строки таблицы. Первая строка и первая колонка имеют номер ноль. Если в ячейку таблицы необходимо записать числовое значение, его следует преобразовать с помощью функций IntToStr() или FloatToStr(). 28

29 Пример float x=2.4; StringGrid1->Cells="Значение аргумента"; StringGrid1->Cells="Значение функции"; StringGrid1->Cells=FloatToStr(x); StringGrid1->Cells=FloatToStr(x*x); Cols Это массив, содержащий строки для каждой колонки таблицы. Количество строк равно значению свойства RowCount. ColCount Определяет число колонок таблицы. По умолчанию равно пяти. RowCount Определяет число строк таблицы. По умолчанию равно пяти. Col Указывает на колонку активной в данный момент ячейки. Row Указывает на строку активной в данный момент ячейки. DefaultColWidth DefaultRowHeight Определяют соответственно ширину всех колонок и высоту всех строк таблицы. Для изменения высоты отдельных строк и ширины отдельных колонок следует использовать свойства RowHeights и ColWidths. ColWidths RowHeights Позволяют изменять соответственно ширину колонки и высоту строки с номером Index. DefaultDrawing Задает, будут ли автоматически рисоваться ячейки таблицы (true будут). EditorMode Определяет, можно ли производить рисование текущей ячейки таблицы. Если в наборе свойств Options (см. таблицу ниже) имеется значение goediting, то таблица автоматически переходит в режим редактирования. То же самое происходит при присвоении свойству EditorMode значения true. В то время как значения Options устанавливаются, как правило, во время разработки приложения, свойство EditorMode можно менять во время выполнения программы. Когда свойство EditorMode=true, то таблица находится в режиме редактирования, если множество Options содержит элемент. В противном случае редактировать ячейки нельзя. 29

30 Если свойство EditorMode=false и множество Options содержит элемент goediting, но не goalwaysshoweditor, то пользователь может переключиться в режим редактирования с помощью клавиши «F2». Options Данное свойство определяет внешний вид и функциональные свойства таблицы. Таблица 5 Некоторые значения свойства Options Значение Установка Действие govertline true Отображаются вертикальные линии между колонками gohorzline true Отображаются горизонтальные линии между строками gorangeselect true Пользователь может выделить блок ячеек. Однако если задан элемент goediting, это невозможно godrawfocus- Selected false Активная ячейка имеет цвет, отличный от остальных. Цвет устанавливается в свойстве Color. Если свойство имеет значение true, то активная ячейка имеет тот же цвет gorowsizing true Размеры отдельных строк могут быть изменены во время выполнения программы gocolsizing true Размеры отдельных колонок могут быть изменены во время выполнения программы goediting true Пользователь может редактировать содержимое ячейки. Невозможно выделить блок GoTabs true Можно перемещаться по ячейкам с помощью клавиш +. gothumbtracking goalwaysshoweditor true true Таблица автоматически переходит в режим редактирования (при условии, что множество Options содержит элемент goediting) Видимая часть таблицы синхронно прокручивается одновременно с перемещением бегунка на линейке прокрутки таблицы 30

31 FixedColor Определяет цвет фиксированных колонок и строк таблицы. FixedCols Определяет число фиксированных колонок таблицы (по умолчанию одна). Фиксированные колонки остаются видимыми, когда пользователь прокручивает остальные колонки. FixedRows Определяет число фиксированных строк таблицы (по умолчанию одна). Компонент TChart (диаграмма) Компонент предназначен для работы с диаграммами сложных типов. Настройка свойств компонента осуществляется в окне редактора «Editing Chart». Редактор вызывается двойным щелчком по компоненту Chart (рис. 3). Рис. 3. Окно редактора диаграммы Свойства Series Представляет массив диаграмм (рядов данных), выводимых в области компонента Chart, где Index задает номер ряда данных. Отсчет индекса ведется от нуля. Для каждой диаграммы, размещенной в области Chart, можно установить следующие параметры: тип; название; оси; 31

32 легенду; источник данных. Тип диаграммы задается на странице Series» редактора свойств диаграмм. Если формирование значений диаграммы осуществляется при выполнении приложения, то для источника данных необходимо выбрать параметр No Data на странице «Series-DataSource» редактора. Для добавления серии (ряда данных) нажмите в окне редактора на кнопку Add и в появившемся окне выберите тип диаграммы (например, Fast Line). Для задания названий серий (они будут использоваться в легенде для различения графиков) Нажмите в этом же окне кнопку «Title» она станет доступна после задания нужного количества серий (рис. 4). Рис. 4. Диалоговое окно редактора диаграммы На вкладке «Axis» задаются названия осей. Опция «Left» соответствует оси Y, опция «Bottom» оси X. Для подписи осей используйте страничку Title на вкладке «Axis». Для задания заголовка диаграммы выберите вкладку «Titles». Методы Для управления значениями, по которым строится диаграмма, часто используются методы Add, Clear и Delete. Add(AValue, ALabel, AColor) Добавляет значение к диаграмме, указанное параметром AValue; параметр ALabel задает название значения (т. е. метку оси Х); параметр AColor задает цвет. AddXY (XValue,YValue, XLabel, AColor) 32

33 Добавляет значение к диаграмме, указанное параметрами XValue, YValue (т. е. координаты точки); остальные параметры имеют тот же смысл, что и для функции Add. Пример. Строится график функции y=x^2 в интервале for(int i=0; i<10; i++) Chart1->Series->AddXY(i, i*i); Delete(ValIndex) Удаляет из диаграммы значения с номером ValIndex. Clear() Удаляет из диаграммы все значения. Пример Chart1->Series->Clear(); Задание Написать программу, рассчитывающую таблицу значений функций y1(x)= sin(x) и y2(x)= cos(x) в интервале значений a x b, х меняется с шагом dx, и строящую графики функций. Границы интервала и шаг изменения dх задает пользователь. 33

34 РАБОТА С ФАЙЛАМИ Среда C++ Builder предлагает три способа работы с файлами: работа с потоками с помощью функций ввода-вывода библиотеки С, работа с потоками в стиле С++ и с помощью методов диалоговых компонентов среды разработки. Решим следующую задачу: создадим программу «Блокнот», позволяющую набрать текст, сохранить его и считать подготовленный текстовый файл. Запустите систему программирования C++ Builder. Разместите на форме многострочное поле ввода Memo (в нем будет набираться текст) и четыре кнопки Button, которым задайте названия: «Очистить», «Записать», «Прочитать», «Выход». Для сохранения и поиска файлов воспользуйтесь компонентами SaveDialog и OpenDialog. Разместите эти компоненты на любом месте на форме, так как они являются невизуальными. Возможный вид формы показан на рис. 5. Рис. 5. Окно программы «Блокнот» С компонентом Memo вы уже работали, но рассмотрим его свойства и методы подробнее. Метод Clear() очищает окно ввода. Доступ к строкам, размещенным в окне, осуществляется через свойство Lines, представляющее массив строк. Свойство Count хранит число строк (количество элементов массива). Отсчет номеров строк начинается с нуля. Метод Add(s) добавляет строку s в список. Метод Delete(n) удаляет строку с номером n. Метод Insert (n, s) вставляет новую строку s между элементами списка в позиции n. 34

35 Метод SaveToFile("путь/имя_файла") позволяет сохранить данные, хранящиеся в поле Memo, в указанный файл. Метод LoadFromFile("путь/имя_файла") позволяет считать данные, хранящиеся в указанном файле, в поле Memo. Создадим функцию обработки щелчка по кнопке «Очистить». Текст функции представлен ниже. void fastcall TForm1::Button1Click(TObject *Sender) Memo1->Clear(); // Создадим также процедуру обработки щелчка по кнопке «Выход». Используем для завершения работы с приложением метод Close. void fastcall TForm1::Button4Click(TObject *Sender) Form1->Close(); // Прежде чем разработать функции обработки оставшихся событий, опишем работу с диалоговыми окнами SaveDialog и OpenDialog. Для вызова окон используется метод Execute(). Свойство FileName хранит имя файла. Свойство Filter позволяет настроить фильтры для поиска файлов. Свойство DefaultExt позволяет определить расширение, которое автоматически будет добавлено к имени файла. Создадим функцию обработки щелчка по кнопке «Сохранить». Текст функции приведен ниже. void fastcall TForm1::Button3Click(TObject *Sender) SaveDialog1->DefaultExt="txt"; if (SaveDialog1->Execute()) Memo1->Lines->SaveToFile(SaveDialog1->FileName); 35

36 // Создадим функцию обработки щелчка по кнопке «Прочитать». Текст функции представлен ниже. void fastcall TForm1::Button2Click(TObject *Sender) OpenDialog1->DefaultExt="txt"; if (OpenDialog1->Execute()) Memo1->Lines->LoadFromFile(OpenDialog1->FileName); // Сохраните проект и проверьте его работу. Если ошибок в проекте нет, сделайте отчуждаемое приложение. 36

37 РАБОТА С БАЗАМИ ДАННЫХ Настройка Borland DataBase Engine (BDE) BDE это процессор баз данных (БД); он определяет технологию доступа к данным. BDE administrator 5.0 BDE administrator программа настройки конфигурации BDE. Программа запускается с помощью главного меню Windows командой Пуск / Программы / Borland C++ Builder / BDE administrator. Основное окно программы содержит две панели. Левая включает в себя блокнот с двумя страницами, на которых представлены следующие параметры настройки: DataBases (базы данных); Configuration (конфигурация). На правой панели находится блокнот со страницей «Definiton» (настройка), появляющийся при выборе параметра в левой панели. Список свойств разделен на две части: Type содержит название параметра; Левая содержит значение параметра. Настройка глобальных псевдонимов Первая страница в левой панели окна BDE administrator предназначена для просмотра, добавления, удаления и модификации псевдонимов и их параметров, обеспечивающих доступ к соответствующим БД более простым способом. Псевдоним в дереве БД может находиться в следующих состояниях: закрыт, открыт, изменен и создан. Для добавления псевдонима используется команда меню Object / New. В появившемся окне в строке «DataBase Driver Name» следует выбрать значение STANDART для создания БД в формате Paradox, Dbase или FoxPro либо значение MSACCESS для создания БД в формате MS ACCESS. Каждый псевдоним имеет набор свойств. Для псевдонимов, созданных на основе драйвера STANDART, они следующие: TYPE название драйвера; DEFAULT DRIVER название драйвера; ENABLED BCD признак перевода значений десятичных полей в двоично-десятичные; PATH путь к папке, где находятся таблицы БД. Закрытый псевдоним можно переименовать или удалить, используя команду меню Object / Rename Object / Delete. 37


Лекция 24 Введение в объектно-ориентированное программирование Объекты и классы Основными понятиями ООП в C++ является объект. Объект это некая программная единица, объединяющая в себе свойства (атрибуты)

MS Access. Формы Лекции по дисциплине «Основы программирования и информационных технологий», прочитанные на кафедре ФМЭГ ФТ-факультета НТУ «ХПИ» 1 Формы Существует три способа ввода информации в Access:

Практическая работа 3 Создание формы Форма это объект базы данных, который можно использовать для ввода, изменения или отображения данных из таблицы или запроса. Формы могут применяться для управления

Работа с таблицами 1. Преобразование текста в таблицу. а) Вставьте знаки разделителей, такие как запятая или знак табуляции, в местах, где текст должен быть разбит по столбцам. Используя знак абзаца, укажите,

Работа с шаблонами типовых документов Руководство пользователя Cognitive Technologies Москва, 2015 2 АННОТАЦИЯ В настоящем документе приводятся сведения об использовании в программном комплексе «Е1 Евфрат»

РЕДАКТОР VISUAL BASIC Гедранович Валентина Васильевна 28 июня 2012 г. Аннотация Глава 18 из УМК: Гедранович, В.В. Основы компьютерных информационных технологий: учеб.-метод. комплекс / В.В. Гедранович,

ЛЕКЦИЯ-1. ВВЕДЕНИЕ. НАЗНАЧЕНИЕ, СОСТАВ И ОСНОВНЫЕ ЭЛЕМЕНТЫ ИНТЕРФЕЙСА ПРИКЛАДНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ ОБРАБОТКИ ДЕЛОВОЙ ИНФОРМАЦИИ Вопросы: 1. Понятие программного обеспечения и его классификация

Тема 8 Стили Стиль это набор параметров форматирования, имеющий имя. Стили применяются: - для профессионального оформления документа; - для быстрого изменения параметров текста; - для придания однородности

Лабораторная работа 12. Тема: Многооконные приложения. Модальные и немодальные окна. Основные вопросы: Применение в проектах нескольких форм. Рассмотрение различных видов окон модальных и немодальных.

Лабораторная работа 7 Тема: Стилевое форматирование документов. Создание оглавления. Использование стилей В процессе создания документа часто приходится иметь дело с заголовками. Как правило, заголовки

Полосы прокрутки 3 ЛАБОРАТОРНАЯ РАБОТА 1 СПРАВОЧНАЯ СИСТЕМА И ЗАПУСК ПРОГРАММ В WINDOWS. Задания: Включите компьютер и загрузите операционную систему Windows. На поверхности Рабочего стола найдите панель

6. ПРОГРАММА PAINT 6.1. Общие сведения Программа Paint является одним из наиболее популярных графических редакторов в среде начинающих пользователей. Она предназначена для просмотра, создания и редактирования

ГБОУ ВПО «Смоленская государственная медицинская академия» Министерства здравоохранения Российской Федерации Факультет «Стоматологический» Кафедра физики, математики и медицинской информатики Обсуждена

OpenOffice.org Impress Impress программа в составе OpenOffice.org для работы со слайд-шоу (презентациями). Вы можете создавать слайды, которые содержат много различных элементов, включая текст, маркированные

ИНСТРУКЦИЯ К HTML РЕДАКТОРУ CKEDITOR Описание редактора CKeditor Форматирование текста 1. Сервисы редактора CKeditor 2. Стили шрифта 3. Структурирование текста 4. Выравнивание текста 5. Вставка ссылок,

Глава 3 Пакет программ Microsoft Office 2013 В этой главе мы рассмотрим работу некоторых приложений, входящих в состав Microsoft Office 2013. Объем данной книги не позволяет глубоко изучить работу с этими

Оглавление. 1 ТЕКСТОВЫЙ РЕДАКТОР WORD...2 ПАНЕЛИ ИНСТРУМЕНТОВ...2 СПРАВОЧНАЯ СИСТЕМА...2 ОСНОВЫ РАБОТЫ С ТЕКСТОМ...2 ВСТАВКА ТЕКСТА...2 УДАЛЕНИЕ ТЕКСТА...2 ВЫДЕЛЕНИЕ ТЕКСТА...2 ЗАМЕНА ВЫДЕЛЕННОГО ТЕКСТА

РАБОТА С СИСТЕМОЙ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ MICROSOFT ACCESS 1 ОСНОВНЫЕ ТЕРМИНЫ Запрос - Запросы являются мощным средством обработки данных, хранимых в таблицах Access. С помощью запросов можно просматривать,

Министерство Путей Сообщения Российской Федерации Московский государственный университет путей сообщения (МИИТ) Кафедра «Энергоснабжение электрических железных дорог» Утверждено редакционно-издательским

ОСНОВЫ РАБОТЫ В MICROSOFT ACCESS. ПРОЕКТИРОВАНИЕ БАЗ ДАННЫХ. СОЗДАНИЕ БАЗЫ ДАННЫХ. СОЗДАНИЕ ФОРМ, ОТЧЕТОВ, ЗАПРОСОВ 1. Проектирование баз данных 2. Создание базы данных 3. Создание форм, отчетов, запросов

Основы работы в программе MS Word 2007 Описание окна программы После запуска программы MS Word на экране открывается ее окно. В заголовке окна написано имя открытого файла или Документ1, Документ2, если

Как открыть программу Microsoft Word 2010 3. Основы работы в MicrosoftWord 2010 MicrosoftWord это многофункциональная программа обработки (редактор) текстов настольная издательская система. В Word е мы

2 10 Создание графических приложений в среде Scilab Scilab позволяет создавать не только обычные программы для автоматизации расчетов, но и визуальные приложения, которые будут запускаться в среде Scilab.

Тамбовское областное государственное бюджетное образовательное учреждение среднего профессионального образования «Приборостроительный колледж» Интерфейс текстового процессора Microsoft Word 2007 Понятие

Практическая работа 4 «Справочник», Стр.-1, Всего - 6 Практическая работа 4, СПРАВОЧНИК Постановка задачи Создать программу, выполняющую следующие действия. После запуска программы пользователь выбирает

ОБЛАСТНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ СРЕДНЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «СМОЛЕНСКИЙ АВТОТРАНСПОРТНЫЙ КОЛЛЕДЖ имени Е.Г. Трубицына» МЕТОДИЧЕСКИЕ УКАЗАНИЯ по подготовке к выполнению

ТЕСТ: "СУБД ACCESS 2007 - КОНТРОЛЬНЫЙ ТЕСТ". Задание #1 Сколько полей выбрано для включения в формируемый ОТЧЕТ Выберите один из 5 вариантов ответа: 1) 1 2) 2 3) 3 4) 4 5) 5 Задание #2 Приведут ли указанные

Практическое занятие 1 Создание пользовательских форм VBA При работе в Excel, как и в большинстве, других приложениях, приходиться сталкиваться с такими элементами интерфейса, как диалоговые окна. Диалоговые

Знакомство с Open Office OO сложная офисная система, предназначенная для набора, редактирования и форматирования текстовых документов любой сложности. Помимо текстовых документов, Open Office позволяет

Муниципальное образовательное учреждение средняя общеобразовательная школа 7 г. Коломны Московской области Разработка урока изучения среды ООП Delphi по теме: «Общие свойства некоторых компонентов»

Знакомство с Micrsft Excel 1. Структура таблицы 1. Электронная таблица состоит из ячеек, находящихся на пересечении строк и столбцов. Строки нумеруются числами, столбцы - латинскими буквами. Каждая ячейка

ЛЕКЦИЯ 7. ПРОГРАММА TOTAL COMMANDER Цель работы: Изучение принципов работы файлового менеджера Total Commander. Файловый менеджер Total Commander предоставляет еще один способ работы с файлами и папками

Работа 10 Таблицы и диаграммы в Word. Вычисления в таблицах Цель работы: научиться вставлять таблицы и диаграммы в документ, выполнять вычисления в таблицах Содержание работы: 1 Ввод и форматирование таблиц

Лабораторная работа 2. Основы работы с MathCAD MathCAD, как и большинство других программ работает с документами. С точки зрения пользователя, документ - это чистый лист бумаги, на котором можно размещать

Лабораторная работа 1. Тема. Основы объектно-ориентированного программирования. Система визуального программирования Borland Delphi. Создание интерфейса программы. Настройка свойств формы (окна). Основные

Менеджер библиотеки стандартных компонентов CSoft Development, 2009. Все права защищены Содержание Менеджер библиотеки стандартных компонентов...2 Замечание по безопасности...4 Запуск Менеджера библиотеки

Надписи к пространственным объектам в ArcMap Надписи - это любой текст, помогающий идентифицировать пространственные объекты на карте и лучше понимать содержание карты. В ArcMap можно надписывать пространственные

ОАО «Бауманн» УТВЕРЖДЕН RU.74533456.00009-02 34 01-ЛУ Интегрированный комплекс безопасности «КОДОС» Программа «Мнемосхема» Руководство оператора RU.74533456.00009-02 34 01 2015 СОДЕРЖАНИЕ 1 ОБЩИЕ ПОЛОЖЕНИЯ...

Назначение программы Автоматизация всех видов действий с текстами. Функции создание, редактирование, форматирование, сохранение, обработка и вывод на печать. Word 2007 профессиональный текстовый редактор,

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ 5 ТЕМА: Комплексное использование возможностей MS Word для создания больших документов ЦЕЛЬ РАБОТЫ: Научиться комплексно использовать возможности MS Word для создания больших документов

Лабораторная работа 8 «Технология работы в программе Проводник» Цель работы: изучение приемов работы с программой Проводник 1. Краткие теоретические сведения В составе операционной системы Windows XP имеется

Глава 8 Создание и использование форм Как уже отмечалось в главах 1 и 2 этой книги, такие объекты базы данных, как формы, предназначены в первую очередь для работы одновременно только с одной записью.

ЛАБОРАТОРНАЯ РАБОТА 1. 1. Вход в среду VB Для входа в среду VB используется вкладка Разработчик окна Excel, которая находится в одном ряду с вкладками Главная, Вставка и др. При ее отсутствии следует выполнить

ВЕРТИКАЛЬ-Отчеты Система формирования технологической документации Руководство пользователя Информация, содержащаяся в данном документе, может быть изменена без предварительного уведомления. Никакая часть

Работа с программой ABBYY FineReader Банк 7 Руководство пользователя ABBYY 2013 год Обработка документов в программе ABBYY FineReader Банк состоит из четырех этапов: Загрузка Распознавание Проверка Выгрузка

ПРОГРАММА «МЕНЕДЖЕР МОДУЛЕЙ ПАМЯТИ» V 1.0.0 РУКОВОДСТВО ПО ЭКСПЛУАТАЦИИ СОДЕРЖАНИЕ 1. Описание программы 3 1.1. Назначение программы 3 1.2. Системные требования 3 1.3. Установка программы 3 2. Пользовательский

Удалено: 1С-Битрикс: Управление сайтом 6.x Руководство по созданию и размещению веб-форм на сайте Содержание Введение...3 Создание веб-формы в упрощенном режиме...3 Добавление веб-формы...4 Создание вопросов

164 1С:Предприятие 8.2. Практическое пособие разработчика Или можно выбрать их из выпадающего списка, доступного, когда вы находитесь в модуле формы (рис. 5.19). Рис. 5.19. Список событий формы В этом

Модуль 2. Компьютер как совокупность аппаратных и программных средств ПРИЛОЖЕНИЕ 2 Загрузка операционной системы После включения компьютера должно пройти некоторое время, прежде чем он будет готов к работе.

ОГЛАВЛЕНИЕ Глава 13: РАЗМЕЩЕНИЕ НЕСКОЛЬКИХ ГРАФИКОВ Оглавление ОБЗОР...2770 МАСТЕР АВТОМАТИЧЕСКОГО РАЗМЕЩЕНИЯ НЕСКОЛЬКИХ ГРАФИКОВ...2771 Использование окна Мастер автоматического размещения нескольких

Практическое занятие. «Работа со стилями и шаблонами. Создание автоматического оглавления и списка иллюстраций» Форматирование стилей и создание шаблонов. 1) Запустите MS Word. 2) Установите следующие

Практическая работа 6 Подготовка документов с использованием текстовых процессоров типа Microsoft Word Цель работы: Знакомство с особенностями электронных документов и средствами их редактирования в среде

ПРОГРАММНАЯ ОБОЛОЧКА FAR MANAGER План: Программные оболочки. Far Manager Запуск FM и элементы интерфейса Панели FM Функциональные клавиши Меню FM Выбор представления панелей с помощью меню Сортировка объектов

Этапы разработки базы данных С базами данных, как правило, работают не профессионалы, поэтому можно сформулировать следующие требования к БД. Разработчики, при создании БД, должны ориентироваться на эти

Краткие указания по работе с программой Microsoft PowerPoint Действие Алгоритм С чего начать? Запуск программы 1. На панели задач щелкните кнопку Пуск. 2. В открывшемся меню, щелкните команду Программы.

Лабораторная работа 8 «Настройка параметров периферийных устройств компьютера» Цель работы: получение сведений по настройке пользовательского интерфейса периферийных устройств средствами операционной системы

В текстах лекций рассмотрены основные принципы и средства объектно-ориентированного программирования с применением языка С++ и системы программирования Borland C++. В приложении приведены задачи для самостоятельного решения. Предполагается, что читатель уже знаком с основами универсальных языков программирования. Пособие предназначено для студентов специальности "Прикладная математика" и может быть использовано студентами других специальностей для самостоятельного изучения С++.

1. Объектно-ориентированный подход в программировании

1.1 Технологии программирования

Технология программирования - это совокупность методов и средств разработки (написания) программ и порядок применения этих методов и средств.

На ранних этапах развития программирования, когда программы писались в виде последовательностей машинных команд, какая-либо технология программирования отсутствовала. Первые шаги в разработке технологии состояли в представлении программы в виде последовательности операторов. Написанию последовательности машинных команд предшествовало составление операторной схемы, отражающей последовательность операторов и переходы между ними. Операторный подход позволил разработать первые программы для автоматизации составления программ - так называемые составляющие программы.

С увеличением размеров программ стали выделять их обособленные части и оформлять их как подпрограммы. Часть таких подпрограмм объединялась в библиотеки, из которых подпрошраммы можно было включать в рабочие программы и затем вызывать из рабочих программ. Это положило начало процедурному программированию - большая программа представлялась совокупностью процедур-подпрограмм. Одна из подпрограмм являлась главной, и с нее начиналось выполнение программы.

В 1958 году были разработаны первые языки программирования, Фортран и Алгол-58. Программа на Фортране состояла из главной программы и некоторого количества процедур - подпрограмм и функций. Программа на Алголе-58 и его последующей версии Алголе-60 представляла собой единое целое, но имела блочную структуру, включающую главный блок и вложенные блоки подпрограмм и функций. Компиляторы для Фортрана обеспечивали раздельную трансляцию процедур и последующее их объединение в рабочую программу, первые компиляторы для Алгола предполагали, что транслируется сразу вся программа, раздельная трансляция процедур не обеспечивалась.

Процедурный подход потребовал структурирования будущей программы, разделения ее на отдельные процедуры. При разработке отдельной процедуры о других процедурах требовалось знать только их назначение и способ вызова. Появилась возможность перерабатывать отдельные процедуры, не затрагивая остальной части программы, сокращая при этом затраты труда и машинного времени на разработку и модернизацию программ.

Следующим шагом в углублении структурирования программ стало так называемое структурное программирование, при котором программа в целом и отдельные процедуры рассматривались как последовательности канонических структур: линейных участков, циклов и разветвлений. Появилась возможность читать и проверять программу как последовательный текст, что повысило производительность труда программистов при разработке и отладке программ. С целью повышения структурности программы были выдвинуты требования к большей независимости подпрограмм, подпрограммы должны связываться с вызывающими их программами только путем передачи им аргументов, использование в подпрограммах переменных, принадлежащих другим процедурам или главной программе, стало считаться нежелательным.

Процедурное и структурное программирование затронули, прежде всего, процесс описания алгоритма как последовательности шагов, ведущих от варьируемых исходных данных к искомому результату. Для решения специальных задач стали разрабатываться языки программирования, ориентированные на конкретный класс задач: на системы управления базами данных, имитационное моделирование и т.д.

При разработке трансляторов все больше внимания стало уделяться обнаружению ошибок в исходных текстах программ, обеспечивая этим сокращение затрат времени на отладку программ.

Применение программ в самых разных областях человеческой деятельности привело к необходимости повышения надежности всего программного обеспечения. Одним из направлений совершенствования языков программирования стало повышения уровня типизации данных. Теория типов данных исходит из того, что каждое используемое в программе данное принадлежит одному и только одному типу данных. Тип данного определяет множество возможных значений данного и набор операций, допустимых над этим данным. Данное конкретного типа в ряде случаев может быть преобразовано в данное другого типа, но такое преобразование должно быть явно представлено в программе. В зависимости от степени выполнения перечисленных требований можно говорить об уровне типизации того или иного языка программирования. Стремление повысить уровень типизации языка программирования привело к появлению языка Паскаль, который считается строго типизированным языком, хотя и в нем разрешены некоторые неявные преобразования типов, например, целого в вещественное. Применение строго типизированного языка при написании программы позволяет еще при трансляции исходного текста выявить многие ошибки использования данных и этим повысить надежность программы. Вместе с тем строгая типизация сковывала свободу программиста, затрудняла применение некоторых приемов преобразования данных, часто используемых в системном программировании. Практически одновременно с Паскалем был разработан язык Си, в большей степени ориентированный на системное программирование и относящийся к слабо типизированным языкам.

Все универсальные языки программирования, несмотря на различия в синтаксисе и используемых ключевых словах, реализуют одни и те же канонические структуры: операторы присваивания, циклы и разветвления. Во всех современных языках присутствуют предопределенные (базовые) типы данных (целые и вещественные арифметические типы, символьный и, возможно, строковый тип), имеется возможность использования агрегатов данных, в том числе массивов и структур (записей). Для арифметических данных разрешены обычные арифметические операции, для агрегатов данных обычно предусмотрена только операция присваивания и возможность обращения к элементам агрегата. Вместе с тем при разработке программы для решения конкретной прикладной задачи желательна возможно большая концептуальная близость текста программы к описанию задачи. Например, если решение задачи требует выполнения операций над комплексными числами или квадратными матрицами, желательно, чтобы в программе явно присутствовали операторы сложения, вычитания, умножения и деления данных типа комплексного числа, сложения, вычитания, умножения и обращения данных типа квадратной матрицы. Решение этой проблемы возможно несколькими путями:

Построением языка программирования, содержащего как можно больше типов данных, и выбором для каждого класса задач некоторого подмножества этого языка. Такой язык иногда называют языком-оболочкой. На роль языка-оболочки претендовал язык ПЛ/1, оказавшийся настолько сложным, что так и не удалось построить его формализованное описание. Отсутствие формализованного описания, однако, не помешало широкому применению ПЛ/1 как в Западной Европе, так и в СССР.

Построением расширяемого языка, содержащего небольшое ядро и допускающего расширение, дополняющее язык типами данных и операторами, отражающими концептуальную сущность конкретного класса задач. Такой язык называют языком-ядром. Как язык-ядро были разработаны языки Симула и Алгол-68, не получившие широкого распространения, но оказавшие большое влияние на разработку других языков программирования.

Дальнейшим развитием второго пути явился объектно-ориентированный подход к программированию, рассматриваемый в следующем параграфе.

1.2. Сущность объектно-ориентированного подхода к программированию

Основные идеи объектно-ориентированного подхода опираются на следующие положения:

Программа представляет собой модель некоторого реального процесса, части реального мира.

Модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов.

Объект описывается набором параметров, значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект.

Взаимодействие между объектами осуществляется посылкой специальных сообщений от одного объекта к другому. Сообщение, полученное объектом, может потребовать выполнения определенных действий, например, изменения состояния объекта.

Объекты, описанные одним и тем же набором параметров и способные выполнять один и тот же набор действий представляют собой класс однотипных объектов.

С точки зрения языка программирования класс объектов можно рассматривать как тип данного, а отдельный объект - как данное этого типа. Определение программистом собственных классов объектов для конкретного набора задач должно позволить описывать отдельные задачи в терминах самого класса задач (при соответствующем выборе имен типов и имен объектов, их параметров и выполняемых действий).

Таким образом, объектно-ориентированный подход предполагает, что при разработке программы должны быть определены классы используемых в программе объектов и построены их описания, затем созданы экземпляры необходимых объектов и определено взаимодействие между ними.

Классы объектов часто удобно строить так, чтобы они образовывали иерархическую структуру. Например, класс “Студент”, описывающий абстрактного студента, может служить основой для построения классов “Студент 1 курса”, “Студент 2 курса” и т.д., которые обладают всеми свойствами студента вообще и некоторыми дополнительными свойствами, характеризующими студента конкретного курса. При разработке интерфейса с пользователем программы могут использовать объекты общего класса “Окно” и объекты классов специальных окон, например, окон информационных сообщений, окон ввода данных и т.п. В таких иерархических структурах один класс может рассматриваться как базовый для других, производных от него классов. Объект производного класса обладает всеми свойствами базового класса и некоторыми собственными свойствами, он может реагировать на те же типы сообщений от других объектов, что и объект базового класса и на сообщения, имеющие смысл только для производного класса. Обычно говорят, что объект производного класса наследует все свойства своего базового класса.

Технологии программирования. Сущность объектно-ориентированного подхода к программированию. Назначение Си, исторические сведения. Алфавит, базовые типы и описание данных. Структуры и объединения. Операторы Си++. Функции. Библиотека времени выполнения.

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Объектно-ориентированное программирование на Borland C++

Тексты лекций, прочитанных в Московском государственном университете экономики, статистики и информатики

В текстах лекций рассмотрены основные принципы и средства объектно-ориентированного программирования с применением языка С++ и системы программирования Borland C++. В приложении приведены задачи для самостоятельного решения. Предполагается, что читатель уже знаком с основами универсальных языков программирования. Пособие предназначено для студентов специальности "Прикладная математика" и может быть использовано студентами других специальностей для самостоятельного изучения С++.

1. Объектно-ориентированный подход в программировании

1.1 Технологии программирования

Технология программирования - это совокупность методов и средств разработки (написания) программ и порядок применения этих методов и средств.

На ранних этапах развития программирования, когда программы писались в виде последовательностей машинных команд, какая-либо технология программирования отсутствовала. Первые шаги в разработке технологии состояли в представлении программы в виде последовательности операторов. Написанию последовательности машинных команд предшествовало составление операторной схемы, отражающей последовательность операторов и переходы между ними. Операторный подход позволил разработать первые программы для автоматизации составления программ - так называемые составляющие программы.

С увеличением размеров программ стали выделять их обособленные части и оформлять их как подпрограммы. Часть таких подпрограмм объединялась в библиотеки, из которых подпрошраммы можно было включать в рабочие программы и затем вызывать из рабочих программ. Это положило начало процедурному программированию - большая программа представлялась совокупностью процедур-подпрограмм. Одна из подпрограмм являлась главной, и с нее начиналось выполнение программы.

В 1958 году были разработаны первые языки программирования, Фортран и Алгол-58. Программа на Фортране состояла из главной программы и некоторого количества процедур - подпрограмм и функций. Программа на Алголе-58 и его последующей версии Алголе-60 представляла собой единое целое, но имела блочную структуру, включающую главный блок и вложенные блоки подпрограмм и функций. Компиляторы для Фортрана обеспечивали раздельную трансляцию процедур и последующее их объединение в рабочую программу, первые компиляторы для Алгола предполагали, что транслируется сразу вся программа, раздельная трансляция процедур не обеспечивалась.

Процедурный подход потребовал структурирования будущей программы, разделения ее на отдельные процедуры. При разработке отдельной процедуры о других процедурах требовалось знать только их назначение и способ вызова. Появилась возможность перерабатывать отдельные процедуры, не затрагивая остальной части программы, сокращая при этом затраты труда и машинного времени на разработку и модернизацию программ.

Следующим шагом в углублении структурирования программ стало так называемое структурное программирование, при котором программа в целом и отдельные процедуры рассматривались как последовательности канонических структур: линейных участков, циклов и разветвлений. Появилась возможность читать и проверять программу как последовательный текст, что повысило производительность труда программистов при разработке и отладке программ. С целью повышения структурности программы были выдвинуты требования к большей независимости подпрограмм, подпрограммы должны связываться с вызывающими их программами только путем передачи им аргументов, использование в подпрограммах переменных, принадлежащих другим процедурам или главной программе, стало считаться нежелательным.

Процедурное и структурное программирование затронули, прежде всего, процесс описания алгоритма как последовательности шагов, ведущих от варьируемых исходных данных к искомому результату. Для решения специальных задач стали разрабатываться языки программирования, ориентированные на конкретный класс задач: на системы управления базами данных, имитационное моделирование и т.д.

При разработке трансляторов все больше внимания стало уделяться обнаружению ошибок в исходных текстах программ, обеспечивая этим сокращение затрат времени на отладку программ.

Применение программ в самых разных областях человеческой деятельности привело к необходимости повышения надежности всего программного обеспечения. Одним из направлений совершенствования языков программирования стало повышения уровня типизации данных. Теория типов данных исходит из того, что каждое используемое в программе данное принадлежит одному и только одному типу данных. Тип данного определяет множество возможных значений данного и набор операций, допустимых над этим данным. Данное конкретного типа в ряде случаев может быть преобразовано в данное другого типа, но такое преобразование должно быть явно представлено в программе. В зависимости от степени выполнения перечисленных требований можно говорить об уровне типизации того или иного языка программирования. Стремление повысить уровень типизации языка программирования привело к появлению языка Паскаль, который считается строго типизированным языком, хотя и в нем разрешены некоторые неявные преобразования типов, например, целого в вещественное. Применение строго типизированного языка при написании программы позволяет еще при трансляции исходного текста выявить многие ошибки использования данных и этим повысить надежность программы. Вместе с тем строгая типизация сковывала свободу программиста, затрудняла применение некоторых приемов преобразования данных, часто используемых в системном программировании. Практически одновременно с Паскалем был разработан язык Си, в большей степени ориентированный на системное программирование и относящийся к слабо типизированным языкам.

Все универсальные языки программирования, несмотря на различия в синтаксисе и используемых ключевых словах, реализуют одни и те же канонические структуры: операторы присваивания, циклы и разветвления. Во всех современных языках присутствуют предопределенные (базовые) типы данных (целые и вещественные арифметические типы, символьный и, возможно, строковый тип), имеется возможность использования агрегатов данных, в том числе массивов и структур (записей). Для арифметических данных разрешены обычные арифметические операции, для агрегатов данных обычно предусмотрена только операция присваивания и возможность обращения к элементам агрегата. Вместе с тем при разработке программы для решения конкретной прикладной задачи желательна возможно большая концептуальная близость текста программы к описанию задачи. Например, если решение задачи требует выполнения операций над комплексными числами или квадратными матрицами, желательно, чтобы в программе явно присутствовали операторы сложения, вычитания, умножения и деления данных типа комплексного числа, сложения, вычитания, умножения и обращения данных типа квадратной матрицы. Решение этой проблемы возможно несколькими путями:

Построением языка программирования, содержащего как можно больше типов данных, и выбором для каждого класса задач некоторого подмножества этого языка. Такой язык иногда называют языком-оболочкой. На роль языка-оболочки претендовал язык ПЛ/1, оказавшийся настолько сложным, что так и не удалось построить его формализованное описание. Отсутствие формализованного описания, однако, не помешало широкому применению ПЛ/1 как в Западной Европе, так и в СССР.

Построением расширяемого языка, содержащего небольшое ядро и допускающего расширение, дополняющее язык типами данных и операторами, отражающими концептуальную сущность конкретного класса задач. Такой язык называют языком-ядром. Как язык-ядро были разработаны языки Симула и Алгол-68, не получившие широкого распространения, но оказавшие большое влияние на разработку других языков программирования.

Дальнейшим развитием второго пути явился объектно-ориентированный подход к программированию, рассматриваемый в следующем параграфе.

1.2. Сущность объектно-ориентированного подхода к программированию

Основные идеи объектно-ориентированного подхода опираются на следующие положения:

Программа представляет собой модель некоторого реального процесса, части реального мира.

Модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов.

Объект описывается набором параметров, значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект.

Взаимодействие между объектами осуществляется посылкой специальных сообщений от одного объекта к другому. Сообщение, полученное объектом, может потребовать выполнения определенных действий, например, изменения состояния объекта.

Объекты, описанные одним и тем же набором параметров и способные выполнять один и тот же набор действий представляют собой класс однотипных объектов.

С точки зрения языка программирования класс объектов можно рассматривать как тип данного, а отдельный объект - как данное этого типа. Определение программистом собственных классов объектов для конкретного набора задач должно позволить описывать отдельные задачи в терминах самого класса задач (при соответствующем выборе имен типов и имен объектов, их параметров и выполняемых действий).

Таким образом, объектно-ориентированный подход предполагает, что при разработке программы должны быть определены классы используемых в программе объектов и построены их описания, затем созданы экземпляры необходимых объектов и определено взаимодействие между ними.

Классы объектов часто удобно строить так, чтобы они образовывали иерархическую структуру. Например, класс “Студент”, описывающий абстрактного студента, может служить основой для построения классов “Студент 1 курса”, “Студент 2 курса” и т.д., которые обладают всеми свойствами студента вообще и некоторыми дополнительными свойствами, характеризующими студента конкретного курса. При разработке интерфейса с пользователем программы могут использовать объекты общего класса “Окно” и объекты классов специальных окон, например, окон информационных сообщений, окон ввода данных и т.п. В таких иерархических структурах один класс может рассматриваться как базовый для других, производных от него классов. Объект производного класса обладает всеми свойствами базового класса и некоторыми собственными свойствами, он может реагировать на те же типы сообщений от других объектов, что и объект базового класса и на сообщения, имеющие смысл только для производного класса. Обычно говорят, что объект производного класса наследует все свойства своего базового класса.

Некоторые параметры объекта могут быть локализованы внутри объекта и недоступны для прямого воздействия извне объекта. Например, во время движения объекта-автомобиля объект-водитель может воздействовать только на ограниченный набор органов управления (рулевое колесо, педали газа, сцепления и тормоза, рычаг переключения передач) и ему недоступен целый ряд параметров, характеризующих состояние двигателя и автомобиля в целом.

Очевидно, для того, чтобы продуктивно применять объектный подход для разработки программ, необходимы языки программирования, поддерживающие этот подход, т.е. позволяющие строить описание классов объектов, образовывать данные объектных типов, выполнять операции над объектами. Одним из первых таких языков стал язык SmallTalk в котором все данные являются объектами некоторых классов, а общая система классов строится как иерархическая структура на основе предопределенных базовых классов.

Опыт программирования показывает, что любой методический подход в технологии программирования не должен применяться слепо с игнорированием других подходов. Это относится и к объектно-ориентированному подходу. Существует ряд типовых проблем, для которых его полезность наиболее очевидна, к таким проблемам относятся, в частности, задачи имитационного моделирования, программирование диалогов с пользователем. Существуют и задачи, в которых применение объектного подхода ни к чему, кроме излишних затрат труда, не приведет. В связи с этим наибольшее распространение получили объектно-ориентированные языки программирования, позволяющие сочетать объектный подход с другими методологиями. В некоторых языках и системах программирования применение объектного подхода ограничивается средствами интерфейса с пользователем (например, Visual FoxPro ранних версий).

Наиболее используемыми в настоящее время объектно-ориентированными языками являются Паскаль с объектами и Си++, причем наиболее развитые средства для работы с объектами содержатся в Си++.

Практически все объектно-ориентированные языки программирования являются развивающимися языками, их стандарты регулярно уточняются и расширяются. Следствием этого развития являются неизбежные различия во входных языках компиляторов различных систем программирования. .Наиболее распространенными в настоящее время являются системы программирования Microsoft C++ , Microsoft Visual C++ и системы программирования фирмы Borland International. Дальнейший материал в данном пособии излагается применительно к системе программирования Borland C++. Это связано прежде всего наличием в этой системе программирования развитой интегрированной среды, объединяющей текстовый редактор, компилятор, редактор связей (компоновщик) и отладочные средства.

2. Начальные сведения о языке Си

2.1 Назначение Си, исторические сведения

Язык Си был разработан в 70-е годы как язык системного программирования. При этом ставилась задача получить язык, обеспечивающий реализацию идей процедурного и структурного программирования и возможность реализации специфических приемов системного программирования. Такой язык позволил бы разрабатывать сложные программы на уровне, сравнимом с программированием на Ассемблере, но существенно быстрее. Эти цели, в основном, были достигнуты. Большинство компиляторов для Си написаны на Си, операционная система UNIX <также почти полностью написана на Си. Недостатком Си оказалась низкая надежность разрабатываемых программ из-за отсутствия контроля типов. Попытка поправить дело включением в систему программирования Си отдельной программы, контролирующей неявные преобразования типов, решила эту проблему лишь частично.

На основе Си в 80-е годы был разработан язык Си++, вначале названный "Си с классами". Си++ практически включает язык Си и дополнен средствами объектно-ориентированного программирования. Рабочая версия Си++ появилась в 1983 г. С тех пор язык продолжает развиваться и опубликовано несколько версий проекта стандартов Си и Си++.

Рядом фирм, производящих программное обеспечение, разработаны компиляторы для Си и Си++. Системы программирования фирмы Borland International выделяются среди других фирм прежде всего комплексным подходом к разработке программ, выражающимся во включении в систему программирования интегрированной среды разработчика, объединяющей под общим управлением текстовый редактор для ввода исходных текстов программ, компилятор, редактор связей и набор отладочных средств. В 1989 г. этой фирмой была выпущена система Turbo C++, включавшая компилятор Си++, работающий в операционной системе DOS, с 1992 г. выпускаются системы Borland C++, содержащие компиляторы Си++ для DOS и WINDOWS, с 1997 г. поставляется версия Borland C 5.0, содержащая компиляторы Си++ для WINDOWS, причем компилятор для WINDOWS теперь позволяет разрабатывать как 16-разрядные, так и 32-разрядные варианты программ для ПЭВМ с процессорами i486 и Pentium.

Программа на Си/Си++ представляет собой один или несколько исходных файлов, которые могут транслироваться раздельно. Результаты трансляции (объектные файлы) объединяются в исполняемый файл редактором связей (компоновщиком). Обычно различают два типа исходных файлов: файлы заголовков и программные файлы. Файлы заголовков содержат описания типов данных и прототипов функций и предназначены для включения в программные файлы перед их компиляцией, их имена, как правило, имеют расширение.h, например, stdio.h. Программные файлы содержат описания функций и, возможно, глобальных переменных и констант, их имена принято записывать с расширениями.c или.cpp, например, myprog.cpp. Один и тот же файл заголовков может включаться в несколько программных файлов

Каждый файл содержит последовательность так называемых "внешних определений", описывающих типы данных, переменные, константы и функции.

В последующих параграфах этого раздела приведен обзор средств Си/Си++, не связанных с объектной ориентацией Си++.

2.2 Алфавит, базовые типы и описание данных.

Алфавит языка включает практически все символы, имеющиеся на стандартной клавиатуре ПЭВМ:

Латинские буквы A...Z, a...z;

Цифры 0...9;

Знаки операций и разделители:

{ } () . , -> & * + - ~ ! / % ? : ; = < > | # ^

Некоторые операции обозначаются комбинациями символов, значения символов операций в ряде случаев зависят от контекста, в котором они употреблены.

Базовые (предопределенные) типы данных объединены в две группы: данные целого типа и данные с плавающей точкой (вещественные).

Данные целого типа могут быть обычными целыми со знаком (signed) и целыми без знака (unsigned). По числу разрядов, используемых для представления данного (диапазону значений) различают обычные целые (int), короткие целые (short int) и длинные целые (long int). Символьные данные (char) также рассматриваются как целые и могут быть со знаком и без знака.

Константы целого типа записываются как последовательности десятичных цифр, тип константы зависит от числа цифр в записи константы и может быть уточнен добавлением в конце константы букв L или l (тип long), U или u (тип unsigned) или их сочетания:

321 - константа типа int,

5326u - константа типа unsigned int,

45637778 - константа типа long int,

2746L - константа типа long int.

Целые константы могут записываться в восьмеричной системе счисления, в этом случае первой цифрой должна быть цифра 0, число может содержать только цифры 0 ... 7:

0777 - константа типа int,

0453377 - константа типа long.

Целые константы можно записывать и в шестнадцатеричной системе счисления, в этом случае запись константы начинается с символов 0x или 0X:

0x45F - константа типа int,

0xFFFFFFFF - константа типа unsigned long.

Константы типа char всегда заключаются в одиночные кавычки, значение константы задается либо знаком из используемого набора символов, либо целой константой, которой предшествует обратная косая черта: "A", "\33", "\042", "\x1B". Имеется также ряд специальных символов, которые могут указываться в качестве значений константы типа char:

"\n" - новая строка,

"\t" - горизонтальная табуляция,

"\v" - вертикальная табуляция,

"\r" - перевод каретки,

"\f" - перевод страницы,

"\a" - звуковой сигнал,

"\"" - одиночная кавычка (апостроф),

"\"" - двойная кавычка,

"\\" - обратная косая черта.

Вещественные числа могут быть значениями одного из трех типов: float, double, long double. Диапазон значений каждого из этих типов зависит от используемых ЭВМ и компилятора. Константы вещественных типов могут записываться в естественной или экспоненциальной формах и по умолчанию имеют тип double, например, 15.31, 1.43E-3, 2345.1e4. При необходимости тип константы можно уточнить, записав в конце суффикс f или F для типа float, суффикс l или L для типа long double.

Внешнее определение, объявляющее переменные, состоит из необязательного спецификатора класса памяти, спецификаторов типа и списка так называемых деклараторов-инициализаторов, каждый из которых объявляет идентификатор одной переменной и, возможно, значение, присваиваемое переменной при ее объявлении. Внешнее определение заканчивается точкой с запятой:

int i, j, k; // Три переменных типа int без явной инициализации

double x=1, y=2; //Две переменных типа double с начальными значениями 1 и 2

char c1="0"; // Переменная типа char, ее значение - код литеры 0

Текст, записанный в этих примерах после знаков //, является комментарием и служит только для документирования программы. Такой комментарий может занимать только одну строку текста и допускается в текстах программ на Си++. Комментарий, занимающий несколько строк, заключается в специальные скобки /* и */.

В качестве спецификаторов класса памяти во внешнем определении может указываться одно из ключевых слов extern, static или typedef, Спецификатор extern означает, что объявляемый объект принадлежит другому программному файлу, а здесь дается информация о его имени и типе и не должно присутствовать инициализирующее выражение. Спецификатор static ограничивает область действия объявляемого имени данным файлом или блоком, если объявление содержится в блоке.

Если объявление данного содержится внутри тела функции (локальное объявление), то можно указывать спецификаторы класса памяти register или auto. Спецификатор register носит рекомендательный характер, компилятор пытается разместить данное этот класса в регистре процессора, если в данный момент имеются свободные регистры. Спецификатор auto принимается по умолчанию и поэтому явно не указывается, он означает, что данное класса auto должно размещаться в программном стеке при вызове функции.

Спецификатор typedef служит для присвоения имени описываемому типу данного и будет рассмотрен подробнее в следующем параграфе.

Наряду с показанными выше константами-литералами, значения которых определяются их представлением в программе, в Си и Си++ предусмотрены константы, которым присваиваются собственные имена - именованные константы. В описании именованной константы присутствует описатель const, например,

const double Pi = 3.141592653;

Переменной, идентификатор которой объявлен с описателем const, нельзя присвоить иное значение, чем было установлено при объявлении идентификатора. Инициализирующее значение при объявлении константы является обязательным.

Наряду с базовыми целыми и вещественными типами различных размеров в программе могут объявляться и использоваться данные типов, определяемых программистом: указатели, ссылки, агрегаты данных и данные перечислимого типа.

Перечислимый тип применяется для данных целого типа, которые могут принимать ограниченный набор значений. Каждому значению соответствует собственное имя-идентификатор и целое число, значение этого имени. Объявление перечислимого типа строится по схеме:

enum идентификатор {список перечисления} деклараторы-инициализаторы;

Здесь идентификатор задает имя перечислимого типа, список перечисления состоит из перечислителей, разделенных запятыми. Каждый перечислитель задается идентификатором и, возможно, целым значением типа char или int, например,

enum color { RED, GREEN, BLUE } en_color;

enum lex_type { CNST, VAR, OPER=3, FUNC };

Если значение перечислителя не задано, первый из них получает значение 0, а каждый следующий - значение, большее на 1. Вообще любой перечислитель по умолчанию имеет значение на 1 больше предыдущего. В Си/Си++ принято записывать идентификаторы перечислителей прописными буквами. Имена перечислителей используется либо как именованные константы либо для присвапивания переменным перечислимого типа.

В Си/Си++ для ссылок на переменную того или иного типа служат указатели. Указатель - это тип данного, значением которого является адрес другого данного. При объявлении указателя перед идентификатором записывается знак *. Указатель может инициализироваться адресом данного, для получения адреса служит операция & (амперсенд):

double *px, *py = &y;

Для указателей определены операции сравнения, сложения указателя с целым числом, вычитание двух указателей, а также операция индексирования (операция ).

Для обращения к переменной по указателю выполняется операция разыменования, обозначаемая знаком * (звездочка), например, *py = 7.5; .

При объявлении указателя может использоваться описатель const, например,

const int cc = 20;

const int *pc = &cc; // Можно инициализировать адресом константы.

double *const delta = 0.001; // Указатель - константа

Кроме обычных переменных и указателей в Си++ имеется тип "ссылка на переменную", задающий для переменной дополнительное имя (псевдоним). Внутреннее представление ссылки такое же, как указателя, т.е. в виде адреса переменной, но обращение к переменной по ссылке записывается в той же форме, что и обращение по основному имени. Переменная типа ссылки всегда инициализируется заданием имени переменной, к которой относится ссылка. При объявлении ссылки за именем типа записывается знак & (амперсенд):

При таком описании операторы aii = 5; и ii = 5; эквивалентны.

Из переменных любого типа могут образовываться массивы. При объявлении массива в деклараторе-инициализаторе за идентификатором массива задается число элементов массива в квадратных скобках:

int a [ 5 ] ; // Массив из пяти элементов типа int

Индексы элементов массива всегда начинаются с 0, индекс последнего элемента на единицу меньше числа элементов в массиве. Массив может инициализироваться списком значений в фигурных скобках:

int b [ 4 ] = { 1, 2, 3, 4 };

При наличии списка инициализации, охватывающего все элементы массива, можно не указывать число элементов массива, оно будет определено компилятором:

int c = { 1, 2, 3 }; // Массив из трех элементов типа int

Массивы с размерностью 2 и более рассматриваются как массивы массивов и для каждого измерения указывается число элементов:

double aa [ 2 ] [ 2 ] = { 1, 2, 3, 4 }; // Матрица 2 * 2

Массивы типа char могут инициализироваться строковым литералом. Строковый литерал - это последовательность любых символов, кроме кавычек и обратной косой черты, заключенная в кавычки. Если строковый литерал не умещается на одной строке, его можно прервать символом "\" и продолжить с начала следующей строки. В стандарте C++ предусмотрена и другая возможность записи длинных литералов в виде нескольких записанных подряд строковых литералов. Если между строковыми литералами нет символов, отличных от пробелов, такие литералы сливаются компилятором в один.

При размещении в памяти в конце строкового литерала добавляется символ "\0", т.е. нулевой байт. Строковый литерал может применяться и для инициализации указателя на тип char:

char str1 [ 11 ] = "Это строка",

str2 = " Размер этого массива определяется"

" числом знаков в литерале + 1";

char *pstr = "Указатель с инициализацией строкой";

Имя массива в Си/Си++ является указателем-константой, ссылающимся на первый элемент массива, имеющий индекс, равный нулю. Для обращения к элементу массива указывается идентификатор массива и индекс элемента в круглых скобках, например, c, aa.

2.3 Структуры и объединения

Наряду с массивами в Си/Си++ имеются агрегаты данных типа структур и объединений. Тип структуры представляет собой упорядоченную совокупность данных различных типов, к которой можно обращаться как к единому данному. Описание структурного типа строится по схеме:

struct идентификатор

{ деклараторы членов } деклараторы_инициализаторы;

Такое объявление выполняет две функции, во-первых объявляется структурный тип, во-вторых объявляются переменные этого типа.

Идентификатор после ключевого слова struct является именем структурного типа. Имя типа может отсутствовать, тогда тип будет безымянный и в других частях программы нельзя будет объявлять данные этого типа. Деклараторы_инициализаторы объявляют конкретные переменные структурного типа, т.е. данные описанного типа, указатели на этот тип и массивы данных. Деклараторы_инициализаторы могут отсутствовать, в этом случае объявление описывает только тип структуры.

Структура, описывающая точку на плоскости, может быть определена так:

struct Point_struct // Имя структуры

{ int x, y; } // Деклараторы членов структуры

point1, *ptr_to_point, arpoint ; // Данные структурного типа

Члены (компоненты) структуры описываются аналогично данным соответствующего типа и могут быть скалярными данными, указателями, массивами или данными другого структурного типа. Например, для описания структурного типа "прямоугольник со сторонами, параллельными осям координат" можно предложить несколько вариантов:

{Point p1; // Координаты левого верхнего угла

Point p2; // Координаты правого нижнего угла

{Point p; // Левый верхний угол

int width; // Ширина

int high; // Высота прямоугольника

Поскольку при описании членов структуры должны использоваться только ранее определенные имена типов, предусмотрен вариант предварительного объявления структуры, задающий только имя структурного типа. Например, чтобы описать элемент двоичного дерева, содержащий указатели на левую и правую ветви дерева и указатель на некоторую структуру типа Value, содержащую значение данного в узле, можно поступить так:

struct Tree_element

Tree_element *left, *right;

Членами структур могут быть так называемые битовые поля, когда в поле памяти переменной целого типа (int или unsigned int) размещается несколько целых данных меньшей длины. Пусть, например, в некоторой програме синтаксического разбора описание лексемы содержит тип лексемы (до шести значений) и порядковый номер лексемы в таблице соответствующего типа (до 2000 значениий). Для представления значения типа лексемы достаточно трех двоичных разрядов (трех бит), а для представления чисел от 0 до 2000 - 11 двоичных разрядов (11 бит). Описание структуры, содержащей сведения о лексеме может выглядеть так:

{unsigned int type_lex: 3;

unsigned int num_lex:11;

Двоеточие с целым числом после имени члена структуры указывает, что это битовое поле, а целое число задает размер поля в битах.

Объединение можно определить как структуру, все компоненты которой размещаются в памяти с одного и того же адреса. Таким образом, объединение в каждый момент времени содержит один из возможных вариантов значений. Для размещения объединения в памяти выделяется участок, достаточный для размещения члена объединения самого большого размера. Применение объединения также позволяет обращаться к одному и тому же полю памяти по разным именам и интерпретировать как значения разных типов.

Описание объединения строится по той же схеме, что и описание структуры, но вместо ключевого слова struct используется слово union, например, объединение uword позволяет интерпретировать поле памяти либо как unsigned int, либо как массив из двух элементов типа unsigned char.

{unsigned int u;

unsigned char b [ 2 ];

Описания типов, объявляемых программистом, в том числе структур и объединений могут быть достаточно большими, поэтому в Си/Си++ предусмотрена возможность присваивания типам собственных имен (синонимов), достигая при этом повышения наглядности программных текстов. Синоним имени типа вводится с ключевым словом typedef и строится как обычное объявление, но идентификаторы в деклараторах в этом случае интерпретируются как синонимы описанных типов. Синонимы имен типов принято записывать прописными буквами, чтобы отличать их от идентификаторов переменных. Ниже приведено несколько примеров объявления синонимов имен типов.

typedef struct { double re, im } COMPLEX;

typedef int *PINT;

После таких объявлений синоним имени может использоваться как спецификатор типа:

COMPLEX ca, *pca; // переменная типа COMPLEX и указатель на COMPLEX

PINT pi; // указатель на int

Приведенное выше описание структур и объединений в основном соответствует их построению в языке Си. В Си++ структуры и объединения являются частными случаями объектных типов данных. Дополнительные сведения об этом будут приведены при рассмотрении объектно-ориентированных средств Си++.

2.4 Операции и выражения

Несмотря на ограниченный набор базовых типов данных (целые и вещественные арифметические данные и строковые литералы) в языке Си++ определен обширный набор операций над данными, часть из которых непосредственно соответствует машинным командам. Как и во всех языках программирования, операции служат для построения выражений. Выражение представляет собой последовательность операндов и знаков операций и служит для вычисления некоторого значения.

В качестве операндов в выражении выступают идентификаторы переменных, константы, и строковые литералы, являющиеся первичными выражениями. Выражение, заключенное в круглые скобки, также рассматривается как первичное. Каждая операция предполагает использование определенных типов операндов (целых, вещественных, указателей). Операция присваивания в Си++ также является выражением, в связи с этим различаются операнды, которым можно присвоить новое значение и операнды, значение которых не может меняться. Чтобы операнду можно было присвоить значение, ему должна соответствовать область памяти и компилятору должен быть известен адрес этой памяти. Такие операнды называют L-выражениями (от английского left -левый), так как они могут быть записаны в левой части оператора присваивания.

Результат вычисления выражения зависит от приоритетов операций. В Си++ сложная система приоритетов операций, включающая 16 уровней. В таблице 2.1 приведен перечень операций Си++ с указанием их приоритетов, назначения и схемы записи.

Таблица 2.1

Приоритет

Знак операции

Назначение

Схема

Доступ к глобальному имени или имени из другой области

: : идентификатор (глобальный)
имя области: : имя_члена_структуры

Обращение к члену структуры по указателю на структуру

указатель -> имя_члена_структуры

имя_структуры. имя_члена_структуры

Обращение к элементу массива

указатель [ индекс ]

Преобразование типа данного

имя_типа (выражение) или (тип) выражение

Вызов функции

функция(аргументы)

Автоувеличение

L-значение или
L-значение++

Автоуменьшение

L-значение или
L-значение--

Битовое инвертирование

~ целое_выражение

Логическое отрицание

Выражение

Одноместный минус

Выражение

Одноместный плюс

Выражение

Получение адреса

& L-значение

Разыменование указателя

* указатель

Выделение динамической памяти

new тип данного

Освобождение памяти

delete указатель

Освобождение памяти для массива

delete указатель

Размер данного

sizeof выражение

Размер типа данного

sizeof (имя типа)

Умножение

выражение * выражение

выражение / выражение

Остаток от деления нацело

выражение % выражение

Обращение к члену структуры по указателю

указатель_на_структуру ->* имя_члена_структуры-указателя

Обращение к члену структуры по имени структуры

имя_структуры.*
имя_члена_структуры-указателя

Сложение

выражение + выражение

Вычитание

выражение - выражение

Сдвиг влево

целое_выражение << целое_выражение

Сдвиг вправо

целое_выражение >> целое_выражение

выражение < выражение

Меньше или равно

выражение <= выражение

выражение > выражение

Больше или равно

выражение >= выражение

выражение == выражение

выражение!= выражение

Поразрядная конъюнкция

выражение & выражение

Отрицание равнозначности

выражение ^ выражение

Поразрядная дизъюнкция

выражение | выражение

Логическое "И"

выражение && выражение

Логическое "ИЛИ"

выражение | | выражение

Условное выражение

выражение? выражение1: выражение2

Простое присваивание

выражение = выражение

Составное присваивание, знак @ - один из знаков операций * / % + - << >> & ^ |

выражение @= выражение

Операция следования

выражение, выражение

Рассмотрим особенности применения основных из перечисленных выше операций.

Операция ": :" (два двоеточия) применяется для уточнения имени объекта программы в случае, когда в этом месте программы известны два одинаковом имени, например, когда одно имя объявлено глобально, а другое в теле функции. Если имени предшествуют два двоеточия, то это глобальное имя.

Для обращения к членам структуры или объединения можно воспользоваться либо именем структурного данного, либо указателем на структурное данное. В первом случае полное имя члена структуры состоит из имени самой структуры и имени члена структуры, разделенных точкой. Во втором случае за именем указателя на структуру ставится знак -> (стрелка), а за ним имя члена структуры. Пусть в программе объявлен структурный тип AnyStruct, содержащий компоненту с именем member типа int и объявлены

AnyStruct s1; // Данное s1 типа AnyStruct

AnyStruct *ps1 = &s1; // Указатель на данное типа AnyStruct

Тогда к члену структуры member из s1 можно обратиться как к s1.member или как ps1->member.

Поскольку членом структуры может быть указатель, в Си++ имеются специальные операции разыменования такого указателя, операции.* и ->. Пусть одним из членов структуры AnyStruct является указатель pp1 на данное типа int. Тогда выражения s1.*pp1 и ps1->*pp1 обеспечат доступ к значению данного, на которое указывает pp1 из s1.

Выше отмечалось, что имя массива в Си/Си++ интерпретируется как указатель-константа на первый элемент массива. Для разыменования указателя, т.е. для доступа к данному по указателю на это данное служит операция * (звездочка). Следовательно, если в программе объявлен массив

int Array1 [ 10 ];

то выражение *Array1=0 служит для присвоения нулевого значения первому элементу массива. Чтобы обратиться к произвольному элементу массива, нужно указать индекс элемента, например, Array1 . Это выражение эквивалентно выражению *(Array1 + 3), т.е. требуется сначала увеличить указатель Array1 на 3 единицы, а затем разыменовать полученный указатель. При сложении указателя на объект некоторого типа T с целым числом N значение указателя увеличивается на N, умноженное на длину данного типа T. Отметим, что индекс можно задавать не только для имен массивов, но и для любого типа указателя, кроме указателя на тип void:

int *pint = &Array[ 4 ]; pint [ 2 ] =1;

В этом примере указатель pint инициализирован адресом пятого элемента массива Array, а затем седьмому элементу этого массива присвоено значение 1.

В качестве индекса может задаваться любое выражение со значением целого типа.

Поскольку Си++ является типизированным языком, в нем определены явные и неявные преобразования типов данных. Неявные преобразования выполняются при двуместных арифметических операциях и операции присваивания и называются стандартными арифметическими преобразованиями. Эти преобразования выполняются в следующей последовательности:

Если один операнд имеет тип long double, другой операнд преобразуется в тип long double;

Иначе, если один операнд имеет тип double, другой операнд преобразуется в тип double;

Иначе, если один операнд имеет тип float, другой операнд преобразуется в тип float;

Иначе, если один операнд имеет тип unsigned long int, другой операнд преобразуется в тип unsigned long int;

Иначе, если один операнд имеет тип long int, >другой операнд преобразуется в тип long int;

Иначе, выполняются стандартные преобразования для целых, при этом типы char, short int и битовые поля типа int преобразуются в тип int, затем, если один операнд имеет больший размер (больший диапазон значений), чем другой операнд, то второй операнд преобразуется к типу операнда большего размера;

В остальных случаях операнды имеют тип int.

Явное преобразование типов может быть задано в двух формах. Первая форма совместима с Си, в ней за именем типа в круглых скобках записывается преобразуемое значение, которое может быть первичным выражением или выражением с одноместной операцией. Имя типа в этом случае может быть представлено последовательностью описателей, например, (long int *) pp определеяет преобразование некоторого данного pp в тип указателя на long int. Вторая форма преобразования типа записывается как вызов функции, при этом имя типа должно задаваться идентификатором, например, int (x). Следует отметить, что результат явного преобразования не является L-значением.

Операции автоувеличения и автоуменьшения (++ и --) могут быть префиксными и постфиксными и вызывают увеличение (уменьшение) своего операнда на единицу, т.е. выражение ++x эквивалентно x = x +1, а --x эквивалентно x = x - 1. Префиксная операция выполняется до того, как ее операнд будет использован в вычислении выражения, а постфиксная операция выполняется после того, как ее операнд будет использован в выражении, например, в результате вычисления выражения

X * 2 + y-- *3

переменная x сначала увеличивается на 1, а затем умножается на 2, переменная y сначала умножается на 3, затем уменьшается на 1. Если перед вычислением этого выражения x и y были равны 1, то результат выражения будет равен 5, кроме того переменная x получит значение 2, а переменная y - значение 0. Таким образом, операции автоувеличения и автоуменьшения всегда дают побочный эффект, изменяют значения своих операндов. Операнды этих операций должны быть L-значениями.

Операция ~ (тильда) применяется только к целому значению и заменяет все биты своего операнда со значением 0 на 1, а биты со значением 1 на 0.

Логическое отрицание (операция!) возвращает значение 0 целого типа, если операнд не равен нулю, или значение 1, если операнд равен нулю.

Операции "одноместный +" и "одноместный -" имеют обычный математический смысл, знак + не изменяет значения операнда, знак - меняет знак операнда на противоположный.

Для получения адреса операнда, являющегося L-значением, применяется операция & (амперсанд). Результатом этой операции будет указатель на соответствующий тип данного. Разыменование указателя, т.е. получение значения данного по указателю на него обеспечивается операцией * (звездочка). Результат операции разыменования является L-значением.

В Си++ определены операции размещения данных в динамической памяти и удаления динамических данных из памяти.

Операция new требует в качестве операнда имени типа и предназначена для размещения данного указанного типа в динамической памяти, результатом операции будет указатель на данное. При невозможности выделить память операция new возвращает значение NULL - предопределенную константу, имеющую нулевое значение практически во всех компиляторах Си и Си++. Память, выделяемую операцией new, можно инициализировать, указав за именем типа скалярного данного начальное значение в круглых скобках, задание начальных значений для агрегатов данных будет рассмотрено позже. Примеры применения операции new:

int *ip = new int; /* создание объекта типа int и получение указателя на него */

int *ip2 = new int(2); // то же с установкой начального значения 2

inr *intArray = new int [ 10 ]; // массив из 10 элементов типа int

double **matr = new double [ m ] [ n ]; // матрица из m строк и n столбцов

Данное, размещенное в динамической памяти операцией new, удаляется из памяти операцией delete с операндом-указателем, значение которого получено операцией new, например,

delete intArray; delete ip2;

Операция delete только освобождает динамическую память, но не изменяет значение указателя-операнда. Программист должен помнить, что после освобождения памяти использовать этот указатель для обращения к данному нельзя.

Размер данного или типа данного в байтах можно получить по операции sizeof. Операнд может быть любого типа, кроме типа функции и битового поля. Если операндом является имя типа, оно должно заключаться в скобки. Возвращаемое значение имеет предопределенный тип size_t, это целый тип, размер которого определяется реализацией компилятора, обычно типу size_t соответствует unsigned int. Размер массива равен числу байт, занимаемых массивом в памяти, размер строкового литерала - это число знаков в литерале +1, т.е. завершающий нулевой байт учитывается при определении длины литерала. Значение, возвращаемое sizeof является константой.

Двуместные арифметические операции умножения (*), деления (/), получения остатка от деления нацело (%), сложения (+) и вычитания (-) имеют обычный смысл и обычный относительный приоритет. Если операнды арифметической операции имеют разные типы, предварительно выполняются стандартные арифметические преобразования и тип результата операции определяется общим типом операндов после стандартных преобразований. Следовательно, выражение 7/2 будет иметь значение 3 типа int, так как оба опернда имеют тип int, а выражение 7.0/2 даст результат 3.5 типа double, поскольку этот тип имеет первый операнд.

Операции отношения двух выражений (<, <=, >, >=) требуют операндов арифметического типа или же оба операнда должны быть указателями на одинаковый тип. В случае операндов арифметического типа вычисляются значения операндов, выполняются стандартные арифметические преобразования и возвращается 1 типа int, если отношение выполняется (истинно), или 0, если отношение не выполняется (ложно). Когда сравниваются два указателя, результат зависит от относительного размещения в памяти объектов, на которые ссылаются указатели. Операции сравнения (== и!=) выполняются аналогичным образом, но имеют меньший приоритет.

Выражения отношений могут соединяться логическими связками && (конъюнкция, логическое умножение) и | | (дизъюнкция, логическое сложение). В общем случае операндами логических связок могут быть любые скалярные значения и операция && дает реззультат, равный 1 типа int, если оба операнда имеют ненулевые значения, а операция | | дает результат, равный 0, если значения обоих операндов нулевые. Применяется сокращенная форма вычисления значения логических связок, если в операции && первый операнд равен нулю, то второй операнд не вычисляется и возвращается 0, если в операции | | первый операнд не равен нулю, то второй операнд не вычисляется и возвращается значение 1.

Как уже отмечалось, присваивание, обозначаемое знаком = в Си/Си++ рассматривается как операция и возвращает значение, которое было присвоено левому операнду. Операция присваивания вычисляется справа налево, т.е. сначала вычисляется присваиваемое значение, затем выполняется присваивание. Это позволяет записывать выражения вида x = y = z = 1 для установки одинаковых значений нескольким переменным. Можно, хотя это и снижает наглядность программы, строить и выражения с побочным эффектом вида (x = 2) * (y = 3) + (z = 4). Результатом этого выражения будет 24, но одновременно переменные x, y и z получат новые значения.

Кроме простого присваивания имеется набор составных операций присваивания, в которых присваивание совмещается с указанной двуместной операцией. Запись x += y эквивалентна выражению x = x + y.

Для целых операндов определены операции сдвига влево и вправо. При выполнении операции e1 << e2 биты первого операнда сдвигаются влево на e1 разрядов и результат имеет тип первого операнда. Освобождающиеся правые разряды заполняются нулями. При сдвиге вправо (e1 >> e2) если e1 имеет тип unsigned, освобождающиеся левые разряды заполняются нулями, а при e1 типа signed в освобождающихся левых разрядах повторяется знаковый разряд.

Над целыми операндами допустимы операции поразрядного логического умножения, логического сложения и исключающего или (отрицания равнозначности). В этих операциях операнды рассматриваются как последовательности битов и операция выполняется над каждой парой соответствующих разрядов из обоих операндов. Например, результатом выражения (x >> (p - n +1)) & (~(~0 << n)) будет выделение из целого беззнакового x n битов, начиная с бита с номером p, и сдвиг выделенных битов вправо, т.е. выделение n-разрядного целого, хранящегося в машинном слове x начиная с p-го разряда.

В Си/Си++ имеется конструкция, которая называется условным выражением. Условное выражение строится по схеме:

условие? выражение1: выражение2

В качестве условия может выступать любое скалярное выражение. Если результат вычисления условия ненулевой, то значением всего выражения будет выражение1, при нулевом значении условия значение всего выражения определяется выражением2. Второй и третий операнды условного выражения должны быть либо оба арифметического типа, либо однотипными структурами или объединениями, либо указателями одинакового типа, либо один из них - указатель на какой-либо тип, а другой операнд NULL или имеет тип void*. Выражение x > 0 ? 1: 0 возвращает 1, если x больше 0, и 0 в противном случае.

Выражение может быть представлено последовательностью выражений, разделенных запятыми, в этом случае вычисляются все выражения слева направо и возвращается значение последнего выражения в списке. Например в результате вычисления выражения

x = 2, e * 3, x +1 будет получено значение 3 и попутно x получит значение 2. Результат умножения e * 3 никак не может быть использован.

2.5 Операторы Си++

Операторы - это синтаксические конструкции, определяющие действия, выполняемые программой. В Си/Си++ имеются следующие типы операторов: операторы-выражения, операторы выбора, операторы цикла и оператор перехода. Синтаксис некоторых операторов содержит выражения, играющие роль условий, в зависисмости от выполнения или невыполнения которых выбирается та или иная последовательность действий. Поскольку в Си нет булевых выражений, в качестве условий используются любые выражения, дающие скалярные значения, и условие считается выполненым, если это значение отлично от нуля, и невыполненным, если оно равно нулю. Несколько операторов могут быть объединены в составной оператор заключением их в фигурные (операторные) скобки. Признаком конца оператора (кроме составного оператора) служит точка с запятой, являющаяся в этом случае частью оператора.

Перед любым оператором может быть записана метка в виде идентификатора, отделенного от помечаемого оператора двоеточием. Метка служит только для указания ее в операторе перехода.

Наиболее простым является оператор-выражение, представляющий собой полное выражение, закнчивающееся точкой с запятой, например,

x = 3; y = (x +1) * t; i++;

Выражение, оформленное как оператор, вычисляется, но его значение теряется и действие оператора-выражения состоит в побочных эффектах, сопровождающих вычисление, например, при выполнении операций присваивания, автоувеличения и автоуменьшения.

Операторы выбора в Си/Си++ представлены условным оператором и переключателем. Условный оператор аналогичен условным операторам других языков программирования и может использоваться в сокращенной и полной формах, которым соответствуют схемы:

if (выражение-условие) оператор

if (выражение-условие) оператор-1 else оператор-2

В сокращенной форме условного оператора вычисляется выражение-условие и, если его значение отлично от нуля, выполняется следующий за условием оператор, в противном случае не производится никаких действий.

Подобные документы

    Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.

    контрольная работа , добавлен 22.01.2013

    Использование скриптового языка программирования для разработки web-приложений (сценариев). Изучение основ объектно-ориентированного программирования в языке PHP. Ознакомление со специальными методами для работы с классами. Назначение интерфейсов.

    контрольная работа , добавлен 14.03.2015

    Общая характеристика объектно-ориентированного подхода в программировании, его основные свойства и принципы. Разработка программы для автоматизация деятельности кафе на основе объектно-ориентированного подхода, проектирования и реализации схемы данных.

    курсовая работа , добавлен 22.01.2012

    Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.

    курсовая работа , добавлен 17.11.2014

    Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.

    контрольная работа , добавлен 17.01.2011

    Изучение принципов объектно-ориентированного программирования, в котором основными концепциями являются понятия классов и объектов. Свойства этого вида программирования: инкапсуляция, полиморфизм, наследование. Описание класса. Конструкторы и деструкторы.

    презентация , добавлен 14.10.2013

    Создание программного обеспечения - системы имитационного моделирования на тему "Производственная линия с пунктами технического контроля". Описание входных и выходных данных. Объектно-ориентированное программирование. Диаграммы модулей и процессов.

    курсовая работа , добавлен 09.01.2014

    Свойства объектно-ориентированного языка программирования. Понятия инкапсуляции и наследования. Виртуальные функции и полиморфизм. Инициализация экземпляра объекта с помощью конструктора. Динамическое создание объектов. Совместимость объектных типов.

    реферат , добавлен 15.04.2015

    Понятие алгоритма и его характеристики как основного элемента программирования. Формы представления алгоритмов, основные алгоритмические структуры. Структурное и событийно-ориентированное программирование. Объектно-ориентированное программирование.

    реферат , добавлен 17.07.2008

    Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.

Уфимский Государственный Авиационный Технический Университет

Кафедра Вычислительной Техники

и Защиты Информации

Пояснительная записка

к курсовой работе

по дисциплине: «Методы программирования и прикладные алгоритмы»

«Разработка прикладного алгоритма и его реализация на языке С++»

Выполнил студент:

Загураев А.Н.

Факультет: ИРТ

Группа: ЗИ-225

Принял доцент, к.т.н.:

Строкина Ю.Г.

1. Постановка задачи……………………………………………….……3

2. Среда программирования Borland C++ Builder…………………..4

3. Математическое обеспечение…………………………….…………10

4. Разработка алгоритма программы в виде блок-схемы…….……11

5. Описание работы программы………….…………………………….12

6. Выводы………………………………….……………………………….15

7. Список используемой литературы…….…………………………….16

Приложение ………………….……………………………..……………..17

Постановка задачи

Задание: Разработать программу для итерационного поиска размеров равномерных выплат по кредиту. Выплаты и начисления процентов на оставшуюся сумму производятся ежемесячно. Исходные данные: размер кредита, срок выплат (от 1 до 5 лет), процентная ставка. В диалоговом окне изобразить график изменения остатка от суммы кредита.

Среда программирования Borland C ++ Builder

Введение

Borland C++ Builder является средой быстрой разработки приложений. В основе систем быстрой разработки (RAD-систем, Rapid Application Development - среда быстрой paзpa6oтки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть работы по генерации кода программы, остав­ляя программисту работу по конструированию диалоговых окон и написа­нию функций обработки событий. Производительность программиста при использовании RAD систем существенно увеличивается.

Система объектно-ориентированного программирования Borland C++ Builder, предназначена для операционных систем Windows. Интегрированная среда C++ Builder обеспечивает скорость визуальной разработки, продуктивность повторно используемых компонентов в сочетании с мощью языковых средств C++, усовершенствованными инструментами и разномасштабными средствами доступа к базам данных.

С++ Builder может быть использован везде, где требуется дополнить существующие приложения расширенным стандартом языка C++, повысить быстродействие и придать пользовательскому интерфейсу качества профессионального уровня.

Скорость визуальной разработки

Профессиональные средства языка C++ интегрированы в визуальную среду разработки. C++Builder предоставляет быстродействующий компилятор с языка Borland C++, эффективный инкрементальный загрузчик и гибкие средства отладки как на уровне исходных инструкций, так и на уровне ассемблерных команд - в расчете удовлетворить высокие требования программистов-профессионалов.

Конструирование по способу "drag-and-drop " позволяет создавать приложение простым перетаскиванием захваченных мышью визуальных компонентов из Палитры на форму приложения. Инспектор объектов предоставляет возможность оперировать со свойствами и событиями компонентов, автоматически создавая заготовки функций обработки событий, которые наполняются кодом и редактируются в процессе разработки.

Свойства, методы и события - это именно те элементы языка, которые обеспечивают быструю разработку приложений в рамках объектно-ориентированного программирования. «Свойства» позволяют легко устанавливать разнообразные характеристики объектов. «Методы» производят определенные, иногда довольно сложные, операции над объектом. «События» связывают воздействия пользователя на объекты с кодами реакции на эти воздействия. События могут возникать при таких специфических изменениях состояния объектов как обновление данных в интерфейсных элементах доступа к базам данных. Работая совместно, свойства, методы и события образуют среду RAD (Rapid Application Development) быстрого и интуитивного программирования надежных приложений для Windows.

Визуальное наследование форм воплощает важнейший аспект объектно-ориентированного программирования в удобном для пользования инструменте визуального проектирования. Характеристики новой формы приложения могут быть унаследованы от любой другой существующей формы, что обеспечивает централизованную репродукцию изменений пользовательского интерфейса, облегчает контроль за кодом и уменьшает временные затраты на введение новых качественных атрибутов.

Мастер инсталляции руководит созданием унифицированных дистрибутивных пакетов для разработанных приложений.

Исходные тексты Библиотеки Визуальных Компонентов облегчают разработку новых компонентов на базе готовых примеров.

Отрытые инструменты API могут быть непосредственно интегрированы в визуальную среду системы. Вы сможете подключить привычный текстовый редактор или создать собственного мастера для автоматизации выполнения повторяющихся процедур.

Расширенная математическая библиотека содержит дополнительные унифицированные функции статистических и финансовых вычислений.

Интерфейс Borland C ++ Builder .

В состав интерфейса С++ Builder входят:

Палитра компонент содержит более 100 повторно используемых компонентов,предлагаемых для построения приложений.

Редактор форм предназначен для создания интерфейса программы с пользователем.

Редактор кода предназначен для написания текста программы, в частности, функций обработки событий.

Инспектор объектов позволяет визуально устанавливать свойства объектов без необходимости рутинного программирования и содержит события, которые можно связывать с кодами реакции объектов на их возникновение.

Хранилище объектов содержит такие объекты, как формы и модули данных, которые разделяются многими приложениями с целью уменьшения временных затрат при разработке.

C++Builder реализует визуальную методику построения приложений посредством выбора из Палитры компонентов нужных управляющих элементов (Рис.1). С каждым компонентом (например, кнопкой) связаны свойства, которые меняют ее вид и поведение. Любой компонент может вызывать серию событий, которые определяют его реакцию на различные воздействия.

Проблемы совместимости

C++ Builder предоставляет свою мощность и широкие возможности языка C++ всему семейству систем объектно-ориентированного программирования. C++ Builder может быть использован везде, где требуется дополнить существующие приложения расширенным промышленным стандартом языка C++, повысить быстродействие и придать пользовательскому интерфейсу профессиональный облик.

C++ Builder и Borland C++

Между программными продуктами C++ Builder и Borland C++ существует полная и взаимная функциональная совместимость. C++ Builder добавляет процессу программирования новое качество - быструю визуальную разработку приложений на языке C++. Если вы привыкли работать в системах программирования Borland C++ (версий 3.1. 4.5 и 5.0), то ни переход к новой системе, ни возврат к старой не окажутся слишком затруднительными. В вашем распоряжении остаются удобный администратор проектных файлов, компилятор и инкрементальный загрузчик.

Поначалу C++ Builder разочарует многих разработчиков тем, что вместо привычных библиотек OWL и MFC он использует неведомую дотоле библиотеку VCL. Каждая библиотека представляет собой специфическую модель объектно-ориентированного программирования под Windows. Каждая библиотека решает проблемы ООП по-своему, и нельзя сказать, что какая-то одна справляется с задачей лучше или хуже других.Borland C++ версий 5.0 и выше поддерживает внедрение в ранее разработанные OWL или MFC программы типовых форм, спроектированных в среде C++Builder на базе VCL. Разработчик идет на такого рода переделки из-за простой причины: C++Builder позволяет включить в форму все диалоги с пользователем чрезвычайно быстро, придавая приложению для Windows законченный профессиональный облик, устраняя из программы всю шелуху вспомогательного кода и оставляя только содержательную часть, воплощающую основную идею алгоритма. Таким образом, совместимость обеспечивается на уровне форм. Не удивительно, что совместная работа с двумя библиотеками объектных классов заметно увеличивает размер ЕХЕ файла.







2024 © gtavrl.ru.