случая непараметрической статистики [3] трудность ¡-го задания, рассчитанная по исходной
матрице размером кх/, будет находиться в интер* *
вале р;-(-^).и(р)<р] <р;+(-^).и(р).
Здесь к - число строк в исходной матрице; и(р) - число, зависящее от величины доверительной вероятности р. С учетом данного выражения отношение к ширины интервалов изменения исходного значения Pj и полученного бутстреп-
значения Р; ' составит >.«—-1-—= . Например,
1 О; -л/к
для задания № 10 (о/=0,498, öf =0,296, к=50,
n=500) величина к составила 5,32.
Таким образом, использование бутстреп-мето-да позволяет существенно уменьшить величину интервальных оценок трудности заданий теста и за счет этого повысить точность их калибровки.
Литература
1. Efron B. Bootstrap methods: Another look at the jackknife Ann. Statist, 1979. V. 7. № 1, pp. 1-25.
2. Елисеев И.Н., Елисеев И.И., Фисунов А.В. Программный комплекс RILP-1 // Программные продукты и системы. 2009. №> 2. С. 178-181.
3. Орлов А.И. Эконометрика: учеб. пособие для вузов. М.: Изд-во «Экзамен», 2002. С. 83.
УДК 004.422
ОСОБЕННОСТИ РЕАЛИЗАЦИИ АРХИТЕКТУРНОГО ШАБЛОНА THIN WEB CLIENT НА ПЛАТФОРМЕ JAVA EE 6
В.И. Аржаев, к.т.н.; A.C. Полыгаев (НИИ «Центрпрограммсистем», г. Тверь, arzhaeVI@Cps.tver.ru)
На конкретном примере рассматривается технология создания полнофункционального интерфейса web-прило-жения на основе шаблона Thin web client с помощью фреймворка Java Server Faces. Для построения пользовательского интерфейса применяются JSF-компоненты Woodstock, расширенные с помощью библиотеки DynamicFaces.
Ключевые слова: архитектурные шаблоны web-приложения, платформа создания корпоративных автоматизированных систем, среда разработки, технология асинхронного обновления страниц.
Архитектурный шаблон Thin web client (тонкий web-клиент) обычно используется в тех web-приложениях, в которых гарантируется наличие минимальной конфигурации клиента. При этом вся бизнес-логика выполняется на сервере в процессе обработки запроса на получение страницы, сгенерированного браузером клиента.
Термин расширенное клиентское приложение относится к настольным приложениям с расширенными возможностями, в то время как термин приложение для тонкого клиента относится к приложениям, базирующимся на архитектурных шаблонах web -приложений. Обычно расширенные клиенты сложны в развертывании и управлении, с другой стороны, тонкие клиенты не имеют таких широких возможностей пользовательского интерфейса и не так быстро реагируют, как толстые/расширенные клиенты.
По мере развития технологий возникает новое поколение платформ и сред разработки для создания приложений для конечного пользователя. Асинхронный JavaScript и XML (AJAX), Rich Internet Application (RIA), Rich Client Platform (RCP) и Flash обеспечивают технологию, среду разработки и приемы, которые позволяют разра-
ботчикам создать web -приложения для конечного пользователя на основе шаблона тонкий клиент с гораздо более богатыми пользовательскими интерфейсами и повышенной быстротой реакции.
Для разработки web-приложений используются два подхода: на основе компилируемых модулей и интерпретируемых сценариев.
Наиболее популярным решением является Java Server Pages (JSP). Страницы JSP, хотя и содержат сценарии, при первом обращении к ним подлежат компиляции и загружаются как сервлеты. Пока серверная страница не изменяется, web-сервер продолжает использовать уже скомпилированный сервлет. Это дает некоторый выигрыш в производительности при использовании JSP по сравнению с другими типами сценариев. При разработке приложения на основе архитектуры тонкого клиента предлагается активно использовать достаточно новую компонентную, событийно-ориентированную технологию создания web -приложений Java Server Faces (JSF). Фактически подобно Swing и AWT приложение JSF - это каркас разработки приложений, предоставляющий набор стандартных графических компонентов для создания пользовательского интерфейса на стороне сервера.
Приложение, созданное на основе JSF, состоит из следующих частей:
- объекты JavaBean, управляющие состоянием и поведением приложения;
- компоненты GUI с возможностью сохранения состояния;
- классы, реализующие событийную модель, аналогичные используемым при традиционной разработке графических интерфейсов;
- страницы, выступающие в роли представлений (view) в парадигме модель-представление-контроллер (model-view-controller - MVC).
Кроме стандартных, JSF-компонентам доступны дополнительные компоненты, предоставляемые сторонними разработчиками.
JSF состоит из модели публикации событий; простого контейнера для зависимых компонентов (inversion-of-control (IoC) container); компонентов, реализующих практически все стандартные возможности графических интерфейсов: встраиваемую генерацию интерфейса, валидацию на стороне сервера, конвертирование данных, управление переходами (навигацией) между страницами.
Являясь компонентной архитектурой, JSF легко расширяется и конфигурируется. Интерфейс JSF-приложения состоит из страниц JSP, которые содержат компоненты, обеспечивающие функциональность интерфейса. JSF не имеет непосредственного отношения к JSP: данная технология лишь использует JSP через специальную библиотеку тегов - своего рода мост. Жизненный цикл компонент JSF сильно отличается от цикла JSP-страниц. При этом альтернативную технологию управления представлением Facelets гораздо легче использовать вместе с JSF, так как она изначально проектировалась под нужды JSF вместо интеграции JSF и JSP.
Однако страницы проходят все 6 стадий жизненного цикла JSF, на стороне сервера выполняются требуемые вызовы класса backing bean, который изменяет состояние компонентов и возвращает пользователю обновленную версию страницы. Это достаточно долгий путь для такого простого действия, ведь, чтобы обновить одно текстовое поле на странице, сервер приложения тратит свои ресурсы на ее полную перерисовку.
К тому же страница в браузере пользователя полностью перезагружается, заставляя самого пользователя ждать ее повторной отрисовки, а разработчика - озаботиться сохранением состояний остальных визуальных компонентов.
Такой интерфейс подходит для отображения статического содержимого, но если стоит задача активного взаимодействия с пользователем, построенные стандартным способом web -страницы перестают напоминать интерфейс настольного приложения.
Для решения этих задач разработчики web-приложений применяют технологию асинхронно-
го обновления страниц - Asynchronous Javascript and XML (AJAX).
Важно то, что появилась возможность усилить данную технологию, поскольку желательно управлять всеми сложностями DOM, JavaScript и CSS-браузера. Таким образом, появляется новый класс web -приложений, предлагающих известное поведение толстого клиента, которое было преобладающим до того, как web стал популярным. Разработка web -приложений RIA (Rich Internet Application) предоставляет пользователю практику более живого взаимодействия, отсутствует необходимость полностью обновлять страницу для каждой транзакции. Самое важное в данном методе разработки web -приложения - рациональное использование клиентской стороны JavaScript и/или DHTML с применением асинхронного JavaScript и XML (AJAX) подхода. AJAX сам по себе предоставляет превосходную практику для конечного пользователя, но он основан в большей степени на трудоемком программировании на языке JavaScript. Однако в паре с JSF эта сложность существенно уменьшается посредством инкапсуляции сложного AJAX-JavaScript-кода в JSF-компонент-ную технологию. AJAX позволяет web-клиенту делать запросы к серверу асинхронно, независимо от представления всей страницы конечному пользователю.
Следовательно, в дополнение к значительному усовершенствованию пользовательского интерфейса AJAX совместно с JSF предусматривает более сложную событийную модель, в которой интерактивные действия основаны на особых UI-событиях в противовес упрощенным событиям HTTP GET и POST, когда вся страница обновляется полностью.
Применение в качестве сервера приложений GlassFish в составе программного обеспечения поддерживает использование специального расширения DynamicFaces для дополнения функциональности AJAX компонентам Java Server Faces. DynamicFaces обеспечивает дополнительную функциональность любому (не только созданному) компоненту UI, который используется при разработке JSF-приложения. При этом не требуется модифицировать компонент или переписывать фрагменты кода для придания приложению преимуществ технологии AJAX. Кроме того, в большинстве случаев даже нет необходимости прибегать к написанию JavaScript, поскольку Dynamic-Faces обеспечивает компоненты собственным набором библиотек JavaScript, реализующих AJAX. В то же время DynamicFaces сохраняет мощную компонентную модель и специфические стадии жизненного цикла, присущие уникальной технологии JavaServer Faces.
Рассмотрим основные элементы работы предлагаемого расширения DynamicFaces. Как указывалось ранее, цель применения AJAX состоит в
том, чтобы обеспечить асинхронное обновление части страницы в ответ на события, инициируемые пользователем взамен ожидания перезагрузки страницы целиком.
DynamicFaces направлена на получение преимуществ такой функциональности компонентами JSF при поддержании сложной модели жизненного цикла «запрос-отклик» путем внедрения следующих элементов:
• пользовательского JSP-тега, именуемого AjaxZone и используемого для идентификации той части дерева компонентов, которой добавляется функциональность. II. !.\ :
• набора функций JavaScript, придающих выбранным компонентам свойства AJAX, чтобы отправить AJAX-запрос серверу, обновить данные дерева элементов модели DOM на клиентском браузере после получения AJAX отклика от сервера (существует возможность использования некоторых из этих функций непосредственно в методах компонентов);
• набора API, определяющих объекты со стороны сервера и вовлеченных в процесс обработки . I./. I.V-запроса:
• субдерева компонентов, требующих асинхронного обновления на стадиях жизненного цикла, конструирования и отправки AJAX-отклика клиенту.
Наиболее широко используемыми функциями JavaScript, включенными в DynamicFaces, являются:
• fireAjaxTransaction - функция инициализирует AJAX-запрос с набором параметров, указывающим на компоненты асинхронного обновления;
• installDeferredijaxTransaction - сопоставляет fireAjaxTransaction с элементом DOM, требование fireAjaxTransaction задерживается, что означа-
ет вызов только в моменты инициируемых пользователем событий;
• inspectElement - обращается к элементам, разграниченным тегом AjaxZone, и указывает на тот, который должен представить поведение в стиле AJAX, по умолчанию добавляется к элементам ввода и опциональным элементам.
Наиболее важными объектами на стороне сервера, участвующими в поддержке обработки AJAX-запроса, создании конструкции и обслуживании доставки AJAX-отклика, являются:
o PartialTraversalViewRoot - реализация пользовательского ViewRoot, представляющего ту часть дерева компонентов, которая нуждается в асинхронной обработке;
o PartialTraversalLifecycle - реализация пользовательского Lifecycle, которая сочетается с выполнением ViewRoot для возвращения соответствующего субдерева компонентов в требуемое время;
o AsyncResponse - ссылается на сформатиро-ванное XML-сообщение, которое представляет частичное обновление дерева компонентов.
При использовании расширения DynamicFaces фазы жизненного цикла JSF группируются по функциональности (рис. 1).
Часть жизненного цикла (execute - исполнение) выполняется в течение так называемого процесса обработки (postback) и включает те фазы жизненного цикла, которые обеспечивают преобразование данных, валидацию и обновление объекта модели приложения. Группа фаз обновления (render) возвращает результат выполнения запроса на странице.
Рассмотрим один из подходов к реализации асинхронной технологии. Чтобы начать использовать компонент DynamicFaces на странице, необходимо подключить дополнительно пространство
Response Complete
Response Complete
Restore Apply Process Process Process A
^ ^ View J ^^ Request J ^^ Event J ~ ^ Validation J ~ ^ Events J
Faces Request
£
Render Response
Response Complete
Faces Response
(Render Process Г Invoke Process Update Л
Response V Event V Application Events Model Values J
Conversion Errors/Rende
Render portion of Lifecycle
Response
Response Complete
Validation/Conversion Errors/Render Response
Execute portion of Lifecycle
Рис. 1. Группирование фаз жизненного цикла JSF
имен: <jsp:root xmlns:df=http://java.sun.com/jsf/dy-namicfaces />.
После чего на странице становятся доступными для использования теги <df:AjaxZone/> и <df:AjaxTransaction>. Для асинхронного обновления компонентов страницы создадим Ajax-тран-закцию внутри тега <webuijsf:head/>: <df:Ajax Transaction id="AjaxTransaction1" inputs="sample-Button " render= "sampleText"/>.
С помощью свойства inputs указываются компоненты, которые необходимо выполнить на сервере, а свойство render указывает элементы для обновления до завершения запроса. Созданную Ajax-транзакцию можно вызвать с помощью простого JavaScript-кода, который будет исполняться при нажатии на кнопку onClick="DynaFaces.Tx. fire('ajaxTransaction1')".
Кроме того, Ajax-транзакция вызывается с помощью события onSubmit для формы страницы. Событие произойдет, когда пользователь нажмет на клавишу ENTER. При этом функция onSubmit должна возвращать значение FALSE, чтобы предотвратить обновление страницы при подтверждении формы onSubmit="DynaFaces.Tx.fire('Ajax-Transaction1');returnfalse;".
Приведенный пример прост. Для иллюстрации потенциала совместного использования JSF с технологией AJAX решим более конкретную задачу.
Пусть имеется страница, предназначенная для управления учетными записями пользователей. На ней расположены несколько вкладок, позволяющих управлять зарегистрированными в системе пользователями, группами пользователей и акка-унтами. Страница имеет вид, представленный на рисунке 2.
Для управления учетными записями пользователю необходимо переключаться между вкладками Пользователи, Аккаунты и Группы. При использовании обычных ./^-компонентов каждое переключение между вкладками заставляет сервер полностью перерисовывать страницу и обновлять все находящиеся на ней компоненты.
Такой подход неудобен как с точки зрения пользователей (необходимо каждый раз при переходе между вкладками ждать полной загрузки страницы), так и с точки зрения производительности: сервер выполняет множество лишних опера-
ций, в то время как можно ограничиться обновлением лишь одного компонента <webuijsf:tabSet/>.
Приведем исходный код страницы без использования асинхронной обработки запроса:
<f:subview id="usersFragment">
<!-- Панель навигации --> <div id="centralFragmentHeader">
<webuijsf:breadcrumbs id="main-Breadcrumbs6" styleClass="breadcrumbs">
<webuijsf:hyperlink id="hy-perlinkl" text="Главное меню" url="/faces/ mainPage.jsp"/>
<webuijsf:hyperlink id="hy-perlink2" text="Администрирование" url="/fa-ces/adminPage.jsp"/>
<webuijsf:hyperlink id="hy-perlink3" text="Управление пользователями" url="/faces/adminPage.jsp?taskId=2"/>
<webuijsf:hyperlink id="hy-perlink4" text="Пользовательские аккаунты" url="/faces/adminPage.jsp?taskId=2"/>
</webuijsf:breadcrumbs> <!--Серая горизонтальная полоса--> <hr noshade="true"/> </div>
<!-- Панель с закладками (Пользователи, Аккаунты, Группы)-->
<webuijsf:tabSet id="usersTabSet" mi-ni="true" selected="usersTab">
<webuijsf:tab id="usersTab" sty-leClass="MniTabLnk_sun4" text="Пользователи"> <!--Содержимое вкладки "Пользователи" -->
<webuijsf:panelLayout id=
="usersTabPanel" panelLayout="flow" style= ="padding-left: 10px; margin-top: 20px;"> <!--Фрагмент с возможностью просмотра и редактирования пользователей-->
<jsp:directive.include file="usersFragments/userInfo.jspf"/>
</webuijsf:panelLayout> </webuijsf:tab>
<webuijsf:tab id="accountsTab" text="Аккаунты">
<!-- Содержимое вкладки "Аккаунты" --> <webuij sf:panelLayout id="accountsTabPanel" panelLayout="flow"
style="width: 100%; height: 128px;">
<jsp:directive.include file="usersFragments/accountInfo.jspf"/> </webuijsf:panelLayout> </webuijsf:tab>
<webuijsf:tab id="groupsTab"
text="Группы">
<!--Содержимое вкладки "Группы"--> <webuijsf:panelLayout id="groupsTabPanel" panelLayout="flow" sty-le="width: 100%; height: 128px;">
<jsp:directive.include file="usersFragments/groupInfo.jspf"/> </webuijsf:panelLayout> </webuijsf:tab> </webuijsf:tabSet>
<!-- Конец фрагмента--> </f:subview>
Для динамического обновления компонента tabSet пользователю необходимо нажать на вкладку и выполнить ряд действий.
1. Подключить пространство имен, чтобы иметь возможность использовать теги Dynamic-Faces на странице xmlns:df=http://java.sun.com/jsf/ dynamicfaces.
2. Определить внутри страницы 4/ях-транзак-ции для обновления каждой вкладки:
<!-- Ajax-транзакции для фрагмента-->
<df:AjaxTransaction id="renderTab1" inputs="tab1" render="usersTabSet"/>
<df:AjaxTransaction id="renderTab2" inputs="tab2" render="usersTabSet"/>
<df:AjaxTransaction id="render-Tab3" inputs="tab3" render="usersTabSet"/>
3) Связать компонент tabSet со свойством прикрепленного к странице класса:
<webuijsf:tabSet binding="#{fragments$admin-
Fragments$mainFragments$usersFragment.users-
TabSet}"
Для изменения своего состояния компонент tabSet передает новые параметры с помощью GET-запроса к странице, на которой находится. Так как для этого потребуется перезагрузка страницы в браузере, что неприемлемо, сделаем небольшое изменение. К каждой вкладке компонента tabSet, описываемой при помощи тега <webuijsf:tab/>, добавим событие onClick, по которому будет запускаться соответствующая 4/ax-транзакция: «renderTabl» - для первой вкладки, «renderTab2» - для второй и так далее для последующих.
Пример добавления события для вкладки «Пользователи»:
<webuijsf:tab id="usersTab" onMouseDown="Dy-naFaces.Tx.fire('renderTab1')"/>
Нетрудно заметить, что при определении транзакций перечисленные в свойстве input идентификаторы компонентов не совпадают с теми, что присвоены вкладкам компонента tabSet. Это сделано потому, что при попытке вызвать код, установленный свойством actionExpression для вкладок, ничего не произойдет, так как при нажатии на вкладку страницы компонент пытается обновить свое состояние с помощью передачи на текущую страницу GET-запроса. Это вызовет неминуемую перезагрузку страницы, поэтому компонент вынесен за пределы тега <form/>, в результате он срабатывает вхолостую.
Чтобы все-таки обновить состояние компонентов, необходимо выполнить на сервере код, отображающий выбранную пользователем вкладку. Для этого на странице созданы три скрытые кнопки (по числу вкладок), методы которых и будем вызывать.
<webuijsf:button id="tab1" visible="false" actionExpres-
sion="#{fragments$adminFragments$mainFragment s$usersFragment.tab1_action}" />
<webuijsf:button id="tab2" visible="false" actionExpres-
sion="#{fragments$adminFragments$mainFragment s$usersFragment.tab2_action}" />
<webuijsf:button id="tab3" visible="false" actionExpres-
sion="#{fragments$adminFragments$mainFragment s$usersFragment.tab3_action}" />
С каждой из созданных кнопок агрегирован код следующего вида:
public String tab3_action() {
usersTabSet.setSelected("groupsTab");
return null;
}
Приведенный код указывает компоненты tabSet, имя вкладки, которую следует отобразить на данный момент.
Заново построим пример и развернем на сервере приложений.
Пользователь, открывший эту страницу в браузере, никаких внешних изменений не заметит, за исключением одного: вкладки быстро и удобно переключаются без ожидания обновления страницы. Теперь можно полноценно работать с приложением, интерфейс которого функционально не отличается от интерфейса обычного настольного приложения.
Приведем фрагмент кода страницы, полученной в результате добавления к компонентам JSF 4/ах-функциональности:
<!--Панель с закладками (Пользователи, Аккаунты, Группы)-->
<webuijsf:tabSet binding="#{frag-
ments$adminFragments$mainFragments$usersFragm ent.usersTabSet}" id="usersTabSet" mini= ="true" selected="usersTab">
<webuijsf:tab id="usersTab" on-MouseDown="DynaFaces.Tx.fire('renderTab1')" styleClass="MniTabLnk_sun4" text="Пользовате-ли">
<!--Содержимое вкладки "Пользователи"-->
<webuijsf:panelLayout id=
="usersTabPanel" panelLayout="flow" style= ="padding-left: 10px; margin-top: 20px;">
<!--Фрагмент с возможностью просмотра и редактирования пользователей-->
<jsp:directive.include file="usersFragments/userInfo.jspf"/>
</webuijsf:panelLayout> </webuijsf:tab>
<webuijsf:tab id="accountsTab" onMouseDown="DynaFaces.Tx.fire('renderTab2')" text="Аккаунты">
<!-- Содержимое вкладки "Аккаунты" -->
<webuijsf:panelLayout id="ac-countsTabPanel" panelLayout="flow" style= ="width: 100%; height: 128px;">
<jsp:directive.include file="usersFragments/accountInfo.jspf"/> </webuijsf:panelLayout> </webuijsf:tab>
<webuijsf:tab id="groupsTab" on-MouseDown="DynaFaces.Tx.fire('renderTab3')" text="Группы">
<!-- Содержимое вкладки "Группы" -->
<webuijsf:panelLayout id=
="groupsTabPanel" panelLayout="flow" style= ="width: 100%; height: 128px;">
<jsp:directive.include file="usersFragments/groupInfo.jspf"/> </webuijsf:panelLayout> </webuijsf:tab> </webuijsf:tabSet> <!-- Конец фрагмента-->
Подводя итоги реализации web -приложения на основе платформы Java EE 6 с использованием JSF и DynamicFaces, можно утверждать, что технология JSF с расширением DynamicFaces позволяет создавать web -приложения, функционально не отличающиеся от своих настольных аналогов, увеличить скорость работы web -приложения, со-
кратив тем самым время реакции за счет группирования фаз жизненного цикла компонентов и их точечного обновления, а также снизить нагрузку на сервер приложений, заставляя его обновлять отдельные компоненты интерфейса вместо целых страниц.
Литература
1. Создание корпоративных систем на основе Java 2 Enterprise Edition. Руководство разработчика; пер. с англ. М.: Издат. дом «Вильямс», 2001. 1184 с.
2. Jonas J. Pro JSF and Ajax. Building Rich Internet Components / Jonas Jacobi, John R. Fallows. Изд-во «Apress», 2006.
УДК 004.946
МОДЕЛЬ УСКОРИТЕЛЯ ИДЕАЛЬНЫХ ЧАСТИЦ
Н.Г. Васильев, к.т.н.
(Пензенский государственный университет, gan56@mail.ru); Д.Н. Васильев (КОМСЕТ-Сервис, г. Москва, md_net@mail.ru)
В России создан ускоритель идеальных элементарных частиц, позволяющий уже сегодня получать экспериментальные подтверждения или опровержения существующих фундаментальных физических теорий, призванных ответить на волнующие человечество вопросы. Особенностью этого ускорителя являются его размеры. Он умещается в компьютере, что позволяет перевернуть существующие представления об ускорителях как самых дорогостоящих и громоздких машинах, которые когда-либо создавались для проверки теорий.
Ключевые слова: ускоритель элементарных частиц, компьютерное моделирование.
Внимание ученых-физиков всего мира приковано к новому сверхмощному ускорителю элементарных частиц, так называемому большому адрон-ному коллайдеру (БАК) (Large Hadron Collider -LHC), запущенному в Европейском центре ядерных исследований [1]. Интерес к вводу этого гигантского сооружения (кольцо ускорителя по периметру составляет чуть меньше 30 км) вызван прежде всего тем, что, по мнению большинства ученых, сторонников этого проекта, он поможет дать ответ на фундаментальные вопросы физики, в частности, откуда появляется именно такая масса, которую мы получаем в экспериментах, позволит проверить достаточное количество теоретических (в основном математических) конструкций.
К таким абстрактным конструкциям можно отнести нашумевшие в последнее время теорию великого объединения, теорию суперструн и всевозможные ее модификации, правильную квантовую теорию поля, включающую гравитационное, и многие другие. Теории - это представления, выведенные в виде некоторых текстов. Практически любой важный не только для небольшого количества специалистов, занимающихся данной тематикой, но и для каждого человека вопрос может быть поставлен следующим образом: существует ли какой-либо реальный процесс, стоящий за всеми математическими абстракциями, теориями, и как его можно смоделировать, не прибегая к таким дорогостоящим конструкциям, каковой является БАК.
Известно, что даже при успешной работе кол-лайдера для получения ответов на вопросы, по-
ставленные физиками, потребуется не менее 10 лет. А ответы на вопросы, касающиеся всех людей, - вообще туманная перспектива. Поэтому желательно было бы иметь альтернативу коллайдеру.
Как только появились компьютеры, возникла мысль об альтернативных способах работы с физикой. Тем более, что сами объекты исследования (частицы, в частности протоны) и продукты их столкновений (еще более мелкие частицы) никто никогда не видел и не увидит: с промежутков времени, измеряемых в аттосекундах (10-18 сек.), ничего увидеть невозможно, все наши представления являются либо математическими, либо компьютерными моделями.
В свое время Р. Фейнман высказал идею, которую назвал моделированием физики на компьютерах [2]. Однако попытки ее реализации не привели к желаемому результату. Так, машины клеточных автоматов, идея разработки которых была высказана сотрудниками Исследовательского центра IBM Р. Ландауэром и Ч. Беннетом, а также первые специализированные машины клеточных автоматов Тоффоли так и остались машинами, позволяющими решать некоторые практические задачи. Все чаще они вспоминаются скорее как курьез, чем серьезное начинание, точнее, серьезная альтернатива существующим способам моделирования и экспериментальных проверок. Кроме этого, предпринимаются активные попытки визуализации частиц и процессов, происходящих на микроуровне [3].
Компьютерное моделирование прочно заняло свое место в физике. Однако это не более чем красивые анимации, так как не предоставляют воз-