IV конференция «ТРИЗ. Практика применения методических инструментов»
ТРИЗ-ЭВОЛЮЦИОННЫЙ ПОДХОД К ИССЛЕДОВАНИЮ ЭВОЛЮЦИИ ОБЪЕКТНО-ОРИЕНТИРОВАННЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
Бердоносов Виктор Дмитриевич – к.т.н., доцент, профессор кафедры «Информационные системы» ФГБОУВПО «КнАГТУ» (г. Комсомольск-на-Амуре); e-mail: ktriz@knastu.ru
Животова Алена Анатольевна – студентка магистратуры по направлению «Прикладная информатика» кафедры «Информационные системы» ФГБОУВПО «КнАГТУ» (г. Комсомольск-на-Амуре); e-mail: zhivotova.aa@gmail.com
Аннотация: В докладе рассмотрено применение ТРИЗ-эволюционного подхода и описаны основные этапы проведенного исследования эволюции объектно-ориентированных языков программирования.
При помощи ТРИЗ-эволюционного подхода проанализировано развитие объектно-ориентированных языков программирования (Simula-67, Smalltalk, C++, Eiffel, Python, Java, Delphi, Perl 6, C#, Scala). Определены главные противоречия, которые стали "движущими силами" каждого нового языка, приёмы разрешения этих противоречия на основе ТРИЗ-инструментов. Систематизированы знания о существующих механизмах реализации объектно-ориентированного подхода в разных языках программирования. Сформирована ТРИЗ-эволюционная карта и предложен прогноз развития объектно-ориентированных языков программирования.
Ключевые слова: ТРИЗ-эволюция; приемы разрешения технических противоречий, законы развития технических систем, объектно-ориентированные языки программирования
Введение
На сегодняшний день количество прикладных языков программирования, реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам программирования.
Практически все широко используемые языки являются объектно-ориентированными, развивая и совершенствуя прикладные средства реализации объектно-ориентированных возможностей. Однако, не существует какой-либо единой классификации объектно-ориентированных языков программирования, которая бы позволяла оценить возможности конкретного языка. То есть, из-за большого разнообразия языков программирования и критериев классификации, трудно объективно оценивать эффективность использования того или иного языка для решения поставленных задач.
В образовательном процессе в силу ограниченности времени, при изучении объектно-ориентированного программирования (ООП) рассматриваются, как правило, возможности какого-либо одного языка, что приводит к игнорированию полезных и эффективных механизмов ООП в других языках. Актуальной является систематизация знаний об ООП в различных языках и выявление объективного критерия оценки идеальности этих языков с точки зрения реализации объектно-ориентированных возможностей.
С другой стороны, объектно-ориентированные языки программирования, несмотря на свои преимущества и широту возможностей, как любая система, совершенствуются. Следовательно, актуальным также является проведение анализа эволюции объектно-ориентированных языков программирования; выявление в них противоречий требующих разрешения; определение направлений развития этих языков.
Итак, основными целями проводимого исследования являются:
- Систематизация знаний об объектно-ориентированном программировании и его реализациях в различных языках программирования.
- Определение тенденций в развитии объектно-ориентированных языков программирования.
Для достижения поставленных целей был выбран ТРИЗ-эволюционный подход, базирующийся на таких инструментах ТРИЗ как приемы разрешения технических противоречий; законы развития технических систем [8].
ТРИЗ-эволюционный подход
Концепция ТРИЗ-эволюционности знаний [1] [2] [3] позволяет наметить подходы к разрешению основного противоречия образования между объёмом передаваемых знаний и временем на их освоение. Существует фрактальный подход к исследованию объектов различной природы. Укрупнено развитие (эволюция) фрактального объекта происходит следующим образом. Исходный объект (паттерн) в соответствии с правилами эволюции (законами эволюции), используя ресурсы окружающей среды, многократно воспроизводится (копируется), увеличивая при этом свою «сложность». Аналогично фрактальному подходу был предложен ТРИЗ эволюционный подход к искусственным объектам, который также может быть применён и к эволюции знаний [4]. Сначала для выбранной области знаний определяются исходные положения – аксиомы, что эквивалентно паттернам. Затем выявляются и оцениваются ресурсы соответствующей области знаний. Наконец, выявляются правила «строительства», используя инструментарий ТРИЗ. Эволюцию почти любого искусственного объекта можно рассматривать как «рост дерева». Сначала появляется росток (моноэлемент), затем по мере роста появляются тонкие веточки (полиэлементы), которые впоследствии развиваются в толстые ветви, из которых в свою очередь растут новые тонкие ветви.
Такой ТРИЗ эволюционный подход был использован при структурировании знаний по численным методам [5], по CASE системам [6], по парадигмам программирования [7].
В целом, процесс исследования ТРИЗ эволюции состоит из:
- описания исходного объекта;
- выявления противоречий у выбранного объекта;
- определения инструментов ТРИЗ, позволяющих разрешить выявленные противоречия;
- описания последующих объектов, в которых разрешены отдельные противоречия;
- и так далее для всех наиболее значимых объектов исследуемой области;
- построения и анализа ТРИЗ эволюционной карты.
Применение ТРИЗ-эволюционного подхода
Рассмотрим описанные этапы относительно исследования эволюции объектно-ориентированных языков программирования.
Выберем исходный объект. При исследовании эволюции объектно-ориентированных языков программирования исходным объектом является язык Simula-67 – первый объектно-ориентированный язык программирования.
Далее определим основные противоречия исходного объекта. Серьезным недостатком языка Simula-67 является отсутствие средств отладки приложения. При отладке крупных приложений на поиск причины ошибки тратиться много времени, т.е. с увеличением сложности разрабатываемого ПО недопустимо увеличивается время на отладку программы.
Также, с увеличением объема кода недопустимо снижается надежность программы. При увеличении количества аппаратных платформ недопустимо снижается работоспособность программ.
На следующем этапе выявим инструменты ТРИЗ (приемы разрешения технических противоречий, законы развития систем), при помощи которых были разрешены выявленные противоречия.
Часть противоречий была разрешена в языке Smalltalk следующими инструментами ТРИЗ. Используя закон перехода в надсистему, создана среда разработки программы, обладающая пользовательским интерфейсом и предоставляющая средства для отладки программ. При использовании приема «Принцип посредника» была изменена последовательность компиляции программы: программа транслируется в промежуточное представление в виде байт-кодов и компилируется в машинный код непосредственно во время работы программы. Это позволяет запускать программу на разных аппаратных платформах.
В языке С++ при использовании приема «Принцип самообслуживания» к языку была добавлена возможность обработки исключительных ситуаций. Данный механизм предназначен для описания реакции программы на ошибки во время выполнения.
В языке Eiffel при использовании приема «Принцип предварительного действия» разработан механизм «Проектирование по контракту», который позволяет задавать различные типы условий (контракты), проверяемых во время работы программы.
Таким образом, выполняется первая итерация ТРИЗ-эволюции (рисунок 1), «правилами» строительства являются вышеперечисленные инструменты ТРИЗ.
Рисунок 1 – Первая итерация ТРИЗ-эволюции объектно-ориентированных языков программирования
Рассмотрим следующий язык программирования – Smalltalk. Определим основные противоречия, существующие в языке.
С сокращением времени изучения языка специалистом с малым опытом программирования недопустимо увеличивается время на изучение его специалистами с большим опытом программирования на других языках.
Выявим инструменты ТРИЗ, при помощи которых было разрешено основное противоречие в последующих языках. Данное противоречие было разрешено в языке С++ при использовании приема «Принцип однородности». Язык С++ построен полностью на основе языка С, поэтому специалистам с большим опытом программирования проще его изучать.
Таким образом, выполняется очередная итерация ТРИЗ-эволюции (рисунок 2).
Рисунок 2 – Вторая итерация ТРИЗ-эволюции объектно-ориентированных языков программирования
Аналогичным образом были исследованы следующие языки: C++; Eiffel; Perl; Python; Java; Delphi; C#; Scala. На основании проведенного анализа путем «от противоречия к противоречию» была построена ТРИЗ-эволюционная карта (рисунок 3).
Далее проанализируем полученные результаты.
В целом, использование ТРИЗ-эволюционной карты позволяет существенно повысить эффективность обучения за счёт систематизации знаний, в данном случае, знаний об эволюции объектно-ориентированных языков программирования. Систематизация знаний реализуется следующим образом [4]. Сначала студенты изучают все инструменты ТРИЗ. Если по каким-то причинам они не смогут изучить все инструменты, то тогда изучают только приёмы разрешения противоречий .После этого студенты начинают изучение с самого простого языка Simula-67. Им предлагается решить (запрограммировать) самую простую задачу. Затем увеличивается сложность задачи и снова предлагается студентам её запрограммировать. Потом они определяют противоречия и предпринимают попытку разрешить эти противоречие инструментами ТРИЗ. То есть они должны предложить более совершенный язык программирования или, по крайней мере, определить свойства, которыми должен обладать этот язык. Таким образом, студенты «открывают» для себя все последующее объектно-ориентированные языки программирования и их механизмы.
Рисунок 3– ТРИЗ-эволюционная карта объектно-ориентированных
языков программирования
Анализируя ТРИЗ-эволюционную карту также можно определить основные тенденции в развитии объектно-ориентированных языков программирования. Мы видим, что языки развиваются поэтапно. Каждый этап содержит базовый язык и языки наследники, причём среди языков наследников есть один, который формирует следующий этап, являясь базовым языком для этого следующего этапа. Рассмотрим эти этапы.
Первый этап. Базовый язык – Simula-67, языки наследники – Smalltalk и C++, который является базовым для следующего этапа.
Второй этап. Базовый язык – C++, языки наследники – Eiffel (является одновременно наследником и Simula-67), Python, Delphi, Java – является базовым для следующего этапа.
Третий этап. Базовый язык – Java, языки наследники – Perl 6, C#, Scala.
На следующем этапе (рисунок 4) по нашему мнению должен измениться механизм эволюции и вместо развёртывания, которое мы наблюдали до этого, должен начаться процесс свёртывания, то есть начнётся проявляться вторая составляющая закона развёртывания-свёртывания. Свёртывание уже частично происходит в языке Scala. Свёртывание должно происходить на уровне механизмов объектно-ориентированных языков программирования.
Рисунок 4– ТРИЗ-эволюционная карта объектно-ориентированных
языков программирования с учетом следующего этапа развития
Проведенный анализ путем «от противоречия к противоречию» также позволил определить основные различия между реализациями ООП в различных языках и систематизировать знания об используемых механизмах реализации объектно-ориентированных возможностей по группам механизмов (Абстракция, Инкапсуляция, Полиморфизм, Наследование, Синтаксис, Структура программы, Отладка). Было выявлено, что, как правило, при разрешении основных противоречий между языками появляется новый механизм. С развитием языков программирования механизмы, реализующие ООП, эволюционировали и на данный момент представляют собой наборы элементов, в разной степени поддерживаемые в языках программирования. Используя полученную информацию, было построено дерево механизмов объектно-ориентированных языков программирования (рисунок 5), в котором каждый более поздний элемент в наборе механизма не исключает предыдущие элементы, а расширяет функциональные возможности языка, повышая его идеальность.
Таким образом, был введен критерий оценки идеальности языка с точки зрения реализации объектно-ориентированных возможностей по количеству реализуемых элементов каждой группы механизмов. Для каждого языка была построена «Лепестковая» диаграмма, каждый сектор которой соответствует механизму объектно-ориентированного языка программирования. Количество занятых уровней в секторе соответствует количеству механизмов, используемых в языке. Центры занятых уровней соединены линиями и образуют фигуру, площадь которой пропорциональна оценке идеальности языка. Диаграмма показывает, как расширились (сузились) возможности языка, по сравнению с предыдущими языками.
Рисунок 5 – Развитие основных механизмов объектно-ориентированных языков программирования
С учётом выбранного критерия оценки идеальности была построена S-образная кривая (рисунок 6), которая наглядно показывает, как изменялась идеальность объектно-ориентированных языков программирования.
Рисунок 6 – S-образная кривая для объектно-ориентированных языков программирования
Выводы
Проведённый анализ объектно-ориентированных языков программирования при помощи ТРИЗ-эволюционного подхода позволил:
- систематизировать знания о существующих объектно-ориентированных языках программирования и механизмах реализации объектно-ориентированных возможностей;
- обосновать эволюцию объектно-ориентированных языков программирования;
- выявить противоречия, которые запускают механизм эволюции;
- определить ТРИЗ-инструменты разрешения противоречий, которые стали движущей силой эволюции;
- построить ТРИЗ-эволюционную карту объектно-ориентированных языков программирования, которая позволяет существенно интенсифицировать процесс обучения этим языкам студентов.
Кроме того, развитие ТРИЗ-эволюционной карты позволяет прогнозировать пути развития объектно-ориентированных языков программирования.
Цели, поставленные в исследовании, были достигнуты.
Список литературы
- Berdonosov V., “Fractality of knowledge and TRIZ”, Proceedings of the ETRIA TRIZ Future Conference, Kortrijk, 9-11 October 2006, published by CREAX Press, ISBN 90-77071-05-9.
- Berdonosov V., Redkolis E. TRIZ-Fractality of mathematics Proceedings of the ETRIA TRIZ Future Conference, Frankfurt on Mian, 6-8 November 2007, published by GmbH press, ISBN 978-3-89958-340-3.
- Berdonosov V., Redkolis E. “TRIZ-fractality of computer-aided software engineering systems”, Proceedings of the TRIZ Future Conference 2010, 3 – 5 November Bergamo-Italy / a cura di Caterina Rizzi. – Printed in Italy by Stamperia Stefanoni. Bergamo University Press, 2010 – P. 153-162.
- Berdonosov V. Fractality of knowledge and TRIZ [Электронный ресурс] // ScienceDirect, an inter-national Journal, ISSN 1877-7058, Vol.09, 2011. 752 p., pp 659-664
- Berdonosov V., Redkolis E. TRIZ-Fractality of mathematics [Электронный ресурс] // ELSEVIER: Scien-ceDirect international Journal. – 2011. – Vol. 09. – 752 p. – P. 461-472.
- Berdonosov V., Redkolis E. TRIZ-fractality of computer-aided software engineering systems, [Электронный ресурс] // ELSEVIER: ScienceDirect international Journal. – 2011. – Vol. 09. – 752 p. – P. 199-213.
- Berdonosov V., Sycheva T. TRIZ-evolution of Programming System Proceedings of the ETRIA TRIZ Future Conference, Dublin, 2-4 November 2011, published by Institute of Technology Tallaght, ISBN 978-0-9551218-2-
- Zlotin B., Zusman A., Altshuller G., Philatov V.: 1999, TOOLS OF CLASSICAL TRIZ. Ideation Inter-national Inc.