Введение в объектно-ориентированное программирование на C++

ООП на С++Данным введением мы начинаем серию статей, посвященных C++ как объектно-ориентированному языку программирования.

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

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

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

В этой статье мы обсудим основы объектно-ориентированного программирования и, вкратце, все возможности ООП.

Объектно-ориентированное программирование

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

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

Помимо объектов, ООП поддерживает различные функции, они перечислены ниже:

  • Классы
  • Инкапсуляция
  • Абстракция
  • Наследование
  • Полиморфизм

Используя ООП, мы пишем программы, с помощью классов и объектов, используя вышеуказанные функции. Язык программирования называется объектно-ориентированным языком программирования, в том случае, если он для своей работы использует объект. Например, Smalltalk — это язык, который является чистым объектно-ориентированным языком программирования.

Но с другой стороны, такие языки программирования, как C++ и Java, считаются лишь частично объектно-ориентированными языками программирования.

Почему C++ является лишь частично ООП?

Язык C++ был разработан с основным намерением использовать объектно-ориентированные функции языка C.

Хотя язык C++ поддерживает функции ООП, такие как классы, объекты, наследование, инкапсуляция, абстракция и полиморфизм, существует несколько причин, по которым C++ классифицируется как частично объектно-ориентированный язык программирования.

Читать также:  Функции преобразования символов в С++

Мы представляем некоторые из этих причин ниже:

1) Создание классов/объектов необязательно

В C++ функция main является обязательной и всегда находится вне класса. Следовательно, мы можем иметь в программе только одну основную функцию и можем обойтись без классов и объектов.

2) Использование глобальных переменных

C++ имеет концепцию глобальных переменных, которые объявляются вне программы и могут быть доступны любому другому объекту программы. Это нарушает инкапсуляцию. Хотя C++ поддерживает инкапсуляцию в отношении классов и объектов, он не заботится об этом в случае глобальных переменных.

3) Наличие дружественной функции класса

C++ поддерживает дружественный класс или функцию, которые можно использовать для доступа к закрытым и защищенным членам других классов, сделав их «друзьями». Это еще одна особенность C++, нарушающая парадигму ООП.

В заключение, хотя C++ поддерживает все функции ООП, упомянутые выше, он также предоставляет функции, которые могут действовать как обходной путь для этих функций, что и делает C++ частично объектно-ориентированным языком программирования.

Особенности ООП

Здесь мы представим различные функции ООП, которые используются для программирования.

Классы и объекты

Объект — это базовая единица объектно-ориентированного программирования. Объект содержит данные и методы или функции, которые работают с этими данными. Объекты занимают место в памяти.

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

Возьмем пример объекта автомобиля. Объект автомобиля с именем «Lada» может иметь такие данные, как цвет; марка, модель, максимальная скорость и т.д., а также такие функции, как разгон. Определим еще один объект «Uaz». Он может иметь те же данные и функции, что и предыдущий объект, но также и некоторые другие дополнения.

Точно так же у нас может быть множество объектов с разными именами, имеющими схожие данные и функции и некоторые незначительные вариации.

Читать также:  Итераторы в STL

Таким образом, вместо того, чтобы определять эти похожие данные и функции в этих разных объектах, мы определяем план этих объектов, который представляет собой класс с именем «Car». Каждый из вышеперечисленных объектов будет экземпляром автомобиля этого класса.

Абстракция

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

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

Инкапсуляция

Инкапсуляция — это процесс, с помощью которого данные и методы или функции, работающие с ними, объединяются вместе. При этом данные не могут быть легко доступны для внешнего мира. В ООП мы достигаем инкапсуляции, делая элементы данных закрытыми и имея публичные функции для доступа к этим элементам данных.

Наследование

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

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

Полиморфизм

Полиморфизм означает множество форм.

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

Динамическая привязка или связывание

ООП поддерживает динамическую привязку, в которой вызов функции разрешается во время выполнения. Это означает, что код, который будет выполняться в результате вызова функции, определяется во время выполнения. Виртуальные функции являются примером динамического связывания.

Читать также:  Наследование в С++

Передача сообщений

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

Преимущества ООП

Давайте обсудим некоторые преимущества ООП.

1) Возможность повторного использования

ООП позволяет повторно использовать существующий код посредством наследования. Мы можем легко приобрести существующую функциональность и улучшить ее, не переписывая код заново. Это приводит к менее раздутому коду.

2) Модульность

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

3) Гибкость

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

4) Удобство доработки

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

5) Скрытие данных и информации

ООП помогает нам скрывать данные, тем самым защищая информацию от утечки. Только те данные, которые необходимы для нормального функционирования программы, доступны пользователю, внутренние детали кода скрыты.

Итог

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

В этой статье мы обсудили различные функции ООП, но дальнейшем, мы подробно обсудим все эти функции.

В следующей статье подробно рассмотрим классы и объекты в C++.

С Уважением, МониторБанк

Добавить комментарий