«Что такое абстракция» — любимый ООП-вопрос, который задают интервьюеры, но многие из них не могут дать краткий ответ.

«Что такое абстракция?»

Это любимый вопрос ООП, который задают интервьюеры, и многие из них не могут дать краткий ответ.

Как интервьюер, я всегда ожидаю краткого ответа. Когда люди объясняют «абстракцию» (или любое другое понятие) в многословном стиле, я чувствую, что мне сделали какую-то инъекцию успокоительного. На мой взгляд, кандидаты всегда должны отвечать одной-двумя строчками — тогда на интервьюера ложится ответственность за дальнейшие исследования.

Таким образом, моя единственная фраза для «абстракции» звучит так: «абстракция означает необходимость показать»

Мы можем видеть абстракцию во многих объектах реального мира. Автомобиль демонстрирует абстракцию, предоставляя интерьер. Мы не видим, как работает двигатель/радиатор/масляный фильтр.

Как потребитель, мы видим, что нам нужно, например, рулевое управление, приборная панель и т. д.

Но что, если мне дадут доступ к скрытым частям автомобиля? Я могу играть с ними в свободное время. Одним из возможных результатов этого действия может быть поломка автомобиля, когда я пытаюсь им воспользоваться.

Одним из таких примеров в Angular является использование Subject/BehaviorSubject в службе для обмена сообщениями между компонентами, как показано ниже:

Мы объявили BehaviorSubject и предоставили наблюдаемый объект, вызвав для него метод observable.

По умолчанию все свойства общедоступны, и мы можем получить к ним доступ в потребительском компоненте, как показано ниже:

Мы видим следующее сообщение в нашем HTML:

Теперь потребитель может неправильно использовать субъект, вызвав для него полный метод. Это может привести к нежелательному результату:

Мы видим следующее сообщение в нашем HTML:

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

  • Объявить тему частной.
  • Представить метод для передачи значения в Service.
  • Сделать доступным для наблюдения в сервисе.

Потребитель никогда не может неправильно использовать полный метод по теме, и все безопасно.

Кто-то может возразить, что на самом деле это инкапсуляция, так как мы сделали свойства общедоступными/приватными (это верно благодаря Скотти Джеймисону). Таким образом, среди многих других способов мы добились абстракции посредством инкапсуляции.

Я хотел бы узнать ваше мнение об «Абстракции» и «Инкапсуляции» и тонких нюансах этих двух столпов ООП. Не стесняйтесь оставлять свои комментарии.

И если вы нашли это полезным, пожалуйста, не забудьте оставить хлопки и комментарии.

Вы также можете узнать больше из этого видео:

Я создал курс Angular по Udemy, который охватывает множество практических проблем и решений в Angular, включая эту. Это может стать ступенькой в ​​вашем профессиональном путешествии по Angular. Пожалуйста, посмотрите.

Вы также можете посмотреть/подписаться на мой бесплатный канал YouTube.

Пожалуйста, подпишитесь/подпишитесь/поставьте лайк/хлопайте в ладоши.

Создавайте компонуемые веб-приложения

Не создавайте веб-монолиты. Используйте Bit для создания и компоновки несвязанных программных компонентов — в ваших любимых фреймворках, таких как React или Node. Создавайте масштабируемые и модульные приложения с мощными и приятными возможностями разработки.

Перенесите свою команду в Bit Cloud, чтобы совместно размещать и совместно работать над компонентами, а также значительно ускорить, масштабировать и стандартизировать разработку в команде. Начните с компонуемых интерфейсов, таких как Design System или Micro Frontends, или исследуйте компонуемый сервер. Попробуйте →

Узнать больше