«Программирование — это непосредственный акт создания кода. Программная инженерия — это набор политик, методов и инструментов, необходимых для того, чтобы сделать этот код полезным до тех пор, пока он необходим, и обеспечить совместную работу в команде. 👩‍💻

В области разработки программного обеспечения в основном мы сосредоточимся на отраслевых практиках и принципах. Посмотрим….🤗

Г-н Роберт С. Мартин представил первые пять принципов объектно-ориентированного проектирования. Они называются SOLID.

SOLID означает …….

S — единая ответственность

O — открыто-закрыто

L — замена Лискова

I — разделение интерфейсов

D — инверсия зависимостей

⏺️Принцип единой ответственности

Говоря о принципе единой ответственности, это означает: «У класса должна быть одна и только одна причина для изменения, то есть у класса должна быть только одна работа». Нам не нужны объекты с чрезмерными знаниями. Эти классы сложнее поддерживать. Например, если у нас есть класс, который мы часто и по разным причинам изменяем, этот класс следует разделить на несколько классов, каждый из которых занимается определенной проблемой. Если проблема возникнет, ее будет легче найти.

⏺️Принцип открытого-закрытого

это означает «Объекты или сущности должны быть открыты для расширения, но закрыты для модификации». Класс должен быть расширяемым, не требуя его модификации. На первый взгляд это может показаться научным и абстрактным. Но на самом деле это говорит о том, что мы должны пытаться писать код, который не нужно модифицировать каждый раз, когда меняются требования. В зависимости от обстоятельств, таких как наш язык программирования, мы можем сделать это несколькими способами. При работе с Java, C# или любым языком со статической типизацией обычно используются наследование и полиморфизм, как показано в этом примере.

⏺️Принцип замены Лисков

Согласно принципу замещения Лискова, «каждый подкласс/производный класс должен иметь возможность замещать свой родительский/базовый класс». При расширении класса он должен иметь возможность реализовать те же основные функции, что и базовый класс. Каждый подкласс или производный класс должен быть совместим со своим собственным базовым или родительским классом.

⏺️Принцип разделения интерфейсов

Это означает, что «клиентов нельзя заставлять внедрять методы, которые они не используют». Интернет-провайдер разделяет огромные интерфейсы на более мелкие, более конкретные, так что пользователям нужно знать только о тех методах, которые действительно имеют к ним отношение. ISP является ключевой идеей при проектировании распределенных систем в целом и микросервисов в частности, в дополнение к объектно-ориентированной архитектуре.

⏺️Принцип инверсии зависимостей

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

Как найти решения🤔

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

▶️Продумайте проблему в целом:-Продумайте проблему, прежде чем найти решение или даже начать думать о нем. Убедитесь, что вы правильно понимаете проблему, которую собираетесь решить. Перед созданием решения убедитесь, что разъяснены все непонятные части. Глупых вопросов не бывает, так что не бойтесь их задавать.

▶️Разделяй и властвуй.После первого шага мы можем разбить проблему на более мелкие части. Сделайте его управляемым и простым для понимания. Попытайтесь найти идеальный баланс между приоритетом и ясностью.

▶️KISS:-Это означает, что все просто и глупо. Сделайте свое решение максимально простым. Не переусердствуйте и не усложняйте свое решение.

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

▶️Всегда помните, почему существует программное обеспечение.Всегда понимайте причины, по которым существует программное обеспечение. Имейте в виду, почему это программное обеспечение существует в первую очередь. Если вы упустите из виду общую картину, вы можете оказаться на неверном пути.

▶️Помните, что вы не пользователь:Конечный пользователь не обладает такими же технологическими возможностями, как вы. Не думайте, что пользователь знает, о чем вы говорите. Важны удобство использования и опыт.

Как реализовать решение 🤔

Существует несколько рекомендаций, которые следует учитывать при реализации разработанного решения.

1️⃣ЯГНИ:- «Вам это не понадобится » Это, по сути, говорит о том, что что-то не следует делать СЕЙЧАС, даже если это может быть потребуется в будущем.

2️⃣СУХОЙ: «Не повторяйтесь ».Каждая часть знаний или логика в системе должна иметь единственное однозначное представление», — гласит принцип СУХОГО

3️⃣Использовать абстракцию:означает убедиться, что ваша система работает правильно, даже если вы не знаете, как реализована каждая часть компонента.

4️⃣DRITW:- «Не изобретайте велосипед»Возможно, кто-то уже решил проблему. Сделать большинство из них.

5️⃣Напишите код, который хорошо выполняет одну задачу: –говорит, что отдельный фрагмент кода выполняет одну задачу и делает ее хорошо. Не пытайтесь написать всеобъемлющий магический код.

6️⃣Отладка сложнее, чем написание кода.Как выразился Брайан Керниган: Отладка в два раза сложнее, чем написание кода. Поэтому, если вы пишете код максимально умно, вы по определению недостаточно умны для его отладки.

7️⃣Кайдзен:-означаетоставить его лучше, чем когда вы его нашли. Исправьте не только ошибку, но и код, который ее окружает. Если истинная проблема заключается в конструктивном недостатке, ремонт пластырем не поможет.

Практики👩‍💻

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

▶️Модульное тестирование.Небольшой фрагмент кода, который дважды проверяет биты вашего основного кода. Единицей может быть что угодно: от класса до функции, от модуля до API. Класс, функция и модульный тест будут проверены. Работает так, как ожидалось, и дает ожидаемые результаты.

▶️Качество кода.Код должен быть удобным в сопровождении. Качество кода имеет жизненно важное значение. Код должен быть легко читаемым и понятным. Код должен соответствовать передовым инженерным практикам, а также лучшим практикам языка и предметной области.

▶️Проверка кода.Наиболее эффективный метод повышения качества кода. Цель состоит в том, чтобы улучшить код, а не наказывать разработчика. Экспертные проверки, обзоры лидов и парное программирование — вот некоторые методы проверки кода.

▶️Контроль версий.Контроль версий должен применяться ко всему коду. Разрешить разработчикам свободно обновлять и улучшать код, не опасаясь его поломки. Разрешить нескольким разработчикам работать над одним и тем же кодом одновременно. Например: GitHub

▶️Непрерывная интеграция.Непрерывная интеграция — это метод разработки. Несколько раз в день разработчики должны возвращать свой код в общий репозиторий. Автоматическая сборка проверяет каждую из проверок.

JavaScript

JavaScript — это язык программирования, который является одной из основных технологий Всемирной паутины. Итак, давайте посмотрим на JavaScript.🤗

Программы JavaScript выполняются с использованием одного потока. Хотя есть способы создавать новые потоки, JavaScript считается однопоточным языком. Из-за природы JavaScript NIO он асинхронный. И ООП, и функциональное программирование поддерживаются JavaScript. Асинхронные операции в JavaScript управляются с помощью механизма обработки событий.

Классы и объекты ▶️

При создании объекта в JavaScript функция конструктора используется с ключевым словом «new».

  1. Когда функция используется с ключевым словом «новое», она становится классом.
  2. Литералы объектов («) — еще один метод создания объекта.

Когда используется ключевое слово «новое», создается новый объект, который присваивается переменной «это» на время вызова функции конструктора.

Прототипы ▶️

Ссылка на другой объект с именем прототип. При создании объектов, наследовании и добавлении методов в класс JavaScript в JavaScript используется объект-прототип. Прототипом экземпляра объекта является экземпляр объекта, из которого строится объект. Объект «__proto__» — это место, откуда наследуются свойства объекта.

«это» в JavaScript ▶️

  • Внутри объекта «это» относится к самому объекту.
  • В глобальном контексте «это» относится к глобальному объекту.

Существует ссылка на другой объект, вызываемый в функциях JavaScript.
Когда функция, использующая ключевое слово this, передается другому объекту, this относится к этому объекту, а не к исходному объекту, в котором функция была объявлена.

Строгие обозначения ▶️

Цель: упростить написание безопасного JavaScript. Строгий режим превращает плохие практики в JavaScript в ошибки.

  • Например, он не позволяет создавать переменные без ключевого слова var (переменная должна быть объявлена).

Закрытие ▶️

Закрытие в JavaScript — это функция, которая возвращает другую функцию.
Замыкание — это конструкция JavaScript, которая инкапсулирует переменные внутри функции и ограничивает доступ к ней извне.

Обратный звонок и обещания ▶️

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

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

Готово, до свидания и скоро увидимся. 🙋‍♀️