26) Основные принципы работы с графическими объектами.
В среде C++Builder существует три рода объектов, которые имеют отношение к графике:
· Канва - предоставляет битовую карту поверхности окна приложения, компоненты, принтера и т.п., которая может быть использована для вывода графики. Канва не самостоятельный объект, она всегда является свойством какого-то другого графического объекта.
· Графика - представляет растровое изображение некоторого файла или ресурса (битового образа, пиктограммы или метафайла).
C++Builder определяет производные от базового класса TGraphic объектные классы:
o TBitmap,
o Ticon,
o TMetafile.
· Рисунок (TPicture) представляет собой контейнер для графики, который может содержать любые классы графических объектов. Таким образом, контейнерный класс TPicture может содержать битовый образ, пиктограмму, метафайл или некоторый другой графический тип, определенный пользователем, а приложение может стандартно обращаться ко всем объектам контейнера посредством объекта TPicture.
Отметим, что графические объекты Windows взаимосвязаны. Так - объект TPicture всегда содержит некоторую графику, которой в свою очередь, может потребоваться для отображения канва, а единственный стандартный графический класс канвы - это TBitmap.
Как отмечалось выше, Borland С++ Builder инкапсулирует функции Windows GDI на разных уровнях. Наиболее завершенным является интерфейс, предоставляемый свойством Canvas (канва), объектного класса канвы, его графических компонент. Использование канвы снимает с программиста заботу при выводе изображений об инициализации контекста устройства и его освобождении. Наличия вложенных свойств (характеристик пера, кисти, шрифтов, растровых изображений) также не требует слежения за состояниями ресурсов - основная задача - это определение характеристик для этих графических объектов и грамотное их использование.
27. Перегрузка – это возможность называть одним и тем же именем разные функции, которые выполняют по сути одно и то же. Именно по составу параметров компилятор определяет какую из перегруженных функций нужно вызвать. Выгода: не нужно запоминать разные названия, почти одинаковых функций и процедур.
Перегрузка функций предоставляет несколько "взглядов" на одну и ту же функцию внутри вашей программы. Для перегрузки функций просто определите несколько функций с одним и тем же именем и типом возвращаемого значения, которые отличаются только количеством и типом параметров. В процессе компиляции C++ определит, какую функцию следует вызвать, основываясь на количестве и типе передаваемых параметров. Перегрузка функций упрощает программирование, позволяя программистам работать только с одним именем функции.
28. По значению: Процедуре передаются копии значений параметров. Соответственно, изменить какие-то переменные вызывающей программы процедура не может.
*pn = 5n = *pn;По ссылке: Отличие состоит в том, что в процедуру передается ссылка на переменную, и переменная в процедуре и в вызывающей программе это одна и та же переменная. int &ra = a; //задано альтернативное имя (ra) для переменной по адресу переменной «а»29. Техническое задание - это основной исходный документ для разработки нового программного обеспечения (в данном случае), в котором формулируются основные цели разработки, список принципиальных требований к продукту, определяются сроки и этапы разработки и регламентируется процесс приемно-сдаточных испытаний. В составлении технического задания участвуют как представители заказчика, так и представители исполнителя. Этот документ содержит основные требования заказчика, исходные данные для разработки, в ТЗ указываются назначение продукта, область его применения, стадии разработки различной документации, её состав, сроки исполнения и т. д., а также особые требования, обусловленные спецификой проекта либо условиями его эксплуатации. Как правило ТЗ составляется на основе анализа передовых достижений техники, результатов выполнения предварительных исследований, научно-исследовательских работ, научного прогнозирования и т.п.
Техническое задание позволяет(как связующее звено между заказчиком и исполнителем)
Обоим сторонам: представить готовый проект до начала работы выполнить попунктную проверку готового продукта уменьшить число ошибок, связанных с изменением требований в результате их неполноты или ошибочности
Заказчику: осознать, что именно ему нужно, четко это сформулировать, требовать от исполнителя соответствия продукта всем оговоренным и утверждены пунктам ТЗ
Исполнителю: понять суть поставленной задачи планировать выполнение проекта в деталях и работать по намеченному плану отказаться от выполнения работ, не указанных в ТЗ
30. Можно исходить из того, что каждому объекту будет соответствовать своя собственная структура данных, в которой содержатся все элементы описания свойств внешнего объекта программирования. Такую структуру данных можно аналогично назвать объектом. Функции, работающие с объектом и получающие в качестве обязательного параметра указатель на структуру данных, называются методами. Совокупность описания объектов одного типа и методов работы с ними называется классом.
Объект – структура данных, содержащая описание свойств внешнего объекта программирования. Метод – функция, работающая с объектом. Класс – описание структуры объекта и методов работы с ним.
Структурированная переменная – это объект. Функции, встроенные в структурированный тип – это методы класса. А само определение структурированного типа (включающее и определение встроенных функций) – есть класс. Класс представляет собой описание структуры объектов одного вида с набором методов их обработки.
31. Преимущества объектно-ориентированного программирования.
· Классы позволяют проводить конструирование из полезных компонент, обладающих простыми инструментами, что дает возможность абстрагироваться от деталей реализации.
· Данные и операции вместе образуют определенную сущность и они не «размазываются» по всей программе, как это нередко бывает в случае процедурного программирования.
· Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
· Инкапсуляция информации защищает наиболее критичные данные от несанкционированного доступа.
32. Капец...
33. Перекрытие методов
Рассмотрим класс A, у которого имеется метод f(int), и класс B, унаследованный от A, у которого есть метод f(long):
struct A
{
void f(int);
};
struct B: A
{
void f(long);
};
В следующем коде:
B b;
b.f(1);
произойдет вызов метода f(long) класса B, несмотря на то, что у родительского класса A есть более подходящий метод f(int). Оказывается, что метод f(int) родительского класса A перекрылся. Для того, чтобы в примере вызвался метод f(int), следует добавить строку using A::f; в определении класса B:
struct B: A
{
using A::f;
void f(long);
34. float i;
...
FloatToStrF(i,ffGeneral,7,3);
// Всего 7 символов (включая точку) и 3 символа после запятой.
35. Строка может быть объявлена либо как массив символов, либо как переменная типа char*. Каждое их двух приведенных ниже эквивалентных объявлений:
char w[] = "строка"; char *ww = "строка"; присваивает строковой переменной начальное значение «строка».
Для доступа к отдельным символам переменной осуществляется по
индексам. Так, например, обращение w[3] к слову «компьютер» будет относится к символу «п», так как индексы в строках начинаются с нуля.
Для обработки строк имеется ряд библиотечных функций (работающих именно с массивами символов типа char, некоторые из которых используются наиболее часто):
функция sircat (строка1, строка2) - конкатенация (склеивание) строковых значений;
функция strcpy (строка 1, строка2) копирование одной строки в другую;
функция strlen (строка) - определение длины строки (возвращает целое число);
функция strstr (строка 1, строка2) поиск в строке заданной подстроки (возвращает NULL или число - позицию, с которой строка2 в первый раз входит в строку1);
функция AnsiStrLower (строка) - приведение символов строки к нижнему регистру;
функция AnsiStrUpper (строка) - приведение символов строки к верхнему регистру.
Пример: вставить Строку в текущую строку Str, начиная с указанной Позиции.
AnsiString oldStr = "котер";
AnsiString newStr = "мпью";
AnsiString res;
res = oldStr.Insert (newStr, 3);
// Результат геs="компьютер"
36. Перегрузка – это возможность называть одним и тем же именем разные функции, которые выполняют по сути одно и то же. Именно по составу параметров компилятор определяет какую из перегруженных функций нужно вызвать. Выгода: не нужно запоминать разные названия, почти одинаковых функций и процедур.
Перегрузка функций предоставляет несколько "взглядов" на одну и ту же функцию внутри вашей программы. Для перегрузки функций просто определите несколько функций с одним и тем же именем и типом возвращаемого значения, которые отличаются только количеством и типом параметров. В процессе компиляции C++ определит, какую функцию следует вызвать, основываясь на количестве и типе передаваемых параметров. Перегрузка функций упрощает программирование, позволяя программистам работать только с одним именем функции.
37. По значению: Процедуре передаются копии значений параметров. Соответственно, изменить какие-то переменные вызывающей программы процедура не может.
*pn = 5n = *pn;По ссылке: Отличие состоит в том, что в процедуру передается ссылка на переменную, и переменная в процедуре и в вызывающей программе это одна и та же переменная. int &ra = a; //задано альтернативное имя (ra) для переменной по адресу переменной «а»38. Техническое задание - это основной исходный документ для разработки нового программного обеспечения (в данном случае), в котором формулируются основные цели разработки, список принципиальных требований к продукту, определяются сроки и этапы разработки и регламентируется процесс приемно-сдаточных испытаний. В составлении технического задания участвуют как представители заказчика, так и представители исполнителя. Этот документ содержит основные требования заказчика, исходные данные для разработки, в ТЗ указываются назначение продукта, область его применения, стадии разработки различной документации, её состав, сроки исполнения и т. д., а также особые требования, обусловленные спецификой проекта либо условиями его эксплуатации. Как правило ТЗ составляется на основе анализа передовых достижений техники, результатов выполнения предварительных исследований, научно-исследовательских работ, научного прогнозирования и т.п.
Техническое задание позволяет(как связующее звено между заказчиком и исполнителем)
Обоим сторонам: представить готовый проект до начала работы выполнить попунктную проверку готового продукта уменьшить число ошибок, связанных с изменением требований в результате их неполноты или ошибочности
Заказчику: осознать, что именно ему нужно, четко это сформулировать, требовать от исполнителя соответствия продукта всем оговоренным и утверждены пунктам ТЗ
Исполнителю: понять суть поставленной задачи планировать выполнение проекта в деталях и работать по намеченному плану отказаться от выполнения работ, не указанных в ТЗ
39. Можно исходить из того, что каждому объекту будет соответствовать своя собственная структура данных, в которой содержатся все элементы описания свойств внешнего объекта программирования. Такую структуру данных можно аналогично назвать объектом. Функции, работающие с объектом и получающие в качестве обязательного параметра указатель на структуру данных, называются методами. Совокупность описания объектов одного типа и методов работы с ними называется классом.
Объект – структура данных, содержащая описание свойств внешнего объекта программирования. Метод – функция, работающая с объектом. Класс – описание структуры объекта и методов работы с ним.
Структурированная переменная – это объект. Функции, встроенные в структурированный тип – это методы класса. А само определение структурированного типа (включающее и определение встроенных функций) – есть класс. Класс представляет собой описание структуры объектов одного вида с набором методов их обработки.
40. Преимущества объектно-ориентированного программирования.
· Классы позволяют проводить конструирование из полезных компонент, обладающих простыми инструментами, что дает возможность абстрагироваться от деталей реализации.
· Данные и операции вместе образуют определенную сущность и они не «размазываются» по всей программе, как это нередко бывает в случае процедурного программирования.
· Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
· Инкапсуляция информации защищает наиболее критичные данные от несанкционированного доступа.
41. Капец...
42. Перекрытие методов
Рассмотрим класс A, у которого имеется метод f(int), и класс B, унаследованный от A, у которого есть метод f(long):
struct A
{
void f(int);
};
struct B: A
{
void f(long);
};
В следующем коде:
B b;
b.f(1);
произойдет вызов метода f(long) класса B, несмотря на то, что у родительского класса A есть более подходящий метод f(int). Оказывается, что метод f(int) родительского класса A перекрылся. Для того, чтобы в примере вызвался метод f(int), следует добавить строку using A::f; в определении класса B:
struct B: A
{
using A::f;
void f(long);
43. float i;
...
FloatToStrF(i,ffGeneral,7,3);
// Всего 7 символов (включая точку) и 3 символа после запятой.
44. Строка может быть объявлена либо как массив символов, либо как переменная типа char*. Каждое их двух приведенных ниже эквивалентных объявлений:
char w[] = "строка"; char *ww = "строка"; присваивает строковой переменной начальное значение «строка».
Для доступа к отдельным символам переменной осуществляется по
индексам. Так, например, обращение w[3] к слову «компьютер» будет относится к символу «п», так как индексы в строках начинаются с нуля.
Для обработки строк имеется ряд библиотечных функций (работающих именно с массивами символов типа char, некоторые из которых используются наиболее часто):
функция sircat (строка1, строка2) - конкатенация (склеивание) строковых значений;
функция strcpy (строка 1, строка2) копирование одной строки в другую;
функция strlen (строка) - определение длины строки (возвращает целое число);
функция strstr (строка 1, строка2) поиск в строке заданной подстроки (возвращает NULL или число - позицию, с которой строка2 в первый раз входит в строку1);
функция AnsiStrLower (строка) - приведение символов строки к нижнему регистру;
функция AnsiStrUpper (строка) - приведение символов строки к верхнему регистру.
Пример: вставить Строку в текущую строку Str, начиная с указанной Позиции.
AnsiString oldStr = "котер";
AnsiString newStr = "мпью";
AnsiString res;
res = oldStr.Insert (newStr, 3);
// Результат геs="компьютер"