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

Что такое объект?

В объектно-ориентированных концепциях объекты определяются двумя компонентами: атрибутами и поведением ( поведения называются методами). Что, если бы я сказал вам, что вы объект? Можете ли вы определить свои атрибуты и поведение? Например, как вас зовут и сколько вам лет? Ответы на эти вопросы - ваши атрибуты. А как насчет вашего поведения? Вы можете есть, читать или, если вы «избранный», вы можете летать? Итак, мы можем думать о вас как об объекте. В парадигме ООП атрибуты и методы содержатся в одном объекте, что является важным отличием ООП от других парадигм.

Что такое класс?

Классы используются для создания объектов. Мы можем сказать, что класс - это план или прототип объекта.

//name of class
public class Agent {
 //Public Attributes
 //Constructors
 //Accessor Methods
 //Public Interfaces
 //Private Implementations
}

Давайте изучим структуру классов.

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

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

Атрибуты. В атрибутах хранится информация об объекте. У каждого экземпляра класса будут свои уникальные атрибуты и его собственная копия в памяти. Таким образом, мы можем изменять атрибуты, не затрагивая другие созданные нами объекты. Но если вы хотите создать атрибут, который имеет только одну копию в памяти для всех объектов, вы можете использовать ключевое слово static.

Модификаторы доступа. С помощью ключевых слов модификатора доступа мы можем установить доступность и ограничить область действия класса, конструкторов, атрибутов и методов. Ключевые слова и значение этих модификаторов могут отличаться от одного языка к другому. Например, в Java существует четыре типа модификаторов доступа: public, private, защищенный и по умолчанию. Мы узнаем о них позже, а пока просто знайте, что, когда атрибут или метод определены как общедоступные, все объекты могут напрямую обращаться к ним, когда они являются закрытыми, только этот конкретный объект может получить к нему доступ, когда он защищен, связанные объекты могут получить к нему доступ.

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

Методы:. Как вы можете видеть в определении класса, я разделил методы на три части. Методы доступа, методы интерфейса и частные методы. Давайте рассмотрим эти методы соответственно.

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

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

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

Давайте определим класс Agent, используя вышеизложенные знания.

В приведенном выше примере у нас есть два атрибута для класса Agent. Все они являются частными, поэтому это означает, что другой объект не может напрямую обращаться к этим атрибутам. Я создал методы доступа для других объектов для связи с объектом-агентом. Таким образом, каждый атрибут имеет свой собственный метод получения и установки. Как вы можете видеть, у класса Agent есть два конструктора, это означает, что мы можем создать объект Agent двумя разными способами. Один из них инициализирует объект Agent Smith по умолчанию. Другой ожидает начальные значения атрибутов класса Agent. Используя ключевое слово new и методы конструктора класса, мы можем создать новый объект.

Agent agentSmith = new Agent()
Agent agentJones = new Agent(name="Jones", heightInCM=188)
Agent agentBrown = new Agent(name="Brown", heightInCM=177)

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

В этом посте мы говорили о двух основных концепциях объектно-ориентированного программирования: Object и Class. Мы знаем, что такое объект и как его определять. Мы говорили о классах и классовой структуре. В следующем посте мы поговорим о наследовании и дадим ответ на эти вопросы. Что такое наследование? и почему наследование - это плохо !?

Не стесняйтесь давать любые предложения и дайте мне знать, если есть ложная информация.

Ссылки

[1]: Мэтт Вайсфельд. (Май 2019). Процесс объектно-ориентированного мышления, 5-е издание

[2]: Роберт К. Мартин. (Август 2008 г.). Чистый код: руководство по созданию гибкого программного обеспечения