Jump to content

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

Умль нотации для класса. Этот класс кнопки имеет переменные для данных и функций . Благодаря наследованию, подкласс может быть создан в качестве подмножества класса кнопок. Объекты являются экземплярами класса.

Объектно-ориентированное программирование ( ООП )-это парадигма программирования, основанная на концепции объектов , [ 1 ] которые могут содержать данные и код : данные в форме полей (часто известные как атрибуты или свойства ) и код в форме процедур (часто известные как методы ). В ООП компьютерные программы разработаны, делая их из объектов, которые взаимодействуют друг с другом. [ 2 ] [ 3 ]

Многие из наиболее широко используемых языков программирования (такие как C ++ , Java , [ 4 ] и Python ) представляют собой многопарадигму и поддержку объектно-ориентированного программирования в большей или меньшей степени, обычно в сочетании с императивным программированием , процедурным программированием и функциональным программированием .

Значительные объектно-ориентированные языки включают ADA , ActionScript , C ++ , Common Lisp , C# , Dart , Eiffel , Fortran 2003 , Haxe , Java , [ 4 ] JavaScript , Kotlin , Logo , Matlab , Objective-C , Object Pascal , Perl , PHP , Python , R , Raku , Ruby , Scala , Simscript , Simula , SmallTalk , Swift , Vala и Visual Basic.net .

Терминология, вызывающая «объекты» в современном смысле объектно-ориентированного программирования, впервые появилась в группе искусственного интеллекта в MIT в конце 1950-х и начале 1960-х годов. «Объект» упоминается в атомах LISP с идентифицированными свойствами (атрибутами). [ 5 ] [ 6 ] Другим ранним примером MIT был SketchPad , созданный Иваном Сазерлендом в 1960–1961 гг.; В Глоссарии технического отчета 1963 года, основанном на его диссертации о SketchPad, Сазерленд определил представления о «объекте» и «экземпляре» (с концепцией класса, охватываемой «Мастер» или «Определение»), хотя и специализировано на графическом взаимодействии. [ 7 ] Кроме того, в 1968 году версия MIT Algol , AED-0, установила прямую связь между структурами данных («Plexes», в этом диалекте) и процедурами, предварительно отфигулируя то, что было позже названо «Сообщениями», «Методы» и «Функции-члены ". [ 8 ] [ 9 ] Такие темы, как абстракция данных и модульное программирование, были общими моментами обсуждения в настоящее время.

Независимо от более поздней работы MIT, такой как AED, Simula был разработан в течение 1961–1967 годов. [ 8 ] Simula представила важные понятия, которые сегодня являются важной частью объектно-ориентированного программирования, таких как класс и объект , наследование и динамическое связывание . [ 10 ] Язык программирования, ориентированного на объектно, использовался в основном исследователями, связанными с физическим моделированием , такими как модели для изучения и улучшения движения кораблей и их содержания через грузовые порты. [ 10 ]

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

Алан Кей, [ 1 ]

Под влиянием работы в MIT и языке Simula, в ноябре 1966 года Алан Кей начал работать над идеями, которые в конечном итоге будут включены в язык программирования SmallTalk . Кей использовал термин «объектно-ориентированное программирование» в разговоре еще в 1967 году. [ 1 ] Хотя иногда называется «отцом объектно-ориентированного программирования», [ 11 ] Алан Кей дифференцировал свое представление о ОО от более традиционного абстрактного понятия типа данных об объекте и подразумевает, что учреждение по информатике не приняло его представление. [ 1 ] MIT MIT 1976 года в соавторстве Барбара Лисков перечисляет Simula 67 , CLU и Alphard как объектно-ориентированные языки, но не упоминается SmallTalk. [ 12 ]

В 1970 -х годах была разработана первая версия языка программирования SmallTalk в Xerox Parc Аланом Кей , Дэном Ингаллсом и Адель Голдберг . SmallTalk-72 включал среду программирования и был динамически напечатан , и сначала был интерпретирован , а не скомпилирован . SmallTalk стал отмеченным своим применением объектной ориентации на языковом уровне и его графической среде разработки. SmallTalk прошел различные версии и интерес к языку рос. [ 13 ] В то время как на SmallTalk повлияли идеи, представленные в Simula 67, он был разработан как полностью динамическая система, в которой классы могут быть созданы и модифицированы динамически. [ 14 ]

В конце 1970-х и 1980-х годов объектно-ориентированное программирование выросло до известности. Фаровой объектно-ориентированный LISP был разработан с 1979 года , внедряя множественные наследование и микшины . [ 15 ] В 1981 году Голдберг отредактировал августовский выпуск журнала Byte Magazine , внедрив SmallTalk и объектно-ориентированную программу для широкой аудитории. [ 16 ] Петли, объектная система для Interlisp -D, находилась под влиянием SlamtTalk и Alavors, а статья о ней была опубликована в 1982 году. [ 17 ] В 1986 году Ассоциация по вычислительной технике организовала первую конференцию по объектно-ориентированному программированию, системам, языкам и приложениям (OOPSLA), в которой приняли участие 1000 человек. Среди других разработок была общая система объектов LISP , которая интегрирует функциональное программирование и объектно-ориентированное программирование и позволяет расширить с помощью протокола мета-объекта . В 1980 -х годах было несколько попыток разработать архитектуры процессоров, которые включали аппаратную поддержку объектов в памяти, но они не были успешными. Примеры включают Intel IAPX 432 и Linn Smart Rekursiv .

В середине 1980-х годов «Цель-C» была разработана Брэдом Коксом , который использовал SmallTalk в ITT Inc. Bjarne Stroustrup , который использовал Simula для своей докторской диссертации, создал объектно-ориентированный C ++ . [ 13 ] В 1985 году Бертран Мейер также создал первый дизайн эйфелевого языка . Эйфель, ориентированный на качество программного обеспечения, является чисто объектно-ориентированным языком программирования и нотацией, поддерживающим весь жизненный цикл программного обеспечения. Мейер описал метод разработки программного обеспечения Eiffel, основанный на небольшом количестве ключевых идей из разработки программного обеспечения и компьютерных наук, в объектно-ориентированном построении программного обеспечения . [ 18 ] Основным для качественного фокуса Эйфелева является механизм надежности Мейера, дизайн по контракту , который является неотъемлемой частью как метода, так и языка.

В начале и середине 1990-х годов объектно-ориентированное программирование, разработанное как доминирующая парадигма программирования , когда языки программирования, поддерживающие методы, стали широко доступны. К ним относятся Visual Foxpro 3.0, [ 19 ] [ 20 ] C ++ , [ 21 ] и Дельфи [ Цитация необходима ] Полем Его доминирование было дополнительно усилено растущей популярностью графических пользовательских интерфейсов , которые в значительной степени зависят от объектно-ориентированных методов программирования. Пример тесно связанной динамической библиотеки GUI и языка ООП можно найти в рамках какао на Mac OS X , написанном в Objective-C , объектно-ориентированном расширении динамического обмена сообщениями, основанным на SmallTalk. OOP Toolkits также повышает популярность программирования, управляемого событиями (хотя эта концепция не ограничивается ООП).

В Eth Zürich Никлаус Вирт и его коллеги исследовали концепцию проверки типа по границам модулей. Modula-2 (1978) включил эту концепцию, и их успешный дизайн, Oberon (1987), включал в себя отличительный подход к ориентации объектов, классов и тому подобное. Наследование не очевидно в дизайне Вирт, поскольку его номенклатура выглядит в противоположном направлении: оно называется расширением типа, а точка зрения от родителя до наследника.

Объектно-ориентированные функции были добавлены ко многим ранее существующим языкам, включая ADA , Basic , Fortran , Pascal и Cobol . Добавление этих функций к языкам, которые изначально не были разработаны для них, часто приводило к проблемам с совместимостью и обслуживаемостью кода.

Совсем недавно появились некоторые языки, которые в основном ориентированы на объект, но также совместимы с процедурной методологией. Два таких языка - Python и Ruby . Вероятно, наиболее коммерчески важными недавними объектно-ориентированными языками являются Java , разработанная Sun Microsystems , а также C# и Visual Basic.net Microsoft .NET (VB.NET), которые предназначены для платформы . Каждая из этих двух структур показывает, на своем пути, преимущество использования ООП путем создания абстракции от реализации. VB.NET и C# поддерживают межязычное наследование, позволяя классам, определяемым на одном языке, подкласса, определяемые на другом языке.

Объектно-ориентированное программирование использует объекты, но не все связанные методы и структуры поддерживаются непосредственно на языках, которые утверждают, что поддерживают ООП. Особенности, перечисленные ниже, являются распространенными среди языков, которые считаются сильно классовыми и объектно-ориентированными (или многопарадигмой с поддержкой ООП), с заметными исключениями упомянуты. [ 22 ] [ 23 ] [ 24 ] [ 25 ] Кристофер Дж. Дата заявила, что критическое сравнение ООП с другими технологиями, в частности, реляционно, сложно из-за отсутствия согласованного и строгого определения ООП. [ 26 ]

Поделился с языками, не являющимися

[ редактировать ]

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

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

Объекты иногда соответствуют вещам, найденным в реальном мире. [ 27 ] Например, графическая программа могут иметь такие объекты, как «круг», «квадрат» и «меню». Система онлайн -покупок может иметь такие объекты, как «корзина для покупок», «клиент» и «продукт». Иногда объекты представляют больше абстрактных сущностей, таких как объект, который представляет открытый файл, или объект, который предоставляет услугу перевода измерений с обычных в метрику.

Объекты могут содержать другие объекты в их переменных экземпляра; Это известно как композиция объекта . Например, объект в классе сотрудника может содержать (либо напрямую, либо через указатель) объект в классе адреса, в дополнение к своим собственным переменным экземпляра, таких как «First_Name» и «положение». Композиция объекта используется для представления отношений «has-a»: у каждого сотрудника есть адрес, поэтому у каждого объекта сотрудника есть доступ к месту для хранения адреса адреса (либо непосредственно встроенного внутри себя, либо в отдельном месте, адресованном указателю). Date и Darwen предложили теоретическую основу, которая использует OOP в качестве своего рода настраиваемой системы типа для поддержки RDBMS , но он запрещает указатели объектов. [ 28 ]

Парадигма ООП подверглась критике за переоценку использования объектов для проектирования и моделирования программного обеспечения за счет других важных аспектов (вычисления/алгоритмы). [ 29 ] [ 30 ] Например, Роб Пайк сказал, что ООП -языки часто смещают фокус от структур данных и алгоритмов на типы . [ 31 ] Стив Йегж отметил, что, в отличие от функционального программирования : [ 32 ]

Объектно -ориентированное программирование ставит существительные в первую очередь. Зачем вам идти на такую ​​длину, чтобы поставить одну часть речи на пьедестал? Почему одна концепция должна иметь приоритет над другой? Это не так, как будто ООП внезапно сделал глаголы менее важными в том, как мы на самом деле думаем. Это странно искаженная перспектива.

Рич Хикки , создатель Clojure , описал системы объектов как чрезмерно упрощенные модели реального мира. Он подчеркнул неспособность ООП правильно моделировать время, что становится все более проблематичным, поскольку программные системы становятся более одновременными. [ 30 ]

Александр Степанов сравнивает объектно -ориентацию неблагоприятно с общим программированием : [ 29 ]

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

Наследование

[ редактировать ]

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

Класс на основе

[ редактировать ]

В программировании на основе класса , наиболее популярном стиле, каждый объект должен быть экземпляром определенного класса . Класс определяет формат или тип данных (включая переменные элемента и их типы), а также доступные процедуры (методы класса или функции членов) для данного типа или класса объекта. Объекты создаются путем вызова специального типа метода в классе, известного как конструктор . Занятия могут наследовать от других классов, поэтому они расположены в иерархии, которая представляет «отношения». Например, классный сотрудник может унаследовать от класса. Все данные и методы, доступные для родительского класса, также появляются в классе дочерних именных. Например, классный человек может определить переменные «first_name» и «last_name» с методом «make_full_name ()». Они также будут доступны в классном сотруднике, который может добавить переменные «позиция» и «зарплата». Гарантируется, что все экземпляры работника класса будут иметь одинаковые переменные, такие как имя, позиция и зарплата. Процедуры и переменные могут быть специфичными для класса или экземпляра; Это приводит к следующим терминам:

  • Переменные класса - принадлежат классу в целом ; Есть только одна копия каждой переменной, общей во всех случаях класса
  • Переменные или атрибуты экземпляра - данные, которые принадлежат отдельным объектам ; У каждого объекта есть своя копия каждого. Все 4 переменные, упомянутые выше (First_Name, положение и т. Д.) - это переменные экземпляра.
  • Переменные члена - относится как к классовым, так и к переменным экземпляра, которые определяются конкретным классом.
  • Методы класса - принадлежат классу в целом и имеют доступ только к переменным класса и входы из вызова процедуры
  • Методы экземпляра - принадлежат отдельным объектам и имеют доступ к переменным экземпляра для конкретного объекта, на котором они вызываются, входы и переменные класса

В зависимости от определения языка, подклассы могут или не могут быть в состоянии переопределить методы, определенные суперклассами. Множественное наследство разрешено на некоторых языках, хотя это может усложнять разрешение переопределения. Некоторые языки имеют особую поддержку для других концепций, таких как черты и микшины , однако, на любом языке с множественным наследством, миксин-это просто класс, который не представляет собой отношения. Миксеры обычно используются для добавления одних и тех же методов в несколько классов. Например, класс UnicodeConversionMixin может предоставить метод Unicode_to_ascii () при включении в класс FileReader и Class WebPagescraper, который не имеет общего родителя.

Абстрактные классы не могут быть созданы в объектах; Они существуют только для наследства в другие «конкретные» классы, которые могут быть созданы. В Java final Ключевое слово можно использовать для предотвращения подклассного класса. [ 33 ]

На основе прототипа

[ редактировать ]

Напротив, в на основе прототипов программировании объекты являются основными объектами. Как правило, концепция «класса» даже не существует. Скорее, прототип или родитель объекта - это просто еще один объект, с которым связан объект. В себе объект может иметь несколько или нет родителей, [ 34 ] Но в самом популярном языке, основанном на прототипе JavaScript, у каждого объекта есть одна прототипная ссылка (и только одна). Новые объекты могут быть созданы на основе уже существующих объектов, выбранных в качестве их прототипа. Вы можете назвать два разных объекта яблока и апельсина фруктом, если существует фрукты объекта , а яблоки и апельсин имеют фрукты в качестве их прототипа. Идея класса фруктов не существует явно, но может быть смоделирована как класс эквивалентности объектов, разделяющих один и тот же прототип, или в качестве набора объектов, удовлетворяющих определенному интерфейсу ( наводнивание утки ). В отличие от программирования на основе классов, на языках на основе прототипов, как правило, возможно определить атрибуты и методы, не общие с другими объектами; Например, атрибут sugar_content может быть определен в яблоке , но не оранжевом .

Отсутствие

[ редактировать ]

Некоторые языки, такие как Go, вообще не поддерживают наследование. Go утверждает, что он ориентирован на объект, [ 35 ] и Bjarne Stroustrup, автор C ++, заявил, что можно сделать ООП без наследования. [ 36 ] Доктрина композиции по сравнению с адвокатами наследования , внедряющие отношения, с использованием композиции вместо наследования. Например, вместо того, чтобы унаследовать от класса, класс -сотрудник может дать каждому объекту сотрудника внутренний объект человека, который затем имеет возможность скрывать от внешнего кода, даже если у класса есть много публичных атрибутов или методов. Делегирование - это еще одна языковая особенность, которая может быть использована в качестве альтернативы наследию.

Роб Пайк раскритиковал мышление OO за предпочтение многоуровневой иерархии типа с слоистыми абстракциями в таблице поиска из трех строк . [ 37 ] Он назвал объектно-ориентированное программирование « римскими цифрами вычислений». [ 38 ]

Боб Мартин заявляет, что, поскольку они являются программным обеспечением, связанные с ним классы не обязательно делятся отношениями, которые они представляют. [ 39 ]

Динамическая диспетчер/передача сообщения

[ редактировать ]

Ответственность за объект, а не какой -либо внешний код, выбрать процедурный код для выполнения в ответ на вызов метода, обычно путем просмотра метода во время выполнения в таблице, связанном с объектом. Эта функция известна как динамическая диспетчерская . Если изменчивость вызовов опирается на нечто большее, чем на отдельный тип объекта, на котором он называется (т.е., по крайней мере, один другой объект параметра участвует в выборе метода), кто говорит о нескольких диспетчере . Вызов метода также известен как передача сообщения . Он концептуализируется как сообщение (имя метода и его входные параметры), передаваемого объекту для отправки.

Диспетчер взаимодействует с наследством; Если метод не присутствует в данном объекте или классе, диспетчера делегируется его родительским объектом или классом, и так далее, поднимаясь по цепочке наследования.

Абстракция и инкапсуляция данных

[ редактировать ]

данных Абстракция - это шаблон проектирования, в котором данные видны только для семантически связанных функций, чтобы предотвратить неправильное использование. Успех абстракции данных приводит к частому включению данных, скрывающихся как принцип проектирования в объектно-ориентированном и чистого функционального программирования. Аналогичным образом, инкапсуляция не позволяет внешнему коду быть обеспокоен внутренней работой объекта. Это облегчает рефакторинг кода , например, позволяя автору класса изменить то, как объекты этого класса представляют свои данные внутренне, не изменяя какой -либо внешний код (до тех пор, пока «общедоступные» методы работают одинаково). Он также побуждает программистов поместить весь код, который связан с определенным набором данных в одном классе, который организует его для легкого понимания другими программистами. Инкапсуляция - это метод, который поощряет разъединение .

В объектно -ориентированном программировании объекты предоставляют слой, который можно использовать для отделения внутреннего от внешнего кода и реализации абстракции и инкапсуляции. Внешний код может использовать объект только путем вызова конкретного метода экземпляра с определенным набором входных параметров, чтения переменной экземпляра или записи с переменной экземпляра. Программа может создавать много экземпляров объектов по мере ее запуска, которые работают независимо. Этот метод, как утверждается, позволяет легко использовать одни и те же процедуры и определения данных для различных наборов данных, в дополнение к потенциально отражению реальных отношений интуитивно. Вместо того, чтобы использовать таблицы баз данных и подпрограммы программирования, разработчик использует объекты, с которыми пользователь может быть более знаком: объекты из своего домена приложения. [ 40 ] Эти утверждения о том, что парадигма ООП усиливает повторно использование и модульность, подвергались критике. [ 41 ] [ 42 ]

Если класс не разрешает вызову кода доступа к данным внутренних объектов и разрешает доступ только с помощью методов, это также форма скрытия информации. Некоторые языки (например, Java) позволяют классам привлекать ограничения доступа явно, например, обозначают внутренние данные с private ключевое слово и методы обозначения, предназначенные для использования кодом вне класса с public ключевое слово. [ 43 ] Методы также могут быть разработаны государственными, частными или промежуточными уровнями, такими как protected (что позволяет доступа из одного и того же класса и его подклассов, но не объектов другого класса). [ 43 ] На других языках (например, Python) это применяется только конвенцией (например, private Методы могут иметь имена, которые начинаются с подчеркивания ). В C#, Swift & Kotlin Languages, internal Ключевое слово разрешает доступ только к файлам, присутствующим в той же сборке, пакете или модуле, что и в классе. [ 44 ]

В языках программирования, особенно объектно-ориентированных, акцент на абстракции жизненно важен. Объектно-ориентированные языки расширяют понятие типа для включения абстракции данных, подчеркивая значимость ограничения доступа к внутренним данным с помощью методов. [ 45 ] Эрик С. Рэймонд написал, что языки программирования, ориентированные на объект, имеют тенденцию поощрять густо многослойные программы, которые разрушают прозрачность. [ 46 ] Раймонд сравнивает это неблагоприятно с подходом, взятым с Unix и C -языком программирования . [ 46 ]

« Открытый/закрытый принцип » выступает за то, что классы и функции »должны быть открыты для расширения, но закрыты для модификации». Лука Карделли утверждает, что ООП -языки обладают «чрезвычайно плохими свойствами модульности в отношении расширения и модификации класса» и, как правило, являются чрезвычайно сложными. [ 41 ] Последний пункт повторяется Джо Армстронгом , главным изобретателем Эрлана , который цитируется как говорится: [ 42 ]

Проблема с объектно-ориентированными языками заключается в том, что у них есть вся эта неявная среда, которую они несут с собой. Вы хотели банан, но у вас была горилла, держащая банан и все джунгли.

Лео Броди предложил связь между автономным характером объектов и тенденцией к дублированию кода [ 47 ] В нарушение принципа повторяйте себя не [ 48 ] разработки программного обеспечения.

Полиморфизм

[ редактировать ]

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

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

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

Открытая рекурсия

[ редактировать ]

Общая особенность объектов заключается в том, что к ним прикреплены методы и могут получить доступ и изменять поля данных объекта. В этой марке ООП обычно есть особое название, такое как this или self используется для обозначения текущего объекта. В языках, которые поддерживают открытую рекурсию , методы объектов могут вызывать другие методы на том же объекте (включая себя), используя это имя. Эта переменная поздняя связана ; Это позволяет методу, определяемому в одном классе, вызывать другой метод, который определяется позже, в некотором подклассе.

ООП языки

[ редактировать ]

Simula (1967) обычно считается первым языком с основными особенностями объектно-ориентированного языка. Он был создан для разработки программ моделирования , в которых то, что стало называться объектами, было наиболее важным представлением информации. SmallTalk (1972–2890) является еще одним ранним примером, с которым была разработана большая часть теории ООП. Что касается степени объектной ориентации, можно провести следующие различия:

  • Языки, называемые «чистыми» языками, потому что все в них последовательно рассматривается как объект, от примитивов, таких как символы и пунктуация, вплоть до целых классов, прототипов, блоков, модулей и т. Д. Они были разработаны специально для облегчения, для облегчения, Даже применение методов. Примеры: Ruby , Scala , Smalltalk , Eiffel , Emerald , [ 49 ] Джейд , я , Раку .
  • Языки, разработанные в основном для программирования ОО, но с некоторыми процедурными элементами. Примеры: Java , Python , C ++ , C# , Delphi / Object Pascal , Vb.net .
  • Языки, которые исторически являются процедурными языками , но были расширены с некоторыми функциями. Примеры: PHP , JavaScript , Perl , Visual Basic (получен из Basic), Matlab , Cobol 2002 , Fortran 2003 , ABAP , ADA 95 , Pascal .
  • Языки с большинством особенностей объектов (классы, методы, наследование), но в отчетливо оригинальной форме. Примеры: Оберон (Оберон-1 или Оберон-2).
  • Языки с абстрактной поддержкой типа данных, которые могут использоваться для напоминания программирования ОО, но без всех особенностей объектно-ориентации. Это включает в себя объектно -основанные и прототипные языки. Примеры: Javascript , Lua , Modula-2 , Clu .
  • Хамелеонские языки, которые поддерживают несколько парадигм, в том числе OO. TCL выделяется среди них для TCLOO, гибридной объектной системы, которая поддерживает как программирование на основе прототипов, так и ОО на основе класса.

Популярность и прием

[ редактировать ]
График индекса популярности языка программирования TIOBE с 2002 по 2023 год . В 2000-х годах объектно-ориентированная Java (Orange) и процедурный C (темно-синий) конкурировали за верхнюю позицию.

Многие широко используемые языки, такие как C ++, Java и Python, предоставляют объектно-ориентированные функции. Хотя в прошлом объектно-ориентированное программирование было широко принято, [ 50 ] В последнее время эссе, критикующие объектно-ориентированные программирование и рекомендации избегания этих функций (как правило, в пользу функционального программирования ) были очень популярны в сообществе разработчиков. [ 51 ] Пол Грэм предположил, что популярность ООП в крупных компаниях обусловлена ​​«крупными (и часто меняющимися) группами посредственных программистов». По словам Грэма, дисциплина, навязанная ООП, предотвращает любого программиста «нанести слишком большой ущерб». [ 52 ] Эрик С. Рэймонд , программист UNIX и программный обеспечение с открытым исходным кодом , критиковал утверждения, которые представляют объектно-ориентированное программирование как «одно истинное решение». [ 46 ]

Ричард Фельдман утверждает, что эти языки, возможно, улучшили их модульность, добавив функции OO, но они стали популярными по причинам, отличным от того, чтобы быть объектно-ориентированными. [ 53 ] В статье Лоуренс Крубнер утверждал, что по сравнению с другими языками (диалектами LISP, функциональными языками и т. Д.) ООП -языки не имеют уникальных сильных сторон и наносят тяжелое бремя ненужной сложности. [ 54 ] Исследование Potok et al. не показал существенной разницы в производительности между ООП и процедурными подходами. [ 55 ] Лука Карделли утверждает, что Код ООП «по сути менее эффективен», чем процедурный код, и что для компиляции ООП может занять больше времени. [ 41 ]

ООП на динамических языках

[ редактировать ]

В последние годы объектно-ориентированное программирование стало особенно популярным в языках динамического программирования . Python , PowerShell , Ruby и Groovy -это динамические языки, основанные на принципах ООП, в то время как Perl и PHP добавляют объектно-ориентированные функции со времен Perl 5 и PHP 4 и Coldfusion с версии 6.

Модель объекта документа , HTML XHTML и XML в Интернете имеет привязки к популярному языку JavaScript / Ecmascript . JavaScript, пожалуй, самый известный язык программирования на основе прототипов , который использует клонирование от прототипов, а не наследует от класса (контраст с программированием на основе классов ). Другой язык сценариев, который использует этот подход, - это Луа .

ООП в сетевом протоколе

[ редактировать ]

Сообщения, которые проводятся между компьютерами для запроса услуг в среде клиента-сервера, могут быть спроектированы как линеаризацию объектов, определяемых объектами класса, известными как клиенту, так и серверу. Например, простой линеаризованный объект будет состоять из поля длины, кодовой точки, идентифицирующей класс, и значение данных. Более сложным примером будет команда, состоящая из длины и кодовой точки команды и значений, состоящих из линеаризованных объектов, представляющих параметры команды. Каждая такая команда должна быть направлена ​​сервером на объект, класс которого (или Superclass) распознает команду и может предоставить запрошенную службу. Клиенты и серверы лучше всего смоделированы как сложные объектно-ориентированные структуры. Распределенная архитектура управления данными (DDM) приняла этот подход и использовал объекты класса для определения объектов на четырех уровнях формальной иерархии:

  • Поля, определяющие значения данных, которые формируют сообщения, такие как их длина, кодовая точка и значения данных.
  • Объекты и коллекции объектов, аналогичные тем, что можно было бы найти в программе Smalltalk для сообщений и параметров.
  • Менеджеры, похожие на IBM I объекты , такие как каталог для файлов и файлов, состоящих из метаданных и записей. Менеджеры концептуально предоставляют ресурсы памяти и обработки для их содержащих объектов.
  • Клиент или сервер, состоящий из всех менеджеров, необходимых для реализации полной среды обработки, поддерживая такие аспекты, как службы каталогов, безопасность и контроль параллелизма.

Первоначальная версия DDM определяла распределенные файловые службы. Позже он был продлен как основание распределенной архитектуры реляционной базы данных (DRDA).

Дизайн -шаблоны

[ редактировать ]

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

ОБЪЕКТЫ ОБРАЗОВАНИЯ

[ редактировать ]

Следующие примечательные шаблоны проектирования программного обеспечения для объектов ООП. [ 56 ]

  • MetaObject : из которых могут быть созданы другие объекты (сравните с классом , который не обязательно является объектом)
  • Прототип объект : специализированный метаобъектив, из которого могут быть созданы другие объекты, копируя
  • Ondleton Object : только экземпляр его класса для жизни программы

В качестве примера объекта против паттерна объект Бога знает или делает слишком много.

Наследство и поведенческое подтинг

[ редактировать ]

Интуитивно понятно, что наследование создает семантику » - это « отношения, и, следовательно, сделать вывод, что объекты, созданные из подклассов, всегда можно безопасно использовать вместо тех, которые создаются из суперкласса. Эта интуиция, к сожалению, является ложной на большинстве языков ООП, в частности, во всех тех, которые позволяют изменять объекты. Полиморфизм подтипа , приведенный в силу типа проверки на языках ООП (с изменчивыми объектами), не может гарантировать поведенческое подтирование в любом контексте. Поведенческое подтипирование в целом нерешимо, поэтому он не может быть реализован программой (компилятор). Класс или иерархии объектов должны быть тщательно спроектированы, учитывая возможные неверные использования, которые не могут быть обнаружены синтаксически. Этот вопрос известен как принцип замены Лискова .

Банда из четырех моделей дизайна

[ редактировать ]

Образцы дизайна: элементы многоразового объектно-ориентированного программного обеспечения -это влиятельная книга, опубликованная в 1994 году Эрихом Гаммой , Ричардом Хелмом , Ральфом Джонсоном и Джоном Влиссис , часто называемым юмором «бандой из четырех человек». Наряду с изучением возможностей и подводных камней объектно-ориентированного программирования, в нем описываются 23 общих задач программирования и моделей их решения.

Книга описывает следующие шаблоны:

Объектно-ориентация и базы данных

[ редактировать ]

Как объектно-ориентированные системы программирования, так и системы управления базами данных (RDBMSS) чрезвычайно распространены в программном обеспечении сегодня Полем Поскольку реляционные базы данных не хранят объекты напрямую (хотя некоторые RDBMS имеют объектно-ориентированные функции, чтобы приблизиться к этому), существует общая необходимость преодолеть два мира. Проблема соединения объектно-ориентированных доступа к программированию и шаблонов данных с реляционными базами данных известна как несоответствие объектно-реляционного импеданса . Есть некоторые подходы, чтобы справиться с этой проблемой, но нет общего решения без недостатков. [ 57 ] Одним из наиболее распространенных подходов является объектно-релационное картирование , как обнаружено на языках IDE, таких как Visual Foxpro и библиотеки, такие как объекты данных Java и Ruby на Activerecord Rails.

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

Реальное моделирование и отношения

[ редактировать ]

ООП можно использовать для связи с реальными объектами и процессами с цифровыми аналогами. Тем не менее, не все согласны с тем, что ООП облегчает прямое картирование реального мира или что картирование реального мира является даже достойной целью; Бертран Мейер утверждает в объектно-ориентированном построении программного обеспечения , что программа является не моделью мира, а моделью какой-либо части мира; «Реальность - это двоюродный брат дважды удален». [ 58 ] В то же время были отмечены некоторые основные ограничения ООП. [ 59 ] Например, проблема кругового эллипса трудно справиться с использованием концепции наследования ООП .

Тем не менее, Никлаус Вирт (который популяризировал поговорку, теперь известную как закон Вирта : «Программное обеспечение становится медленнее быстрее, чем оборудование становится быстрее») сказал о ООП в своей статье «Хорошие идеи через выглядящее стекло», «эта парадигма внимательно отражает Структура систем в реальном мире и, следовательно, хорошо подходит для моделирования сложных систем со сложным поведением » [ 60 ] (Контрастный принцип поцелуя ).

Стив Йегге и другие отметили, что естественным языкам не хватает ООП -подхода строго приоритетного приоритета ( объектов/ существительных ) перед действиями (методы/ глаголы ). [ 61 ] Эта проблема может привести к тому, что ООП страдать более запутанные решения, чем процедурное программирование. [ 62 ]

ООП и поток управления

[ редактировать ]

ООП был разработан для увеличения возможности повторного использования и обслуживания исходного кода. [ 63 ] Прозрачное представление потока управления не имело приоритета и предназначалось для обработки компилятора. Благодаря увеличению актуальности параллельного аппаратного и многопоточного кодирования , разработка прозрачного потока управления становится более важным, чего трудно достичь с помощью ООП. [ 64 ] [ 65 ] [ 66 ] [ 67 ]

Ответственность- по сравнению с данными дизайна

[ редактировать ]

Дизайн, основанный на ответственности, определяет классы с точки зрения контракта, то есть класс должен быть определен на ответственность и информацию, которой он делится. Это контрастирует с Wirfs-Brock и Wilkerson с дизайном, управляемой данными , где классы определяются вокруг структур данных, которые должны проводиться. Авторы считают, что дизайн, основанный на ответственности, предпочтительнее.

Рекомендации по сплошным и схватыванию

[ редактировать ]

Solid - это мнемоник, изобретенная Майклом Перьями, которая изложена пять принципов разработки программного обеспечения:

GRASP (программное обеспечение для назначения общей ответственности) - это еще один набор руководящих принципов, защищенных Крейгом Ларманом .

Формальная семантика

[ редактировать ]

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

Было несколько попыток формализации понятий, используемых в объектно-ориентированном программировании. Следующие концепции и конструкции использовались в качестве интерпретации концепций ООП:

Попытки найти консенсусное определение или теорию, стоящие за объектами, не оказались очень успешными (однако, см. Abadi & Cardelli, теория объектов [ 69 ] Для формальных определений многих концепций и конструкций ООП) и часто расходятся широко. Например, некоторые определения сосредоточены на умственной деятельности, а некоторые на структурировании программы. Одним из более простых определений является то, что ООП - это акт использования структур данных или массивов «карты», которые могут содержать функции и указатели на другие карты, все с некоторыми синтаксическими и областями сахара сверху. Наследование может быть выполнено путем клонирования карт (иногда называемых «прототипированием»).

Языки моделирования

[ редактировать ]

Смотрите также

[ редактировать ]
  1. ^ Jump up to: а беременный в дюймовый «Доктор Алан Кей о значении« объектно-ориентированного программирования » » . 2003 . Получено 11 февраля 2010 года .
  2. ^ Kindler, E.; Криви, И. (2011). «Объектно-ориентированное моделирование систем со сложным управлением». Международный журнал общих систем . 40 (3): 313–343. doi : 10.1080/03081079.2010.539975 .
  3. ^ Льюис, Джон; Лофтус, Уильям (2008). Java Software Solutions Foundations of Programming Design 6th Ed . Pearson Education Inc. ISBN  978-0-321-53205-3 Полем , раздел 1.6 «Объектно-ориентированное программирование»
  4. ^ Jump up to: а беременный Bloch 2018 , с. Xi - xii, предисловие.
  5. ^ McCarthy, J.; Брейтон . Эдвардс Д .; Фокс П .; Ходс, Л .; Luckham, D ;; Малинг, К . ; Парк, D ;; Рассел С. (март 1969 г.). «Руководство для программистов LISP I» (PDF) . Вычислительный центр и исследовательская лаборатория электроники . Бостон , Массачусетс : Группа искусственного интеллекта, Центр вычислений Массачусетского технологического института и исследовательская лаборатория: 88f. Архивировано из оригинала (PDF) 17 июля 2010 года. В локальном MIT Patois списки ассоциаций [атомных символов] также называются «списками свойств», а атомные символы иногда называют «объектами».
  6. ^ Маккарти, Джон ; Авраамс, Пол В.; Эдвардс, Даниэль Дж .; Hart, Swapnil D.; Левин, Майкл И. (1962). LISP 1.5 Руководство программиста . MIT Press . п. 105 ISBN  978-0-262-13011-0 Полем Объект - синоним атомного символа
  7. ^ Иван Э. Сазерленд (май 1963 г.). SketchPad: система графической связи с человеком . AFIPS '63 (весна): Материалы 21–23 мая 1963 г. Весенняя совместная компьютерная конференция. Afips Press. С. 329–346. doi : 10.1145/1461551.1461591 .
  8. ^ Jump up to: а беременный Кристен Нигаард ; Оле-Джохан Даль (1 августа 1978 г.). «Разработка языков симулы» . ACM Sigplan замечает . 13 (8): 245–272. doi : 10.1145/960118.808391 .
  9. ^ Росс, Дуг. «Первый язык разработки программного обеспечения» . LCS/AI Lab Timeline . Массачусетская лаборатория информатики и искусственного интеллекта . Получено 13 мая 2010 года .
  10. ^ Jump up to: а беременный Холмевик, Ян Руне (зима 1994). «Сопровождение симулы: историческое исследование технологического генезиса» (PDF) . IEEE ANNALS ИСТОРИЯ ИСКУССТВА . 16 (4): 25–37. doi : 10.1109/85.329756 . S2CID   18148999 . Архивировано из оригинала (PDF) 30 августа 2017 года . Получено 3 марта 2018 года .
  11. ^ Мясник, Пол (30 июня 2014 г.). Семь моделей параллелизма за семь недель: когда разгадают нити . Прагматическая книжная полка. п. 204. ISBN  978-1-68050-466-8 .
  12. ^ Джонс, Анита К.; Лисков, Барбара Х. (апрель 1976 г.). Учреждение контроля доступа для языков программирования (PDF) (технический отчет). Грань CSG Memo 137.
  13. ^ Jump up to: а беременный Бертран Мейер (2009). Прикосновение класса: научиться хорошо программировать с объектами и контрактами . Springer Science & Business Media. п. 329. Bibcode : 2009tclp.book ..... m . ISBN  978-3-540-92144-8 .
  14. ^ Алан С. Кей (март 1993 г.). «Ранняя история SmallTalk» . ACM Sigplan замечает . 28 (3): 69–95. doi : 10.1145/155360.155364 .
  15. ^ Луна, Дэвид А. (июнь 1986 г.). «Объектно-ориентированное программирование с ароматами» (PDF) . Производство конференции по объектно-ориентированным языкам и приложениям программирования . Опсла '86. С. 1–8. doi : 10.1145/28697.28698 . ISBN  978-0-89791-204-4 Полем S2CID   17150741 . Получено 17 марта 2022 года .
  16. ^ «Представление зоопарка Smalltalk» . CHM . 17 декабря 2020 года.
  17. ^ Боброу, DG; Stefik, M. J (1982). Циклы: данные и объектно -ориентированное программирование для интерльсиспа (PDF) . Европейская конференция искусственного интеллекта.
  18. ^ Мейер 1997 .
  19. ^ 1995 (июнь) Visual Foxpro 3.0, Foxpro развивается от процедурного языка до объектно-ориентированного языка. Visual Foxpro 3.0 представляет контейнер с базой данных, бесшовные возможности клиента/сервера, поддержку технологий ActiveX, а также автоматизацию OLE и поддержку нулевой поддержки. Резюме релизы Fox
  20. ^ 1995 Руководство по рецензентам Visual Foxpro 3.0: dfpug.de
  21. ^ Хурана, Рохит (1 ноября 2009 г.). Объектно -ориентированное программирование с C ++, 1e . Vikas Publishing House Pvt Limited. ISBN  978-81-259-2532-3 .
  22. ^ Дебора Дж. Армстронг. Кварки объектно-ориентированного развития . Обследование почти 40 лет вычислительной литературы выявило несколько фундаментальных концепций, обнаруженных в подавляющем большинстве определений ООП, в порядке нисходящего порядка популярности: наследование, объект, класс, инкапсуляция, метод, передача сообщения, полиморфизм и абстракция.
  23. ^ Джон С. Митчелл , Концепции в языках программирования , издательство Кембриджского университета, 2003, ISBN   0-521-78098-5 , с.278. Списки: динамическая отправка, абстракция, полиморфизм подтипа и наследование.
  24. ^ Майкл Ли Скотт, Прагматика по программированию , издание 2, Морган Кауфманн, 2006, ISBN   0-12-633951-1 , с. 470. Перечисляет инкапсуляцию, наследование и динамическую отправку.
  25. ^ Пирс, Бенджамин (2002). Типы и языки программирования . MIT Press. ISBN  978-0-262-16209-8 Полем , Раздел 18.1 «Что такое объектно-ориентированное программирование?» Списки: динамическая диспетчерская, инкапсуляция или мультиметоды (множественная диспетчерская), полиморфизм подтипа, наследование или делегирование, открытая рекурсия («это»/«self»)
  26. ^ CJ Date, Введение в системы баз данных, 6th-ed., Page 650
  27. ^ Бух, Грэди (1986). Программное обеспечение с ADA . Аддисон Уэсли. п. 220. ISBN  978-0-8053-0608-8 Полем Возможно, самая большая сила объектно-ориентированного подхода к развитию заключается в том, что он предлагает механизм, который отражает модель реального мира.
  28. ^ CJ Date, Хью Дарвен. Фонд для будущих систем баз данных: третий манифест (2 -е издание)
  29. ^ Jump up to: а беременный Степанов, Александр . «STLPORT: интервью с А. Степанов» . Получено 21 апреля 2010 года .
  30. ^ Jump up to: а беременный Rich Hickey, JVM Languages ​​Summit 2009 Keynote, мы еще там? Ноябрь 2009.
  31. ^ Пайк, Роб (25 июня 2012 г.). «Меньше экспоненциально больше» . Получено 1 октября 2016 года .
  32. ^ «Блог Стиви: казни в Королевстве существительных» . Получено 20 мая 2020 года .
  33. ^ Bloch 2018 , p. 19, Глава §2 пункт 4, обеспечивающий невыполненность с частным конструктором.
  34. ^ Дони, c; Malenfant, J; Бардон, Д. (1999). «Классификация языков программирования на основе прототипа» (PDF) . Программирование на основе прототипа: концепции, языки и приложения . Сингапур Берлин Гейдельберг: Спрингер. ISBN  9789814021258 .
  35. ^ "Является ли объектно-ориентированный язык?" Полем Получено 13 апреля 2019 года . Хотя GO имеет типы и методы и позволяет объектно-ориентированный стиль программирования, иерархии типа не существует.
  36. ^ Stroustrup, Bjarne (2015). Объектно-ориентированное программирование без наследования (приглашенный разговор) . 29-я Европейская конференция по объектно-ориентированному программированию (ECOOP 2015). 1:34. doi : 10.4230/lipics.ecoop.2015.1 .
  37. ^ Пайк, Роб (14 ноября 2012 г.). «Несколько лет назад я видел эту страницу» . Архивировано из оригинала 14 августа 2018 года . Получено 1 октября 2016 года .
  38. ^ Пайк, Роб (2 марта 2004 г.). «[9FANS] Re: Нити: шить значки чести на ядро» . comp.os.plan9 (список рассылки) . Получено 17 ноября 2016 года .
  39. ^ «Дядя Боб солидные принципы» . YouTube . 2 августа 2018 года.
  40. ^ Якобсен, Ивар; Магнус Кристерсон; Патрик Джонссон; Gunnar Overgaard (1992). Объектно -ориентированная разработка программного обеспечения . Addison-Wesley Acm Press. С. 43–69 . ISBN  978-0-201-54435-0 .
  41. ^ Jump up to: а беременный в Cardelli, Luca (1996). «Плохие инженерные свойства объектно-ориентированных языков» . ACM Comput. Выживший 28 (4ES): 150 -ES. doi : 10.1145/242224.242415 . ISSN   0360-0300 . S2CID   12105785 . Получено 21 апреля 2010 года .
  42. ^ Jump up to: а беременный Армстронг, Джо. В кодере на работе: размышления о ремесле программирования. Питер Сейбель, изд. Codersatwork.com Архивировал 5 марта 2010 года на машине Wayback , по состоянию на 13 ноября 2009 года.
  43. ^ Jump up to: а беременный Bloch 2018 , стр. 73–77, глава §4 Item15. Минимизируйте доступность классов и участников.
  44. ^ «Что такое объектно -ориентированное программирование (ООП) простыми словами? - программные байты гик» . 5 января 2023 года . Получено 17 января 2023 года .
  45. ^ Карделли, Лука; Вегнер, Питер (10 декабря 1985 г.). «О понимании типов, абстракции данных и полиморфизма» . ACM вычислительные исследования . 17 (4): 471–523. doi : 10.1145/6041.6042 . ISSN   0360-0300 .
  46. ^ Jump up to: а беременный в Эрик С. Рэймонд (2003). «Искусство программирования UNIX: UNIX и объектно-ориентированные языки» . Получено 6 августа 2014 года .
  47. ^ Броди, Лео (1984). Думай (PDF) . С. 92–93 . Получено 4 мая 2018 года .
  48. ^ Охота, Эндрю. «Не повторяйся» . Категория экстремальное программирование . Получено 4 мая 2018 года .
  49. ^ «Изумрудный язык программирования» . 26 февраля 2011 года.
  50. ^ Брекер, Ахим Д.; Вольф, Буркхарт (2008). «Расширенные вселенные для объектно-ориентированных моделей данных». Ecoop 2008-объектно-ориентированное программирование . Заметки лекции в информатике. Тол. 5142. С. 438–462. doi : 10.1007/978-3-540-70592-5_19 . ISBN  978-3-540-70591-8 Полем Объектно-ориентированное программирование является широко распространенной парадигмой программирования
  51. ^ Кассель, Дэвид (21 августа 2019). «Почему так много разработчиков ненавидят объектно-ориентированное программирование?» Полем Новый стек .
  52. ^ Грэм, Пол . «Почему дуга не особенно ориентирована на объект» . Paulgraham.com . Получено 13 ноября 2009 года .
  53. ^ Фельдман, Ричард (30 сентября 2019 г.). "Почему функциональное программирование нормы?" Полем YouTube .
  54. ^ Крубнер, Лоуренс. «Объектно -ориентированное программирование - это дорогая катастрофа, которая должна закончиться» . SmashCompany.com. Архивировано из оригинала 14 октября 2014 года . Получено 14 октября 2014 года .
  55. ^ Поток, Томас; Младен Вук; Энди Риндос (1999). «Анализ производительности объектно-ориентированного программного обеспечения, разработанный в коммерческой среде» (PDF) . Программное обеспечение: практика и опыт . 29 (10): 833–847. doi : 10.1002/(SICI) 1097-024X (199908) 29:10 <833 :: AID-SPE258> 3.0.CO; 2-P . S2CID   57865731 . Получено 21 апреля 2010 года .
  56. ^ Мартин, Роберт С. «Принципы дизайна и шаблоны дизайна» (PDF) . Архивировано из оригинала (PDF) 6 сентября 2015 года . Получено 28 апреля 2017 года .
  57. ^ Ньюард, Тед (26 июня 2006 г.). «Вьетнам информатики» . Производится совместимость. Архивировано из оригинала 4 июля 2006 года . Получено 2 июня 2010 года .
  58. ^ Мейер 1997 , с. 230.
  59. ^ M.TrofiMov, OOOP - третье решение "O": Open OOP. Первый класс, OMG , 1993, Vol. 3, выпуск 3, с.14.
  60. ^ Никлаус Вирт (23 января 2006 г.). «Хорошие идеи, через видящее стекло» (PDF) . IEEE компьютер . Особенность обложки. 39 (1): 28–39. doi : 10.1109/mc.2006.20 . S2CID   6582369 . Архивировано из оригинала (PDF) 12 октября 2016 года.
  61. ^ Йегж, Стив (30 марта 2006 г.). «Исправление в королевстве существительных» . Steve-yegge.blogspot.com . Получено 3 июля 2010 года .
  62. ^ Boronczyk, Тимоти (11 июня 2009 г.). «Что не так с ООП» . zaemis.blogspot.com . Получено 3 июля 2010 года .
  63. ^ Амблер, Скотт (1 января 1998 г.). «Реалистичный взгляд на объектно-ориентированное повторное использование» . drdobbs.com . Получено 4 июля 2010 года .
  64. ^ Шелли, Асаф (22 августа 2008 г.). «Недостатки объектно -ориентированного моделирования» . Intel Software Network . Получено 4 июля 2010 года .
  65. ^ Джеймс, Джастин (1 октября 2007 г.). «Многопользовательский глагол, а не существительное» . TechRepublic.com. Архивировано с оригинала 10 октября 2007 года . Получено 4 июля 2010 года .
  66. ^ Шелли, Асаф (22 августа 2008 г.). «Как: многоядерное программирование (многопроцессорное) Руководство по дизайну класса C ++, функции участников» . support.microsoft.com . Получено 4 июля 2010 года .
  67. ^ Роберт Харпер (17 апреля 2011 г.). «Некоторые мысли о преподавании FP» . Блог экзистенциального типа . Получено 5 декабря 2011 года .
  68. ^ Опрос, Эрик. «Подтип и наследование для категориальных данных данных» (PDF) . Получено 5 июня 2011 года .
  69. ^ Jump up to: а беременный Абудит, Мартин ; Cardelli, Luca (1996). теория объектов Springer-Verlag New York, Inc. ISBN  978-0-387-94775-4 Полем Получено 21 апреля 2010 года .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]

Смотрите также

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c590cd5aca6af8cef4c07aa077776167__1726326000
URL1:https://arc.ask3.ru/arc/aa/c5/67/c590cd5aca6af8cef4c07aa077776167.html
Заголовок, (Title) документа по адресу, URL1:
Object-oriented programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)