Рубрики
Без рубрики

S. O. L. I. D.: прочную базу для Ориентации Объекта

SOLID является одним из док-Ориентация на Объект. В этом посте я объясню причины, которые породили эту основу и принципы каждой буквы. Помеченный как orientacao, объект, java, твердый, программакао.

Интервью вакансии в бразильских компаний очень сосредоточены на технологиях. Você é um bom решение, что делать с фреймворком ZYX? Хорошо. Всегда я привык это, к сожалению, никогда не пожелает мне специализироваться в framework.

Пока что, когда я пошел, чтобы сделать свое первое интервью, чтобы получить место в компании, на улице, первый вопрос был: “объясните Мне, что такое SOLID и как применяется в Java.” В полном объеме! 🚨 🚨 🚨 Хватает сотрудников! Более 10 лет никто никогда не имел меня спрашивают это. Думаю, что больше никогда не слышал в SOLID, начиная с колледжа, и также не помню, очевидно.

Но если никто не заботится об этом, потому что важно?

Просто потому, что мы не должны знать, просто для того, чтобы показать другим. SOLID является основой пак хороший дизайн Объектно-ориентированное . Если вы хотите быть хорошим разработчиком Java или любой другой язык OO, который может появиться в будущем, вы будете иметь, чтобы знать, применять SOLID. Он должен будет помочь сделать код более элегантным. 🤵

SOLID была предложена Uncle Bob, также известный как Robert C. Martin), в 2000 . Его идея, чтобы предложить некоторые стандарты, чтобы избежать гниль на код. Эта идея гнили не было новым, Joseph Yoder уже использовал термин ” Big Ball of Mud за несколько лет до этого. Но идея была в том, когда программа будет развиваться, иногда дизайн/архитектура не развивается, в скором времени, нужно иметь некоторые параметры, чтобы проанализировать, прежде чем внести изменения.

Но мы будем знать, прежде чем какие проблемы он определил?

Жесткость

Здесь сложно изменить свой код? Хорошо, так что он, использованные!

Жесткость-это способность не быть простым внести изменения в код. Или за высокий захват. Если возиться на одном месте придется возиться в другой и так далее.

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

Хрупкость

Хрупкость-это способность кода с ошибками, создавать изменения. Кто никогда не нашла комментарий “DO NOT TOUCH!” в виде кода?

Иногда это происходит из кода, который iteragem между собой или даже поведения нескольких православных. Или это просто случается из-за изменения требований. -Меняется, если требование, но не меняется все программное обеспечение, в отношении тот требованию.

Но есть способы решить эту проблему…

Неподвижность

Уже пришлось переписать решение? Когда у нас есть код, который должен быть воспроизведен, поскольку ничего не дает, любя, обобщать использовать ее для двух случаев, а также аналогичных, у нас есть неподвижность.

Разработчики, менее опытные, не лето с этим проблемы. До тех пор, пока кто-то изменить в одном месте, и никого другого.

Вязкость

Вязкость поставляется две формы: вязкость дизайн и вязкости среды.

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

Вязкость Среды происходит, когда среда разработки трудно работать. Или во время компиляции, это отнимает много времени, или deploy в среде разработки, это отнимает много времени.

Для решения этих проблем были предложены некоторые вещества, которые могут дать нам путь.

SRP – Принцип персональной Ответственности

Один класс должен иметь одну и только одну причину для изменения.

Также называется Сплоченность, этот принцип относится близость функций модуль. Если модуль выполняет несколько функций, не является сплоченной. Уже если модуль имеет уникальную функцию, становится сплоченной.

Если класс является сплоченной, необходимо изменить замедляется, так как взаимодействие с ее уменьшают.

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

Анти-Шаблон

Принцип персональной Ответственности поставляется связанный с Anti-Pattern, общее благо Объект с Богом . Этот объект-это тот, который Знает все и создает Все. Я работал в компании, которая была, что дает обслуживания на сервере служб голоса (TTS и ASR), когда я открыл класс, который относился к requisiões…. Более 10 000 строк!!! 😱 Каких-либо изменений было довольно болезненным, но реализация протокола некоторые Шаблоны Проектирования удалось сократить ее чтобы что-то около 100 строк.

OCP – Принцип Открыт-Закрыт

Модуль должен быть открыт для расширения, но закрыты для модификации.

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

В то время, когда был предложен SOLID это подается в основном по наследству, например, создание hieraquias классов и интерфейсов. Но сегодня есть и другие способы более распространены, и композиция является более приемлемым для этого.

Возвращаясь к нашему примеру из тестового класса, мы можем принять Тестирование различных типов но мы можем создавать тесты смеси:

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

LSP – Принцип подстановки лискоу

Подклассы должны быть сменным в своих базовых классов.

Этот принцип кажется простым, особенно если вы используете такие языки, как Java, потому что язык, казалось бы, уже-говорит он. Правильно?

Не всегда, одним из самых распространенных ошибок в Java-это не обращать внимание на Договор Метод. Давайте объясню…

В Java каждый Объект расширяет класс Object, этот класс определяет несколько Методов для проверки равенства объектов, как Хэш-код e равен . Многие разработчики никогда не читали определение этих методов или не беспокоить, чтобы реализовать их. Но что произойдет, если я не навесным они? Некоторые классы API зависят от них, самые распространенные: HashMap , HashSet . В случае, если объект не реализует должным образом эти методы, операции сложения в один из этих классов может привести к неожиданному поведению.

ISP – Принцип Изоляции Интерфейс

Много конкретных интерфейсов клиента лучше, чем один интерфейс общего назначения “.

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

Этот принцип имеет негативное влияние, которое может и должно быть сдержанным. Не создавать интерфейсы спам. Например, если у нас есть графический интерфейс Кнопка e Link , мы можем предположить, что оба имеют одну и ту же деятельность , поэтому не имеет смысла создавать дополнительные CLiqueListerner .

O Java padeciu для понимания темпа ума, чтобы понять, как определить классы для причинно-следственных связей, как правильно проектировать, как внедрять приложения для слушателей и т. Д… Хотя, начиная с Java 8 это можно обойти путем использования Лямбд и функций в качестве параметров. Um bom inicio пункт о соединении интерфейсов essa с пакетом java.util.функция . Он может найти такие интерфейсы, как Consumer и Function , которые помогают нам избежать создания новых интерфейсов.

DIP – Принцип инверсии зависимостей

Зависит от абстракций. Не зависит от реализации.

Этот принцип не разрешается в языке, а дизайн вашего кода. Зависит всегда от Абстрактных Классов или Интерфейсов.

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

Представьте, что вы удлиняет HTTP-Клиент и изменяет поведение, внутренний него по какой-то причине экзотерической. Можно было бы перейти на новую версию этой зависимости, которые использует HTTP2? Или можно было бы обменять клиента во время выполнения? Очень provavél, что нет.

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

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

Еще один совет-это всегда рефакторинг вашего кода. Ищите признаки гниения и поднимите эти дефекты с командой.

Оригинал: “https://dev.to/vepo/s-o-l-i-d-a-solida-base-para-orientacao-a-objeto-4de7”