12.1 – Добро пожаловать в объектно-ориентированное программирование
Еще в уроке «1.3 – Знакомство с переменными в C++» мы определили объект в C++ как «часть памяти, которая может использоваться для хранения значений». Объект с именем называется переменной.
В традиционном программировании (что мы делали до этого момента) программы – это в основном списки инструкций для компьютера, которые определяют данные (через объекты), а затем работают с этими данными (через инструкции и функции). Данные и функции, которые работают с этими данными, представляют собой отдельные сущности, которые объединяются вместе для получения желаемого результата. Из-за этого разделения традиционное программирование часто не обеспечивает интуитивного представления реальности. Программист должен походящим образом управлять и связывать свойства (переменные) с поведениями (функциями). Это приводит к тому, что код выглядит так:
driveTo(you, work);
Так что же такое объектно-ориентированное программирование? Как и многие другие вещи, его, возможно, легче всего понять, используя аналогию. Оглянитесь вокруг, куда ни глянь – объекты: книги, здания, еда и даже вы. У объектов есть два основных компонента: 1) список соответствующих свойств (например, вес, цвет, размер, прочность, форма и т.д.) и 2) некоторое количество вариантов поведения, которые они могут проявлять (например, открывать, делать что-то еще горячее и т.д.). Эти свойства и поведение неразделимы.
Объектно-ориентированное программирование (ООП) дает нам возможность создавать объекты, которые связывают вместе свойства и поведение в автономный пакет, который можно повторно использовать. Это приводит к коду, который выглядит примерно так:
you.driveTo(work);
Это не только читается более ясно, но и дает более четкое представление о том, кто является субъектом (you
, «вы») и какое поведение вызывается (driveTo
, «куда-то ехать»). Вместо того, чтобы сосредоточиться на написании функций, мы сосредоточились на определении объектов с четко определенным набором поведения. Вот почему эта парадигма называется «объектно-ориентированной».
Это позволяет писать программы в более модульной форме, что упрощает их написание и понимание, а также обеспечивает более высокую степень повторного использования кода. Эти объекты также обеспечивают более интуитивный способ работы с нашими данными, позволяя нам определять, как мы взаимодействуем с объектами, и как они взаимодействуют с другими объектами.
Обратите внимание, что ООП не заменяет традиционные методы программирования. Скорее, он дает вам дополнительные инструменты в вашем наборе инструментов программирования для управления сложностью, когда это необходимо.
Объектно-ориентированное программирование также предлагает несколько других полезных концепций: наследование, инкапсуляция, абстракция и полиморфизм (у разработчиков языков есть принцип: никогда не используйте короткое слово вместо длинного). Мы рассмотрим все эти концепции в следующих уроках в следующих нескольких главах. Это много нового материала, но как только вы должным образом ознакомитесь с ООП и поймете, что оно делает, вы, возможно, больше никогда не захотите возвращаться к чисто традиционному программированию.
Обратите внимание, что термин «объект» немного перегружен, и это вызывает некоторую путаницу. В традиционном программировании объект – это часть памяти для хранения значений. И всё. В объектно-ориентированном программировании «объект» подразумевает, что он является одновременно объектом в традиционном смысле программирования и сочетает в себе свойства и поведение. С этого момента, когда мы используем термин «объект», мы будем иметь в виду «объекты» в объектно-ориентированном смысле.