В некоторых языках программирования парадигма архитектуры организуется вокруг логики и функций. Объектно-ориентированное программирование (ООП) устроено иначе. В нем главным элементом является объект: элемент данных, имеющий уникальные атрибуты и поведение. К языкам, использующим полностью или частично ООП, относятся Python и JavaScript — незаменимые помощники дата-аналитиков и фронтендеров.
Что такое ООП
Объектно-ориентированное программирование фокусируется на объектах, которыми манипулирует разработчик. Противоположность такому подходу — фокус на логике, требующейся для манипуляции. Каждый «заточенный» в своего рода «кокон» объект становится независимой структурой, которой можно управлять как захочется. Для переделывания чего-либо не приходится ломать систему или переписывать логику с нуля, а отдельные объекты можно впоследствии использовать заново.
Скажем, таким объектом может стать элемент сайта. Его можно легко перенести на другую страницу вместо того, чтобы писать вручную.
Каждый объект в рамках ООП получает класс, который определяет, какие данные внутри него содержатся, и какую логику нужно применять для взаимодействия с ним. Логика называется методом.
Пока может звучать непонятно, но просто подождите — дальше в статье мы объясним, как работает ООП. Еще вы можете записаться на онлайн-практикум по фронтенд-разработке — там мы объясняем базовые принципы специальности, в том числе касаемся вопроса ООП. Это бесплатно!
Как устроен объект в ООП
В состав объекта входят несколько «строительных блоков»:
- классы — заданные пользователем типы, определение объекта. Объекты сами по себе — это экземпляры класса, созданные с помощью специально определенных данных;
- методы — это функции, которые могут выполнять объекты. Они определяются внутри класса и описывают поведение объекта. Каждый метод, содержащийся в определении, начинается со ссылки на объект экземпляра. Программисты используют методы для многократного использования или сохранения функциональности, заключенной в одном объекте за один раз;
- атрибуты представляют собой состояние объекта — это характеристики, которые отличают классы. Данные хранятся в поле атрибутов. Атрибуты принадлежат самому классу и определяются в его шаблоне.
Например, есть класс — автомобиль. У «автомобиля» есть определяющие его атрибуты, содержащиеся в шаблоне класса, такие как цвет, марка, модель. В рамках класса создается объект «myCar», «мой автомобиль». Его атрибуты определены — это красный Dodge Charger. Или «helensCar», «автомобиль Елены», синий Nissan Ultima.
В классе Car может быть метод repaint, который изменяет атрибут цвета автомобиля. Эта функция полезна только для объектов типа Car, поэтому она объявляется внутри класса Car, тем самым превращаясь в метод.
Примерно так и работает подход ООП.
Базовые принципы
- Инкапсуляция. Вся важная информация содержится внутри объекта, причем открыта посторонним только малая ее часть. Реализация и состояние каждого объекта хранятся внутри определенного класса. Другие объекты не имеют доступа к этому классу и не имеют права вносить изменения. Они могут вызывать только список публичных функций или методов. Такая особенность сокрытия данных обеспечивает большую безопасность программы и позволяет избежать непреднамеренного повреждения данных.
- Абстракция. Объекты раскрывают только те внутренние механизмы, которые важны для использования другими объектами, скрывая ненужный код реализации. Эта концепция помогает разработчикам легче вносить дополнительные изменения или дополнения с течением времени.
- Наследование. Классы могут повторно использовать код и свойства других классов. Между объектами могут быть установлены связи и подклассы, что позволяет разработчикам повторно использовать общую логику, сохраняя при этом уникальную иерархию. Наследование дает возможность более тщательно анализировать данные, сокращает время разработки и обеспечивает высокий уровень точности.
- Синтаксис. Это набор правил, которые определяют, как организованы слова и знаки препинания в языке программирования.
- Связь. Она же степень, в которой элементы программного обеспечения связаны друг с другом. Например, если у класса меняются атрибуты, то и у любого другого связанного класса они тоже меняются.
- Ассоциация. Это связь между одним или несколькими классами. Ассоциации могут быть один к одному, многие ко многим, один ко многим или многие к одному.
Эти принципы написания кода делают ООП его очень полезным для разработчиков. Структуры ООП по своему определению просты, могут использоваться повторно, их проще обрабатывать, проще проводить дебаггинг и добавлять информацию. Не говоря уже о защищенности данных — все самое важное хранится внутри класса, и доступа к этой информации у посторонних программ нет.
Почему ООП
Все больше кодеров выбирают объектно-ориентированное программирование. Ничего удивительного — по такому принципу работают популярные языки Ruby, Scala, Java, Python, C++, PHP и JavaScript.
ООП:
- модульное — инкапсуляция делает объекты самодостаточными, что облегчает поиск и устранение неисправностей и совместную разработку;
- можно использовать повторно благодаря наследованию, а значит, команде не придется писать одно и то же несколько раз;
- легко масштабируется, что позволяет реализовывать функциональные возможности системы независимо друг от друга;
- гибкое — полиморфизм позволяет одной функции адаптироваться к классу, в котором она находится;
- недорогое как раз благодаря возможности повторного использования.
У объектно-ориентированного программирования есть альтернативы — функциональное, императивное и декларативное, логическое. Большинство современных языков позволяют разработчикам комбинировать модели, поскольку они могут использоваться для различных методов кодинга. Например, JavaScript и Scala можно использовать как для ООП, так и функционального программирования.