У меня шестеро честных слуг
(Они научили меня всему, что я знал);
Их зовут Что и Почему и Когда
И Как, и Где и Кто.
~Редьярд Киплинг

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

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

Что такоена самом деле абстракция? В словаре термин качество работы с идеями, а не с событиями. В индустрии программного обеспечения чаще всего используется ответ «скрытие деталей реализации». Оба они верны и в основном дополняют друг друга. Абстракция — это как подняться на высоту и увидеть вещи, вы видите только контур, вы не видите деталей. Вы видите дорогу, вы не можете разобрать, из чего состоит эта дорога. Вы видите смутное представление вещей.

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

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

Когда следует выбирать абстракцию? В разработке программного обеспечения почти всегда, так как обеспечивает слабую связь между компонентами. Индустрия программного обеспечения постоянно меняется и растет, поэтому программные компоненты, которые мы разрабатываем или производим, должны быть легко адаптируемыми и заменяемыми. Этому может способствовать абстракция, когда мы просто определяем сигнатуру того, что нужно сделать, и то, как это должно быть сделано, может быть множественным, может быть разнообразным и взаимозаменяемым. Абстракцию следует вводить, когданужна гибкость, что чаще всего бывает не так.

Как достичь абстракции? Что ж, первый и единственный критерий — это отделение концепции от реализации. концепция — это абстракция. Если я скажу «ударить», это будет абстракция. Вы можете ударить по клавиатуре, или вы можете ударить кого-то, кто вам не нравится, или вы можете ударить того, кого вы обожаете. Ну, даже если мы имеем в виду ударить кого-то, мы не уточняем, бить ли голой рукой или палкой.

Теперь, если вы определили сигнатуру, вы можете написать несколько реализаций hit all в соответствии с той же сигнатурой, которую вы определили ранее. предположим, вы создали две реализации hitWithFist и hitWithStick. Теперь, если я запускаю игру в кулачный бой и вызываю удар, она должна использовать hitWithFist, тогда как если это игра в драку палками и вызывается удар, она должна использовать hitWithStick. У нас есть гибкость, взаимозаменяемость и адаптивность, так как в будущем мы можем начать игру с ножом, и для этого потребуется hitWithKnife.

В Java абстракция может быть достигнута с помощью абстрактного класса или интерфейсов. Абстрактный класс полезен, когда вы абстрагировали несколько частей, тогда как есть некоторые части, которые являются конкретными и общими для всех. С другой стороны, интерфейс имеет только подписи. Тот, кто реализует интерфейс, должен обеспечить реализацию подписи по-своему, поэтому это называется 100% абстракцией. У обоих есть плюсы и минусы. прежде чем использовать любой из них, вы должны быть уверены, почему вы выбираете именно его, а не другой.

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

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

Изменение — единственная постоянная
~ Гераклит