fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Зачем нам нужно изучать объектно-ориентированное программирование?

Зачем нам нужно изучать объектно-ориентированное программирование?

Есть знаменитая книга Никлауса Вирта, в которой рассматриваются фундаментальные концепции программирования, и Мохан ее внимательно прочитал. “Я знаю все о том, как написать программу; зачем мне изучать OOPS?” – хвастался Мохан. – похвастался Мохан.

“Потому что то, что сказал Никлаус, теоретически верно: программа – это комбинация двух вещей: информации (Data) и набора инструкций для манипулирования этой информацией (Algorithms). Но получается, что мы пишем не просто программы, мы пишем программное обеспечение”. – Мудрый разработчик ответил.

“И в чем же разница?” – спросил Мохан, все еще не понимая разницы.

Программа пишется для выполнения определенной задачи, например, сортировки связанного списка или поиска кратчайшего пути в графе, или просто вывода сообщения “hello world” на консоль. Но программное обеспечение – это набор программ, которые взаимодействуют между собой для выполнения одной или нескольких задач.

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

  • Легче понимать и объяснять.
  • Легче повторно использовать и расширять.
  • Легче поддерживать.

“Объектно-ориентированное программирование (ООП) является одной из самых популярных парадигм, используемых в последние несколько десятилетий для этой цели”. – Мудрый разработчик ответил. “Так что же такое ООП и как оно может мне помочь?” – Мохану было любопытно узнать больше.

Прежде чем это произойдет, давайте разберемся, что такое объект? Объект – это логическая конструкция, состоящая из некоторых определенных пользователем данных и набора операций для манипулирования этими данными (данные + операции = объект), а объектно-ориентированное программирование – это способ думать и структурировать нашу программу вокруг этих объектов. Основная идея заключается в следующем: Объектно-ориентированное мышление – это отличный способ понять проблему, которую вы пытаетесь решить. Это позволяет создавать программное обеспечение, которое лучше поддается сопровождению и легко понимается другими людьми.

Построение системы: Путь ООП

Допустим, вы хотите создать систему управления запасами для книжного магазина. И требования таковы:

  1. Система должна позволять хранить метаданные каждой книги, такие как название, автор, цена и т.д.
  2. Система должна позволять добавлять и удалять книги из инвентаря.
  3. Система должна иметь возможность поиска книг по метаданным.

Чтобы построить свою систему “объектно-ориентированным способом”, вам необходимо

  1. Определить объекты в вашей системе: Существительные в ваших требованиях часто переводятся в “объекты” вашей системы. Попробуйте!
  2. Определить отношения и ответственность этих объектов: Идентификация глаголов в ваших требованиях дает вам отличное представление о ролях и обязанностях каждого объекта.
  3. Определите атрибуты (данные) и операции (методы) для каждого объекта: По аналогии с предыдущим упражнением, снова посмотрите на оставшиеся существительные, прилагательные и глаголы. Прилагательные определяют атрибуты, а глаголы – операции, которые необходимо выполнить над объектом.

Запишите свой анализ, повторите шаги и, используя здравый смысл, доработайте свой дизайн. Задайте такие вопросы, как: Должен ли автор быть классом или строкой? Как хранить книги, чтобы их можно было легко искать? Имеет ли значение порядок результатов поиска? Что если пользователь захочет отсортировать книги по цене? Задавая такие вопросы, вы сможете:

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

Вот простой пример того, как могут выглядеть ваши классы:

Рассмотрим другой пример:

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

  • Доска размером 8X8 квадратов, на которой будет происходить игра.
  • Шахматные фигуры разных типов, т.е. пешка(8), слон(2), конь(2), король(1), ферзь(1) и ладья(2) для каждого игрока.
  • 2 игрока для игры.

Думаю, вы поняли! Мы отметили все существительные в наших требованиях. Поэтому нам понадобятся следующие объекты: игрок, доска, квадрат, пешка, слон, конь, король, ферзь, ладья, игра и т.д.

Подождите!

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

“Действительно, соотношение времени, затрачиваемого на чтение и написание, составляет более 10 к 1. Мы постоянно читаем старый код в рамках усилий по написанию нового кода. … Поэтому, облегчая чтение, мы облегчаем написание”. – Роберт К. Мартин, “Чистый код: A Handbook of Agile Software Craftsmanship

Спросите себя, нужен ли для каждой части отдельный класс, или это “экземпляры” одного класса с разными “типами”? Аналогично, нужен ли вам отдельный класс игрока? Поскольку игроков можно считать “внешними инициаторами”, взаимодействующими с нашей системой. Помните, что здесь нет единственно правильного ответа. Но простой дизайн с меньшим количеством сущностей обычно является хорошей отправной точкой. Одним из таких ответов может быть :

“Как в мире алгоритмов мы пытаемся разделить “проблему” на меньшие части, чтобы найти оптимальное решение для компьютера, так и здесь мы делим нашу “программу” на меньшие части, чтобы найти оптимальный код для разработчиков”. – Мохан

“Да, это верно; есть еще много парадигм программирования, которые были созданы с этой целью. Но это история для другого раза, а пока вам следует сосредоточиться на улучшении своих навыков ООП” – ответил мудрый разработчик.

Заключение

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *