Что такое классы в объектно-ориентированном программировании

Что такое классы в объектно-ориентированном программировании

Объясняем базовые понятия.

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

Рассказываем, что такое классы в объектно-ориентированных языках, по каким принципам работают и чем отличаются.

Зачем нужны классы в программировании

ООП — это способ написания программ, где структуру создают из объектов, которые взаимодействуют между собой. На базе ООП построены языки Java, Swift, Python, PHP, JavaScript и Ruby. 

Основа ООП — класс — способ отобразить предмет реального мира с помощью атрибутов. Например, множество классов используют как «чертежи» для компьютерного отображения домов, машин, деревьев, животных и любых других объектов, которые нужно смоделировать. Класс в программировании состоит из данных и кода. Данные отображают предметы или абстрактные понятия, а код ими управляет. 

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

Если в ООП есть задача описать реальный объект — например, книгу — вы должны задать ее характеристики (свойства объекта): цвет, размер, автор, год выпуска, жанр. У книги есть и функции: выдача текстовой или графической информации.

Задав программе характеристики и функции, мы обобщили данные и создали объект. Если мы знаем, что множество книг соответствует характеристикам, то можем использовать объект как шаблон для создания других. Шаблон, который задает начальные характеристики для объектов, — это и есть класс.

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

Как работают классы

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

Абстрагирование — это отсечение несущественных характеристик для класса и прописывание ключевых. Например, и для класса Car, и для класса Plane можно указать то, что они сделаны из металла, но это не ключевая характеристика, а вот способность ездить (для первого класса) и летать (для второго) — существенная. Идея абстрагирования в том, чтобы задать минимум полей для объекта, оставив важные. 

Идея наследования состоит в передаче характеристик от одного класса к другому, у которого есть также и свои характеристики. Классы, на основе которых создаются другие, называются родительскими или суперклассами. Те, которые унаследовали характеристики, — классами-потомками или подклассами.

Например, компания собирается в 2022 году выпустить в производство новую серию ноутбуков с улучшенными видеокартами, процессорами и большим объемом памяти. Но разрабатывать модель с нуля долго. Если в компании уже есть линейка, которая отвечает запросам (суперкласс Laptops), то класс NewLaptops унаследует атрибуты суперкласса и к нему лишь добавят новые характеристики.

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

Идею полиморфизма кратко описывают так: «один интерфейс — множество реализаций» — с помощью одной функции можно обработать данные, принадлежащие к разным классам. Если компания производит разную технику с видеокамерами, код, который описывает свойства камеры, будет подходить для нескольких классов. Например, NewLaptops и Phones.

Реализация ООП в разных языках 

Объектно-ориентированное программирование — идея, и воплотить ее можно по-разному. 

Например, в Java нет возможности множественного наследования — то есть класс не может получить свойства от нескольких родительских классов, а в Python эта опция доступна.   

В Java и C++ вы создаете классы как шаблон для объектов — потом их нельзя изменить, например, добавить новые методы. Чтобы совершить новые действия, нужно создать подкласс. В Ruby есть возможность добавлять новые методы в существующий класс.  

Отличается и инкапсуляция в языках. В Java все данные разделяют на публичные и приватные. Доступ к приватным классам для функций будет ограничен, пока их атрибуты не получат статус публичных.

В Python по умолчанию все данные открыты. Но есть и возможность создать непубличные свойства. Такие атрибуты выделяются подчеркиванием. Для них Python меняет название переменной, но пользователь все равно может получить к ней доступ.

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

Ещё статьи
Математический естественный отбор.
Что нужно знать о соглашении, которое помогает нам посещать сайты.