УДК 004.432.2; 004.423.4 П. Ю. БОГАТЫРЁВ P. U. BOGATIREV КОНЦЕПТУАЛЬНЫЕ ОГРАНИЧЕНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО

advertisement
УДК 004.432.2; 004.423.4
П. Ю. БОГАТЫРЁВ
P. U. BOGATIREV
КОНЦЕПТУАЛЬНЫЕ ОГРАНИЧЕНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО
ПОДХОДА В СОПОСТАВЛЕНИИ С ЕСТЕСТВЕННЫМ ЯЗЫКОМ
CONCEPTUAL LIMITATIONS OF OBJECT-ORIENTED APPROACH COMPARE
TO NATURAL LANGUAGE
В данной статье рассматривается объектно-ориентированная парадигма как средство
моделирования действительности. С этой точки зрения производится анализ ее описательных
возможностей на основе сравнения с представлениями о естественном языке в учениях Витгенштейна и
Выготского. Предлагается дальнейшее направление развития средств проектирования, анализа и
конструирования программных систем.
Ключевые слова: объектно-ориентированный подход, парадигма, ограничения, развитие,
программирование, проектирование, анализ, моделирование, естественный язык, Витгенштейн,
Выготский, концепция, классификация, наследование, мышление, слово
Object-oriented paradigm as a modeling tool is discussed in the article. In this aspect analysis of its
limitations based on ideas of Wittgenstein and Vygotsky is made. The field for further investigations of improving
programming, design and analysis tools is suggested.
Keywords: object-oriented approach, paradigm, limitations, improvement, programming, design,
analysis, modeling, natural language, Wittgenstein, Vygotsky, concept, classification, inheritance, thinking, word
Объектно-ориентированный подход в настоящее время стал стандартом де-факто
при построении сложных программных систем. Он обладает целым рядом положительных
свойств. Ряд исследователей отмечает, что благодаря нему повышается повторная
используемость кода, гибкость, расширяемость, повышается качество программного
продукта, его архитектуры [1, 2]. Кроме того, считается, что объектно-ориентированный
подход согласуется с естественной склонностью человека к восприятию действительности
как системы взаимодействующих объектов и помогает бороться со сложностью
программных комплексов [1]. Использование объектно-ориентированных языков
программирования позволяет говорить о представлении листингов программы как
инженерной документации, основного проектного документа, совмещающего в себе сразу
описание архитектуры и ее реализацию [3]. В частности, существует даже методика
непосредственного генерирования кода из UML диаграмм, которая поддерживается
такими средами как Visual Studio, Rational Rose, Eclipse, ArgoUML, Intellij Idea, Borland
Together и др. Все это делает объектно-ориентированный подход действительно
эффективным инструментом для разработки ПО.
Однако, как справедливо заметил Брукс – «серебряной пули нет» [4]. Объектноориентированная парадигма это только очередной этап в развитии информационных
технологий. Все основные концепции подхода были заложены еще в
80-е годы XX в. (язык Smalltalk), и с тех пор не претерпели никаких существенных
изменений. За прошедшие годы мировое сообщество накопило достаточно опыта
применения ООП в разработке программных систем и может сделать следующий шаг,
перейти на следующий виток эволюции наших представлений. Первым шагом на данном
пути является анализ тех недостатков, которыми обладают подходы, используемые в
настоящее время. Выявив узкие и слабые места используемых технологий, можно понять,
в каком направлении следует двигаться дальше, чтобы создать еще более эффективные
способы создания программных систем. В предлагаемой статье представляются
недостатки объектно-ориентированной методологии, выявленные в ходе работы над
некоторыми исследованиями в области программной архитектуры [5] и
психолингвистики [6].
Отличительной особенностью объектно-ориентированного подхода является
наличие ярко выраженной концептуальной составляющей, определяющей своеобразную
описательную установку для моделирования мира. Мы считаем, что это свойство является
не революционным нововведением, появившимся в вместе с ООП, но закономерным
следствием всего хода развития информационных технологий, начиная с машинноориентированных языков и до настоящих дней. Если проследить всю историю развития
парадигм программирования, то можно заметить постепенное увеличение именно
описательных
возможностей
языков,
позволяющих
не
просто
задавать
последовательность выполнения команд для ЭВМ, но моделировать таким образом
реальность.
Языки машинных команд в этом смысле являются отправной точкой, поскольку
они не содержат никакой семантики, кроме устройства ЭВМ, для которой они
предназначены. Язык ассемблера, по сути, является более удобным способом написания
машинных команд. Однако это удобство заключается в добавлении некоторой семантики
на уровне операций, использовании осмысленных имен вместо кодов.
На следующем этапе – этапе процедурного и модульного программирования –
семантика заключается в представлениях алгоритмической декомпозиции и структурного
анализа. То есть, мир представляется в виде набора операций, процессов, действий,
которые преобразуют некоторые входные информационные потоки в выходные. В явном
виде моделирование мира с данной точки зрения представлено в методологии SADT.
Однако после появления ООП от этого подхода отказались в связи с преимуществами
последнего.
Концепция ООП заключается в использовании объектной декомпозиции, т.е.
представления действительности как набора независимых объектов, у каждого из которых
имеются известные общедоступные каналы для взаимодействия и некоторая внутренняя
скрытая «начинка». Данные объекты обмениваются друг с другом сообщениями через
открытые каналы, в результате чего изменяют свое внутреннее состояние. При этом
предполагается, что большинство объектов имеют некоторое существенное сходство,
благодаря которому их можно объединить в иерархическую систему классификации, так
что свойства этих классов в полной мере описывают каждый конкретный объект.
Данная модель в концептуальном смысле имеет претензию на соответствие
структуре естественного языка и способу человеческого мышления. Классы в данном
случае соответствуют понятиям языка, а объекты конкретным проявлениям этих понятий
в реальном мире. Например, Буч приводит методику объектно-ориентированного анализа,
при которой понятия, взятые непосредственно из словаря пользователя, преобразуются в
классы и объекты (микропроцесс анализа и проектирования [1, c.307-337]). В связи с этим
имеет смысл рассмотреть ООП именно как модель естественного языка, и оценить таким
образом ее адекватность.
Одним из «столпов» ООП является наследование, которое концептуально
представляет собой ничто иное как классификацию. В упомянутой методике Буча данная
классификация происходит на 3-м этапе «Поиск шаблонов». В ходе этого этапа
анализируются свойства выявленных сущностей, характер их взаимодействия между
собой, и на основе этого выявляются свойства, общие для нескольких сущностей
одновременно. Общие свойства выносятся в отдельный базовый класс, что создает, таким
образом, иерархию понятий по отношению «is-a» («является»). Такое понимание, помимо
всего прочего, подразумевает также сама логика наследования, которая в контексте языка
программирования означает в первую очередь наследование полей и методов
производным классом. Выделение базового класса при отсутствии общих данных или
поведения едва ли будет рассматриваться на практике, за исключением особых случаев
(например, если нужно просто хранить объекты разных типов в одной коллекции).
Фактически, концепция наследования заключает в себе когнитивную гипотезу о
том, что общие понятия образуются из частных путем простого выделения и группировки
общих свойств этих частных понятий. Вся онтология в таком случае представляется как
система математических множеств. Однако данная гипотеза подвергается убедительной
критике в работах австрийского философа Л. Витгенштейна, одного из основателей
аналитического направления в философии.
Позиция Витгенштейна заключается в том, что образование обобщенных понятий
основывается не на объединении общих свойств, но на основе сложного психологического
явления «семейных сходств» [7]. Философ демонстрирует данное положение на примере
рассмотрения понятия «игра». Анализируя свойства всех видов деятельности, которые
обозначаются этим словом, он приходит к выводу, что не существует ни одного свойства,
общего для всех этих значений. В одних играх присутствует соревновательный момент, в
других нет, одни игры имеют целью развлечение, другие нет, одни игры имеют элемент
«несерьёзности», другие напротив вполне серьёзны. Например, это видно, если
рассмотреть такие игры как шахматы, футбол, игра ребенка в песочнице, ролевая игра при
изучении иностранного языка, брачные игры животных и т.д. Все это объединяется в
понятие «игра» не по какому-то формальному алгоритму, но на основе
трудноопределимого ощущения сходства. Использование же механизма наследования для
определения обобщенных понятий в терминах ООП на основе выделения общих свойств,
с этой точки зрения, представляется несколько грубым и упрощенным.
Другой характерной особенностью ООП является необходимость совершенно
четкого, формального определения всех используемых сущностей. Каждый класс имеет
строгое определение, в котором жестко прописаны все операции, которые применимы к
данной сущности, все данные, которые характеризуют ее состояние, и все ее
взаимодействия с окружением. В отношении естественного языка подобный подход
широко распространен в области компьютерной лингвистики, например, применительно к
задачам автоматического перевода. Здесь также ученые пытаются строить строго
формальные определения понятий для того, чтобы создать машинное представление
смысла текста (например, модель Смысл ↔ Текст [8]). На многочисленные вопросы, с
которыми столкнулись разработчики этих систем можно ответить с помощью идей
российского психолога Л. Выготского, основателя психолингвистической школы.
Выготский рассматривает сущностную взаимосвязь между такими явлениями как
мышление и речь, и на основе множества эмпирических данных приходит к довольно
интересному их представлению [9]. Во-первых, психолог справедливо замечает, что
«каждое слово представляет собой скрытое обобщение», поскольку оно «всегда относится
не к одному какому-нибудь отдельному предмету, но к целой группе, к целому классу
предметов» [9, c.14]. Слово есть результат мыслительной деятельности по обобщению и
классификации действительности. В этом смысле мы видим корреляцию в понимании
значения слова с видением Витгенштейна, который считал, что слово объединяет набор
значений, имеющих между собой «семейное сходство». Смысл этого сходства, очевидно,
заключается в особенности мыслительного акта обобщения. Во-вторых, мысль, с одной
стороны, не совпадает непосредственно с речевым выражением, «мысль не состоит из
отдельных слов – так, как речь» [9, c. 331], «мысль всегда представляет собой нечто целое,
значительно большее по своему протяжению и объему, чем отдельное слово» [9, c. 331].
Но при этом, с другой стороны, мысль совершается в слове. «Мысль не только внешне
опосредуется знаками, но и внутренне опосредуется значениями» [9, c. 332]. Возможность
внутреннего опосредования мысли значениями возможна, прежде всего, потому, что
значение слова само по себе уже есть обобщение, т.е. в сущности, результат
мыслительного акта, отдельная мысль. Поэтому, можно сказать, что мысли оперируют
другими мыслями, закрепленными (или не закрепленными) в словах. Слова же
представляются чем-то вроде маркеров, ярлычков наклеиваемых на ту или иную мысль.
Основная функция слова – фиксация мысли: «мысль, не воплотившаяся в слове, остается
стигийской тенью, туманом, звоном и сиянием» [9, c.335]. Поэтому процесс мышления
есть непрерывный процесс движения от мысли к слову и обратно. Непрерывное
воплощение мыслей в словах необходимо для их фиксации в сознании, без которого она
рискует развеяться как дым, прервав процесс размышлений. Воплощение мыслей в словах
– чрезвычайно сложный процесс расчленения мысли и ее воссоздания в словах, подобно
облаку, проливающимся каплями дождя [9, c.331].
Из сказано выше следует, что слово, понятие естественного языка никак нельзя
считать простой агрегацией некоторых свойств. Слово – это сложное психологическое
образование, тесно связанное с мыслительными процессами, и поэтому едва ли его
содержание можно полностью формально описать. Для этого нам пришлось бы сначала
формализовать само содержание мысли, а это уже куда более сложная проблема из
области психологии. Поэтому концептуальное моделирование, предлагаемое объектной
методологией, весьма ограничено в своих возможностях. Значения слов трудно
определить даже на свободном естественном языке, не говоря уже о создании строгих
формальных определений в виде конструкций языков программирования или UMLописаний.
Таким образом, обобщая вышесказанное, можно сделать вывод, что логика
развития средств проектирования и конструирования программного обеспечения
исторически движется по пути увеличения семантической, описательной составляющей.
Языки программирования и проектирования все больше становятся не только языками
построения программных систем, но и языками моделирования действительности.
Наиболее эффективным в этом смысле оказался объектно-ориентированный подход,
которой в своей концептуальной части коррелирует с описательными возможностями
естественного языка.
В данной работе были проанализированы характеристики объектноориентированного подхода с точки зрения его сопоставления с естественным языком.
Было выяснено, что несмотря на наличие сходства, средства моделирования ООП
представляют значительно более упрощенные способы представления классификации
объектов, а также их идентификации и определения. Упрощение заключается в
использовании слишком формальных и четких описательных средств, не полностью
отражающих действительную сложность понятий естественного языка.
Описанные проблемы не являются новыми. Например, Буч подробно описывает
как сложность и неоднозначность процесса классификации [1, c. 150-174], так и проблемы
с идентификацией и определением содержания элементов системы [1, c. 307-338]. В
общем случае, можно сказать, что ООП – это только модель действительности, ее
упрощение, которое имеет определенные цели и задачи. Однако, это не отрицает того
факта, что данная модель имеет свои недостатки. Чем ближе модель к реальности, тем
проще ее создавать и использовать. Чем точнее модель описывает предметную область и
чем сильнее она коррелирует с принципами человеческого мышления, тем проще и
эффективнее будет работа команды разработчиков программного продукта. Исследование
способов преодоления данных недостатков является, на наш взгляд, обширным и
перспективным направлением развития информационных технологий.
СПИСОК ЛИТЕРАТУРЫ
1. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами
приложений , 3-е изд.: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2008. – 720 с.
2. Мартин Р., Мартин М. Принципы, паттерны и методики гибкой разработки на
языке C#. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 768 с.
3. Jack Reeves, «What Is Software Design?» C++ Journal, 2(2), 1992.
4. Brooks, Fred P. (1986). «No Silver Bullet – Essence and Accident in Software
Engineering». Proceedings of the IFIP Tenth World Computing Conference: 1069 – 1076.
5. Богатырёв, Модель программной архитектуры с эксплицитными связями для
agile-подходов к разработке ПО / ФГБОУ ВПО Госуниверситете-УНПК, Сборник Неделя
науки 2014, С. 232-236.
6. Богатырёв, П. Принципы повышения эффективности передачи сведений в
письменной речи [Электронный ресурс] / ФГБОУ ВПО Госуниверсите-УНПК, VI
международная научно-техническая конференция ИТНОП 2014, Режим доступа:
http://youconf.ru/itnop2014/materials/manager/view/274.
7. Витгенштейн, Л. Философские исследования [Электронный ресурс] / Режим
доступа: http://filosof.historic.ru/books/item/f00/s00/z0000273/index.shtml.
8. Sokirko, A. V. A short description of Dialing Project [Электронный ресурс] /
Режим доступа: http://www.aot.ru/docs/sokirko/sokirko-candid-eng.html#8.
9. Выготский, Л.С. Мышление и речь. Изд. 5, испр. / Издательство «Лабиринт»,
М., 1999. – 352 с.
Богатырёв Павел Юрьевич
ФГБОУ ВПО Госуниверситет-УНПК, г. Орел
Аспирант кафедры "Информационные системы"
Тел.: +7(915) 507-95-42
E-mail: PFight77@gmail.com
Download