Connect with us

Разработка

Григорий Петров: Объектно-Ориентированное программирование

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

Григорий Петров

Опубликовано

/

     
     

Я уже много раз рассматривал гипотезу о работе нашего мозга, который любит строить и использовать модели окружающего мира. Это даже не одна гипотеза, а целый ряд наблюдений: как люди рождаются, растут, изучают окружающий мир и взаимодействуют с ним. Одна из гипотез предполагает, что многие механизмы моделирования у нас встроенные. К примеру, есть подозрение, что у младенцев существуют готовые механизм моделирования и распознавания лиц, социальных ситуаций, выделения “действующего лица” (actor) и его цели (intent).

Если вы посмотрите на две точки и линию под ними, то увидите “лицо”. Как в этом смайлике: “:)”. Встроенный механизм этого, возможно, заложен у нас на генетическом уровне. Похожий механизм, известный как “мифологическое сознание”, это выделение “действующих лиц” и их “целей”. Люди по своей природе социальны, эти механизмы позволяют ребенку понять, как работает социум и стать его частью. Когда ребенок видит другого человека, то он воспринимает этого человека как “действующее лицо”, а его действия воспринимает как имеющие какую-то “цель”. Механизмы довольно простые и распространяются не только на живых людей, но и на окружающий мир. Ребенок нескольких месяцев от роду уже способен различать, что квадратик на экране “гонится” за треугольником, а круг треугольнику “помогает”.

Действующие лица и их мотивы

Мозг – не компьютер, в нем, скорее всего, нет жестко изолированных друг от друга программ. Мифологическое сознание не только позволяет ребенку понять работу нашего общества и верить в деда мороза. Эти же механизмы влияют на наш язык и на модели окружающего мира. Во фразе “машина едет к дому” этот механизм формирует образ одушевленного действующего лица, машины, которая движется с определенной целью. “Дождь идет”. “Солнце светит”. “Кофеварка сломалась мне на зло!”. Все эти привычные фразы раскрашивают окружающий мир осознающими себя существами, совершающими действия с какими-то целями.

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

Декомпозиция

Объектно-ориентированное программирование является одним из способов борьбы со сложностью. Сначала мы видим в коде повторяющиеся штуки и начинаем давать им имена. Затем мы видим группы штук, которыми мы оперируем вместе, и даем имя такой группе. После чего группа становится объектом. А через некоторое время у этого объекта появляются методы. Если не повезет – класс, наследование и миксины.

А теперь следите за руками. Наши модели мира используют “действующих лиц”. Наш язык использует “действующих лиц”. И тут нам нужно именовать в программе объекты, с которыми что-то происходит! Логично предположить, что мозг будет использовать для этой сложной задачи уже существующие, обкатанные и более-менее хорошо работающие механизмы. “файл.открыть()”, “окно.закрыть()” – все вот это.

А теперь сюрприз. Механизм, который позволяет ребенку понять, что квадратик “гоняется” за треугольником, а секретарше, что “кофемашина на нее обиделась” – не то чтобы очень точный инструмент. И если для окружающего мира у нас есть жизненный опыт, прочитанные книги, пример других людей – то в случае программы, в отсутствии фундаментального образования, программист предоставлен самому себе. Как сгруппировать объекты? Какие у них будут отношения друг с другом? Окно будет регистрироваться в области нотификаций, или область нотификаций будет добавлять в себя окно?

А это важно?

Кто вокруг кого вращается

А теперь еще один сюрприз – важно. В зависимости от того, как выбраны объекты и взаимодействия между ними, сложность системы может отличаться кардинально. Давайте вспомним известную шутку с солнечной системой. На анимации ниже объекты движутся друг относительно друга одинаково. Но в одном случае в центре внимания объект “Земля”, относительно которого рассматриваются остальные участники движения, а в другом случае это “Солнце”.

Нарисованная справа Марсом траектория как бы намекает нам, что неудачно выбранные объекты могут привести к печальным последствиям. Я сам могу вспомнить множество случаев, когда при разработке Windows приложений все начиналось с объекта “главное окно”. Который со временем начинал обрастать все большей и большей функциональность, пока, наконец, не превращался в чудовищный клубок запутанных связей, обеспечивающий работу нескольких десятков других окон, фоновых потоков, дочерних процессов и множества других шутки. Поддерживать, а тем более развивать такие программы было очень тяжело.

Программист художник, он так видит

Программирования – очень молодая отрасль. Множество программистов – самоучки. “Лучшие практики” разработки сменяют друг друга раз в пару лет. Полагаю, что не открою Америку, если скажу, что программисты по-разному группируют объекты и методы их взаимодействия. А потом им тяжело читать и поддерживать код друг друга. Чужая ментальная модель – она как чужая одежда. Иногда жмет, иногда свисает, а иногда просто не налезает.

Если мы хотим, чтобы программисты работали в команде и могли поддерживать код друг друга, то важно ментальные модели синхронизировать. Большую роль в этом играют opinionated фреймворки, которые жестко диктуют состав и отношения объектов внутри программы. Когда все разработчики используют один, выбранный тим лидом фреймворк – это хорошо. Почетное второе место занимает стандарт кодирования, в котором команда записывает общие моменты, о которых разработчики договорились друг с другом. Найм разработчиков с похожим бэкграундом также играет нам на руку.

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

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
1 Comment

1 Comment

  1. iBeginner4

    25.02.2017 at 23:52

    хорошо

You must be logged in to post a comment Login

Leave a Reply

Новости

Интересные материалы: 25.09

У нас нова куча анимаций, UI, реджектов и есть даже долг данных от Riot.

AppTractor

Опубликовано

/

Автор:

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Комментарии
Продолжить чтение

Медиа

Android Dev Подкаст. Выпуск 75. Новости об осенних релизах, либах и девфестах

У нас целый урожай релизов: Kotlin 1.3RC, OpenJDK11, Androidx1.0, и даже Flutter готовит свой 1.0RC! Ну и то, что вы любите: ругаем кривые либы и мамкиных архитекторов, хвалим девфесты и хорошие статейки. А ещё Денис свалил из Сингапура, а к нам вернулся блудный сын Даня!

AppTractor

Опубликовано

/

Автор:

У нас целый урожай релизов: Kotlin 1.3RC, OpenJDK11, Androidx1.0, и даже Flutter готовит свой 1.0RC! Ну и то, что вы любите: ругаем кривые либы и мамкиных архитекторов, хвалим девфесты и хорошие статейки.

А ещё Денис свалил из Сингапура, а к нам вернулся блудный сын Даня!

Материалы:

Комментарии
Продолжить чтение

Новости

Интересные материалы: 24.09

Начинаем новую неделю с чатов, дизайн-процессов и трендов.

AppTractor

Опубликовано

/

Автор:

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Комментарии
Продолжить чтение

Новости

Digest MBLTdev: Новости для iOS разработчиков №187

В течение недели топовые iOS-разработчики Руслан Гуменный, Саша Черный, Сергей Бендак, Вадим Дробинин, Юрий Петухов и директор по продукту VK Иван Козлов собирают для вас интересные и полезные ссылки на статьи, необходимые для прочтения каждому начинающему и опытному разработчику. В каждом выпуске – новости, коды, инструменты, дизайн и прочее.

e-Legion

Опубликовано

/

Автор:

Герой недели — Amazon. Отсыпали от души. Столько новых устройств как-то даже не припоминается. Микроволновка, настенные часы и устройство для автомобиля, которые позволяют использовать голосовые команды Алексы. Разве не прекрасно? Команда микроволновке «приготовь попкорн», команда автомобилю без необходимости запускать приложение — это же здорово. А один из членов Дорогой редакции недавно пытался связать Айфон с CarPlay в Genesis G70 и не смог. Не соединяет и всё. Машина за 2 млн рублей, в которой ты не смог с первого раза подключиться к CarPlay или Echo Auto за 3200 рублей? Да-да, сравнение не блещет корректностью, но идею вы поняли.

Неделя до MBLT DEV 2018

Посмотрите приветствие от спикера MBLT DEV Джона Фокса из Netflix. Посмотрите до конца, оно классное! Программа конференции опубликована. Спикеры пакуют чемоданы. Пора и билетом обзавестись.

WWW.FACEBOOK.COM

Foundation Release Notes

Про iOS 12 последние несколько месяцев много пишут и говорят, но конкретный список технических нововведений только-только опубликовали.

DEVELOPER.APPLE.COM

Migrating to Unified Logging, Swift Edition

До сих пор используете NSLog и print? Пора переходить на систему Unified Logging, она и к ресурсам менее требовательна, и обработку подобных логов выполнять проще. Об особенностях использования os_log рассказано в этом материале.

WWW.BIGNERDRANCH.COM

Bloom Filters and Swift 4.2

Hasher — универсальная хэш-функция, добавленная в Swift 4.2. На примере показано её применение для построения структуры данных, которая используется в Medium для отслеживания статуса прочтения статей.

KHANLOU.COM

Swift Associated Types With Default Values

Одной из недокументированных особенностей Associated Types является возможность установки значения по умолчанию. В этом случае при поддержке протокола можно не определять typealias. В материале показано практическое применение для этого кейса.

SWIFTROCKS.COM

Animating Table View Cells Display

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

WWW.VADIMBULAVIN.COM

Type-Safe Swift Models

Автор статьи рассказывает о том, как можно улучшить подход к проектированию моделей в связке с Codable.

BLOG.USEJOURNAL.COM

Marzipan: Porting iOS Apps to the Mac

Исчерпывающая инструкция об инструментах для портирования мобильных приложений для работы на десктопе.

PSPDFKIT.COM

Fireworks in UIViews

Пятничное. Порадуйте ваших пользователей маленьким фейерверком.

SZULCTOMASZ.COM

Sublime Merge

Если вас по какой-то причине не устраивает консоль, разработчики редактора Sublime выпустили клиент для Git.

WWW.SUBLIMEMERGE.COM

Supporting iPhone XS Max and XR

Очерк о размере дисплеев, разрешениях, масштабировании и size-классах в новых моделях iPhone.

USEYOURLOAF.COM

Designing for Siri Shortcuts

Siri Shortcuts уже доступны для всех, поэтому самое время озадачиться нюансами их проектирования.

BLOG.MAXRUDBERG.COM

Apple Tech Talks

Apple рассказывает об особенностях адаптации приложений для новых iPhone XS и XR, а также о подходах к разработке дизайна для Apple Watch Series 4.

DEVELOPER.APPLE.COM

Apple Watch Series 4 Faces without CGI effects

Красивое видео о том, как новые анимации для часов были сняты без использования компьютерных эффектов.

APPLEINSIDER.COM

What’s new in Swift 5.0

Буквально несколько дней назад состоялся релиз Swift 4.2, а у нас уже есть возможность познакомиться со Swift 5.0. Raw strings облегчают работу при формировании регулярных выражений, а метод count(where:) для коллекций является заменой связки методов filter() и count(). О других нововведениях можно узнать из примеров в статье.

WWW.HACKINGWITHSWIFT.COM

Предыдущие выпуски Digest MBLTDEV и подписка доступны на официальном сайте. Всё бесплатно и никакого спама, честно!

Комментарии
Продолжить чтение

Реклама

Наша рассылка

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.