Ооп умерло? да здравствует ооп!

Опасность одной парадигмы

Все названные проблемы ООП объединяет одно: наследование применяется даже там, где не является лучшим решением. Причём я бы не сказал, что это проблемы именно ОО-подхода — потому что исходная его форма никакого наследования не предполагала. Скорее во всех них виновата боязнь выйти за рамки парадигмы, слепая вера в неё.

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

В парадигмах, как в религиях, хороша умеренность. Бесспорно, Иисус, Мухаммед и Будда явили миру крутые идеи, но если следовать их учениям до последней запятой, можно изрядно испортить жизнь себе и близким. Во всём важна мера.

Очевидно, что функциональное программирование набирает обороты, тогда как ООП в последние годы сдаёт позиции, его резко критикуют.

Ранняя жизнь и работа

В интервью Davis Group Ltd. об образовании в Америке Кей сказал:

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

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

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

После увольнения Кей поступил в Университет Колорадо в Боулдере , получив степень бакалавра математики и молекулярной биологии в 1966 году. До и в течение этого времени он работал профессиональным джазовым гитаристом. Во время учебы в CU он написал музыку для адаптации «Хоббита» и других театральных постановок кампуса.

Осенью 1966 года он поступил в аспирантуру инженерного колледжа Университета Юты . Он получил степень магистра наук (MS) в области электротехники в 1968 году , прежде чем принимать его доктор философии (Ph.D.) в области компьютерных наук в 1969 г. Его докторскую диссертацию, FLEX: Гибкий Выдвижной Язык , описан изобретение на компьютерном языке известный как FLEX . Находясь там, он работал с «отцами компьютерной графики » Дэвидом К. Эвансом (который был недавно принят на работу из Калифорнийского университета в Беркли, чтобы открыть факультет информатики в Юте) и Иваном Сазерлендом (наиболее известным за написание таких новаторских программ, как Sketchpad ) . Их наставничество во многом вдохновило Кей на развитие взглядов на объекты и программирование. По мере того как он все больше занимался исследованиями для Агентства перспективных оборонных исследовательских проектов (DARPA), он закончил свою музыкальную карьеру.

В 1968 году он встретил Пейперт и узнал языка программирования Logo , на диалекте из Lisp , оптимизированный для образовательных целей. Это привело его к изучению работ Жана Пиаже , Жерома Брунера , Льва Выготского и конструкционистского обучения , что еще больше повлияло на его профессиональную ориентацию.

Покинув Юту в качестве адъюнкт-профессора компьютерных наук в 1969 году, Кей стал приглашенным исследователем в Стэнфордской лаборатории искусственного интеллекта в ожидании получения профессуры в Университете Карнеги-Меллона . Вместо этого в 1970 году он присоединился к исследовательскому коллективу Xerox PARC в Пало-Альто, Калифорния . На протяжении десятилетия он разрабатывал прототипы сетевых рабочих станций, используя язык программирования Smalltalk . Эти изобретения позже были коммерциализированы Apple в своих компьютерах Lisa и Macintosh .

Кей — один из отцов идеи объектно-ориентированного программирования , которую он назвал вместе с некоторыми коллегами из PARC. Некоторые из исходных объектно-ориентированных концепций, включая использование слов «объект» и «класс», были разработаны для Simula 67 в Норвежском вычислительном центре . Позже он сказал:

Работая в PARC, Кей придумал концепцию Dynabook , ключевого прародителя портативных и планшетных компьютеров, а также электронной книги . Он также является архитектором современного перекрывающегося оконного графического интерфейса пользователя (GUI). Поскольку Dynabook был задуман как образовательная платформа, Кей считается одним из первых исследователей мобильного обучения ; Многие черты концепции Dynabook были приняты при разработке образовательной платформы « Один ноутбук для ребенка» , с которой Кей активно участвует.

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

Идея

Оригинал:

Я решил, что буду доволен, если смогу реализовать отправку сообщений и внутреннее состояние.

Собственно, вот и самая главная проблема всей идеи — состояние.

Состояние

У нас вообще не должно быть состояния в функциональном программировании. Как же тогда изменять значения в ФП? Обычно, с помощью рекурсии (псевдокод):

В императивном программировании, мы обычно создаем переменную и постоянно изменяем ее значение. Тут мы, по сути, делаем то же самое с помощью вызова функции заново, но с другими параметрами.

Но объекту нужно состояние и еще прием сообщений. Давайте попробуем сделать вот так:

Мне кажется, вполне логично. Но этот код блокирует программу. Как мне создать другие объекты? Как мне отправлять сообщения между ними? Позвольте опять процитировать Алана Кея:

Это подарило мне идею использовать параллелизм. Я обозвал функцию «объектный цикл» и решил запускать ее в отдельном потоке. Единственной тайной пока что остается обмен сообщениями.

Ранняя жизнь и работа

В интервью Davis Group Ltd. об образовании в Америке Кей сказал:

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

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

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

После увольнения Кей поступил в Колорадский университет в Боулдере , получив в 1966 году степень бакалавра наук в области математики и молекулярной биологии .

Осенью 1966 года он поступил в аспирантуру инженерного колледжа Университета штата Юта . Он получил степень магистра наук (MS) в области электротехники в 1968 году, а затем доктора философии (Ph.D.) по информатике в 1969 году. Его докторская диссертация « FLEX: гибкий расширяемый язык» описывала изобретение компьютера. язык под названием FLEX . Находясь там, он работал с «отцами компьютерной графики » Дэвидом К. Эвансом (который был недавно принят на работу из Калифорнийского университета в Беркли, чтобы открыть факультет информатики в Юте) и Иваном Сазерлендом (наиболее известным за написание таких новаторских программ, как Sketchpad ). . Их наставничество во многом вдохновило Кей на развитие взглядов на объекты и программирование. По мере того как он все больше занимался исследованиями для Агентства перспективных оборонных исследовательских проектов (DARPA), он закончил свою музыкальную карьеру.

В 1968 году он встретил Пейперт и узнал языка программирования Logo , на диалекте из Lisp , оптимизированный для образовательных целей. Это привело его к изучению работ Жана Пиаже , Жерома Брунера , Льва Выготского и конструкционистского обучения , что еще больше повлияло на его профессиональную ориентацию.

Покинув Юту в качестве адъюнкт-профессора информатики в 1969 году, Кей стал приглашенным исследователем в Стэнфордской лаборатории искусственного интеллекта в ожидании получения профессуры в Университете Карнеги-Меллона . Вместо этого в 1970 году он присоединился к исследовательскому коллективу Xerox PARC в Пало-Альто, Калифорния . На протяжении десятилетия он разрабатывал прототипы сетевых рабочих станций, используя язык программирования Smalltalk . Эти изобретения позже были коммерциализированы Apple в своих компьютерах Lisa и Macintosh .

Вместе с некоторыми коллегами из PARC Кей является одним из отцов идеи объектно-ориентированного программирования (ООП), которую он назвал. Некоторые из исходных объектно-ориентированных концепций, включая использование слов «объект» и «класс», были разработаны для Simula 67 в Норвежском вычислительном центре . Позже он сказал:

Находясь в PARC, Кей разработал концепцию Dynabook , ключевого прародителя портативных и планшетных компьютеров, а также электронной книги . Он также является архитектором современного перекрывающегося оконного графического интерфейса пользователя (GUI). Поскольку Dynabook задумывался как образовательная платформа, Кей считается одним из первых исследователей мобильного обучения ; Многие особенности концепции Dynabook были адаптированы при разработке образовательной платформы « Один ноутбук для ребенка» , в разработке которой Кей принимает активное участие.

Классы

Для меня класс — это всего лишь калька (шаблон) объекта, хранящий его поведение (методы). И, честно говоря, классы сами по себе могут быть объектами (например, как в Ruby). Так что давайте добавим классы.

Сначала давайте «стандартизируем» как методы вызываются и выполняются. Мне уже лень писать, поэтому я просто вывалю эту кучу кода прям здесь (сорян):

И так. Сообщение для вызова метода — это просто хеш, состоящий из двух вещей: имя метода и аргументы для него.

Еще обратите внимание на функцию. Я захожу немного вперед, но мы будем давать классам методы в виде хеша

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

Обработка сообщений тоже довольно проста:

Теперь давайте глянем, как будут выглядеть наши классы:

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

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

Так, что же это за такая функция ? А вот она:

Когда мы создаем новый инстанс, конструктор используется для получения изначального состояния и сам объект добавляется в массив, упомянутый ранее. Объект возвращется с помощью промиса.

Еще я добавил вспомогательную функцию для синхронизированного создания:

Ну что, давайте попробуем создать класс-ориентированный string-builder.

Четко!

Работа и признание

Алан Кей представляет прототип Dynabook .

С 1981 по 1984 год Кей был старшим научным сотрудником в Atari, а с 1984 года до закрытия Advanced Technology Group в 1997 году он был сотрудником Apple . Затем он перешел в Walt Disney Imagineering с помощью своего друга Брана Феррена, директора по исследованиям и разработкам Disney , пока проект не завершился в 2001 году.

Затем Кей основал Исследовательский институт Viewpoints , некоммерческую организацию, занимающуюся детьми, обучением и передовой разработкой программного обеспечения. В начале 2018 года НИИ Точки зрения был закрыт. Кей также работал старшим научным сотрудником в Hewlett-Packard до тех пор, пока в 2005 году группа перспективных исследований программного обеспечения не была распущена .

В 2007 году Стив Джобс процитировал Алана Кея при запуске iphone .

В 2011 году Кей была лектором в Нью-Йоркском университете в рамках программы интерактивных телекоммуникаций (ITP) и прочитала лекцию «Мощные идеи: полезные инструменты для понимания мира» с целью разработки новых способов преподавания и обучения, основанных на фундаментальных принципах. и основан на мощных концепциях вместо традиционного запоминания.

Писк, Етои и Крокет

Кей был членом группы разработчиков Squeak , которая представляет собой версию Smalltalk с открытым исходным кодом, и была основана в декабре 1995 года. В этом контексте в ноябре 1996 года началась работа над так называемой системой Etoys. Совсем недавно Кей работал с Дэвидом А. Смитом, Дэвидом П. Ридом, Андреасом Раабом, Риком МакГиром, Джулианом Ломбарди и Марком П. МакКахиллом над Croquet, который должен был включать основную идею Squeak по адаптации компьютера к физической среде. в трехмерный пользовательский интерфейс.

Твик

В 2001 году архитектура Etoys в Squeak достигла своих пределов, поскольку Morphic уже не хватало в качестве графического пользовательского интерфейса. В результате Андреас Рааб, исследователь в группе Кея, а затем в Hewlett-Packard, предложил определить «сценарий процесса» и предоставить заранее определенный механизм планирования, который решал бы различные проблемы.

В конечном итоге это привело к новому пользовательскому интерфейсу, который включал механизмы островов, асинхронный обмен сообщениями, игроков и костюмы, языковые расширения, проекты и тайловые сценарии.Базовая система основана на классах , но во время программирования она ведет себя для пользователя на основе прототипа .

Ноутбук за 100 долларов

На Всемирном саммите по информационному обществу в ноябре 2005 года Массачусетский технологический институт (MIT) представил новый ноутбук для использования во всем мире в образовании. Программа была инициирована другом Кея Николасом Негропонте и поддерживается с тех пор, а Кей в качестве соразработчика в основном занимается образовательным программным обеспечением, которое используют Etoys и Squeak . Таким образом, Dynabook как концепция интерактивного, компьютерного и сетевого взаимодействия является частью разработки программного обеспечения для студенческого ноутбука. Ноутбук носит разные названия: ноутбук за 100 долларов, программа « Один ноутбук на ребенка », «Детская машина» и XO-1.

Переосмысление программирования

Кей часто читал лекции о новинках компьютерной революции, а это значит, что не все многообещающие концепции были воплощены в жизнь. Его лекции на конференции OOPSLA 1997 года и на церемонии вручения премии ACM Turing под названием «Компьютерная революция еще не произошла» основаны на его опыте работы со Sketchpad , Simula , Smalltalk и сложным кодом коммерческого программного обеспечения.

В 2004 году в интервью ACMQueue Кей сказал следующее:

Основываясь на этой идее, Кей создал предложение «ШАГИ на пути к переосмыслению программирования: компактная и практичная модель персональных вычислений как самостоятельного исследования», которое было одобрено 31 августа 2006 г. Национальным научным фондом США (NSF). . Грубое резюме этого можно найти в следующей цитате из аннотации к семинару, который он провел в Intel Research Labs, Беркли :

Заключение

Ух, это было довольно интересно (для меня). Попутно я пытался понять, можно ли было бы сделать то же самое в Haskell. Я не могу сказать наверняка, но я думаю, что это возможно. У Haskell есть каналы, промисы и параллелизм. И даже если бы этого всего не было, то мы могли бы немного расширить идею объекта и создавать их как отдельные процессы и отправлять сообщения с помощью какого-нибудь RabbitMQ.

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

Надеюсь, моя писанина не была совершенно скучной и, возможно, вы даже узнали что-то новое :)

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Советчик
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: