Понятие ООП в JavaScript


ООП (Объекто-ориентированное программирование) - это принципиально новый вид программирования. ООП используется не только в JavaScript, но и в других языках тоже. И о понятии ООП я Вам и расскажу в этой статье. В основе ООП лежит объект. Объект - это некая сущность, у которой есть свойства и методы, позволяющие этими свойствами манипулировать. Вот такое сухое определение, но зато полностью отражающее суть объекта. Чтобы стало ещё понятнее, давайте приведу пример из жизни. Самый популярный пример - это автомобиль. Какие свойства могут быть у автомобиля? Например, может быть максимальная скорость, ускорение, количество передач, масса, цвет, текущие координаты местоположения автомобиля и так далее. Теперь, какие могут быть методы ? Это может быть метод "перекраски автомобиля", который занимается перекрашиванием автомобиля в другой цвет. Это может быть метод "движения", которая занимается изменением текущих координат местоположения и так далее. Думаю, что с объектами всё достаточно понятно. Теперь о классах. Класс - это некий шаблон для создания объектов. Имено в классе написаны, какие свойства и методы будут у объекта. Также у класса есть конструктор, который занимается созданием объектов. Другими словами, класс - это шаблон и фабрика для создания объектов. Теперь поговорим о трёх китах ООП: инкапсуляция, наследование и полиморфизм. Начнём с инкапсуляции. Инкапсуляция - это процесс сокрытия части объекта от пользователя. Для того чтобы было легче понять, что такое инкапсуляция, привожу пример. Допустим, Вы набираете текст в Word. Знаете ли Вы, что в этот момент Вы посылаете огромное количество бит из 0 и 1? Известно ли Вам, как они обрабатываются? Известно ли Вам, как они превращаются в символы, которые Вы видите на экране? И вообще, как происходит вывод на ЖК-монитор? Скорее всего, Вы об этом даже не задумывались. То есть реализация всей этой физики от Вас скрыта. Это и есть инкапсуляция. Вы можете спокойно использовать объекты и их функциональность, но при этом Вам совсем не надо знать, как это работает. И это очень удобно и для пользователя, и для программиста. Теперь поговорим о наследовании. Наследование - механизм ООП, позволяющий создавать классы на основе других классов, забирая их свойства и методы. Снова пример из жизни. Ведь согласитесь, что объект "Автомобиль" - это абстрактность. Ведь существуют элементарно легковые и грузовые автомобили. То есть родительский класс (или как его ещё называют супер-класс) "Автомобиль" и два дочерних (или наследника, или производных): "Легковые автомобили" и "Грузовые автомобили". Принцип легковых и грузовых автомобилей один и тот же. То есть у каждого из них есть свойства "автомобиля" (максимальная скорость, ускорение и прочее) и методы (перемещения, перекраски). Однако, свойства будут немного другого значения (например, масса у грузовых машин, как правило, выше). А реализация методов будет другая (ведь перекрасить грузовую машину - это немного другое, нежели перекрасить легковую, хоть и принцип примерно один и тот же). И последняя парадигма ООП - это полиморфизм. Самый сложный для понимания "кит", однако, не менее важный, чем другие. Полиморфизм - это взаимозаменяемость объектов. Или другими словами, объект может иметь много форм. Например, объект "Автомобиль" может иметь две формы "Грузовые автомобили" и "Легковые автомобили". И если мы вызовем метод "перекраски автомобиля", то в зависимости от того, с каким объектом мы работаем, объект будет перекрашиваться как "грузовой автомобиль" или как "легковой автомобиль". Ведь мы можем, например, потребовать в качестве параметра функции объект "Автомобиля", но ведь мы не знаем, какая именно форма придёт в функцию: "легковой автомбиль" или "грузовой автомобиль". Однако, мы точно знаем, что все методы, которые мы применяем внутри функции к этому объекту будут корректно обрабатываться. Надеюсь, что-то прояснилось, однако, если это не так, то ничего страшного. В принципе, для JavaScript ООП не так важно, поэтому тут достаточно и общих понятий. А вообще тема ООП достаточно сложная и по ней пишут огромное количество толстенных книг, поэтому в одной статье трудно раскрыть эту тему. Однако, я постарался это сделать максимально понятным языком, и в то же время, чтобы у Вас появились общие понятия. Что же касается JavaScript, то тут ООП как такового нет, однако, концепции ООП JavaScript подчиняется. Существуют две части JavaScript (их несколько больше, но для 90% случаев их вполне достаточно). Первая часть - это ядро языка JavaScript. Здесь содержатся классы, отвечающие за математические операции, строковые операции, работу с массивами и так далее. Вторая часть - это клиентская. Здесь содержатся классы, которые отвечают за объекты на HTML-страницах, такие как: формы, кнопки, текстовые поля, ссылки, изображения, различные другие элементы страницы. Со многими объектами мы познакомимся в следующих статьях. А пока хватит. Спасибо за внимание!