- •С.В.Сизов объектно-ориентированное программирование
- •Содержание
- •Лабораторная работа 1.
- •На различных платформах.
- •Реализация простейшего класса
- •Лабораторная работа 3 Классы потоков ввода-вывода данных.
- •Контрольные вопросы.
- •Лабораторная работа 4-5 (4 часа) Статически и динамически подключаемые библиотеки.
- •Контрольные вопросы.
- •Комментарии
- •Контрольные вопросы.
- •Контрольные вопросы
- •Лабораторная работа 8 Классы библиотеки Qt: элементы отображения Qt Цель работы: отработка умений и навыков использования библиотеки Qt для формирования элементов отображения.
- •Контрольные вопросы.
- •Методы и средства проектирования интерфейса пользователя
- •Методы и средства проектирования интерфейса пользователя в ос Unix
- •Контрольные вопросы
- •Создание интерфейса простых приложений.
- •Классы библиотеки Qt: обработка событий
- •Контрольные вопросы.
- •Создание приложений баз данных
- •Контрольные вопросы.
Комментарии
Комментарий 1. Четырехкомпонентный вектор является представлением трехмерной точки в памяти компьютера, причем первые три компоненты являются координатами x,y,z точки, а четвертая компонента равна 1:
Матрица 4х4 – матрица преобразования координат точки в пространстве. Любое движение (то есть преобразование пространства, сохраняющее расстояние между точками) в трехмерном пространстве, согласно теореме Шаля, может быть представлено в виде суперпозиции поворота и параллельного переноса, то есть последовательного выполнения поворота и параллельного переноса.
Перенос точки в пространстве осуществляется
умножением матрицы
на четырехкомпонентный вектор, где dx,
dy, dz
– расстояние переноса по каждой из
осей.
Поворот точки относительно оси OZ
на угол alpha
осуществляется умножением на матрицу
.
Поворот точки относительно оси OX
на угол alpha
осуществляется умножением на матрицу
.
Масштабирование осуществляется
умножением на матрицу
,
где kx, ky,
kz – коэффициенты
масштабирования по соответствующим
осям.
В процессе манипуляции над вектором значение последней составляющей может измениться, поэтому после каждого изменения вектора необходимо производить его нормализацию.
Комментарий 2. Для варианта №5. Реализовать функцию шифрования можно очень простую, здесь от вас не требуется создавать мощные криптостойкие алгоритмы, а сделать простенький алгоритм шифрования. Один из вариантов реализации такого алгоритма:
начальная инициализация
пусть k – строка ключа, n = длина ключа, i=0
процедура записи в файл
пусть s = входная цепочка, m = длина входной цепочки
пусть j=0
пока j<m делаем
запишем в файл k[i] xor s[j]
i++, j++
если i==n тогда пусть i=0
конец пока
конец процедуры
процедура чтения из файла
пусть s = выходная цепочка, m = длина выходной цепочки
пусть j=0
пока j<m делаем
считаем из файла символ ch
s[j] = k[i] xor ch
i++, j++
если i==n тогда пусть i=0
конец пока
конец процедуры
Такой алгоритм называется симметричным – один и тот же ключ используется и для шифрования и для дешифровки данных, более того, в данном случае для этого используется даже один и тот же алгоритм. При реализации такого класса не надо забывать про начальную инициализацию, она должна производиться ровно один раз при открытии файла (на чтение или на запись).
Контрольные вопросы.
Заполните пробелы:
Если класс Alpha наследует свойства классу Beta, то класс Alpha называется __?__ классом, а класс Beta – __?__ классом.
Наследование предполагает возможность __?__, что экономит время разработки и способствует использованию проверенного и высококачественного программного обеспечения.
Объект __?__ класса можно рассматривать как объект соответствующего ему __?__ класса.
Для преобразования типа указателя базового класса в тип производного класса, должно быть использовано __?__, потому что компилятор считает такую операцию опасной.
Существуют три спецификатора доступа к элементу: __?__, __?__ и __?__. Какие функции они выполняют?
При порождении класса от базового класса открытым наследованием открытые элементы базового класса становятся __?__ элементами производного класса, а защищенные элементы базового класса становятся __?__ элементами производного класса.
При порождении класса от базового класса защищенным наследованием открытые элементы базового класса становятся __?__ элементами производного класса, а защищенные элементы базового класса становятся __?__ элементами производного класса.
Отношение между классами "содержит" представляет __?__, а отношение "является" представляет __?__.
Использование наследования и полиморфизма помогает исключить логику __?__.
Лабораторная работа 7
Классы библиотеки Qt: элементы виджета.
Цель работы: отработка умений и навыков использования библиотеки Qt для формирования элементов виджета.
Теория.
Классы интерфейса (см. лек. oop_lek7.pdf)
Задание.
Создать пустой виджет с заголовком "MyWidget", который не перекрывается другими окнами;
Скопировать файл /usr/local/share/wall в рабочую папку;
Создать окно с красным фоном размером (x, y). В окне расположить рисунок с координатами (a, b), размером (c, d);
Создать скрин-шот;
Дополнить код программы возможностью изменения вида курсора при его движении над картинкой;
Создать полосы прокрутки в окне виджета;
Создать скрин-шот.
В отчете представить конечный код программы с подробными комментариями и скрин-шотами приложений.
Варианты
|
a |
b |
c |
d |
x |
y |
курсор |
1. |
10 |
10 |
100 |
100 |
300 |
300 |
UpArrowCursor |
2. |
15 |
15 |
150 |
150 |
300 |
300 |
CrossCursor |
3. |
20 |
20 |
200 |
200 |
300 |
300 |
WaitCursor |
4. |
10 |
15 |
100 |
150 |
300 |
300 |
IbeamCursor |
5. |
10 |
20 |
100 |
200 |
300 |
300 |
PointingHandCursor |
6. |
15 |
10 |
150 |
100 |
300 |
300 |
ForbiddenCursor |
7. |
15 |
20 |
150 |
200 |
300 |
300 |
WhatsThisCursor |
8. |
20 |
10 |
200 |
100 |
300 |
300 |
SizeVerCursor |
9. |
20 |
15 |
200 |
150 |
300 |
300 |
SizeHorCursor |
10. |
30 |
30 |
50 |
50 |
300 |
300 |
SizeAllCursor |
11. |
30 |
50 |
100 |
200 |
200 |
300 |
CrossCursor |
12. |
80 |
20 |
150 |
50 |
300 |
200 |
ForbiddenCursor |
Комментарий.
Для создания компонента QLabel необходимо подключить соответствующую библиотеку. Элемент надписи можно создать так:
QLabel lbl = new QLabel(“Hello”);
Для указания цвета компонента используют метод setStyleSheet
lbl->setStyleSheet("background-color: red;"
"font: 14px 'Courier New';");
