«Что такое абстракция» — любимый ООП-вопрос, который задают интервьюеры, но многие из них не могут дать краткий ответ.
«Что такое абстракция?»
Это любимый вопрос ООП, который задают интервьюеры, и многие из них не могут дать краткий ответ.
Как интервьюер, я всегда ожидаю краткого ответа. Когда люди объясняют «абстракцию» (или любое другое понятие) в многословном стиле, я чувствую, что мне сделали какую-то инъекцию успокоительного. На мой взгляд, кандидаты всегда должны отвечать одной-двумя строчками — тогда на интервьюера ложится ответственность за дальнейшие исследования.
Таким образом, моя единственная фраза для «абстракции» звучит так: «абстракция означает необходимость показать»
Мы можем видеть абстракцию во многих объектах реального мира. Автомобиль демонстрирует абстракцию, предоставляя интерьер. Мы не видим, как работает двигатель/радиатор/масляный фильтр.
Как потребитель, мы видим, что нам нужно, например, рулевое управление, приборная панель и т. д.
Но что, если мне дадут доступ к скрытым частям автомобиля? Я могу играть с ними в свободное время. Одним из возможных результатов этого действия может быть поломка автомобиля, когда я пытаюсь им воспользоваться.
Одним из таких примеров в Angular является использование Subject/BehaviorSubject в службе для обмена сообщениями между компонентами, как показано ниже:
Мы объявили BehaviorSubject и предоставили наблюдаемый объект, вызвав для него метод observable
.
По умолчанию все свойства общедоступны, и мы можем получить к ним доступ в потребительском компоненте, как показано ниже:
Мы видим следующее сообщение в нашем HTML:
Теперь потребитель может неправильно использовать субъект, вызвав для него полный метод. Это может привести к нежелательному результату:
Мы видим следующее сообщение в нашем HTML:
Это произошло потому, что мы дали ненужный доступ к теме. Чтобы этого избежать, мы можем выставлять только то, что необходимо потребителю, т.е. использовать абстракцию. Мы можем достичь этого, реализуя следующее:
- Объявить тему частной.
- Представить метод для передачи значения в Service.
- Сделать доступным для наблюдения в сервисе.
Потребитель никогда не может неправильно использовать полный метод по теме, и все безопасно.
Кто-то может возразить, что на самом деле это инкапсуляция, так как мы сделали свойства общедоступными/приватными (это верно благодаря Скотти Джеймисону). Таким образом, среди многих других способов мы добились абстракции посредством инкапсуляции.
Я хотел бы узнать ваше мнение об «Абстракции» и «Инкапсуляции» и тонких нюансах этих двух столпов ООП. Не стесняйтесь оставлять свои комментарии.
И если вы нашли это полезным, пожалуйста, не забудьте оставить хлопки и комментарии.
Вы также можете узнать больше из этого видео:
Я создал курс Angular по Udemy, который охватывает множество практических проблем и решений в Angular, включая эту. Это может стать ступенькой в вашем профессиональном путешествии по Angular. Пожалуйста, посмотрите.
Вы также можете посмотреть/подписаться на мой бесплатный канал YouTube.
Пожалуйста, подпишитесь/подпишитесь/поставьте лайк/хлопайте в ладоши.
Создавайте компонуемые веб-приложения
Не создавайте веб-монолиты. Используйте Bit для создания и компоновки несвязанных программных компонентов — в ваших любимых фреймворках, таких как React или Node. Создавайте масштабируемые и модульные приложения с мощными и приятными возможностями разработки.
Перенесите свою команду в Bit Cloud, чтобы совместно размещать и совместно работать над компонентами, а также значительно ускорить, масштабировать и стандартизировать разработку в команде. Начните с компонуемых интерфейсов, таких как Design System или Micro Frontends, или исследуйте компонуемый сервер. Попробуйте →