Руководство для начинающих - краткое введение в Struct, Impl и Traits

OOPS

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

Объектно-ориентированное программирование основано на четырех основных принципах:

  • Наследование
  • Инкапсуляция
  • Абстракция
  • Полиморфизм

Учитывая популярность OOPS, для большинства было бы неожиданностью, что у нас нет четкого консенсуса среди программистов по функциям, необходимым для определения, является ли язык объектно-ориентированным или нет. Rust является многопарадигмальным языком и поддерживает поддержку облегченных версий Oops, таких как это современный Go. Но это далеко не так мощно, как java и python.

Сначала мы обсудим, как имитировать классы и создавать объекты в ржавчине. Мы пройдем через:

  1. Struct
  2. Черты
  3. Impl

1. Struct

Rust поддерживает oops через structs вместо традиционных классов. Struct - это определенные пользователем типы, которые хранят атрибуты / состояние объекта. Rust не является строго объектно-ориентированным, как Java и C++.

Мы можем получить доступ к атрибутам, создав экземпляры структур:

2. Черты характера

Traits содержит только поведение / методы объекта. Черты аналогичны интерфейсу в других языках программирования. Совместное поведение абстрагируется от черт.

Здесь мы определили Formula черты с get_area и get_perimeter функциями. Мы также можем реализовать метод struct, используя impl <trait> for <struct>.

3. Impl

Как видно из предыдущего примера, Impl используется для добавления метода в структуру.

В приведенном выше примере мы добавили new() в качестве конструктора в структуру цилиндра, а также функцию get_summary(), которая просто печатает площадь и периметр. Теперь давайте посмотрим, как мы можем получить доступ к функциям.

Во многих ситуациях let cylinder = Cylinder{radius: 1.0, height: 2.0, unit: “cm”.to_string()}; более подробный и простой для понимания, чем let cylinder = Cylinder::new(1.0, 2.0);. Но метод new() может сделать вещи удобными для нас, если мы хотим присвоить структуре значение по умолчанию. Поэтому, если все поля являются общедоступными, лучше не использовать struct. В противном случае, если даже одно поле является закрытым, необходимо использовать new() в качестве конструктора.

Теперь, когда мы определили, как добавлять атрибуты и методы, мы рассмотрим основные принципы oops:

1. Наследование

Наследование - это отношение есть между двумя классами. Это обеспечивает возможность повторного использования кода и безопасность типов. Люди больше не предпочитают наследство. Таким образом, большинство людей не уснут, зная, что ржавчина не поддерживает наследование. Вместо этого Rust продвигает композицию выше наследования. Считается лучше использовать и внедрить. Для реализации отношения (композиции) есть ржавчина использует трейты.

2. Инкапсуляция

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

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

Мы реализуем методы установки и получения, которые предоставляют доступ для чтения и записи к атрибуту. В приведенном ниже коде get_unit() - это средство получения, а set_unit() - средство установки.

3. Абстракция

Абстракция помогает нам писать реализацию, скрывая ненужную информацию, такую ​​как частные атрибуты. В другом примере мы использовали абстракцию. Как и в get_area(), мы возвращаем область, используя частные переменные radius и height.

4. Полиморфизм

Полиморфизм - это способность, которая позволяет использовать единый интерфейс для нескольких типов. Он в основном используется при повторном использовании кода.

Мы изменили структуру и трейты из последнего примера и свели их к минимуму, чтобы удалить стандартные коды. Здесь у нас есть черта get_area(), которая реализована в структурах Cylinder и Triangle. Когда мы используем функцию, основанную на структуре, у нас есть другой метод расчета и другой результат.