Содержание к диссертации
Введение
Глава 1. Обзор литературы
1.1. Предварительные замечания 11
1.1.1. О терминологии
1.1.2. О распространённых заблуждениях 11
1.2. Формальные языки и вычислительные процессы, их роль в биохимических исследованиях 15
1.2.1. Формальные языки 15
1.2.2. Вычислительные процессы 16
1.2.3. Вычислимость 18
1.2.4. Непрерывная и дискретная биохимия 22
1.3. Сравнение различных языков программирования с точки зрения их приспособленности для решения задач биохимического исследования 24
1.3.1. Использованные программы 25
1.4. Процедурные, императивные языки 25
1.4.1. Обработка данных: вычисления по формуле 27
1.4.2. Модель лактозного оперона 29
1.4.3. База данных Trichoderma 32
1.5. Функциональные языки 35
1.5.1. Вычисление генетического расстояния по формуле . 36
1.5.2. Модель лактозного оперона 38
1.5.3. База данных Trichoderma 39
1.6. Логическое программирование 41
1.6.1. Вычисление генетического расстояния по формуле . 43
1.6.2. Модель регуляции лактозного оперона 44
1.6.3. База данных Trichoderma 45
1.7. Объектно-ориентированные языки 46
1.7.1. Расчет генетического расстояния по формуле 50
1.8. Специализированные языки для описания биохимических процессов 52
1.8.1. SBML 52
1.8.2. Биохимическая абстрактная машина (ВЮСНАМ) . 53
1.8.3. Стохастическое 7г-исчисление 57
Глава 2. Язык описания молекулярно-биологических систем и его интерпретатор для моделирования биохимических процессов 59
2.1. Архитектура клеточного устройства 59
2.2. Язык описания клеточных программ CPDL 61
2.2.1. Предварительные замечания 61
2.2.2. Принципы организации: 62
2.2.3. Типы данных 62
2.2.4. Пул данных 63
2.2.5. Процессы 64
2.2.6. Факты 64
2.2.7. Правила 65
2.2.8. Метапроцессы 65
2.3. Моделирование простой ферментативной реакции с помощью CPDL 65
2.4. Двухсубстратная ферментативная реакция на CPDL 66
2.5. Модель реакции с аллостерическим ингибированием 66
2.6. Моделирование регуляции лактозного оперона с помощью CPDL 67
2.7. Расширение CPDL. Язык CPDL/HL 73
Глава 3. Применение разработанных языковых средств для кодификации организмов по биохимическим и морфологическим признакам 76
3.1. Предварительные замечания 76
3.1.1. Биологическая конгруэнтность 77
3.2. Спецификация языка ConceptSystem 77
3.2.1. Алфавит 77
3.2.2. Ключевые слова 78
3.2.3. Литералы 78
3.2.4. Объекты 78
3.2.5. Методы 78
3.2.6. Сайты связывания (переменные экземпляра) 79
3.2.7. Связывание объектов и отсылка сообщений 79
3.2.8. Предопределенные классы 80
3.2.9. Модификаторы 83
3.2.10. Динамические классы 83
3.2.11. Пример: вычисление генетического расстояния по формуле на языке ConceptSystem 84
3.2.12. Реализация интерпретатора ConceptSystem 84
3.3. Применение ConceptSystem:кoдификaция описаний грибов рода Trichoderma и алгоритмическая систематика 85
3.3.1. Объектно-ориентированное программирование (ООП) и систематика 88
3.3.2. Trichoderma - краткие сведения о модельном объекте . 88
3.3.3. Кодификация описаний видов 91
3.3.4. Систематика Trichoderma как классификация программ 96
3.3.5. Сравнительная оценка качества ОО-систематик 99
3.3.6. Заключение по алгоритмической систематике 102
Глава 4. Заключение 104
Литература 107
- Предварительные замечания
- Формальные языки и вычислительные процессы, их роль в биохимических исследованиях
- Архитектура клеточного устройства
- Биологическая конгруэнтность
Введение к работе
Если мы рассмотрим историю применений математики в биологии, то придем к выводу, что они центрируются вокруг создания инструментов математической интерпретации экспериментальных данных[1]. Будучи сами по себе полезными эти инструменты несут в себе неизбежные внутренние ограничения. В отличие от физических законов биологическим закономерностям обычно нельзя придать лаконичную математическую формулировку[2]. Таким образом, в биологии приобретаемое знание обобщается преимущественно в форме теорий и гипотез, выражаемых с помощью естественного языка (т.е. языка общения людей). В течение долгого времени эта форма была адекватна для решения большинства теоретических и прикладных задач, стоящих перед биологическими науками.
В настоящее время необходимость формализации биологических знаний очевидна по следующим причинам:
Прежде всего, обращает на себя внимание рост объемов экспериментальных данных. В настоящий момент гигабайтные объемы уже не являются необычными для результатов, получаемых в ходе одного эксперимента. В будущем, с широким внедрением беспроводных датчиков, собирающих данные двадцать четыре часа в сутки, можно ожидать многократного увеличения информационных потоков [3]. Даже данные "скромных" размеров в десятки и сотни килобайт невозможно обрабатывать без средств автоматизации, таких как распространенные электронные таблицы Excel и некоторые пакеты статистического анализа. Однако эти средства автоматизации и предоставляемые ими возможности являются рудиментарными и обречены на исчезновение в ближайшем будущем.
Централизованные базы данных биологической информации, будут наращивать свои объемы и их роль будет постоянно возрастать. В то же время, очевидно, что типичная на сегодня стратегия работы с этими базами "найти информации» загрузить к себе на компыотер-> проанализировать" становится с ростом объемов данных непрактичной, поскольку существу-
ют ограничения на размер информации, которая может быть передана через Интернет. Соответственно в базы данных будут посылаться не запросы на определенные сведения, а программы, которые будут производить вычисления и анализ данных на месте и передавать только результаты [4]. Эти операции невозможны в том случае, если данные представлены исключительно в форме публикаций на естественном языке.
В случае, когда размер исходных данных превышает определённую величину, неизбежно возникает ситуация, когда даже объем промежуточных обобщений и гипотез, необходимых для продолжения исследования, становится больше того, который может быть эффективно обработан человеком в разумные сроки. Это приводит к неправильному выбору направления дальнейшей работы, напрасному расходу средств и усилий и в итоге к выводам, находящимся в противоречии с уже собранными данными. Традиционные формы представления результатов в форме графиков и таблиц с текстовыми пояснениями не дают практической возможности произвести исчерпывающую проверку на внутреннюю согласованность исходных данных, промежуточных обобщений и окончательных выводов.
В то же время появление средств автоматизированного анализа данных и даже интеллектуальных систем автоматизированного выдвижения и проверки гипотез [5] становится причиной "отчуждения" научного работника от собственно научного процесса, когда собственно сам процесс обработки данных и формирования заключений оказывается скрытым от исследователя внутри "черного ящика" программного пакета. В результате уровень научной работы резко снижается поскольку, во-первых, снижается степень понимания исследователем методов обработки данных, а во-вторых, сами эти методы часто применяются неправильно, поскольку компьютерные программы, не знакомые с контекстом проводимых исследований, не способны сами выбрать наиболее подходящие средства анализа информации. Для преодоления сложившегося противоречия необходимы новые средства представления знаний и процессов, которые могли бы дать исследователю возможность заглянуть внутрь "черного ящика" обработки
данных.
Превращение знаний в кодированное представление в форме данных и программ получило название кодификации. При этом кодификация это не просто представление научных знаний как данных (например в форме SQL-таблиц).
Кодификация - это представление знаний (в частности знаний о динамических процессах) в форме, допускающей сохранение, выполнение, автоматический поиск и анализ.
Кодификация биологических знаний - метаболических и сигнальных путей, а также биологических процессов, выражающихся во взаимодействии большого числа дискретных компонентов (например, при делении клетки), представляет собой глобальную задачу биологии на два ближайших десятилетия[6].
Рядом авторов предположено, что компьютерная программа может быть способом формулировки биологических теорий, гипотез, и законов [7].
В настоящее время идея использования компьютерных программ как средства представления биологических знаний приобретает все больше сторонников. Основная масса работ здесь проводится в области представления молекулярно - генетических процессов.
Мы можем рассматривать живую клетку как физико-химическую систему, которая в некоторой степени обладает возможностью к обработке информации. Но мы можем занять и другую позицию, согласно которой клетка представляет собой, прежде всего информационную систему, на которую работают физические и химические процессы [8, 9]. Действительно уже достаточно давно известно, что любая информационная система может быть рассмотрена с двух точек зрения: "инженерной" - имеющей дело с ее физической реализацией и "точки зрения программиста", рассматривающей ее логическую организацию [10].
До недавнего времени логической организации живой клетки не уделялось достаточно внимания[11], однако в настоящее время ее изучение считается задачей не менее (а иногда и более важной) нежели изучение физической структуры. Поиск формальных языков, которые могут точно и лаконично
описывать сложные биологические процессы и, в перспективе, программировать эти процессы, представляет собой одну из основных задач системной биологии [9].
Необходимость выражать полученные знания и гипотезы с применением разных языков программирования помогает исследователю достигнуть более глубокого понимания проблемы и часто взглянуть с другой стороны, увидеть новые важные аспекты, которым до сих пор не придавалось значения. Кроме того, свободное владение языками программирования освобождает мышление из рамок, заданных существующими пакетами анализа данных. Исследователь приобретает возможность ставить вопросы, требующие для ответа произведение нестандартных операций над большими объемами данных.
Системная интеграция предполагает создание средств формального представления информации и оперирования с ней не только на молекулярно-генетическом уровне. Однако вопросы представления морфологических, физиологических и экологических знаний в виде компьютерных программ практически не изучены.
Формальный язык необходим также для целей молекулярно-генетической систематики живых организмов. Классификация организмов на основе последовательности ДНК является важнейшим методом в современной биологической систематике. В настоящее время большинство методов подобного рода ориентируются на сравнение одного короткого фрагмента ДНК у различных организмов. Этот подход может давать некорректные результаты, поскольку короткий фрагмент ДНК не отражает всю совокупность признаков, присущих организму. Поэтому необходимо производить сравнение больших областей ДНК (в идеале - целых геномов) с точки зрения их значения для того или иного организма. Количественное применение такого метода требует наличия способов формального описания "смысла"фрагментов генома, их связи с фенотипом, что, в свою очередь, создает потребность в средствах формального описания фенотипических признаков, и их связи с соответствующими биохимическими процессами.
Вышеизложенное демонстрирует потребность в разработке новых формаль-
ных языков для молекулярной биологии, которые были бы пригодны для создания баз данных, моделирования биохимических реакций, биологической систематики и создания программ обработки данных.
Очень желательно, чтобы все эти свойства сочетались в одном языке, или, по крайней мере, существовало бы семейство языков, объединенных принципами построения и сходным синтаксисом.
Создание и развитие таких языков тормозится рядом факторов.
Теоретические предпосылки стали очевидны относительно недавно.
Широкое распространение готовых пакетов прикладных программ привело к тому, что знакомство ученых-биологов с программированием, теорий информации и вычислительной техникой в целом снизилось. Существование коммерческих пакетов прикладных программ создало ложное впечатление о том, что широкому контингенту исследователей эти знания просто ни к чему, достаточно знать компьютер на уровне пользователя прикладных программ. Это не только противоречит идеям, высказанным на заре компьютерной революции ее основателями [12], но и не соответствует опыту, полученному в 80-х годах, когда распространение компьютеров и средств программирования среди молекулярных биологов привело к получению большого числа принципиально новых результатов.
Целью настоящей работы явилось решение проблемы создания средств формального представления биохимических знаний, пригодных для разработки баз данных, моделирования биохимических реакций и создания программ обработки биохимических данных.
В соответствии с поставленной целью определены задачи диссертационной работы:
1. Изучить основные существующие языки программирования общего назначения и формальные языки, применяемые для моделирования биохимических реакций, с целью выявить набор свойств, которыми должен обладать специализированный формальный язык для представления и обработки биохимических знаний.
Изыскать принципы построения формального языка для представления и обработки биохимических знаний.
Разработать спецификацию для формального языка, или семейства языков, предназначенных для представления и обработки биохимических знаний, моделирования биохимических реакций и представления описаний живых организмов с целью создания более точных биологических систематик.
Реализовать интерпретатор для специфицированных языков, который мог бы осуществлять моделирование биохимических процессов по их описанию, представленному на разработанном языке, а также мог бы выполнять программы обработки экспериментальных данных.
Проверить функционирование языка и интерпретатора путем моделирования нескольких биохимических процессов, применения языка для создания систематических описаний некоторой группы живых организмов и написания программы для обработки экспериментальных данных.
На защиту выносятся следующие положения:
Живая клетка может быть рассмотрена как вычислительное устройство, управляемое программами на клеточном языке.
Архитектура такого вычислительного устройства может быть проанализирована, и найдены принципы языка, хорошо подходящего для программирования такого устройства.
Формальный язык, построенный на принципах, полученных в результате изучения архитектуры клеточного устройства, может быть эффективно использован для кодификации биохимических знаний.
Использование различных языков программирования для представления биологических процессов способствует более глубокому пониманию данного процесса.
Оправданным является дальнейшее изучение влияния формальных языков представления на исследования биохимических процессов
Предварительные замечания
Человеческий мозг поступает с новыми идеями также, как тело поступает с незнакомыми белками - он отвергает их. Питер Медавар, Лауреат Нобелевской Премии за открытие приобретённой иммунологической толерантности. Среди специалистов-биологов нередко можно встретить следующее мнение: Биологи не должны знать информатику и программирование, им это просто не нужно. Информатика и программирование - это слишком сложно, и недоступно для биологов.
Это утверждение встречается в разных вариантах и обычно считается самоочевидным. Утверждается либо что биологи не имеют соотвествующего "склада ума" и их невозможно обучить информатике, либо что информатика биологам не нужна, либо и то и другое сразу.
Трудно представить себе, что сегодня кто-нибудь взялся бы доказывать тезис о том, что "физики не должны изучать математику, их дело изучать физические процессы", мотивируя это тем, что для математического описания физики можно организовать сотрудничество физиков с математиками. Утверждение "биологи не должны (и не могут) знать информатику и программирование" представляет собой такой же абсурд, как тезис о том, что "физики не должны знать математику".
Рассмотрим первую часть данного утверждения. Она обычно обосновывается так: "биологам достаточно готовых программ, а если нет, то можно просто сотрудничать с программистом, который их напишет". Но смысл в изучении программирования состоит не только в том, чтобы научиться заставлять компьютер выполнять различные действия. Гарольд Абельсон и Джеральд Съюзман пишут в своей книге "Структура и интерпретация компьютерных программ"[13]:
Прежде всего мы хотим обосновать идею о том, что язык программирования это не просто способ заставить компьютер выполнять определённые операции. Более важным является то, что язык программирования - это новый формальный способ для выражения идей о методологии. Программы пишутся прежде всего для прочтения людьми... Компьютерная революция - это революция в нашем мышлении и в способах, которыми мы выражаем наши мысли Профессор Джапнет Винг (Jeanette Wing), глава отдела информатики в университете Карнеги-Меллона (США), пишет[14]:
Информационное мышление к середине XXI века будет базовым навыком, необходимым каждому образованному человеку наряду с чтением, письмом и арифметикой. Что я понимаю под информационным мышлением? Оно включает в себя набор "мыслительных инструментов", отражающий всю широту нашей области. Когда мы встречаемся с некоторой проблемой, мы обычно спрашиваем себя "Насколько сложно будет ее решить?" и "Каков наилучший способ решения данной проблемы?". Информатика имеет солидное теоретическое основание для того, чтобы точно ответить на эти и другие подобные вопросы. Информационное мышление - это способность переформулировать кажущуюся сложной проблему, в такую, для которой известно решение. Это можно сделать путём редукции, вложения, трансформации или моделирования. Информационное мышление - это проверка типов, как генерализация многомерного анализа. Это выбор подходящего представления для проблемы или выбор нужного аспекта проблемы, для того, чтобы сделать ее решаемой. Информационное мышление - это использование абстракции и декомпозиции при решении сложной, многосторонней задачи. Это способность думать рекурсивно и способность оценивать устройство системы с точки зрения простоты и элегантности... Говоря коротко, информационное мышление- это выбор подходов к решению проблем, конструированию систем и пониманию человеческого поведения, базирующийся на фундаментальных концепциях информатики.
Нужны ли эти способы мышления и выражения идей биологам?
Летом 2005 года компания Microsoft организовала международный симпозиум, собрав группу ведущих ученых в различных областях знания, с целью изучить роль информатики в развитии науки до 2020 года. Вот выдержка из выводов, к которым пришли участники симпозиума[6]:
Концептуальные и технологические средства разработанные в инфор матике начинают находить применение вне предмета, для которого они создавались. Информатика готова стать такой же фундаментальной основой биологии, какой математика является для физики... среди биологов растет осознание того, что понимание сущности и функционирования живых клеток требует рассмотрения их как системы обработки информации...
Наши заключения имеют существенное значение для подготовки новых ученых, администрирования и финансирования науки. Ученым совершенно необходима полная информационная и математическая грамотность, и к 2020 году будет просто невозможно заниматься наукой без такой грамотности.
Особое значение имеет информатика для биохимии и молекулярной биологии. Поскольку существуют существенные разногласия по вопросы того, что входит в компетенцию этих наук, процитируем фрагмент из паспорта специальности "биохимия" :
Термодинамические, квантовомеханические и кинетические расчеты на уровне функционирования отдельных молекул, компьютерное моделирование пространственной структуры биополимеров и надмолекулярных комплексов, проблемы трансформации энергии в биосистемах, молекулярных основ эволюции, происхождения жизни и пред-биологической эволюции...
Исследования проблем узнавания на молекулярном уровне, хранения и передачи информации в биологических системах
Формальные языки и вычислительные процессы, их роль в биохимических исследованиях
Пусть есть фермент, катализирующий реакцию, подобную изображенной на Рис. 1.30. Рассмотрим как его функционирование может быть представлено в форме вычислительного процесса.
Рассмотрим устройство, которое читает символы одной строки (входа) и записывает их в другую строку (выход). Пусть входной строкой будет строка представляется в виде строки из алфавита D. Слева - понятия "белый кролик "серый кролик"может быть представлено с помощью строки символов русского алфавита, либо с помощью символов формальной генетики, обозначающих генотип объекта
S1 из языка LC отражающая имеющиеся в клетке молекулы без действия фермента. Действие фермента состоит в вычислении строки S2, являющейся результатом его работы.
Для того, чтобы описать действие вычислительного устройства не обязательно знать особенности его физической реализации. Достаточно знать, что устройство способно находится в некоторых состояниях, и переходить из одного состояния в другое по определенным правилам. Эту информацию о поведении устройства можно отобразить с помощью ориентированного графа или диаграммы состояний [20].
На Рис 1.2 показаны состояния для фермента как вычислительного устройства. Работа фермента начинается с состояния 1. Из этого состояния он может перейти в состояние 2, если следующим элементом входной строки является молекула субстрата (S). Из состояния 2 он может вновь перейти в состояние 1, записав в выходную строку (S) (это соответствует обратной реакции). Или из состояния 2 фермент может перейти в состоянии 3, из которого возможен
Таким образом, работа фермента заключается в преобразовании строки S1 в строку S2, которая отличается от S1 тем, что часть символов S заменена в ней на Р.
Мы видим, что работа фермента в простейшим случае может быть представлена как вычислительный процесс. В настоящей работе представление в виде вычислительных процессов используется для описания биохимических процессов, онтогенетического развития организмов, генетической регуляции, биологической систематики и таким образом лежит в основе предлагаемых языков.
Может возникнуть вопрос, все ли биологические явления допускают представление в виде вычислительных процессов. Этот вопрос рассматривается в следующем разделе.
Вычислимость Вычислительное устройство, рассмотренное в преды дущем разделе относится к классу так называемых конечных трансдъюсеров (finite state transducers). Ряд процессов не может быть смоделирован при помощи такого рода устройств.
Исторически, вопрос о вычислительных возможностях различных устройств был связан с проблемой оснований математики. Кризис в проблеме основа-ний математики возник в связи с обнаружением парадоксов в математической логики, когда рассуждения, проводимые с использованием известных математических понятий приводили к противоречиям. Наиболее известны парадоксы, сформулированные Бертраном Расселом [21, 22]: Пусть М - множество всех множеств, которые не содержать самих себя в качестве членов. Проблема возникает тогда, когда задается вопрос о том, содержит ли М в качестве элемента само себя. Если, нет то по определению, оно должно содержать себя как элемент, если да, то не должно.
Немецкий математик Дэвид Гильберт предположил, что парадоксы возникают вследствие неточностей языка, на котором производятся доказательства, и предложил что математики должны полностью формализовать процесс доказательств, т.е. создать некоторую механическую процедуру, следуя которой можно было бы однозначно определить истинность или ложность любой теоремы [23]. В своих трудах Гильберт изложил таким образом программу создания оснований математики.
Позднее выяснялось, что программа Гильберта не может быть выполнена, но тем не менее ее значение оказалось огромным, поскольку она стимулировала развитие математики, и создание теории вычислительных процессов.
Первым указанием на то, что программа Гильберта не может быть выполнена, стало доказательство Гёделя о неполноте арифметики. Гёдель доказал, что в рамках арифметики можно сформулировать утверждение, которое является истинным, но не доказуемым [24]. Однако даже после этого некоторые математики считали, что доказательство Гёделя касается только определенного частного случая.
Гильберт говоря о механической процедуре получения доказательств никогда не определял конкретно, что имеется в виду под данной процедурой. Иначе подошёл к данному вопросу Алан Тьюринг [25]. Он представил механическую процедуру в виде машины, состоящий из ленты неограниченной длины и считывающего/записывающего устройства, способного изменять записи на этой ленте в зависимости от того, что оно считало с ленты. Тьюринг показал, что данная машина способна решать определенный класс задач. Од новременно он доказал существование задач, невычислимых на такой машине. Причем, никакое дальнейшее изменение этой машины (добавление нескольких лент, считывающих головок и т.п.) не могло увеличить набор решаемых задач.
Параллельно с Тьюрингом Алонзо Чёрч развил математический аппарат получивший название А-исчисления, который тоже фактически был механической процедурой производства вычислений. А-исчисление оказалось эквивалентным по спектру решаемых задач машине Тьюринга.
Позже в 1943 году Клини [26] обобщив результаты этих работ постулировал так называемый тезис Чёрча-Тьюринга. Этот тезис гласит, что любое физически возможное вычисление может быть реализовано на машине Тьюринга. Для тезиса Чёрча-Тьюринга не существует доказательства, вместо этого он рассматривается как физический закон, подтверждаемый тем фактом, что до сих пор не найдено ни одной физической системы, способной к вычислению задач, которые нельзя было бы вычислить на машине Тьюринга. Это в свою очередь означает, что поведение любой физической системы можно описать как процесс вычислений на машине Тьюринга.
Теоретически рассматривались (и продолжают рассматриваться) устройства способные решать задачи, неразрешимые на машине Тьюринга [27, 28, 29,30]. Однако, в настоящее время неизвестно способа физической реализации какой-либо из этих моделей. Так называемые гипервычислительные устройства обычно зависят от наличия актуальной бесконечности какого-либо ресурса (пространства, времени, точности измерения и т.п.).
Поведение непрерывных нелинейных динамических систем невычислимо на машине Тьюринга (и следовательно на любом компьютере). В качестве примера можно рассмотреть сдвоенный маятник) [31]. Причина в том, что даже самое незначительное изменение координаты начальной позиции маятника оказывает существенное влияние на его траекторию. Если пространство непрерывно, то для задания позиции маятника требуется действительное число с бесконечной точностью, которое не может быть представлено в памяти компьютера.
Архитектура клеточного устройства
Ранее говорилось о том, что ряд авторов считает, что живая клетка является вычислительной машиной, управляемой программами, записанными на специальном клеточном языке. В частности, [96] определяет клеточный язык как "Самоорганизующуюся систему молекул, некоторые из которых кодируют, действуют в качестве знаков или включают управляемые генами клеточные процессы". Принципы организации клеточного языка очевидно оптимальным образом эволюционно приспособлены к представлению биологических знаний.
Можно ожидать, что мы получим большие выгоды, если используем в своей работе язык, принципы построения которого находятся в соответствии с принципами построения языка биологического вычислительного устройства.
При моделировании поведения клетки, используя традиционный язык программирования, мы можем рассматривать ДНК, белки и другие клеточные компоненты как самостоятельные равноценные объекты. Для клетки, однако, ДНК является исходным кодом программы, а клеточный матрикс - средой ее исполнения. Это в определенном смысле довольно тонкое различие является, тем не менее, принципиальным. Это следует хотя бы из того, что для того чтобы реализовать модель клеточной регуляции в языке, не приспособленном для этого, потребуется значительно больше усилий и более длинный код.
Живая клетка содержит программу в форме последовательности нуклео-тидных звеньев ДНК. Однако по ряду практических соображений использование такой формы описания вида является неудобным. Проводя аналогию с компьютерами можно сказать, что ДНК содержит своеобразные "машинные коды", описывающие низкоуровневые операции клеточных механизмов.
Однако, можно предположить, что существуют клеточные языки "высокого уровня", в которых части ДНК-кода организованы в более крупные семантические единицы.
Основываясь на этом и изучив принципы логической организации клеточного языка, мы можем построить искусственный язык высокого уровня, выражения которого в равной степени пригодны для чтения человеком и компьютером. Такое описание будет естественным для рассматриваемой системы и способно отражать многие закономерности, незаметные или полностью теряемые в обычных системах описания.
Для решения этой задачи можно сначала создать модель архитектуры клеточного вычислительного устройства, а затем сформулировать принципы языка, оптимально подходящего для программирования такого устройства(Рис. 2.1).
1. Нуклеиновые кислоты, белки и другие внутриклеточные компоненты образуют некоторую форму вычислительного устройства. Клеточное вычислительное устройство состоит их пулов данных, активных компонентов и пассивных компонентов.
2. Активные компоненты это процессы и метапроцессы. Клеточное устройство может содержать несколько процессов и метапроцессов.
3. Процессы и метапроцессы являются источником активности в системе.
4. Активные компоненты содержат одновременно данные и программы, записанные на специальном клеточном языке в форме их химической структуры.
5. Процессы могут связывать, трансформировать и освобождать любые компоненты. Это происходит в соответствии с их встроенными программами.
6. Метапроцессы активируются присутствием или отсутствием определенных процессов. При активации метапроцессы могут запускать дополнительные процессы в соответствии с их встроенными программами.
7. Все компоненты помещены в пулы данных. Компоненты из различных пулов не могут прямо взаимодействовать, но они могут перемещаться из одного пула в другой специальными процессами.
Предварительные замечания Мы уже отмечали ранее, что логические языки программирования, такие как Prolog, позволяют очень естественно представить некоторые молекулярно-биологические процессы. Представленные далее языки CPDL и CPDL/HL являются попыткой выделить те свойства Prolog, которые способствуют представлению молекулярно - биологических систем, и одновременно упростить язык, убрав свойства, биологическим системам не присущие.
Основным ориентиром при проектировании CPDL было однозначное соответствие языковых концепций молекулярно-биологическим сущностям. Таким образом при кодификации биохимических процессов не должно возникать проблем неоднозначной реализации - достаточно посмотреть как та или иная функция реализована в живой клетке и сделать также. Такое однозначное соответствие является важным свойством языка кодификации. Мы будем называть такое свойство молекулярно-биологической конгруэнтностью.
Молекулярно-биологическая конгруэнтность - однозначное соответствие концепций языка программирования концепциям клеточного языка.
CPDL является предметно-ориентированным языком, предназначенным для описания и моделирования молекулярно-биологических систем. Поэтому в данном разделе мы не рассматриваем приложения которые к данной предметной области не относятся.
Модель лактозного оперона, которая приводится в настоящей главе, является более детальной, нежели та, которая использовалась при обзоре литературы.
1. Функционирование клеточного устройства описывается программой, записанной на языке описания клеточных программ CPDL.
2. Программы на CPDL содержат несколько частей. Эти части отвечают за описание начального состояния пула значений, типы данных, а также встроенные программы для процессов и метапроцессов.
3. Существует прямое соответствие между сущностями языка и компонентами живой клетки.
4. Программы на CPDL обычно имеют декларативную и процедурную интерпретацию. Каждое выражения внутри встроенной программы активных компонентов имеет форму действие :- условие .
Биологическая конгруэнтность
Биологическая конгруэнтность - однозначное соответствие между концепциями языка программирования и биологическими явлениями. Можно выделить следующие варианты: Полная (сильная) биологическая конгруэнтность - когда в языке программирования все концепции имеют аналогичные биологические явления и все биологические явления (в рамках изучаемой области) имеют прямые аналоги в языке. Неполная (слабая) биологическая конгруэнтность - биологические явления (в рамках изучаемой области) имеют прямые аналоги в языке программирования, но при этом язык программирования содержит дополнительные конструкции, для которых нет биологического аналога.
Полная биологическая конгруэнтность гарантирует, что любая программа на данном языке может быть транслирована в соответствующую биологическую систему. Неполная биологическая конгруэнтность показывает не тот факт, что биологическая система может быть переведена в программу (это в любом случае возможно), а то, что существует однозначный, естественный для данного языка способ кодификации биологических явлений. Это свойство позволяет сравнивать программы и делать выводы о различии соответствующих биологических явлений.
Алфавит включает в себя наборы символов латинского и русского алфавита (строчные и заглавные) и специальные символы: " 3.2.2. Ключевые слова Ключевых слов как таковых не имеется. Их роль выполняют методы встроенных классов.
Литералы Строковые литералы заключаются в кавычки (") . Числовые литералы представлены целыми числами и десятичными дробями. Десятичный разделитель - запятая (,).
Объекты Все в языке является объектами. Объекты взаимодействуют друг с другом только при помощи сообщений. Сообщениями могут обмениваться только связанные (соединенные) объекты. Связывание является механизмом реализации инкапсуляции данных. Объекты могут размещаться в разных пулах. Пулы играют роль сред периода исполнения (баз данных в Прологе). Непосредственно связываться могут только объекты, находящиеся в одном пуле. Пулы могут быть вложенными друг в друга или просто соединятся между собой.
Методы Каждый объект реализует определенный интерфейс, определяющий набор сообщений, которые могут обрабатываться данным объектом. Описание сообщения вместе с набором процедур, описывающих реакцию объекта на прием данного сообщения, будет называться методом объекта. Описание сообщения включает в себя название сообщения и перечень классов, которые могут быть переданы в качестве аргументов. Само сообщение состоит также из названия и списка ссылок на объекты-аргументы. В результате выполнения метод возвращает объект. Метод включает в себя фрагмент кода, привязанный к определенному сайту связывания. Вызов метода приводит к получению объекта, возвращаемого методом.
Пример вызова метода: 5.+ 4 Account.Deposit 10 "Dollars" В первом примере объекту (числу 5) отправляется сообщение (+) с аргументом объектом числом 4. В результате выполнения метода создается и возвращается новый объект - число 9. Во втором примере объекту Account (банковский счет) посылается сообщение Deposit (положить деньги на счет) с двумя аргументами - числом 10 и строкой "Dollars" Метод состоит из названия, фрагмента кода и аргументов. Фрагмент кода - последовательность вызовов методов, разделенных символом ";" и заключенных в скобки. Hello (console.Write "Hello!";console.Write "This is me!")
Аргументы являются локальными сайтами связывания (переменными) методов, к которым привязываются аргументы, употребленные при вызове метода. Аргументы причисляются через запятую и отделяются от тела метода знаком .
Объект, полученный в результате выполнения последнего выражения возвращается в качестве результата метода. AddFive (Number ToAddToAdd.+ 5) Кроме того, для каждого метода создается локальная переменная Result, которой можно явно присвоить значение, которое должен возвращать данный метод.
Сайты связывания (переменные экземпляра) Каждый объект может включать в себя набор переменных экземпляров (сайтов связывания), куда могут привязываться другие объекты. Один объект может одновременно быть связанным с несколькими сайтами связывания. Сайт связывания имеет тип и может связывать объекты определенного класса или классов-потомков данного класса.
Связывание объектов и отсылка сообщений Связывание объекта из одной переменной состояния с другой переменной состояния:
BindingSite.= BindingSitel Связывание объекта, создаваемого методом: My Account. = Bank Account. New Способы связывания объекта из пула. Связывание любого объекта данного класса Pool.Bind classname
Связывание объекта, возвращающего определенные ответы на сообщения (Bind classname ( Conditions ) ) Отсылка сообщений связанному объекту (вызов методов): BindingSite.MessageName Paraml Param2 ParamN; BindingSite.MessageName(Name="newname", Color = new Blue);
Сайты связывания также являются объектами. Они имеют методы release (освободить связанный объект) и destroy (уничтожить сайт связывания). Также связывание нового объекта автоматически освобождает данный объект.
Класс это особый объект. Каждый пул может содержать только один экземпляр данного класса. Класс содержит спецификацию для создания какого-либо объекта. Класс содержит спецификацию методов и спецификацию свойств, методы обеспечивающие редактирование спецификаций и создание объектов по заданным спецификациям. Класс наследует свою спецификацию от Object. Кроме того, класс отвечает за создание других классов, реализацию механизма наследования. Методы класса New - создает экземпляр объекта данного класса KindOf (Class Parent) - создает новый класс - наследник от класса-аргумента Method (String MethodName, CodeFragment Code) - добавить метод к спецификации объекта класса Remove (String MethodName) - удалить метод из спецификации объекта класса GetMember (String MethodName) - возвращает спецификацию методов Contains (Class Type, Identifier Id) - добавить новый атрибут типа Туре с названием Id к спецификации объекта класса Пример использования (диалог с интерпретатором): Contains Class Account; -Ok Account.- Class.KindOf Object; -Ok Account