Как сделать ваш код более читаемым с помощью абстракции

kak sdelat vash kod bolee chitaemym s pomoshhyu abstrakczii

Тьяго Антунес

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

В этой статье я объясню вам концепцию абстракции и как ее использовать, а также приведу несколько примеров в Python.

Прежде всего: что такое абстракция?

Согласно моему учителю по основам программирования:

«Абстракция – это упрощенная спецификация сущности»

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

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

Давайте посмотрим на дерево двоичного поиска (если вы не знаете, что это такое, посмотрите мою статью о них). Мы можем определить узел как сущность со следующими свойствами:

A Node has:    Node * left    Node * right    int val

Здесь мы сказали бы, что узел имеет два указателя на другие узлы и значение int. Но как полезно это для кого-то по сравнению с функцией insert(node, value) и это было бы верно вставить? Таким образом, вам просто нужно бы позвонить, и это было сделано. Просто.

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

Хорошо, но насколько хороша абстракция данных?

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

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

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

Давайте выберем пример и поработаем с ним:

Мы будем считать, что векторы:

  • Объекты с 2 значениями, x и y
  • x и y оба неотъемлемых числа

Таким образом, векторы выглядят как (2,5), (0,19) и т.п.

Хорошим способом создания абстракций является использование Objects. Они обеспечивают сокрытие информации и анонимность представления. Это позволяет пользователю сохранить абстракцию.

Давайте начнем с определения нашего класса (я не буду определять проверку типа, чтобы сохранить код более чистым, но вы должны это сделать):

20fnPffDOv4fnL3eURvntvd9XCYz9XS4ui0v

Итак, мы определили несколько методов, и теперь у нас много вещей, которые мы можем сделать:

hpEw8SBFt3eI6dQi0klMZHYXrWD9ZlQZ5oUe

Для 2D-вектора это может показаться простым. Если вы начнете внедрять это в более сложные программы, вы заметите, что они очень полезны.

Давайте теперь сделаем другую реализацию вектора класса (изменим его внутреннее состояние) на то с теми же методами, но с другим кодом:

UtEBOgQTBAPSEEFf1QCa1AUEDnXtWvZV4f8-
Реализация разная, но выход тот же

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

Давайте теперь используем другой пример, на этот раз с 2 классами: City и Citizen.

RdwMtL7GiE7tKQPC3BzTc9-oPhaYGevI5oN4
Город состоит из граждан

И получаем следующее:

4ACkQNAQl4-GxE9XaPu7uwvcmmza9FZ5CDEX
### OUTPUT ###City population is 1000, random: Citizen is a female 20 years oldCity population is 1000, random: Citizen is a male 74 years old

Но представьте, что мы хотим изменить, как класс Citizen работает внутри. Если бы мы не использовали абстракцию, нам бы пришлось изменить весь код! Это очень много работы!

J9d8o3vpSR3cO1tzWQNnAhvB3B13ccR2o2aE
Теперь мы очень быстро сменили класс Citizen – и все по-прежнему работает!

Теперь, если код будет запущен снова, мы знаем, что он работает, хотя результаты отличаются. Как видите, мы сменили целый класс, но все работает!

Подведению

Поначалу абстракция может показаться, что она не нужна. Чем ниже используемый язык, тем важнее использовать абстракцию. Это позволяет избежать сложного кода и действительно делает все просто. В таких языках как C, это действительно полезно. Если вы сомневаетесь, проверьте этот проект, который я сделал, где я реализовал абстракцию, и было очень легко понять, что происходит.

Если у вас возникли вопросы или что-то о чем вы хотите поговорить или обсудить, оставьте комментарий ниже!

Не забудьте подписаться на меня в Instagram и Twitter!

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

Ваш адрес email не будет опубликован.