Объектно-ориентированное программирование. Общие возможности контейнеров С++ | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 27 апреля, печатный экземпляр отправим 1 мая.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №26 (212) июнь 2018 г.

Дата публикации: 02.07.2018

Статья просмотрена: 919 раз

Библиографическое описание:

Шукуров, Г. Д. Объектно-ориентированное программирование. Общие возможности контейнеров С++ / Г. Д. Шукуров. — Текст : непосредственный // Молодой ученый. — 2018. — № 26 (212). — С. 28-31. — URL: https://moluch.ru/archive/212/51090/ (дата обращения: 18.04.2024).



Статья посвящена вопросам программирования. Здесь дано понятие свойств объектно-ориентированного программирования, а также рассмотрены требования к контейнерам стандартной библиотеки шаблонов С++. Приводятся понятия некоторых шаблонов контейнерных классов, для которых реализованы алгоритмы в контейнерах.

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

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

Инкапсуляция — свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Некоторые языки (например, С++) отождествляют инкапсуляцию с сокрытием, но большинство (Smalltalk, Eiffel, OCaml) различают эти понятия.

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

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

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

Среди широких масс программистов наиболее известны контейнеры, построенные на основе шаблонов, однако существуют и реализации в виде библиотек (наиболее широко известна библиотека GLib). Кроме того, применяются и узкоспециализированные решения. Примерами контейнеров в C++ являются контейнеры из стандартной библиотеки шаблонов (Standard Template Library, STL) — map, vector и др. В контейнерах часто встречается реализация алгоритмов для них.

Стандартная библиотека C++ также содержит ряд специализированных контейнерных классов — это так называемые контейнерные адаптеры (стек, очередь, приоритетная очередь), битовые поля и массивы значений. Все эти контейнеры обладают специальным интерфейсом, не соответствующим общим требованиям к контейнерам STL.

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

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

‒ Элементы в контейнере располагаются в определенном порядке. Это означает, что при повторном переборе с применением итератора порядок перебора элементов должен остаться прежним. В каждом типе контейнера определены операции, возвращающие итераторы для перебора элементов. Итераторы представляют собой основной интерфейс для работы алгоритмов STL.

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

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

Дадим определения некоторым шаблонам, для которых контейнеры реализуют алгоритмы.

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

Рис.1. Структура вектора

Чтобы использовать вектор в программе, необходимо включить в нее заголовочный файл :

#incude .

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

Рис. 2. Логическая структура дека

Чтобы использовать деки в программе, необходимо включить в нее заголовочный файл :

#incude .

Отображения и мультиотображения. Элементами отображений и мультиотображений являются пары «ключ/значение». Сортировка элементов производится автоматически на основании критерия сортировки, применяемого к ключу. Отображения и мультиотображения отличаются только тем, что последние могут содержать дубликаты, а первые — нет

Рис. 3. Отображение и мультиотображение

Чтобы использовать отображение или мультиотображение в программе, необходимо включить в нее заголовочный файл :

#incude .

Итак, мы дали краткое понятие ООП, описание контейнеров STL C++, а также описание шаблонов контейнеров. Для тех желает заниматься серьёзным программированием, эти понятия просто необходимы, иначе не может быть речи об объектно-ориентированном программировании.

Литература:

  1. С++Стандартная библиотека. Для профессионалов/ Н.Джосьютис. — СП. Питер, 2004. — 730с.
  2. https://ru.wikipedia.org/wiki/Контейнер_(программирование)
Основные термины (генерируются автоматически): STL, контейнер, объектно-ориентированное программирование, динамический массив, заголовочный файл, свойство системы, класс, мультиотображение, программа, тип контейнера.


Похожие статьи

Модульная объектно-ориентированная среда обучения...

Moodle означает модульная объектно-ориентированная динамическая учебная среда.

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

Применение графической библиотеки SDL2.0 для...

Любая игровая программа основывается на игровом цикле.

Для работы с аудио необходимо подключить заголовочный файл SDL_audio.h.

Иванова Г. С. Программирование: основы алгоритмизации и процедурное программирование, объектно ориентированное...

Объектно-ориентированные расширения в программировании...

Объектно-ориентированные расширения в программировании систем автоматизации. Авторы: Ахметов Наиль Раилович, Макаров Александр Александрович.

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

Теоретические аспекты создания обозревателя файловой...

Класс QHeaderView отвечает за создание заголовков и модификацию их свойств, объекты

Элементы хранилища взаимодействуют следующим образом: контейнер хранит массив

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

Обучение объектно ориентированной парадигме...

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

Кибернетические начала в методологиях структурного...

И с начала 80-х годов XX века объектно-ориентированные принципы построения систем, основанные на наборе трех других

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

Робототехника: конструирование и программирование

Программа направлена на привлечение учащихся 5 и 6 классов к современным технологиям конструирования, программирования и использования

Текстовый тип данных. Массив.

Разбор фрагмента программы, демонстрирующий алгоритм работы с файлом.

Обучение студентов основам объектно-ориентированного...

Объектно-ориентированное программирование — это метод программирования, который основан разработке программы в виде множества объектов. При этом каждый из этих объектов является экземпляром определенного класса объектов.

Похожие статьи

Модульная объектно-ориентированная среда обучения...

Moodle означает модульная объектно-ориентированная динамическая учебная среда.

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

Применение графической библиотеки SDL2.0 для...

Любая игровая программа основывается на игровом цикле.

Для работы с аудио необходимо подключить заголовочный файл SDL_audio.h.

Иванова Г. С. Программирование: основы алгоритмизации и процедурное программирование, объектно ориентированное...

Объектно-ориентированные расширения в программировании...

Объектно-ориентированные расширения в программировании систем автоматизации. Авторы: Ахметов Наиль Раилович, Макаров Александр Александрович.

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

Теоретические аспекты создания обозревателя файловой...

Класс QHeaderView отвечает за создание заголовков и модификацию их свойств, объекты

Элементы хранилища взаимодействуют следующим образом: контейнер хранит массив

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

Обучение объектно ориентированной парадигме...

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

Кибернетические начала в методологиях структурного...

И с начала 80-х годов XX века объектно-ориентированные принципы построения систем, основанные на наборе трех других

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

Робототехника: конструирование и программирование

Программа направлена на привлечение учащихся 5 и 6 классов к современным технологиям конструирования, программирования и использования

Текстовый тип данных. Массив.

Разбор фрагмента программы, демонстрирующий алгоритм работы с файлом.

Обучение студентов основам объектно-ориентированного...

Объектно-ориентированное программирование — это метод программирования, который основан разработке программы в виде множества объектов. При этом каждый из этих объектов является экземпляром определенного класса объектов.

Задать вопрос