ООП
Объектно-ориентированное программирование
Объе́ктно-ориенти́рованное программи́рование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования[1].

OOП (Объектно-Ориентированное Программирование) это подход в программировании, согласно которому, данные инкапсулированы внутри objects, а сам объект существует как составная часть целого.
JavaScript сильно объекто-ориентирован. Он следует модели, базирующейся на прототипах (в отличии от модели, базирующейся на классах).
Языки программирования которые относятся к объектно ориентированным языкам (ООП)[mdn]:
- JavaScript
- Java
- C++
- Python
- Ruby
Инкапсуляция
Инкапсуляция (англ. encapsulation, от лат. in capsula) — в информатике размещение в одном компоненте данных и методов, которые с ними работают. Также может означать скрытие внутренней реализации от других компонентов. Например, доступ к скрытой переменной может предоставляться не напрямую, а с помощью методов для чтения (геттер) и изменения (сеттер) её значения.
Инкапсуляция

Абстракция
Абстра́кция в объектно-ориентированном программировании — это использование только тех характеристик объекта, которые с достаточной точностью представляют его в данной системе. Основная идея состоит в том, чтобы представить объект минимальным набором полей и методов и при этом с достаточной точностью для решаемой задачи.
Абстракция

Наследование
Наследование (англ. inheritance) — концепция объектно-ориентированного программирования, согласно которой абстрактный тип данных может наследовать данные и функциональность некоторого существующего типа, способствуя повторному использованию компонентов программного обеспечения.
Наследование

Полиморфизм
Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов[1][2][3].
Полиморфизм


А где здесь JavaScript?
JavaScript — это объектно-ориентированный язык, основанный на прототипировании, а не на классах.
Сравнение языков на основе классов (Java) и на базе прототипов (JavaScript)
| Основанные на классах (Java) | Основанные на базе прототипов (JavaScript) |
|---|---|
| Класс и экземпляр являются разными сущностями. | Все объекты могут наследовать свойства другого объекта. |
| Определяем класс с помощью определения класса; создаем экземпляр класса с помощью метода-конструктора. | Определение и создание объекта происходит с помощью функций-конcтрукторов. |
| Создание отдельного объекта с помощью оператора new. | Так же. |
| Иерархия объектов строится с помощью определения классов и их подклассов. | |
| Построение иерархии объектов происходит путем присвоения объекта в качестве прототипа функции-конструктора. | |
| Наследование свойств в цепочке классов. | Наследование свойств в цепочке прототипов. |
| Определение класса определяет все свойства всех экземпляров класса. Нельзя динамически добавлять свойства во время выполнения. | Функция-конструктор или прототип задает начальный набор свойств. Можно добавить или удалить свойства динамически к отдельным объектам или всей совокупности объектов. |
Что дальше?
Driven Development
TDDx2, BDD, DDD, FDD, MDD, PDD
Ссылки
oop
By Andrew Bogomolov
oop
- 53