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

Если вы думаете, что это еще один рассказ о путешествии об азиатском трепете перед великанами, предлагаемыми городом, вы не ошибаетесь, но я предлагаю нечто большее - смесь города и мои собственные два пенни.

Если вы разработчик или когда-либо выбирали информатику 101, то все мы помним, как изучали ужасное объектно-ориентированное программирование. То, чему нас учили под маской ООП, никогда не приходило мне в голову. Но да, в него часто добавлялась лексика, часто чтобы завидовать словарю (по крайней мере, так, как меня учили)

И хорошо, кто не помнит часто забитые Foobar, классы Employee и getSalary ( ) методы расчета годовой зарплаты сотрудника?

Ничего из этого здесь не имеет значения (и не вспоминается, чтобы не оживить прежние шрамы). Но важно то, что Лондон дал мне возможность его пересмотреть. И вот я - вбиваю свои частые мысленные литании осознания в блог.

Предпосылки

Предпосылки для этой статьи:

  1. Опыт работы с языками программирования (вероятно, C ++ / JAVA / .NeT) превратит эту латынь в английский для вас.
  2. Предварительное знакомство с JavaScript было бы еще лучше и сделало бы оксфордский лексикон легко усваиваемым.
  3. Рюмка текилы, если вас задыхает идея лондонского метро. (Допустим, временами бывает немного душно).

Могучий фон

Лондонское метро - это то же самое, что метро Дели для города Нью-Дели в Индии (я приехал оттуда, если вы можете спросить). Большая сеть поездов и туннелей искусно вилась под постоянно густонаселенными городами, часто выступая из-под земли, но только вдали от застенчивых уголков города. И было бы кощунством не ездить на метро в Лондоне. Поверьте мне. Безумная смесь людей, цветов и культур.

Обратите внимание на пробел. Сойдите здесь и отправляйтесь на поезд линии Piccadilly Line.

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

Мое путешествие в лондонском метро началось с линии Пикадилли, а именно от лондонского района Хаунслоу. Предлагаемый маршрут на день состоял в том, чтобы проехать на восток к Зеленому парку (Букингемский дворец), прогуляться по Трафальгарской площади, а затем по Оксфорд-серкус.

Поезд метро может состоять из нескольких вагонов, часто с шестью вагонами в поезде. Трубы повсюду (по всему миру) следуют одному образцу: широкие окна, автоматические двери, сиденья, рули и стойки. И люди, конечно, если они не во дворе.

А потом это пришло мне в голову. Если бы я когда-нибудь поделился, как трубка выглядит на моем Mac, как бы я это сделал? Он может распознавать (но не интерпретировать) английские слова и, самое главное, как мы храним их в своей памяти? Конечно, не путем написания текстового документа и его сохранения. Чтобы оживить это воображение, как мне заставить его работать в моем MacBook, чтобы он действительно мог запустить свой собственный Tube внутри, чтобы почувствовать это?

Объектно-ориентированное программирование убеждает нас в том, что мы можем это сделать, предоставляя нам определенный механизм для преобразования сущностей реального мира в набор атрибутов, позволяющий моделировать. С тех пор, как динозавры бродили по Земле, много говорилось об ООП и трилогии C / C ++ / Java.

И поскольку мы должны развиваться, я выбрал в качестве средства (без слов) JavaScript.

Моделирование поезда

Как бы вы описали поезд? Проще говоря, у поезда ЕСТЬ набор тренеров. Мы называем это ИМЕЕТ отношения композицией (и это несложно сложно, пока вы не на Facebook и искать социальное подтверждение). Это означает, что если мне когда-либо придется описывать шаблон поезда, мне придется составить шаблон тренера.

Мы называем этот шаблон или план объекта классом.

Почему план?

Итак, вопрос в том, почему это план, а не сам поезд? Причина в том, что вызов чего-то blueprint позволяет нам расширить его идею и создать настраиваемые экземпляры. И это дает мне гибкость - в конце концов, я могу создать несколько поездов по чертежу, где я могу настроить их цвета или другие функции.

Перечисление ..

Итак, сделка такова:
У поезда есть набор тренеров
Тренер закрасил краской
Тренер имеет комплект колес
У тренера есть комплект окон
У вагона есть комплект дверей

А с магией ES6 я так определяю своего тренера:

Но как мне ...

Достаточно честно, но это всего лишь шаблон. Как мне создать настоящего тренера из этого шаблона?

Что ж, это может быть немного больше практического опыта для создания настоящего тренера, но мы просто делаем это, чтобы создать его в нашей памяти компьютера:

const coach = new Coach();

Мы называем это созданием экземпляра класса.

Справедливо ! Но как я могу сообщить ему, что он должен иметь набор из четырех колес и четырех окон?

Представьте (или возьмите это как самостоятельное упражнение о том, что должно быть у всех колес и окон), у нас есть шаблоны, называемые для них как Wheel и Window.

У нас может быть список колес как:

[Потерпи меня, дорогой читатель. Мы будем много качаться взад и вперед с этим].

Так что, может быть, теперь я могу отправить их своим методам setWheels и setWindows как:

Но как это работает в целом?

Достаточно справедливо, Бенджамин. Хороший вопрос.

В приведенном выше тексте вы видите строку №1, в которой говорится:

const myCoach = new Coach()

Для тех, кто не родом из могущественного фона C ++ / JAVA / .NeT, эта волшебная вещь, которая позволяет нам создать экземпляр, называется конструктором. Вы помните, что видели это волшебное слово в другом месте?

Точно ! Вторая строчка здесь.

Конструктор - это магический метод по умолчанию, который создает для нас новый экземпляр шаблона. По сути, фрагмент

const myCoach = new Coach()

вызывает для нас конструктор и возвращает экземпляр Coach.

Самое интересное еще впереди.

Давайте обозначим атрибуты, которыми обладает тренер. У тренера

  1. Колеса
  2. Окна
  3. Двери
  4. Чувство направления (или, как я полагаю, так оно и есть - первый тренер, последний тренер и средние тренеры между ними)

Итак, теперь наш шаблон похож на этот (когда я говорю «похожий», это не относится ко всему фрагменту кода. Только его часть, чтобы показать магию):

Кроме того, вы можете заметить это: конструктор, как и любой другой метод в JavaScript, может принимать определенные параметры (наркоманы, в том числе разработчики, называют их как аргументы), которые могут обрабатываться внутри метода.

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

Если бы вы прочитали это здесь, это действительно представляет собой головоломку, и, изучив дальнейшие уроки, вы сможете понять суть этого . Однако в нашем контексте мы схватываем более легкие слова (и тем самым спасаем нас от сильной эпидемии местоимений):

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

Мы можем увидеть, как работает this.wheels: по сути, он берет контекст вновь созданного объекта / instance с помощью своего конструктора, а затем this ведет себя так, как если бы это был сам объект.

Другими словами, его можно использовать для ссылки на объект, который мы еще не создали! Волшебно, не правда ли?

Это означает, что если бы я написал этот фрагмент кода:

А потом это:

Вуаля! Вы создали трех тренеров. Теперь мы продолжаем создавать наш собственный поезд Tube: (Очевидно, вам нужно добавить к нему недостающие части класса Coach и создать экземпляры, но я бы не стал повторять то, что сделал выше)

У нас есть немного надежды!

Очевидно, это совсем не лучший фрагмент кода. JavaScript предоставляет нам

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

Итак, теперь, когда у нас есть поезд, давайте подготовим наши платформы в следующих разделах и запустим его!

P.S. Вы считали, что в нашем поезде всего три вагона? : O Можете придумать, как добавить еще трех тренеров? Или, скорее, сделайте его более простым, чтобы вы всегда могли выпускать метро с тем количеством промежуточных вагонов, которое я вам даю.