Микроконтекстная технология компонентного построения языков
Подход к разрешению проблемы противоречия между богатством средств языка информационных описаний и его простотой, компактностью. Описание и анализ языка, программных средств/оборудования как сложной системы с применением соответствующей методологии.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 15.01.2019 |
Размер файла | 636,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Микроконтекстная технология компонентного построения языков
В.В. Прохоров, д.ф.-м.н., проф. УрФУ, vpro@vidicor.ru
Аннотация
Рассматривается подход к разрешению проблемы противоречия между богатством средств языка информационных описаний и его простотой, компактностью. Подход основан на рассмотрении языка, программных средств/оборудования как сложной системы с применением соответствующей методологии. Подход направлен на решение проблемы организации языков представления знаний, человеко-компьютерного взаимодействия, программных и аппаратных средств.
язык программный информационный компактность
1. Введение
Для описания объектов и задач в какой-либо области желательно применять языки, максимально адекватные этой области как по содержанию, так и по форме. При этом нежелателен слишком большой разрыв (как по внутренней сущности так и по внешней форме) между, с одной стороны, принятым в частной прикладной области уже сложившимся языком, естественным для специалиста в этой области, и специальным формальным языком представления знаний. Специалисту важно иметь возможность использовать в работе не специально введённые в формальный язык новые представления для описания предметной области, но, желательно, те же самые понятия и концепции, которые используются в этой области традиционно. Эффективная реализация такой возможности помогает максимально сохранить семантику уже существующего мира понятий и перенести её в модель представления знаний.
Для описания каждой из частей общей модели могут исходно применяться весьма различные средства: дифференциальные уравнения, логические, алгоритмические описания, семантические сети, продукции, структурные диаграммы, фреймы, описания структур данных, описания пространственных сцен, описания электронных схем, музыки и др. Это многоязычие создаёт трудности при описании сложной системы в целом. Ограничение же использованием единственной описательной модели для сложной системы вынуждает представлять большую долю информации в форме, не адекватной природе описываемых сущностей.
При этом проблема «наилучшего языка» существенно связана с противоречием между его богатством с одной стороны и компактностью - с другой: язык должен иметь высокую описательную мощь, но в то же время по количеству конструкций быть достаточно простым в освоении.
При использовании компьютерных технологий вышесказанное предстаёт как проблема дистанции между исходными, естественными для специалистов в данной области классами моделей, описывающими необходимые сущности предметной области в привычной для этой области форме, и моделями, которые могут быть непосредственно «поняты» компьютерной средой. Преодоление данной проблемы всегда являлось одной из центральных задач компьютерных технологий, начиная с зарождения этих технологий и по настоящее время. Заметим, что любой компьютерный язык в первую очередь рассматривается не как средство задания процесса функционирования компьютера, а как средство представления некоторых информационных моделей, используемое некоей «виртуальной машиной».
В работе обсуждается иерархическая микроконтекстная мультипарадигменная компонентная технология [1-7] - взгляд на построение языков информационных описаний, организацию программных и аппаратных средств и процесс создания программных продуктов, обобщающий концепцию модульного проектирования на «языковую ситуацию». В предлагаемом решении каждый из иерархически связанных модулей-микроязыков (подъязыков) является «клеем», связывающим субмодули своими собственными средствами (включая и внешние формы представления), независимо от средств, используемых другими модулями структуры (и для человеко-компьютерного взаимодействия в целом, а не только для области «программирования»).
2. Традиционные подходы к решению противоречия между простотой языка и богатством его средств
2.1 Однопарадигменный подход
Однопарадигменный подход предлагает использовать некоторый универсальный, независимый от области применения, язык, базирующийся на некоторой зафиксированной для этого языка одной главной парадигме (например, алгоритмической). Единственность базовой парадигмы обеспечивает небольшое количество базовых элементов такого языка. Это близко к идее «RISC» (reduced instruction set computer) для микропроцессоров.
При работе с узким классом информационных моделей проблема человеко-компьютерного взаимодействия решается наиболее успешно при использовании специализированной информационной среды, то есть языка и соответствующей «виртуальной машины», ориентированных именно на этот класс.
Однако ситуация меняется, если решаемая проблема сложна и включает много разнородных частей, которым наиболее адекватны информационные описания различной природы. В этом случае возможно использовать очевидный подход использования компактных монопарадигменных универсальных средств («притягивание» информационной модели к имеющейся информационной среде). В этом случае для конкретной области необходимо свести каждый объект, с которым имеют дело, к выбранной единственной парадигме (или к небольшому количеству парадигм) и единственному языку. Чтобы применять этот подход, требуется остановиться на выборе некоторой универсальной парадигмы (например, алгоритмической, функциональной, логической и т.п.), выбрать соответствующий компьютерный язык и соответствующую компьютерную среду, поддерживающую работу на этом языке. При этом необходимо применить определённые научные и прикладные наработки (сведению разных видов моделей к алгоритмической парадигме посвящены целые области математики) и искусство, чтобы сводить задачи из различных областей к моделям в терминах выбранной парадигмы (языка). Самый популярный базис этого подхода - алгоритмическая парадигма.
Основные недостатки подхода монопарадигменных универсальных средств:
использование монопарадигменного подхода требует трудоёмкой работы по сведению различных классов исходных моделей представления к неадекватной единой форме (например, запись музыки средствами или вёрстка полиграфического продукта средствами универсального алгоритмического языка),
работа с единственной парадигмой деформирует сознание, затрудняя работу с представлениями в других парадигмах.
2.2 Мультипарадигменный подход
Для повышения удобства работы, большей адекватности частям решаемых задач монопарадигменные универсальные системы «расширяют» вводом в каких-то количествах новых элементов, удобных для работ, которые исходно были нехарактерны для природы применяемого языка, соответствующих некоторым другим парадигмам, но облегчающих его использование. При дальнейшем развитии этот подход приводит к формированию большого мультипарадигменного языка с большим количеством включенных в него парадигм. Этот подход подобен подходу «CISC» (complex instruction set computer) для микропроцессоров (Рис. 1). Как правило, структура связи элементов мультипарадигменного языка жёстко зафиксирована разработчиками такой системы. В соответствии с этим подходом необходимо разработать огромное разнообразие специальных сложных языков (и систем) для различных областей применения, объединяя основные метафоры в различных комбинациях. Мультипарадигменные системы могут оказаться узкоспециализированными и достаточно сложными в изучении, использовании и создании поддерживающих их программных сред.
Некоторые из недостатков «расширенного» подхода «интегрированных систем»:
ориентированность универсальных систем на использование как правило какой-то одной формы внешнего представления информационных моделей;
невозможность включить в универсальную систему все, что кому-то когда-то может понадобиться, в удобной форме;
даже когда в язык включено не «все для всех», он оказывается громоздким как для разработки, так и для овладения;
при множественности компонент «интегрированной системы» некоторые из них оказываются реализованы очень удачно, другие - менее удачно. Но все они составляют единый неделимый комплекс и как правило пользователю системы никакие её части заменить невозможно.
создание таких систем весьма дорого для потребителя;
программистское качество отдельных компонент может оказаться не столь высоким, как у массовых универсальных систем;
такие системы, будучи менее универсальными, ставят потребителя в весьма зависимое положение: система позволяет манипулировать лишь в тех сферах и в том виде, как это предполагал её разработчик.
2.3 Среда, расширяемая пользователем
В данном случае информационная система может расширяться самим пользователем. Яркий пример - концепция языков Forth или Lisp в программировании. Чаще предусматривают менее радикальные возможности по операционному расширению среды для адаптации универсальных средств к решаемой задаче. Скажем, предоставлением в языке возможности создания пользователем библиотеки процедур в алгоритмическом языке, макросов в текстовом или графическом редакторе, объектов в объектно-ориентированном программировании.
При этом пользователь, работая в произвольной среде, по сути порождает в процессе работы проблемно-ориентированную мультипарадигменную языковую среду, расширяя базовые средства (таким же образом - как расширение базового языка - можно трактовать и создание библиотек). Однако работа как с базовыми объектами, так и с элементами, построенными при расширении, производится независимо от их внутреннего содержания в рамках одной формы внешнего представления, например, текстового, подчас плохо соответствующего природе описываемых сущностей, что является значительным недостатком.
Изложенное относится к проблеме представления не только компьютерно-ориентированных моделей. Однако в областях человеко-компьютерного взаимодействия (а также и - ещё более узко - для области языков программирования) к общим проблемам представления модели добавляются проблемы обработки описания, связанные как с программным обеспечением, так и с аппаратными компьютерными средствами.
В целом для упомянутых подходов очевидно противоречие между богатством изобразительных возможностей языка и его простотой и гибкостью. Это противоречие препятствует попыткам создания единого «идеального языка».
Представляется, что решение этого противоречия даёт только использование составных иерархических компонентных информационных описаний и сред.
3. Язык как сложная система
Как отмечено выше, при работе со сложными явлениями используемый язык явно (в своих конструкциях) или неявно (за счёт расширяемости языка) становится мультипарадигменным, отражая многостороннесть описываемых сущностей, композицией неких более простых средств.
Представляется весьма полезным проведение для любой универсальной языковой среды анализа с попыткой выделения достаточно самостоятельных языковых слоёв, имеющих разную синтаксическую и концептуальную основу.
В качестве примера проведём разбиение языка Pascal на структуру подъязыков (Рис. 1) и выделим конструкции на разных подъязыках в некоторой программе на языке Pascal (Рис. 2).
Рис. 1. Препарирование сложного языка на подъязыки
Рис. 2. Подъязыки в программе
Из препарирования даже такого простейшего языка видно, что он является мультипарадигменным комплексом, что называть его алгоритмическим [монопарадигменным] языком неправомерно; в предлагаемой нами модели Pascal лишь включает в себя алгоритмический подъязык наряду с рядом других, неалгоритмических (языком формул, языком описания типов и др.).
Аналогичное «анатомирование» можно провести и для любых других нетривиальных систем и их языков информационных спецификаций, будь то текстовый или графический редактор, системы программирования, системы управления базами данных или любые другие системы произвольного назначения.
Заметим, что само «анатомирование» произвольных систем и языков с позиций сложных систем полезно как для лучшего понимания сути конкретной системы и языка, так и для выделения многообразия, «коллекции» «ортогональных» используемых правил композиции/декомпозиции.
Если нарисовать подобные диаграммы для множества различных языков, то можно увидеть, что многие микроязыки (например, для алгоритмических конструкций) встречаются в огромном многообразии языков (с некоторыми различиями). Так что «анатомирование» весьма полезно и для выявления наилучших экземпляров конкретной реализации каждой группы правил. Такой анализ подтверждает и то, что количество существенно различных используемых классов правил композиции/декомпозиции значительно меньше, чем количество различных существующих языков (по оценкам в настоящее время известно около 2500 языков программирования).
Идея «анатомирования» сложных языков влечёт идею микроконтекстного подхода.
Рис. 3. Демонтаж сложных языков, создание набора различных микроязыков, сборка мультипарадигменного языка для некоторой специфической задачи
В обычном подходе элементы языка жёстко связаны при проектировании. А что если бы была возможность компоновать язык самостоятельно из ассортимента независимых микроязыков?
4. Микроконтекстный подход
Идея «анатомирования» существующих информационных систем подводит к идее адаптивного конструирования, когда компоненты языка не являются жёстко встроенными в систему, а имеют самостоятельность, могут выбираться по обстоятельствам из множества, не связанного именно с какой-то монолитной системой, то есть среда (и язык, и обеспечивающие средства) оказывается подобной конструктору «Lego». Предлагаемый подход к построению информационных систем - альтернатива концепции универсальных больших языков с большими средами, «интегрированных систем» с полностью определяемым производителем системы множеством компонент и их связей.
Концепция предполагает, что из всех видов информационных работ могут быть выделены некоторые «атомарные» типы и слои, соответствующие некоторым достаточно независимым компактным классам информационных моделей. Причём базовые типы работ должны выделяться не только в «горизонтальном» направлении, но прежде всего - в «вертикальном», как элементы иерархической структуры. Каждый тип работ предлагается рассматривать, как группу правил, позволяющих из некоторых объектов синтезировать более сложные, если рассматривать технологию «снизу вверх» или же представлять сложный объект в виде композиции более простых, если рассматривать технологию «сверху вниз». Каждый из базовых языков спецификаций трактуется, как пара {<набор базовых элементов>, <набор средств композиции/декомпозиции>}. В соответствии с этим можно сгруппировать встречающиеся базовые элементы и наборы средств композиции/декомпозиции на классы. Мы будем говорить в основном о типах наборов средств композиции/декомпозиции, полагая, что для каждого из этих типов наборы базовых элементов подразумеваются.
4.1 Сборка микроязыков
Прежде всего, дополнительно к описанному выше можно освободить связи между подъязыками, выделенными при анатомировании различных языков (Рис. 3). Тогда эти подъязыки можно рассматривать, как сырье, для сборки новых языков. Это позволяет динамически строить ориентированный на задачу язык представления, который наилучше всего подходит для специфической проблемы. Кроме того, каждый из подъязыков мог бы обладать наилучшей формой внешнего представления, например, могли бы быть смешаны и текстовые и визуальные подъязыки.
4.2 Содержание технологии
Содержание технологии предполагает следующее.
1. Всякое информационное описание, исключая базисное, рассматривается как иерархическая структура, суперпозиция более простых информационных описаний (слоёв), каждое из которых построено средствами своей информационной системы.
2. Каждая из используемых ИС ориентирована на весьма специализированный, узкий класс операций, множество ее правил весьма компактно.
3. Для каждой ИС имеются:
ѕ независимая внутренняя концепция языка описаний,
ѕ независимая форма внешних представлений спецификаций.
4. Существование слоя описания разделяется на фазы, такие как
ѕ разработка описания-модели,
ѕ ввод/редактирование,
ѕ вывод на экран и на печать,
ѕ интерпретация и/или конвертирование,
ѕ компиляция, и др.
5. Для каждого слоя и каждой фазы имеются независимые, вообще говоря,
ѕ оборудование,
ѕ программная поддержка.
(Эти программное обеспечение и оборудование могут быть созданы независимо, иметь, вообще говоря, свою независимую фирму-изготовитель.)
6. Существуют соглашения, поддерживающие многоцелевое использование каждой информационной системы, неединственность пар слоёв, для которых указанные в (5) компоненты можно использовать совместно.
7. Имеется возможность самостоятельного комплектования пользователем или системным интегратором иерархической программной системы из программных и аппаратных средств поддержки языковых слоёв (5).
4.3 Стадии существования описания и поддерживающего программного обеспечения
Можно рассмотреть различные «стадии существования» описания знания, включая связанные с использованием компьютерной техники, например:
Разработка модели явлений.
Создание и изменение (редактирование) формального описания с использованием компьютерной среды.
Компиляция или другое преобразование описания.
Компьютерное моделирование или интерпретация описания («выполнение»).
Уничтожение части описания на подъязыке.
Документирование (печать) описания.
Действия некоторого редактора: сохранение подописания, вставка от буфера и т.д.
Если мы имеем дело со «сборным языком», то естественно желать, чтобы и программное обеспечение и аппаратные компьютерные средства, поддерживающие подготовку описания и различные виды работы с ним, были тоже сборными.
Рис. 3. Иерархия программных средств для разных стадий существования описания
Таким образом, было бы превосходно, если бы для каждого микроязыка имелось программное обеспечение, поддерживающее каждую стадию существования описания, причём компоненты этой программной среды могли бы работать совместно в различных комбинациях, адаптивно формируя ориентированные на задачу редактор, компилятор, интерпретатор и т.д.
Следовательно, чтобы определить некоторый подъязык для компьютерного использования, мы должны определить
программу, которая должна помочь, если пользователь захочет редактировать фрагмент на этом подъязыке,
программу, которая должна помочь, если компилятору вышележащего слоя потребуется компилировать фрагмент на этом подъязыке,
программу, которая должна помочь, если при выполнении вышележащего слоя потребуется интерпретировать фрагмент на этом подъязыке,
и т.д.
Программные средства должны быть согласованы, чтобы было возможным их совместное функционирование. Подчеркнём, что работа на каждой фазе выглядит, как работа в единой среде, работа с единым языком. Так, скажем мы могли бы редактировать иерархически вложенные части описания, как подъязыковые фрагменты одной «многоязыковой» программы (как это происходит при работе с «составными документами»).
4.4 Достоинства и проблемы реализации технологии
Достоинства использования иерархической микроконтекстной технологии представляются следующими:
каждый элемент сложной информационной работы выполняется в микросреде, наиболее подходящей для работы как по языку, так и по интерфейсному оборудованию;
возможность независимого выбора производителей различных подсред и их замены обеспечивает высокое качество компонент комплекса;
программное обеспечение, поддерживающее работу в каждой из подсред (диалоговый монитор или редактор, интерпретатор или компилятор) весьма компактны и поэтому надёжны и дёшевы;
каждая из подсред проста в работе благодаря её компактности;
единый подход к различным информационным концепциям (т.е. в сфере программирования снимается различие между «алгоритмическими», «функциональными», «логическими» языками, между «программированием» и «использованием готовых программ»);
даже весьма небольшой набор различных подсред порождает значительные многообразие и мощность конкретных сред, иерархически формируемых этим множеством
обеспечивается максимальная возможность утилизации ранее разработанных элементов («reuse»).
Рад черт данной технологии в той или иной степени проявляются в современных индустриальных технологиях.
4.5 Уровни в иерархии моделей (параллели с формулой «модель, алгоритм, программа»)
На Рис. 4 изображена возможная иерархия описаний для сложной системы.
Рис. 4. Языковая иерархия при описании сложной системы.
Список литературы
1. Прохоров В.В. -схемы - язык графического представления алгоритмов. // «Кибернетика и системный анализ», №2, 1992 (ISSN 1060-0396). - С.93-107.
2. Prokhorov, V. PYTHAGORAS: Multienvironment Software. // In: B. Blumenthal, J. Gornostaev, and C. Unger, Eds. Human-Computer Interaction. Lecture Notes in Computer Science (LNCS), Vol.1015. Springer Verlag, Berlin, Germany, 1995. (ISBN 3-540-60614-9). - P.135-148.
3. Prokhorov, V. On Graph Representation of Syntax Definitions. // In: J.G. Chen, Ed. Expert Systems Applications & Artificial Intelligence. Technology Transfer Series. Gournay-Sur-Marne, France: IITT International, 1995 (ISBN 2-90766931-1). - P.53-58.
4. Прохоров В.В. О микроконтекстном подходе к построению языков представления знаний и человеко-компьютерного взаимодействия. // Известия РАН. Теория и системы управления, 1997, №5 (ISSN 1064-2307, 1555-6530). - С.5-16.
5. Prokhorov, V. Computational Portal: Remote Access to High-Performance Computing. // In: V. Malyshkin, Ed. Parallel Computing Technologies. Lectures Notes in Computer Science (LNCS). Vol.2127. Springer Verlag, Berlin, Germany, 2001. P.308-313.
6. Прохоров В.В. Комплекс интернет-медиасредств на базе компонентной р-технологии // Алгоритмы и программные средства параллельных вычислений. Вып.6. - Екатеринбург: ИММ УрО РАН, 2002. C.289-356.
7. Prokhorov, V. On Microcontext Representation of Knowledge and Programs. // В.М. Кормышев: ред. Современные компьютерные и информационные технологии. Сборник трудов международной научной Российско-Корейской конференции. Екатеринбург: УрФУ, 2012. - С.9-32.
Размещено на Allbest.ru
...Подобные документы
Анализ методологии и стандартизации оценки характеристик качества готовых программных средств: по функциональной пригодности, по корректности, по способности к взаимодействию, по защищенности. Процессы и продукты жизненного цикла программных средств.
контрольная работа [26,6 K], добавлен 23.01.2011Особенности архитектуры Java. Технология Java Database Connectivity. Кроссплатформенность Java-приложений. Преимущества языка программирования. Логическая структура базы данных. Структура программного комплекса. Верификация программных средств.
курсовая работа [962,8 K], добавлен 13.01.2016Инфологическая и даталогическая модели данных. Описание пользовательской части и используемых sql-запросов. Физическая и логическая модель web-приложения. Описание используемых программных средств, языка программирования и информационных технологий.
курсовая работа [1,3 M], добавлен 29.04.2015Аналитический обзор средств и языков описания интеллектуальных порталов. Устройство и особенности языка технологии OSTIS, результаты ее анализа. Разработка предметно-ориентированного языка проектирования интеллектуальных порталов. Описание пример модели.
дипломная работа [2,5 M], добавлен 08.11.2015Обзор существующих аналогов программных средств, предназначенных для построения генеалогических деревьев, их достоинства и недостатки. Выбор программных средств, разработка и реализация архитектуры системы хранения данных, отладка и тестирование сервиса.
дипломная работа [177,1 K], добавлен 24.06.2012Формулировка предметной задачи. Анализ требований к программе. Функциональная модель системы. Выбор языка и программных средств реализации. Описание логической модели базы данных. Концептуальная модель данных информационной системы Интернет-библиотеки.
курсовая работа [4,4 M], добавлен 13.10.2017Нормативные и правовые акты, регламентирующие применение современных программных средств в документационном обеспечении управления в Российской Федерации. Анализ программных средств для внедрения системы электронного документооборота в ООО "СЛМ-Монтаж".
дипломная работа [163,2 K], добавлен 10.05.2015Понятие CASE-средств как программных средств, которые поддерживают процессы создания и сопровождения информационных систем (ИС). Особенности IDEF-технологии разработки ИС. Описание нотации IDEF0. Разработка функциональных моделей бизнес-процесса.
презентация [399,8 K], добавлен 07.04.2013Основные задачи национального органа по стандартизации в России. Структура Федерального агентства по техническому регулированию и метрологии. Характеристика международных организаций по стандартизации программных средств и информационных технологий.
презентация [258,0 K], добавлен 27.12.2013Характеристика программных продуктов: MySQL, MSSQL, MSAccess. Разработка базы данных в среде C++Builder. Описание таблиц и установление связей между ними. Реализация функций просмотра, добавления, редактирования БД с применением языка запросов SQL.
курсовая работа [393,0 K], добавлен 13.06.2015Анализ средств информации консалтингового бизнеса: обзор языков программирования и программных средств для создания сайтов, информационных систем и сайтов консалтинговых фирм. Моделирование бизнес-процессов. Разработка интернет-представительства.
дипломная работа [2,9 M], добавлен 11.04.2012Создание тестовой программы на определение доминирующего полушария мозга у человека с применением наиболее распространенного языка Visual Basic for Applications. Выбор технических и программных средств. Интерфейс программы, ее тестирование и листинг.
курсовая работа [222,5 K], добавлен 08.01.2015Роль информационных технологий в образовании. Педагогическая целесообразность использования программно-методического обеспечения. Типология программных средств по методическому назначению. Описание программного продукта и его экономическая эффективность.
дипломная работа [2,4 M], добавлен 26.12.2011История развития языков программирования; создание и распространение языка С++; новый подход к разработке объектно-ориентированного программного обеспечения. Применение моделирования предметных областей для структуризации их информационных отражений.
реферат [29,1 K], добавлен 06.12.2010Особенности языка ассемблера. Классификация основных информационных систем. Выбор средств разработки автоматизированной справочной системы. Выбор средства проектирования и разработки приложения. Технические условия работы и порядок работы с программой.
дипломная работа [222,2 K], добавлен 25.03.2013Порядок и принципы документирования работ, выполняемых на этапе анализа и проектирования в жизненном цикле программных средств, нормативная основа. Описание пользовательского интерфейса прототипа разработанной информационной системы, его структура.
курсовая работа [472,9 K], добавлен 11.11.2014Обзор основных принципов построения информационных систем для торговли через Интернет. Сравнительная характеристика программных средств построения электронного магазина. Проектирования автоматизированной системы управления книжным Интернет магазином.
дипломная работа [4,2 M], добавлен 24.03.2010Анализ задачи модернизации и размещения технологического оборудования. Существующая модель предметной области. Выбор методологии разработки сетевой технологии и архитектуры. Выбор языка и среды программирования. Информационное моделирование интерфейса.
курсовая работа [4,3 M], добавлен 22.12.2011Разработка автоматизированной информационной системы для политехнического колледжа "Радиополитехникум" СПбПУ Петра Великого. Обзор средств программирования. Описание языка Delphi, приложения Microsoft Access. Определение затрат на проектирования.
дипломная работа [2,1 M], добавлен 05.06.2016Эксплуатация аппаратно-программных средств для хранения и обработки образовательной информации, интерактивного взаимодействия студента с преподавателем. Разработка документов HTML и языка JavaScript. Технология CSS и Web-дизайн, использование браузеров.
курсовая работа [554,5 K], добавлен 27.11.2010