Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.
- 💬 Если статья была вам полезна,Добро пожаловать, чтобы подписаться, лайкнуть и добавить в избранное (один клик по трем ссылкам).
🐹 1. Введение
-
Всем привет, я Сяочэн, снова приятно учиться,Недавно я получил заявку от небольшого партнера, в ходе интервью интервьюер задал относительно редкий вопрос: что такое интерфейсно-ориентированное программирование?Честно говоря, я раньше брал интервью у многих компаний и никогда не сталкивался с этой проблемой. Я чувствую, что это довольно ново, поэтому я записываю свои знания в этой статье. Поскольку мой уровень ограничен, я не могу быть исчерпывающим, когда смотрю на Проблема Если у вас есть разные мнения, вы можете оставить комментарий ниже.
-
Если статья вам полезна, вы можете помочь одним кликом и тремя ссылками!Если вы столкнетесь с некоторыми странными или относительно новыми темами во время интервью, пожалуйста, не стесняйтесь отправить личное письмо, чтобы внести свой вклад, спасибо за чтение!
🐣 во-вторых, намерение интервьюера задать этот путь
Интервьюер задал мне вопрос, нам нужно не сразу отвечать, а выяснить намерение интервьюера задавать вопросы, чтобы дать более развернутый ответ. По этому вопросу, по моему личному мнению, интервьюер, вероятно, имел в виду следующее:
1.Посмотрите, разбираетесь ли вы в интерфейсно-ориентированном программировании (не удивляйтесь, многие о нем только слышали, понятие расплывчатое, и может быть непонятно, если вы его произнесете)
2. Посмотрите, ясно ли вам изначальное намерение использовать интерфейсно-ориентированное программирование (если технология/идея не решает некоторых проблем, какова ценность ее существования?)
3, посмотрите, действительно ли вы применяете интерфейсно-ориентированное программирование в разработке
🐰 3. Что такое интерфейс
Прежде чем представить, что такое интерфейсно-ориентированное программирование, давайте сначала разберемся, что такое интерфейс, чтобы мы могли «знать, что это такое и почему оно такое».
Интерфейс, английское название Интерфейс,Его можно понимать как стандарт (норма), который в широком смысле относится к набору стандартов, в котором оговаривается, что класс или интерфейс, реализующий интерфейс, также должен иметь этот набор правил, конечно есть частный случай, то есть пустые интерфейсы (интерфейсы без каких-либо методов) будут введены позже.
В объектно-ориентированной системе функции между системами столь же малы, как между классами, столь же велики, как и модули, а взаимодействие между системами фактически реализуется посредством кооперации различных объектов., На этапе проектирования он не уделяет слишком много внимания деталям внутренней реализации, а сосредотачивается на отношениях сотрудничества между объектами дизайна и пытается достичь цели высокой сплоченности и низкой связанности.
Как форма абстракции сущности, интерфейс используется для отделения внутренней реализации от внешней связи и, наконец, реализации внутренних изменений, не влияя на внешнее взаимодействие с другими реализациями.Можно понять, что способ проектирования и программирования в соответствии с этим идею можно назвать интерфейсно-ориентированным программированием (Теперь это более абстрактно, и на конкретных примерах визуализируется следующее.).
Например: как и в случае с USB-разъемом на компьютере, если вы чувствуете, что проводная мышь неудовлетворительна, вы можете купить беспроводную мышь и подключить ее к разъему оригинальной проводной мыши, чтобы обеспечить плавное переключение без каких-либо изменений в компьютере. Независимо от того, являются ли ваша беспроводная мышь и проводная мышь одного типа, поскольку этот разъем является стандартным, пока мышь, которую вы покупаете, реализует этот стандарт, она может использовать соответствующую мышь через этот разъем.
PS: USB, это аббревиатура от Universal Serial Bus на английском языке (не вы аббревиатура от silly x....),Это стандарт внешней шины для стандартизации соединения и связи компьютеров и внешних устройств. Это технология интерфейса, применяемая в ПК.
🐷 4. Сравнение процессно-ориентированного программирования, объектно-ориентированного программирования и интерфейсно-ориентированного программирования.
В процессе кодирования вы услышите введение этих трех.Иногда, хотя у вас есть общее понимание их концепций, вы всегда чувствуете, что не понимаете, когда выражаете их.Следующее представляет собой более яркое и интуитивное понимание их через конкретные примеры.Познакомьтесь заново.
🍅 4.1, Процедурное программирование (POP)
Процедурно-ориентированное программирование (процедурно-ориентированное программирование, сокращенно POP: например, язык C) фокусируется на процессе.При решении проблемы сначала анализируйте шаги, необходимые для решения проблемы, а затем используйте функции для пошаговой реализации этих шагов., а затем вызывать эту функцию одну за другой в определенном порядке при решении проблемы, и проблема решается после выполнения метода.
Например: боль в животе, как решить?(Это пример со вкусом, но для того, чтобы все поняли, чтобы пример был ближе к жизни. Если вы считаете, что вкус слишком большой, оставьте сообщение ниже и измените его на лучший пример в следующий раз)
Если вы используете процессно-ориентированный способ программирования для решения этой проблемы, то процесс, вероятно, выглядит следующим образом:
1. Выполните метод поиска бумажных полотенец (используете ли вы руки, если не находите бумажные полотенца?)
2.Выполнить метод сидения на унитазе (вы без унитаза не можете стоять?)
3. Выполните метод очистки остатков человеческой пищи и экскрементов (эй, удобно!)
4.Провести метод очистки (если не чисто, просто задрать штаны и уйти после взятия номера?)
5.Выполнить метод смыва унитаза (не смывать! Это ты воняешь!)
Сводка программирования, ориентированного на процесс:
Через приведенный выше пример, будет обнаружено, что идея программирования процессов состоит в том, чтобы решить проблему, и проблема разделена на один шаг, каждый шаг упакован в соответствующую функцию, а затем выполняет определенный порядок для решения проблема.
🍑 4.2. Объектно-ориентированное программирование (OOP)
Объектно-ориентированное программирование (сокращенно ООП: такие языки, как C++, JAVA и т. д.) фокусируется на объектах.При решении проблемы сначала абстрагируйте вещи, содержащиеся в проблеме, в концепции объектов, а объекты содержат определенные атрибуты и поведение., а затем пусть каждый объект выполняет некоторые из своих собственных методов, когда он фактически выполняется, чтобы решить проблему.
Например: боль в животе, как решить?
Примерный алгоритм решения этой задачи с помощью объектно-ориентированного программирования выглядит следующим образом:
1. В соответствии с сущностями, участвующими в проблеме, абстрагируйте объект «человек», объект «туалет» и объект «бумажное полотенце».
2. Добавьте некоторые атрибуты и методы для объекта «человек», например: xx 28 см, черный, длинный и прямой. Метод: найти метод бумажного полотенца, сесть на унитаз, удалить экскременты, очистить инструмент xx
3.Добавить к объекту "Туалет" некоторые атрибуты и методы, например: белый, длина 15м, овал. Метод: смыть метод унитаза
4, для «ткани» добавления свойств и методов, атрибуты, такие как: белый / черный / золотой
5. Выполнить:
Люди объект. Ищете метод бумаги полотенце
Люди возражают Как сидеть на унитазе
Человеческий объект Метод удаления экскрементов
унитаз Метод смыва (да, унитаз самоощущающийся, можно так играть, если есть деньги, жизнь богачей комфортна)
Люди возражают.Метод инструмента Clean xx (вам не нужно, чтобы я говорил вам, где чистить! DDDD)
Сводка по объектно-ориентированному программированию:
Через примеру можно найти такую же проблему, объектно-ориентированное программирование - сначала абстрактна сущность в задаче в определенный объект, а затем упаковывать атрибуты и методы в объект, и, наконец, выполняют соответствующий метод для решения проблемы через разные объекты.,
🍒 4.3, Интерфейсно-ориентированное кодирование (IOP)
Интерфейсное программирование (интерфейсно-ориентированное программирование: OIP) — это способ программирования идей, интерфейс как сущность, используемый для извлечения внутренней реализации внешней связи и, в конечном итоге, для реализации внутренних изменений, не затрагивая внешние и другие взаимодействия реализации., можно понять, что способ проектирования программирования в соответствии с этой идеей можно назвать интерфейсно-ориентированным программированием.
Это не самостоятельная идея программирования, более продвинутая, чем объектно-ориентированное программирование.Можно сказать, что она принадлежит части объектно-ориентированной идеологической системы или что она является одной из идеологических сущностей системы объектно-ориентированного программирования. .
Примечание. Места, отмеченные красным прямоугольником на приведенном выше рисунке, представляют собой некоторые функции, отличные от объектно-ориентированного программирования.
Приведенные выше процессно-ориентированные и объектно-ориентированные примеры являются примерами решения проблем с болью в животе.Основываясь на нашем опыте в повседневной жизни, мы можем знать, что и мужчины, и женщины могут испытывать боль в животе и нуждаться в туалете.Однако у разных людей разные способы решения этой проблемы.Нельзя каждый раз модифицировать исходный код у того,кто по-разному с ним справляется.Это не только не соответствует принципу открытости-закрытости в объектно-ориентированном программировании [ открыто для расширения, закрыто для модификации], также могут быть потенциальные риски.
Таким образом, мы можем выделить пять шагов посещения туалета в приведенном выше объектно-ориентированном программировании в [Интерфейс обработки боли в желудке человека] и] [Интерфейс туалета], в зависимости от того, у кого болит живот, он реализует этот [Интерфейс обработки боли в желудке человека] , и каждый туалет Все типы реализуют [туалетный интерфейс] (поскольку не все туалеты имеют одинаковые детали очистки, некоторые из них автоматические, некоторые — ручные).
В частности, как туалет, промойте туалет, определенный самостоятельно, вы можете стоять, сидеть на том, можно с ног на голову, чтобы добиться цели внутренних изменений, не влияя на внешнее взаимодействие, я использовал этот тип интерфейса для достижения этого Метод модификации, и он не влияет на мой прием, и он не влияет на мой прием, создавая вызовы методов.
🐴 5. Особенности процессуального программирования
преимущество:
Разделите задачу на этапы, подобно конвейеру, выполняйте шаг за шагом, упорядочивайте и упрощайте сложные задачи.
Производительность выше, чем у объектно-ориентированного программирования.В объектно-ориентированном программировании процесс вызова класса должен быть загружен и создан, а потребление ресурсов больше;для тех, у кого высокие требования к производительности, такие как однокристальный микрокомпьютер , встроенная разработка, Linux/Unix и т. д., как правило, используют процессно-ориентированную разработку.
недостаток:
Отсутствует объектно-ориентированное программирование, простота обслуживания, простота повторного использования, простота расширения
используемые сцены:
Подходит для разработки систем с высокими требованиями к производительности
🐓 Шесть функций объектно-ориентированного программирования
преимущество:
Легко понять: использование объектно-ориентированного дизайна и разработки идей, кроме того, с пути мышления людей, высокая читаемость.
Простота обслуживания: объектно-ориентированный имеет характеристики инкапсуляции, наследования и полиморфизма.Даже если требования меняются, необходимо поддерживать больше локальных модулей, что более удобно и экономично в обслуживании.
Легко расширять: объектно-ориентированный имеет характеристики инкапсуляции, наследования и полиморфизма.На этапе проектирования системы можно разработать структуру системы с высокой связностью и низкой связанностью, что делает систему более гибкой и легкой для расширения.
Простота повторного использования: то же самое верно: благодаря трем характеристикам объектно-ориентированного подхода общий код может быть проще повторно использован, а эффективность разработки повышена.
недостаток:
Производительность будет ниже, чем у процессно-ориентированного, а сложность программирования будет выше
используемые сцены:
Требования пользователей часто меняются, интернет-приложения, игры, внутренние приложения
🐋 Семь, роль интерфейсно-ориентированного программирования
Объясняя некоторые особенности интерфейсно-ориентированного программирования, давайте сначала разберемся с двумя из следующих пяти принципов проектирования в объектно-ориентированном программировании:
🍑 7.1, в соответствии с принципом открытия и закрытия, инверсии зависимостей и повышения масштабируемости.
Принцип открытия-закрытия OCP (принцип открытия-закрытия):Открыт для расширения, закрыт для модификации.
Принцип инверсии зависимостей DIP (принцип инверсии зависимостей):Абстракция не должна зависеть от деталей, детали должны зависеть от абстракции.
При разработке программного обеспечения из-за постоянных изменений в бизнесе масштабируемость системы существует постоянно. Если взять базу данных в качестве примера, до введения интерфейса проект изначально был разработан из-за малого объема бизнеса.При проектировании мы непосредственно реализовывали ряд операций с определенной базой данных через код.Абстракция показана на следующий рисунок:
Однако с ростом и сложностью бизнеса единая традиционная реляционная база данных не может удовлетворить наш бизнес.Нам необходимо ввести нереляционную базу данных в качестве среднего уровня и ввести более продвинутую базу данных для хранения данных.Абстракция выглядит следующим образом:
Очевидно, поскольку в начале работы мы рассматривали только один тип базы данных, код для работы с базой данных сильно зависит от конкретного класса реализации.В наши дни другие разные базы данных должны быть введены из-за изменений в бизнесе. Чтобы добиться этой цели, мы должны изменить код оригинального бизнеса. Такая модификация, очевидно, нарушает принцип открытого принципа и инверсию зависимости объектно-ориентированного программирования. и приносит потенциальные рискиПоэтому такой дизайн неразумно, поэтому мы вводим интерфейс, который абстрагирован следующим образом:
Как показано на фиг.Со стандартом интерфейса наша программа JAVA не должна напрямую зависеть от соответствующего класса реализации., каждый поставщик базы данных реализует стандарт JDBC, чтобы предоставить пользователям драйвер,Если нам нужно внедрить стороннюю базу данных из-за изменений в бизнесе, нам нужно только изменить соответствующий драйвер, не меняя исходную логику., удовлетворяет не только то, что бизнес-код больше не зависит от класса реализации, но и класс реализации зависит от интерфейса, то есть принцип инверсии зависимостей «абстрактное не должно зависеть от деталей, детали должны зависеть от абстракции» и открытый закрытый принцип [открытый для расширения, закрытый для модификации], Это также позволяет избежать потенциальных рисков изменений.
Спецификации определяются в интерфейсе, и разные исполнители реализуют спецификации в соответствии со своими потребностями. Если позже появятся новые требования, новые исполнители могут быть созданы для реализации спецификаций интерфейса. Таким образом, код слабо связан.
Наиболее распространенным примером является: JDBC (подключение к базе данных JAVA), который представляет собой API Java для выполнения операторов SQL, который может обеспечить унифицированный доступ к различным реляционным базам данных и является стандартной спецификацией Java для доступа к базам данных.
Нерегулярные собрания не могут образовывать круг. Если не будет JDBC, не будет стандарта для доступа к операциям с базой данных. У всех производителей баз данных будет свой собственный набор правил доступа к базе данных. базу данных нужно переписать, это конец света для разработчиков.
Поэтому Sun унифицировала спецификацию базы данных. Разные производители баз данных должны предоставить драйвер, реализующий эту спецификацию, чтобы разработчики могли общаться при подключении к базе данных. Благодаря JDBC разработчикам не нужно обращать внимание на то, как записывать доступ к разным базам данных. Код, при смене базы нужно только переключаться между разными драйверами.
PS: JDBC это интерфейс, а драйвер это реализация интерфейса.Без драйвера соединение с базой данных не может быть завершено, поэтому база данных не может работать!Каждому поставщику базы данных необходимо предоставить собственный драйвер для подключения к базе данных своей компании, а это означает, что драйвер обычно предоставляется поставщиком, создающим базу данных.
🐇 Восемь, связь между абстрактными классами и интерфейсами
Увидев это, я полагаю, что многие мелкие партнеры будут сомневаться в том, стоит ли использовать абстрактные классы для замены интерфейсов, ведь понятия этих двух легко размыть. По моему личному мнению, в JAVA помимо ограничения, что классы могут быть только одинарно-наследуемы, а интерфейсы могут быть мультиреализованы (мульти-наследование между интерфейсами), самое главное — назначение двух дизайнов.
Целью абстрактных классов является извлечение некоторых общих функций или поведения по умолчанию определенного типа для достижения цели повторного использования кода. Интерфейс предназначен для указания определенного стандарта, в котором делается упор на спецификацию, что находит отражение в использовании полиморфизма в объектно-ориентированных языках.Поэтому, если дизайн представляет собой абстрактный класс или запутанную сцену интерфейса, рекомендуется учитывать мотивацию дизайна, и должен быть получен лучший результат.
🐈 Девять, интерфейс разметки
Функции:
Market Interface, также известный как Tag Interface, представляет собой интерфейс без каких-либо методов и свойств, он лишь указывает на принадлежность отмеченного класса к определенному типу, чтобы другой код мог его протестировать и разрешить что-то делать.
The tag/marker interface pattern is a design pattern in computer science, used with languages that provide run-time type information about objects. It provides a means to associate metadata with a class where the language does not have explicit support for such metadata.
Приведенный выше английский язык является описанием интерфейса разметки в Википедии, из которого мы можем узнать,Интерфейс разметки — это не что-то уникальное для языка Java, а концепция дизайна в информатике для описания объектов в объектно-ориентированных языках.
Поскольку сам язык программирования не поддерживает поддержание метаданных для классов, интерфейсы Markup могут использоваться в качестве метаданных, описывающих классы, составляя это отсутствие функциональности. Для классов, которые реализуют интерфейс маркера, мы можем получить метаданные во время выполнения через механизм отражения.
В JDK у нас есть наиболее часто используемые интерфейсы тегов, такие как Serializable, Cloneable, Randomaccess и т. д.Если класс реализует интерфейс Serializable, это означает, что класс может быть сериализован. Фактический принцип заключается в том, что класс, реализующий этот интерфейс, будет помечен меткой [serializable], которую можно получить путем отражения во время выполнения. Затем выполните ряд операций.
В JAVA роль интерфейса маркера заключается в основном в следующих двух аспектах:
1. Создайте общедоступный родительский интерфейс:
Так же, как интерфейс EventListener, который представляет собой Java API, расширенный десятками других интерфейсов, вы можете использовать интерфейс маркера для установления родительского интерфейса набора интерфейсов. Например: когда интерфейс наследует интерфейс EventListener, виртуальная машина Java (JVM) знает, что интерфейс будет использоваться для схемы прокси событий.
2, в класс добавлен тип данных
Это первоначальная цель интерфейса маркера.Класс, который реализует интерфейс маркера, не должен определять какие-либо методы интерфейса (поскольку интерфейс маркера вообще не имеет методов),Но класс становится интерфейсным типом благодаря полиморфизму, который может использовать этот интерфейс для получения экземпляров конкретных классов, которые его реализуют.
🐧 десять, на некоторых из проблем, ориентированных на интерфейс программирования в практическом применении
10.1 Почему сейчас много проектов используется от уровней Controller, Service до DAO: интерфейс + классы реализации, но только один класс реализации, нужен ли такой путь?
Осмелюсь сказать, что споров по этому вопросу будет много.Все считают их разумными.Человеку, использующему интерфейс + класс реализации, трудно переубедить человека, использующего напрямую класс реализации, и наоборот, вот , собрал много просмотров, добро пожаловать на обсуждение.
Во-первых, поддержка: интерфейс + класс шаблона внедрения по следующим причинам
Вид 1:Если вы используете среду Spring для разработки проектов, рекомендуется использовать этот метод, чтобы максимально использовать Spring IOC, упростить его использование и сократить использование памяти.
Вид 2:Это способствует сопровождению и расширению.То, что вы видите сейчас, это только один класс реализации, но со сложными изменениями бизнеса позже может быть несколько классов реализации.Если в этом методе есть новые бизнес-изменения, новые классы реализации могут быть добавлено напрямую. Вы можете, не изменяя исходный код.
Вид 3:Это способствует командной работе. Разные люди могут нести ответственность за разработку разных модулей, таких как контроллер, сервис и дао. Пока интерфейс определен, лицо, ответственное за каждый модуль, может нести ответственность за соответствующую разработку.
Вид 4:Контролируйте то, что выставлено внешнему миру, чтобы обеспечить безопасность. Интерфейс предоставляет только общедоступные части определения, но при непосредственном использовании объекта можно увидеть частные части, которые могут иметь проблемы с безопасностью.
Вид 5:Это относится к техническим спецификациям программирования, детали реализации пакета, открытый внешний интерфейс, который считается «высокой сплоченностью, низкой сцеплением».
Вид 6:Он соответствует принципу открытия и закрытия, снижает риск изменений и прост для понимания, поскольку многие исходные коды также используют этот метод.
Вид 7:Используя полиморфизм, может быть несколько классов реализации для одного и того же интерфейса, которые можно использовать с файлами отражения и конфигурации для достижения развязки кода.Когда вам нужно улучшить функции, вам нужно только добавить новые классы и изменить файлы конфигурации для достижения цели. .
2. Не поддерживает: режим интерфейса + класс реализации, поддерживает прямое использование метода класса реализации по следующим причинам.
Вид 1:После большей части фактического опыта проекта 99% интерфейса и класса реализации являются реализацией 1: 1. В этом случае нет необходимости определять еще один интерфейс, и необходимо поддерживать дополнительный код, поэтому нет необходимости для спецификации Для спецификации, если это небольшая команда, технический уровень компании относительно средний, и класс реализации можно использовать напрямую, и нет необходимости определять интерфейс.
🐉 XI, написано в последней
Итак, сегодня здесь представлено введение в интерфейсно-ориентированное программирование,Если у вас другое мнение, пожалуйста, оставьте сообщение ниже, и вы можете сообщить мне о странных проблемах, возникших в ходе интервью., После того, как вы узнаете, вы должны запустить его.Поторопитесь и найдите интервьюера со статьей.Если статья полезна для вас, не забудьте Sanlian!