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

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

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

Автор:

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

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

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

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

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

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


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

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

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

Формальное описание объектного и реляционного представлений предметной области

В данной статье производится построение формального описания объектного и реляционного представлений произвольной предметной области для реализации инструменты объектно-реляционного преобразования

Роль объектного мышления в объектно-ориентированном программировании

В статье рассматривается роль и специфика объектного мышления на современном этапе объектно-ориентированного программирования.

Анализ СУБД и перспективных языков программирования для реализации системы определения параметров сборного режущего инструмента на основании графовых моделей

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

Машинное обучение и язык программирования Python

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

Современные методы оптимизации программного кода

В статье рассмотрены основные методы оптимизации программного кода. Приведена классификация методов оптимизации. Приведены главные принципы написания эффективного кода.

Особенности языка программирования Python, которые необходимо учитывать при подготовке к олимпиадам по информатике

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

Работа с элементами GUI на примере приложения с использованием кроссплатформенного фреймворка Qt

В статье подробно разобран код приложения, написанного с использованием кроссплатформенного фреймворка Qt основанного на языке C++. Приложение Dynamic Layouts является одним из примеров, входящих в пакет Qt Creator. На примере данного приложения расс...

Основные современные языки программирования

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

Паттерн проектирования «состояние» в языке программирования Python

Данная статья рассматривает паттерн проектирования «состояние» в Python.

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

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

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

Формальное описание объектного и реляционного представлений предметной области

В данной статье производится построение формального описания объектного и реляционного представлений произвольной предметной области для реализации инструменты объектно-реляционного преобразования

Роль объектного мышления в объектно-ориентированном программировании

В статье рассматривается роль и специфика объектного мышления на современном этапе объектно-ориентированного программирования.

Анализ СУБД и перспективных языков программирования для реализации системы определения параметров сборного режущего инструмента на основании графовых моделей

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

Машинное обучение и язык программирования Python

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

Современные методы оптимизации программного кода

В статье рассмотрены основные методы оптимизации программного кода. Приведена классификация методов оптимизации. Приведены главные принципы написания эффективного кода.

Особенности языка программирования Python, которые необходимо учитывать при подготовке к олимпиадам по информатике

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

Работа с элементами GUI на примере приложения с использованием кроссплатформенного фреймворка Qt

В статье подробно разобран код приложения, написанного с использованием кроссплатформенного фреймворка Qt основанного на языке C++. Приложение Dynamic Layouts является одним из примеров, входящих в пакет Qt Creator. На примере данного приложения расс...

Основные современные языки программирования

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

Паттерн проектирования «состояние» в языке программирования Python

Данная статья рассматривает паттерн проектирования «состояние» в Python.

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