Объектно-ориентированное программирование. Сравнительный анализ языков объектно-ориентированного программирования
Объектно-ориентированное
программирование. Сравнительный анализ языков объектно-ориентированного
программирования
Оглавление
Введение
. Характеристики и свойства
языков программирования
. Некоторые аспекты
объектно-ориентированного программирования
. Исследование эволюции
объектно-ориентированных языков программирования
Заключение
Список использованной литературы
Введение
Языки программирования являются средством
представления знаний для компьютерных систем. Они предлагают концептуальные
средства представления и возможности моделирования, приспособленные к решению
конкретных задач. При этом концепции языков программирования складываются и
развиваются в результате стремления разработчиков снизить «семантический
разрыв» между языком описания работы вычислительного устройства и языком, на
котором осуществляется постановка задачи. Развитие языков на эмпирическом
уровне определяется развитием вычислительной техники. На теоретическом уровне
изменения в представлениях о языках программирования определяется выбором формы
управления вычислительными устройствами. Многообразие концепций языков,
разработанных за период в 60 лет, привело к многообразию парадигм
программирования, сложившихся к настоящему времени.
Концептуальные идеи языков программирования,
которые нашли свое отражение в современных языках программирования, сыграли
важную роль в теории программирования. А знание способов реализации в них
семантических структур является важным фактором при выборе языка
программирования для решения поставленной задачи.
На сегодняшний день количество прикладных языков
программирования, реализующих объектно-ориентированную парадигму, является
наибольшим по отношению к другим парадигмам программирования.
Практически все широко используемые языки
являются объектно-ориентированными, развивая и совершенствуя прикладные
средства реализации объектно-ориентированных возможностей. В образовательном
процессе в силу ограниченности времени при изучении объектно-ориентированного
программирования (ООП) рассматриваются, как правило, возможности какого-либо
одного языка, что приводит к игнорированию полезных и эффективных механизмов
ООП в других языках. Таким образом, является актуальной систематизация знаний
об объектно-ориентированном подходе к программированию и его реализации в
различных языках программирования.
Целью данной работы является изучение и анализ
языков объектно-ориентированного программирования.
Для достижения поставленной цели был выбран ТРИЗ
- эволюционный подход. Кроме того, были использованы следующие инструменты
ТРИЗ: приемы разрешения технических противоречий; законы развития технических
систем.
Наряду с методологией построения программного
обеспечения также, несомненно, важны особенности конкретного языка
программирования, поскольку, в конечном счете, конструкции должны быть выражены
на каком-то языке.
Выделим группу механизмов, которая определяет
особенности разработки программ на том или ином языке программирования:
синтаксис, структура программы, отладка.
С развитием языков программирования перечисленные
механизмы также эволюционировали и на данный момент представляют собой наборы
элементов, в разной степени, реализуемые в языках программирования.
Для достижения поставленной цели необходимо
решить задачи:
. Дать характеристику и определить
свойства языков программирования.
. Изучить аспекты
объектно-ориентированного программирования.
. Построить и проанализировать ТРИЗ -
эволюционную карту механизмов ООП на основе анализа развития
объектно-ориентированных языков программирования.
. Для наглядности также построить
S-образную кривую развития языков программирования, откладывая по вертикальной
оси оценку языка с точки зрения реализации объектно-ориентированных
возможностей.
Представленная к защите работа структурно
состоит из оглавления, введения, трех параграфов, заключения и списка
использованной литературы.
1. Характеристики и свойства языков
программирования
Основными характеристиками, позволяющими
сравнивать языки программирования и выбирать наилучшие для решения той или иной
задачи, являются: мощность, уровень и концептуальная целостность.
Мощность языка характеризуется количеством и
разнообразием задач, алгоритмы, решения которых можно записать, используя этот
язык. Очевидно, самым мощным является машинный язык. Любую задачу,
запрограммированную на каком-либо языке, можно запрограммировать и на машинном
языке. язык программирование интерфейс
Уровень языка характеризуется сложностью решения
задач с помощью этого языка. Чем проще записывается решение задач, чем более
непосредственно реализуются сложные операции и понятия, чем меньше объем
получаемых программ, тем выше уровень языка.
Концептуальная целостность языка, в свою
очередь, характеризуется совокупностью понятий, служащих для описания этого
языка, и включает три взаимосвязанных аспекта: экономию, ортогональность и
единообразие понятий. Экономия понятий предполагает достижение максимальной
мощности языка с помощью минимального числа понятий. Ортогональность понятий
означает, что между понятиями не должно быть взаимного влияния. Так, если
какое-либо понятие используется в различных контекстах, то правила
использования должны быть одни и те же. Единообразие понятий требует
согласованного, единого подхода к описанию и использованию всех понятий.
Обычно чем меньше мощность языка (то есть чем
уже область его применения), тем выше его уровень. По этой причине наряду с
универсальными языками разрабатываются и специализированные языки в некоторой
конкретной области. Конечно, чем мощнее язык, тем труднее обеспечить
концептуальную целостность; в то же время высокий уровень языка непосредственно
связан с концептуальной целостностью.
Перечисленные характеристики языков
программирования определяют наличие или отсутствие свойств: надежности,
удобочитаемости, полноты, гибкости, простоты. Эти свойства позволяют наиболее
детально сравнивать языки.
Надежность языка обеспечивает минимум ошибок при
написании программ. Для этого язык должен быть таким, чтобы было трудно делать
ошибки, не обнаруживаемые при компиляции. Например, благодаря наличию в языке
требования, чтобы все переменные были объявлены до использования, ошибки,
связанные с неправильным написанием имен, выявляются при компиляции (то есть
автоматически). Язык должен защищать программиста от него самого, сделав
трудным или даже невозможным появление некоторых ошибок. Так, плохо, если можно
сделать одно и то же более чем одним способом: лишняя возможность выбора может
привести к ошибке. Примером более тонкой защиты программиста является трактовка
отношения равенства: поскольку точное равенство двух чисел с плавающей точкой
есть не что иное, как удачное совпадение, то разумно определить его как
приблизительное равенство с некоторой точностью.
Удобочитаемость языка - это свойство,
обеспечивающее легкость восприятия программ человеком. Удобочитаемость зависит
от широкого спектра факторов, включающего, с одной стороны, выбор ключевых
слов, а с другой - возможность модулеризации программы. Главное, чтобы нотация
языка позволяла при чтении программы легко выделять основные понятия каждой
конкретной части программы, не обращаясь к сопровождающим ее описаниям.
Высокая степень удобочитаемости оказывается
полезной с различных точек зрения. Во-первых, уменьшается сложность
документирования, если центральным элементом документации является сама
программа. Во-вторых, удобочитаемость позволяет легче сопровождать программу:
ясно, что существенные изменения в программе могут быть сделаны лишь тогда,
когда ее работа понимается совершенно правильно.
Очевидно, что реализация требований
удобочитаемости зависит от самого программиста, который должен постараться по
возможности четче структурировать свою программу и так расположить ее текст,
чтобы подчеркнуть эту структуру. Тем не менее, важную роль играет и
используемый программистом язык. На нижних уровнях программных конструкций язык
должен обеспечить возможность четкой спецификации того, какие объекты данных
подвергаются обработке и как они используются. Эта информация определяется
выбором идентификаторов и спецификаций типов данных.
Программиста не нужно заставлять прибегать к
искусственным построениям, вводя в язык такие ограничения, как максимальная
длина идентификатора или определенные фиксированные типы данных.
Алгоритмические структуры должны выражаться в терминах легко понимаемых
структур управления. Ключевые слова не следует сводить к аббревиатурам, а
символы операций должны быть выбраны так, чтобы они отображали их смысл. На
более высоких уровнях программных конструкций язык должен обеспечивать
возможность модулеризации. Общее поведение программы гораздо легче понять,
когда она составлена из ряда автономных единиц, каждая из которых должна быть
понятна вне связи с остальными частями программы.
Полнота языка обеспечивает описание на языке
решения задач определенной предметной области, а также с помощью средств языка,
например средств отладки, процесса разработки программ.
Гибкость языка обеспечивает легкость выражения
на языке необходимых для решения задач действий, предоставляет программисту
достаточно возможностей для выражения всех операций в программе.
Простота языка обеспечивает легкость понимания
семантики языковых конструкций и запоминания их синтаксиса. А это в свою
очередь позволяет уменьшить затраты на обучение программиста и вероятность
совершения ошибок, возникающих в результате неправильной интерпретации
спецификаций языка. Например, язык должен быть таким, чтобы конструкции,
означающие близкие по смыслу понятия, и выглядели одинаково, и, что еще более
важно, конструкции, означающие различные понятия, должны выглядеть по-разному.
При сравнении и выборе языков программирования
следует учитывать еще два свойства языка, хотя они и не влияют непосредственно
на процесс разработки программ. Это мобильность и эффективность.
Мобильность языка обеспечивает независимость его
аппаратных средств, позволяет переносить программное обеспечение с машины на
машину с относительной легкостью.
Эффективность языка обеспечивает эффективную
реализацию языка (включая эффективную реализацию компилятора и эффективные
программы, генерируемые компилятором). В настоящее время в связи с все
снижающейся стоимостью аппаратных средств и все возрастающей стоимостью
программного обеспечения необходимость эффективности отходит на второй план по
сравнению с надежностью.
Эффективность создания, тестирования и
использования программы хорошо иллюстрируется языком АПЛ. При использовании
этого языка для решения некоторого класса задач проектирование, кодирование,
тестирование, модификация и выполнение программы отнимает у программиста
минимальное количество времени и энергии. АПЛ может быть назван эффективным в
полном смысле слова - он позволяет минимизировать суммарное время и энергию,
затрачиваемые на решение задач на ЭВМ.
Описание свойства языков можно еще более
детализировать, указав их зависимость от тех или иных частных требований к
языкам. Совокупность этих требований уже довольно велика, что затрудняет их
прямое использование для сравнения и выбора языков. Именно поэтому
целесообразно остановиться на перечисленных выше трех характеристиках и семи
свойствах. Однако для адекватного оценивания характеристик и свойств необходимо
знать их зависимость от многочисленных требований.
Основу любого объектно-ориентированного языка
программирования (ООП) составляет объектно-ориентированный подход, строящийся
на технической основе, элементы которой образуют объектную модель проектирования,
которая объединяет в себе принципы абстракции, инкапсуляции, полиморфизма,
модульности и иерархии [3].
В целом на сегодняшний день нет точного
определения ООП или объектно-ориентированного языка программирования. В
различной литературе авторы дают различное разъяснение этим терминам.
Основываясь на этих определениях [2; 3; 8], определим объектно-ориентированный
язык программирования как язык программирования, в качестве базовых элементов
которого выступают объекты, имеющие собственные свойства и методы и образующие
иерархически организованные классы объектов.
Концептуальную базу объектно-ориентированного
подхода к разработке программ составляют четыре основных механизма [3]:
абстракция, инкапсуляция, полиморфизм, наследование.
С момента зарождения объектно-ориентированного
подхода концептуальная база ООП развивалась и эволюционировала вместе с
языками, реализующими данных подход к программированию. Каждый более поздний
элемент в наборе механизмов расширяет функциональные возможности языка в рамках
реализации ООП.
2. Некоторые аспекты объектно-ориентированного
программирования
Если приемы процедурного программирования
концентрируются на алгоритмах, то объектно-ориентированное программирование
(ООП) концентрируется на сути задачи. Элементы программы разрабатываются в
соответствии с объектами, присутствующими в описании задачи. Отсюда и
терминология - «Объектно-ориентированное программирование». При этом первичными
считаются объекты (данные), которые могут активно взаимодействовать друг с
другом с помощью механизма передачи сообщений (называемого также и механизмом
вызова методов). Функция программиста - определить объекты, взаимодействие
которых после старта программы приведет к достижению необходимого конечного
результата.
Общий подход к ООП включает в себя следующие
концепции [6]:
) наличие типов, определенных пользователем;
) скрытие деталей реализации (инкапсуляция);
) использование кода через наследование;
разрешение интерпретации вызова функции во время выполнения программы
(полиморфизм).
Известно, что реальные/физические объекты
окружающего мира обладают тремя базовыми характеристиками:
1) набором
свойств, характеризующих объект;
2) способностью
объекта изменять свойства;
3) способностью
реагировать на события как в окружающем мире, так и внутри самого себя.
Хотя термины «тип данных» (или просто тип) и
«абстрактный тип данных» звучат похоже, они имеют различный смысл. В языках
программирования тип данных (переменной) обозначает множество значений, которые
может принимать эта переменная. Абстрактный тип данных (АТД) определяется как
математическая модель с совокупностью операторов, определенных в рамках этой
модели.
Таким образом, классы могут служить простым
примером АТД.
Разработку класса - абстрактного типа данных
рекомендуется начинать с разработки информационной и математической моделей
реального или физического объекта, как это показано в схеме, представленной на
рис. 1.
В соответствии с этой схемой на начальном этапе
исследования задачи нужно выделить физические объекты. После чего нужно
определить свойства, характеризующие каждый физический/реальный объект. Следует
отметить, что из множества свойств объекта следует взять только те, которые
необходимы для решения задачи. Во избежание избыточности следует выяснить:
какие из свойств являются базовыми; какие свойства можно получить на основании
базовых свойств, какие свойства будут меняться; как воздействовать на объект с
целью изменения его свойств; в каких процессах будет задействован объект и как
это отразится на его свойствах (действия над объектом).
Рис. 1. Схема процесса создания программной
модели (класса) в рамках ООП.
Следующим шагом в исследовании задачи будет
построение информационной модели объекта. Здесь требуется дать названия
свойствам, установить диапазоны возможных значений свойств и определить их
типы. Выяснить, что считать исходными данными и что считать результатами.
Определить возможные места расположения данных. Если эти данные расположены или
в результате решения будут располагаться на внешних носителях, например в виде
файлов, нужно описать структуру, в которой они представлены или будут
представляться на этом носителе.
Построение математической модели сводится к
записи математических соотношений, связывающих результаты или новые свойства с
исходными данными. Эти соотношения, как правило, представлены в аналитическом
виде формулами.
Информационная и математическая модели служат
основой для построения программной модели объекта или класса.
Построение класса начинается с разработки его интерфейса.
Поля класса формируются из информационной модели. А в методы класса, помимо
стандартных методов (конструкторов и деструктора), включаются методы, связанные
с изменением свойств объекта, получением новых свойств как воздействием на
объект, так и на основании соотношений, заявленных в математической модели.
Та последовательность действий, которая
представлена на рис. 1, исходит из того, что в задаче уже выделены физические
объекты. Именно физические объекты определяют интерфейс программы в целом, ее
программную модель и в значительной степени влияют на логику решения задачи.
Выделение объектов само по себе не является
простой задачей. Для выделения объектов в части анализа и исследования задачи
значительное место отводится разработке концептуальной модели функционирования
пользовательского интерфейса.
Важность этапа разработки концептуальной модели
пользовательского интерфейса сложно переоценить также из-за возросших
требований к качеству программного продукта как на отечественных, так и на
западных рынках, т. к. в оценку программного продукта входит качество
интерфейса, обеспечивающего взаимодействие пользователя с программой.
В. Головач [2] отмечает четыре основных критерия
качества интерфейса, а именно:
1) скорость
работы пользователей;
2) количество
человеческих ошибок;
3) скорость
обучения;
4) субъективное
удовлетворение (подразумевается, что соответствие интерфейса задачам пользователя
является неотъемлемым свойством интерфейса).
Скорость выполнения работы является важным
критерием эффективности интерфейса. Длительность выполнения работы
пользователем состоит из:
¾ длительности восприятия исходной
информации;
¾ длительности интеллектуальной работы
(пользователь думает, что он должен сделать);
¾ длительности физических действий
пользователя;
¾ длительности реакции системы.
Как правило, длительность реакции системы
является наименее значимым фактором. Процесс разработки дизайнов интерфейсов в
настоящее время является настолько важным составляющим элементом при создании
программного продукта, что он стал профессией отдельных людей. Появились
научные разработки в области проектирования пользовательского интерфейса,
которые опираются на познавательные процессы человеческого сознания, т.е.
знания из областей когнитивной и инженерной психологии, а также эргономики.
Согласно Дональду Норману, на которого ссылается
В. Головач, взаимодействие пользователя с системой (не только компьютерной) состоит
из семи шагов:
1) формирование
цели действий;
2) определение
общей направленности действий;
3) определение
конкретных действий;
4) выполнение
действий;
5) восприятие
нового состояния системы;
6) интерпретация
состояния системы;
7) оценка
результата.
Из этого списка становится видно, что
процесс размышления занимает почти все время, в течение которого пользователь
работает с компьютером, во всяком случае шесть из семи этапов полностью заняты
умственной деятельностью. Соответственно, повышение скорости этих размышлений
приводит к существенному улучшению скорости работы.
К сожалению, существенно повысить скорость
собственно мышления пользователей невозможно. Тем не менее, уменьшить влияние
факторов, замедляющих процесс мышления, вполне возможно. Очевидно, что значение
этапа проектирования интерфейса приложения трудно переоценить. На нем
закладываются основные концепции системы, ее структуры, а также выделяются
объекты для проектирования классов.
3. Исследование эволюции
объектно-ориентированных языков программирования
Первым объектно-ориентированным языком был
Simula-67. Его идеи и концепции легли в основу последующих
объектно-ориентированных языков программирования. То есть язык Simula-67
является тем «паттерном», с которого начинается ТРИЗ-эволюция ООП. Язык
Simula-67 был построен на основе языка Algol-60 [4]. Особенностью Simula-67
является наличие у объекта параметров. Simula-объект - это программная
компонента, характеризующаяся некоторыми атрибутами (данными и процедурами) и
способная выполнять определенные действия, описываемые ее правилами действий.
Язык можно охарактеризовать набором механизмов
реализации объектно-ориентированных возможностей (рис. 2). Simula-67 выступает
«первенцем» ООП, и набор механизмов в языке нельзя назвать идеальным. С увеличением
сложности решаемых объектно-ориентированных задач разработчики столкнулись с
рядом противоречий.
В языке для выполнения однотипных операций с
различными типами данных используются разные функции, т.е. с увеличением
количества типов данных недопустимо увеличивается количество функций,
обозначающих одно и то же действие (противоречие 1).
Рис. 2. Фрейм языка Simula-67 и положение языка
Simula-67 на S-образной кривой
Также существенными недостатками языка являются отсутствие
средств для отладки приложения и необходимость выполнения определенного
алгоритма действий для запуска программы. При отладке крупных приложений на
выполнение этого алгоритма и поиск причины ошибки, не выявленной компилятором,
тратится много времени, т.е. с увеличением сложности разрабатываемого ПО
недопустимо увеличивается время на отладку программы (противоречие 2). Также
такие ошибки приводят к аварийному завершению программы. И чем больше объем
кода, тем больше вероятность пропустить подобную ошибку, т.е. с увеличением
объема кода недопустимо снижается надежность программы (противоречие 3).
Кроме того, при реализации механизма одиночного
наследования в языке возникает противоречие: с увеличением количества возможных
классов-родителей недопустимо увеличивается объем дублируемых данных
(противоречие 4).
Перечисленные выше и другие противоречия были
разрешены в языках Smalltalk-80, С++, Eiffel.
Основная особенность языка Smalltalk (рис. 3) в
том, что все переменные являются объектами, взаимодействие между которыми
происходит через обмен сообщениями. Классы хранятся в дереве классов и связаны
отношением наследования. При этом любой класс является объектом класса более
высокого порядка. Написание программы на языке Smalltalk заключается в
последовательном изменении состояния ее объектов [13]. Использование механизма
компиляции в промежуточное представление позволяют запускать программу на
аппаратных платформах, где поддерживается виртуальная машина Smalltalk.
Рис. 3. Фрейм языка Smalltalk и положение языка
Smalltalk на S-образной кривой
Часть противоречий Simula-67 была разрешена в
языке Smalltalk-80 следующими инструментами ТРИЗ. Например, при использовании
приема «универсальности» в язык была добавлена возможность перегрузки
операторов, т.е. возможность одновременного существования в одной области
видимости нескольких различных вариантов применения оператора, имеющих одно и
то же имя, но различающихся типами параметров, к которым они применяются
(решение 1.1). С помощью закона перехода в надсистему создана среда разработки
программы, обладающая пользовательским интерфейсом и предоставляющая средства
для отладки программ (решение 2.1).
Таким образом, в языке появилось большое
количество новых механизмов реализации ООП. Произошла первая итерация
ТРИЗ-эволюции (рис. 4).
Рис. 4. Первая итерация ТРИЗ-эволюции механизмов
ООП
Несмотря на то, что в языке Smalltalk-80 была
разрешена часть противоречий Simula-67, Smalltalk-80 унаследовал ряд
противоречий этого языка.
Далее рассмотрим язык С++ (рис. 5), это один из
популярных объектно-ориентированных языков программирования, созданный в 1983
году Б. Страуструпом [7]. Результатами создания экземпляров в языке являются
просто объекты, или объявления данных. Классы могут называть один или несколько
родительских классов, обеспечивая наследование и множественное наследование
соответственно [6]. В С++ введена возможность описания параметризированных
классов и функций (шаблонов), а также возможность описания обработки
исключительных ситуаций в программе.
Рис. 5. Фрейм языка С++ и положение языка С++ на
S-образной кривой
В языке С++ при использовании приема
«самообслуживание» к языку была добавлена возможность обработки исключительных
ситуаций. Данный механизм предназначен для описания реакции программы на ошибки
во время выполнения (решение 2.2).
При использовании приема «универсальность»
совместно с приемом «наоборот» к языку была добавлена возможность описания
шаблонов, при инициализации которых аргументами выступают типы значений, а не
сами значения. В целом шаблоны - средство языка, предназначенное для
кодирования обобщённых алгоритмов без привязки к некоторым параметрам (решение
3.1)
При использовании приема «объединение» были
введены возможность объединения дублируемых параметров в одном из классов и
возможность объекту наследовать несколько классов, т.е. появился механизм
множественного наследования (решение 4.1).
Таким образом, произошла вторая итерация
ТРИЗ-эволюции (рис. 6).
Для языка С++ также существует ряд противоречий.
Например, использование технологии множественного наследования порождает
проблемы, связанные с неоднозначностью выбора из одноименных методов
родительских классов. Например, если вызвать метод для объекта Show() и в
классе его не окажется, но в классах-родителях будет присутствовать метод
Show(), определенный по-своему, то какой из методов должен быть вызван? Таким
образом, с увеличением количества классов-предков при множественном наследовании
недопустимо увеличивается неоднозначность выбора одноименных методов
(противоречие 5).
Рис. 6. Вторая итерация ТРИЗ-эволюции механизмов
ООП
Далее рассмотрим язык Eiffel (рис. 7). Eiffel не
мультипарадигменный язык, он не позволяет сочетать в одной программе несколько
стилей. В Eiffel есть несколько важных черт, поддерживающих жесткий стиль
программирования, таких как параметризованные классы, утверждения и исключения.
В языке Eiffel были разрешены не только часть
противоречий C++, но и противоречия предыдущих языков.
Так, при помощи приема «предварительное
действие» были разработаны дополнительные операторы, регулирующие порядок
наследования и вызова функций (решение 5.1).
Рис. 7. Фрейм языка Eiffel и положение языка
Eiffel на S-образной кривой
Также в языке Eiffel при использовании приема
«предварительное действие» разработан механизм «Проектирование по контракту»,
который позволяет задавать различные типы условий (контракты), проверяемых во
время работы программы. При нарушении одного из пунктов контракта наступает
заранее обговоренная и согласованная мера (решение 2.3).
Таким образом, произошла третья итерация
ТРИЗ-эволюции (рис. 8).
Рис. 8. Третья итерация ТРИЗ-эволюции механизмов
ООП
Аналогично были проанализированы следующие
популярные объектно-ориентированные языки: Python; Java; Delphi; Perl 6; C#;
Scala; PHP; Objective C; Ruby.
Общая ТРИЗ-эволюционная карта механизмов ООП
представлена на рис. 9.
Языки Delphi, C#, Scala, PHP, Objective C, Ruby
не отражены на ТРИЗ-эволюционной карте в связи с тем, что противоречия, которые
были разрешены в этих языках, не затрагивают объектно-ориентированный подход
либо совершенствуют реализацию уже существующих механизмов ООП.
Рис. 9. ТРИЗ-эволюционная карта механизмов ООП
Использование данной карты позволит существенно
повысить эффективность обучения за счёт систематизации знаний, в данном случае
- знаний о механизмах реализации объектно-ориентированных возможностей в
различных языках программирования.
С учётом критерия оценки степени реализации
объектно-ориентированных возможностей была построена S-образная кривая (рис.
10), которая наглядно показывает, как изменялась степень реализации
объектно-ориентированных возможностей в различных языках программирования.
Серым выделены языки, не внёсшие вклад в развитие этих возможностей.
Рис. 10. S-образная кривая для объектно-ориентированных
языков программирования
Проведённый анализ объектно-ориентированных
языков программирования позволил:
¾ систематизировать
знания о существующих механизмах реализации объектноориентированных
возможностей;
¾ обосновать
эволюцию механизмов ООП;
¾ определить
ТРИЗ-инструменты разрешения противоречий, которые стали движущей силой
эволюции;
¾ построить
ТРИЗ-эволюционную карту механизмов ООП, которая позволяет существенно
интенсифицировать процесс обучения студентов ООП.
Заключение
В настоящее время насчитывается более двух тысяч
языков программирования высокого уровня. Большинство этих языков возникло
исходя из конкретных требований некоторой предметной области. Каждый новый язык
позволял переходить ко все более и более сложным задачам. На каждом новом
приложении разработчики языков что-то открывали для себя и изменяли свои
представления о существенном и несущественном в языке. На развитие языков
программирования значительное влияние оказали достижения теории вычислении,
которые привели к формальному пониманию семантики операторов, модулей,
абстрактных типов данных и процедур.
К настоящему времени насчитывается более сотни
различных объектных и объектно-ориентированных языков.
Объектно-ориентированное программирование
является в настоящее время основой всей индустрии прикладного программирования
благодаря выигрышу в конкурентной борьбе с альтернативными технологиями.
Концепция ТРИЗ-эволюционности знаний позволяет
наметить подходы к разрешению основного противоречия образования между объёмом
передаваемых знаний и временем на их освоение. Существует фрактальный подход к
исследованию объектов различной природы. Укрупнено развитие (эволюция)
фрактального объекта происходит следующим образом. Исходный объект (паттерн) в
соответствии с правилами эволюции (законами эволюции), используя ресурсы
окружающей среды, многократно воспроизводится (копируется), увеличивая при этом
свою «сложность».
Аналогично фрактальному подходу был предложен
ТРИЗ-эволюционный подход к искусственным объектам, который также может быть
применён и к эволюции знаний. Сначала для выбранной области знаний определяются
исходные положения - аксиомы, что эквивалентно паттернам. Затем выявляются и
оцениваются ресурсы соответствующей области знаний. Наконец выявляются правила
«строительства» на основе инструментария ТРИЗ. Эволюцию почти любого
искусственного объекта можно рассматривать как «рост дерева». Сначала
появляется росток (моноэлемент), затем по мере роста появляются тонкие веточки
(полиэлементы), которые впоследствии развиваются в толстые ветви, из которых в
свою очередь растут новые тонкие ветви.
Такой ТРИЗ-эволюционный подход был использован
при структурировании знаний по численным методам, по CASE-системам, по
парадигмам программирования.
В целом в процесс исследования ТРИЗ-эволюции
входят:
¾ описание
исходного объекта;
¾ выявление
противоречий у выбранного объекта;
¾ определение
инструментов ТРИЗ, позволяющих разрешить выявленные противоречия;
¾ описание
последующих объектов, в которых разрешены отдельные противоречия;
¾ и
так далее для всех наиболее значимых объектов исследуемой области;
¾ построение
и анализ ТРИЗ-эволюционной карты.
Список использованной литературы
1. Альтшуллер,
Г.С. Поиск новых идей: от озарения к технологии (теория и практика решения
изобретательских задач) / Г.С. Альтшуллер, Б.Л. Злотин, А.В. Зусман. - Кишинев:
Картя Молдове-няскэ, 2010. - 111 с.
2. Бадд,
Т. Объектно-ориентированное программирование в действии / Т. Бадд. - СПб.:
Питер, 2011. - 464 с.
3. Богатырев
Р. Природа и эволюция сценарных языков // МИР ПК - ДИСК. - 2011. - № 10.
4. Буч,
Г. Объектно-ориентированный анализ и проектирование с примерами приложений на
C++ / Г. Буч; пер. с англ. И. Романовский, Ф. Андреев. - М.: Бином, 2012. - 560
с.
5. Головач
В. Дизайн пользовательского интерфейса. - 2012.
6. Дал,
У.И. Симула-67: Универсальный язык программирования / У.И. Дал, Б. Мюрхауг, К. Нюгорд;
пер. с англ. К.С. Кузьмина, Е.И. Яковлева. - М.: Мир, 2011. - 100 с.
7. Казакова
А.Е. Методологические основания развития языков программирования: диссертация
по ВАК 09.00.08. - М., 2008. - Режим доступа: dissertCat.com.
8. Лутц,
М. Изучаем Python / М. Лутц; пер. с англ. А. Киселев. - 4-е изд. - СПб.:
Символ-Плюс, 2011. - 1280 с.
9. Неклюдова
С.А., Балса А.Р. Парадигмы программирования как инструменты разработчика
программных систем // Информационные технологии и системы: межвузовский сборник
научных трудов. Выпуск 1 (12). - СПб., 2014.
10. Себеста,
Р.У. Основные концепции языков программирования / Р.У. Себеста. - 5-е изд. -
М.: Издательский дом «Вильямс», 2011. - 672 с.
11. Страуструп,
Б. Дизайн и эволюция С++ / Б. Страуструп. - СПб.: ДМК Пресс, 2010. - 445 с.
12. Теслер
Г.С. Новая кибернетика. - Киев: Логос, 2004. - Режим доступа: immsp.kiev.ua
13. Фридман,
А.Л. Основы объектно-ориентированной разработки программных систем / А.Л.
Фридман. - М.: Финансы и статистика, 2010. - 97с.
14. Эккель
Б. Философия С++. Введение в стандартный С++. - 2-е изд. - СПб. : Питер, 2014.
- 572 с.
15. Berdonosov,
V. Fractality of knowledge and TRIZ // ScienceDirect, an inter-national
Journal. - 2011. - Vol.09. - P. 659-664.
16. Berdonosov
V., Redkolis E. TRIZ-fractality of computer-aided software engineering systems
// ELSEVIER: ScienceDirect international Journal. - 2011. - Vol. 09. - P.
199-213.
17. Создание
и обеспечение функционирования базовой кафедры вуза на предприятии как один из
факторов интенсификации технологических процессов / А.Р. Куделько, Б.Н. Марьин,
В.В. Лиманкин, С.Б. Марьин, А.М. Шпилев, В.И. Шпорт, В.Н. Быченко // Ученые
записки Комсомольского-на-Амуре гос. техн. ун-та. Науки о природе и технике. -
2012. - № IV-1(12). - C. 82-89.