Библиотеки qt и stl. Иерархия объектов, коллекция, итераторы


Download 0.9 Mb.
bet3/9
Sana31.01.2023
Hajmi0.9 Mb.
#1142465
TuriЛабораторная работа
1   2   3   4   5   6   7   8   9
Bog'liq
1671980777134 Лаб раб 4п

Пространство имен Qt
Пространство имен Qt содержит ряд типов перечислений и констант, которые часто применяются при программировании. Если необходимо получить доступ к какой-либо константе этого пространства имен, то вы должны указать префикс Qt (например, не red, а Qt::red). Если вы все-таки хотите опускать префикс Qt, то необходимо в начале файла с исходным кодом добавить следующую директиву:

В данной лабораторной работе мы начнем знакомство с библиотекой Qt с базовых классов модуля QtCore: QList, QVector.
Коллекции и контейнеры.
Коллекция представляет собой объект, содержащий в себе, тем или иным образом, набор объектов одного или различных классов, и позволяющий обращаться к этим объектам. Коллекция представляет собой отношение агрегации и дает второй вид иерархии (первый вид − иерархия классов, построенная на основе наследования) − иерархию объектов (иерархию типа целое/часть).
Примеры коллекций:

  1. Окно в интерактивной программе, которое объединяет (владеет ими) такие элементы, как поля ввода и редактирования данных, кнопки, списки выбора, диалоговые окна и т.д. Примерами таких окон в библиотеке Qt являются объекты классов, порожденных от абстрактного класса QWidget (QDialog, QAbstractButton, QLineEdit).

  2. Агрегат, состоящий из более мелких узлов.

  3. Огород, состоящий из растений, системы полива и т.п.

  4. Любая организационная структура (например, ФАКУЛЬТЕТ, КАФЕДРА, СТУДЕНЧЕСКАЯ ГРУППА).

Коллекция позволяет записывать в себя значения и извлекать их. Назначение коллекции — служить хранилищем объектов и обеспечивать доступ к ним.
Отношение агрегации в коллекции может реализовываться двумя способами через «физическое включение» и «включение по ссылке». Рассмотрим обе эти способа на пример формы библиотеки Qt.
Пример «физического включения».

Класс Dialog в качестве полей включает в себя объекты классов QLineEdit (поле ввода), QLabel (надпись), QPushButton (кнопка). В данном примере мы имеем агрегацию по значению; эта разновидность физического включения означает, что объекты классов QLineEdit, QLabel, QPushButton не существует отдельно от объемлющего экземпляра класса Dialog.
В следующем фрагменте показано описание этой же формы, но через «включение по ссылке».

В этом случае класс Dialog по-прежнему означает целое, но его части, экземпляры классов QLineEdit, QLabel, QPushButton, содержатся в целом косвенно. Теперь эти объекты живут отдельно друг от друга: мы можем создавать и уничтожать экземпляры классов независимо. Чтобы избежать структурной зависимости через ссылки важно придерживаться какой-то договоренности относительно создания и уничтожения объектов, ссылки на которые могут содержаться в разных местах. Нужно, чтобы это делал кто-то один.
Агрегация является направленной, как и всякое отношение "целое/часть". Объекты m_leEdit, m_Label, m_pbOk входят в объект класса Dialog, и не наоборот. Физическое вхождение одного в другое нельзя "зациклить", а вот указатели - можно (каждый из двух объектов может содержать указатель на другой).
Конечно, как уже говорилось, агрегация не требует обязательного физического включения, ни по значению, ни по ссылке. Например, акционер владеет акциями, но они не являются его физической частью. Более того, время жизни этих объектов может быть совершенно различным, хотя концептуально отношение целого и части сохраняется, и каждая акция входит в имущество своего акционера. Поэтому агрегация может быть очень косвенной. Например, объект класса «акционер» может содержать ключ записи об этом акционере в базе данных акций. Это тоже агрегация без физического включения. "Лакмусовая бумажка" для выявления агрегации такова: если (и только если) налицо отношение "целое/часть" между объектами, их классы должны находиться в отношении агрегации друг с другом.
Объекты, входящие в коллекцию, часто называют элементами коллекции. Элементы коллекции, в свою очередь, могут быть коллекцией.
Более узким понятием является контейнер.

Download 0.9 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling