Что такое объект и почему он важен?

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

Объекты как структуры данных

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

Границы - ключ к успеху

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

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

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

Сообщения через границы

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

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

Организация объекта

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

Код предназначен для изменения

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

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

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

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

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

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

Заключение

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