Объект является основой для понимания объектно-ориентированной концепции. Оглянитесь вокруг прямо сейчас, и вы найдете множество примеров объектов реального мира: ваша собака, ваш стол, ваш телевизор, ваш велосипед.
Объекты реального мира имеют две общие характеристики: все они имеют состояние и поведение. У собак есть состояние (кличка, окрас, порода, они голодны) и поведение (лай, ластится, виляет хвостом). Велосипеды также имеют состояние (текущая передача, текущая частота вращения педалей, текущая скорость) и поведение (переключение передачи, изменение частоты вращения педалей, нажатие на тормоза). Определение состояния и поведения объектов реального мира - отличный способ начать мыслить в терминах объектно-ориентированного программирования.
Прямо сейчас найдите минутку, чтобы понаблюдать за объектами реального мира, которые находятся в непосредственной близости от вас. Для каждого объекта, который вы видите, задайте себе два вопроса: "В каких возможных состояниях может находиться этот объект?" и "Какое возможное поведение может выполнять этот объект?". По мере наблюдения вы заметите, что объекты реального мира различаются по сложности; ваш настольный светильник может иметь только два возможных состояния (включено и выключено) и два возможных варианта поведения (включить, выключить), но у вашего настольного радиоприемника могут быть дополнительные состояния (включено, выключено, текущая громкость, текущая станция) и поведение (включать, выключать, увеличивать громкость, уменьшать громкость, искать, сканировать и настраивать). Вы также можете заметить, что некоторые объекты, в свою очередь, также будут содержать другие объекты. Все эти наблюдения из реального мира переносятся в мир объектно-ориентированного программирования.
Программные объекты концептуально похожи на объекты реального мира: они тоже состоят из состояния и связанного с ним поведения. Объект сохраняет свое состояние в полях (переменных) и демонстрирует свое поведение с помощью методов (функций). Методы воздействуют на внутреннее состояние объекта и служат основным механизмом коммуникации между объектами. Скрытие внутреннего состояния и требование, чтобы все взаимодействия выполнялись с помощью методов объекта, известно как инкапсуляция данных — фундаментальный принцип объектно-ориентированного программирования.
Присваивая состояние (текущую скорость, текущую частоту вращения педалей и текущую передачу) и предоставляя методы для изменения этого состояния, объект сохраняет контроль над тем, как внешнему миру разрешено его использовать. Например, если у велосипеда всего 6 передач, метод переключения передач может отклонить любое значение, меньшее 1 или большее 6.
Объединение кода в отдельные программные объекты дает ряд преимуществ, в том числе:
- Модульность: исходный код объекта может быть написан и поддерживаться независимо от исходного кода для других объектов. После создания объект можно легко передавать внутри системы.
- Сокрытие информации: при взаимодействии только с методами объекта детали его внутренней реализации остаются скрытыми от внешнего мира.
- Повторное использование кода: если объект уже существует (возможно, написан другим разработчиком программного обеспечения), вы можете использовать этот объект в своей программе. Это позволяет специалистам реализовывать / тестировать / отлаживать сложные объекты, зависящие от конкретной задачи, которым вы затем можете доверить запуск в своем собственном коде.
- Возможность подключения и простота отладки: если конкретный объект оказывается проблематичным, вы можете просто удалить его из своего приложения и подключить другой объект в качестве его замены. Это аналогично устранению механических неполадок в реальном мире. Если сломался болт, вы заменяете его, а не всю машину целиком.