PHP: Абстракция с помощью данных (12) (конспект Hexlet)

  1. Введение
    1. Основные темы этого курса
      1. Предметная область (Domain Model)
      2. Онтология
      3. Уровни проектирования (Барьеры абстракции)
      4. Инварианты
  2. Онтология
    1. Типы связей
      1. one-to-many или o2m
      2. many-to-many или m2m
      3. one-to-one или o2o
      4. Дополнительные материалы
        1. Онтология
        2. Предметно-ориентированное проектирование
        3. ER-модель
  3. Точки на координатной плоскости
  4. Семантика массивов
    1. Код, который заставляет думать: неговорящие имена, плохие абстракции, неправильные структуры данных, сильная зависимость от контекста — плохой код (при этом важно не путать лёгкость и простоту).
    2. Дополнительный материал
      1. Ментальное программирование 1
        Принципы
        1. Популярные
          1. DRY — Don’t Repeat Youself – не повторяйся
          2. KISS — Keep It Simple, Stupid – не усложняй
          3. YAGNY — You Ain’t Gonna Need It – Вам это не понадобится! Его суть в том, чтобы реализовать только поставленные задачи и отказаться от избыточного функционала
        2. Базовые
          1. GRASP — general responsibility assignment software patterns — общие шаблоны распределения ответственностей
          2. SOLID —  когда при написании кода используется несколько принципов вместе, то это значительно облегчает дальнейшую поддержку и развитие программы
          3. CQS — Command-query separation — метод должен быть либо командой, выполняющей какое-то действие, либо запросом, возвращающим данные, но не одновременно
          4. Law of Demeter — Закон Деметры —  слабая связность  — каждый программный модуль:
            1. должен обладать ограниченным знанием о других модулях:
            2. знать о модулях, которые имеют «непосредственное» отношение к этому модулю.
            3. должен взаимодействовать только с известными ему модулями «друзьями», не взаимодействовать с незнакомцами. обращаться только к непосредственным «друзьям».
          5. Single level of Abstraction Principle (SLAP)Принцип единого уровня абстракций — В функции не должны сочетаться разные уровни абстракции. Например, функция для проверки формы не должна выполнять вызовы ввода/вывода
        3. Ментальное программирование 2
        4. Simple Made Easy
  5. Создание абстракции
    1. Конструкторы и селекторы
  6. Интерфейсы
    1. Абстрактный тип данных
    2. Пример преобразования декартовых координат в полярные и наоборот
  7. Уровневое проектирование
  8. Инварианты
    1. Инвариант — логическое выражение, определяющее непротиворечивость состояния.
      Пример:
      Cравнение неприведенной и приведенной рациональных дробей должно происходить корректно:
      makeRational(2, 4) = makeRational(8, 16),
      т.е. необходимо, например, в конструкторе рациональной дроби makeRational приводить ее к нормальной).
    2. Техника мемоизации — запоминание возвращенных значений функций, для для исключения их повторного расчета для переданных аргументов
    3. Защита данных от прямого воздействия, в обход интерфейсных функций. В PHP за это отвечают модификаторы доступа к свойствам объектов publicprotectedи private
    4. Курс PHP: Составные данные
    5. Обход защиты данных с помощью Reflection API.
  9. Дополнительные задания
    1. Парсинг урла — parse_url
    2. Парсинг параметров запроса — parse_str
    3. Формирование строки запроса — http_build_query