АРТ- ВЕКТОР: ДИАЛОГ И МЕТОДЫ

Объектно - ориентированный подход
Программа для работы  с векторной графикой  в скриптах и в приложениях
 

Аннотация

        Книга, изданная по лицензии Морского государственного университета имени адмирала Г.И. Невельского, представляет систему «Арт-Вектор» — ее диалог и методы объектно-ориентированного программирования для решения самых разнообразных задач в художественной и инженерной практике.

Авторы не только детально описывают работу системы «Арт-Вектор» и ее методы, но и демонстрируют ее использование на уроках автоматизированного обучения в таких традиционно сложных дисциплинах как начертательная и аналитическая геометрии, векторно-графический анализ, основы художественного творчества, основы художественного конструирования судов — как блока скрипт-тренажерных интерактивных технологий в Интранете и Интернете.

Кроме того, система «Арт-Вектор» ориентирует пользователя и предоставляет ему возможности создания активных страниц ASP для последующего построения приложений с использованием DHTML, обеспечивающих работу по принципу пользователь — клиент-сервер.

На прилагаемом CD вы найдете 2-ю версию системы «Арт-Вектор», документацию для работы с ней, а также набор скриптов, фактически  мини-тренажеров для обучения, освоения и решения многих задач человеческой деятельности.
 


 

Введение

Объектно-ориентированное программирование (OOП) — это не философская идея, а реально воплощающая в программирование концепция. Такие языки, как Си++, Gava, Perl, имеют ярко выраженную структуру ОПП. Однако наиболее используемыми в настоящее время объектно-ориентированными языками являются Дельфи, Си++, причем наиболее развитые средства для работы с объектами содержатся в Си++.

Система «Арт-Вектор» создана и продолжает развиваться на С++. Однако пользователю системы «Арт-Вектор» не требуется знания ООП: система сама создана на этих принципах. В то же время, при написании скриптов для Интернет-приложений нужно знать методы (классы, объекты) других языков — Java, VBS, Perl, и здесь уже без общих знаний объектно-ориентированного программирования не обойтись. Кроме того, концепция ООП сама по себе полезна как при разработке проблемно-ориентированного комплекса задач (макрокоманд, скриптов), так и вообще стратегии разработки действий, например, при организации выпуска полиграфической продукции, просто издания книги, написания художественного произведения, создания автоматизированного обучения по той или иной дисциплине.

Другое преимущество объектного программирования в том, что группы пользователей (розничных торговцев, риэлторов, врачей) могут создавать и обмениваться ими. Поэтому объектно-ориентированное программирование очень соответствует командному духу «Всемирной паутины».
Неудивительно, что практически каждый из языков, который раньше не был объектно-ориентированным, теперь становится таковым. Delphi — это объектная версия Pascal, некогда лучшего языка для обучения работе с вычислительной техникой. Объектным расширением Basic, любимого языка программистов-новичков, является Visual Basic Sript. Даже старомодный язык программирования для бизнеса Cobol был переделан в ooCobol. Тем временем философия объектно-ориентированного программирования достигает все более высоких уровней абстракции. Относительно новым и модным развитием этой концепции стали программные шаблоны, которые содержат части кода, необходимые для успешного решения однотипных задач, часто повторяющихся при разработке программного обеспечения. Шаблоны по отношению к объектам — это все равно, что панельные дома в сравнении со зданиями из кирпича.

Другим важным моментом при создании системы — а «Арт-Вектор» в первую очередь система — это ее надежность. В этом плане авторы ориентировались на следующее правило: при разработке систем необходимо избегать сложных, запутанных решений, приводящих к ошибкам. Поэтому был сделан основной акцент на создание методов, которые можно использовать в локальных скрипт (апплет) технологиях.

Большие системы больше подвержены ошибкам, многие из которых могут быть обнаружены только при исчерпывающем тестировании системы и даже в течение некоторого срока эксплуатации. Так, программа, работающая в банкоматах Ситибанка, содержит 780 000 строк программного кода, который писали сотни людей, каждый — свою небольшую часть. Система «Арт-Вектор» имеет не меньше кодов, однако,  эти коды писал в основном один человек, и ошибок, надеемся, здесь меньше.

Например, AT&T нашла в одном из своих крупных приложений примерно по 300 ошибок на каждые 1000 строк кода. Разработчикам неизвестно, экспоненциально или пропорционально возрастает количество ошибок по отношению к числу строк кода, но никто не может гарантировать, что все части большой программы, написанной несколькими людьми, будут работать в полной гармонии.
Процесс разработки и тестирования такого программного обеспечения, которое не содержало бы ошибок, — это серьезная проблема управления контролем качества.

С другой стороны, стоит другая проблема. Рост производительности приложений не поспевает за стремительным развитием аппаратного обеспечения компьютеров. Поэтому разработка программного обеспечения должна вестись «на шаг вперед». Более того, программное обеспечение само по себе — только часть информационной системы, все части которой должны быть тщательно проработаны и согласованы со всеми ее будущими пользователями. Все вопросы, касающиеся управления, исполнения и политики организации должны быть изучены перед тем, как приступать к написанию программного кода. Несоответствие потребностям организаций и пользователей — реальная проблема больших информационных систем. Для разработки программного обеспечения, без сомнения, нужно привлекать лучших специалистов в данной области, владеющих самыми современными методами создания приложений.

Разработчики системы «Арт-Вектор» пытались избегать сложных, запутанных решений, приводящих к ошибкам. Главный автор программного кода системы «Арт-Вектор» Ю.И. Роньшин  является лучшими специалистом в области программирования на С++, владеющий самыми современными методами создания приложений. Им, кроме системы «Арт-Вектор», написаны и пишутся другие мощные системы по конструктивной геометрии (система CG; владелец системы — лаборатория машинной графики ИАПУ, руководитель В.А. Бобков) в приложениях к моделированию внутренних процессов моря, ландшафтов береговой линии, картографии.

Интернет придает большую важность программисту, нежели самому языку программирования. Изящество языков программирования, так ценимое прежними поколениями разработчиков, здесь принесено в жертву удобству использования. Именно это важно для людей, разрабатывающих Интернет-приложения в очень сжатые сроки. В результате в последнее десятилетие появились сценарные языки программирования, позволяющие писать программы «на скорую руку», - «клейкая лента» Всемирной паутины Яркий пример — язык Perl, применяемый для обмена данными между Интернет-сервером и компьютером пользователя. Этот язык получили широкое распространение из-за высокой гибкости и адаптации к нуждам Интернета.

Автором активного применения языка Perl, или так называемого программирования «на скорую руку», в коллективе разработчиков системы «Арт-Вектор» стал В.В. Герасимов. Это благодаря ему, на принципах ООП удалось в короткие сроки увязать систему «Арт-Вектор» c языками Perl, Gava и оперативно написать по основам художественного творчества и конструирования судов несколько десятков скриптов, отвечающих потребностям учебного процесса по этим дисциплинам.


I. Основные принципы объектно-ориентированного программирования, как основной концепции системы  «Арт-Вектор».

Принцип наследования — один из трех основных принципов объектно-ориентированного программирования. Он реализуется через механизмы наследования и виртуальных классов (создания в классах определенного набора методов), которые позволяют строить новые производные классы (методы) на основе ранее объявленных базовых.

Принцип инкапсуляции — второй принцип объектно-ориентированного программирования, делает процесс программирования еще более похожим на работу в сборочном цехе. Хорошо спроектированный класс имеет открытый интерфейс для взаимодействия с «внешним миром» и защищённую от случайного воздействия «внутреннюю» часть. Разделение класса на скрытую внутреннюю часть и открытый интерфейс обеспечивается системой управления доступом к компонентам класса и дружественными функциями.

Принцип полиморфизма (полиморфизм означает многообразие форм) — еще один принцип  объектно-ориентированного программирования. Он заключается в способности объекта во время выполнения программы динамически изменять свои свойства. Возможность настройки указателя на объект базового класса на объекты производных классов и механизм виртуальных функций лежит в основе этого принципа объектно-ориентированного программирования.

Кроме трех основных принципов, не меньшее значение в ООП  имеют паттерны, с помощью которых можно создавать достаточно общие модули, называемые объектами. Паттерны проектирования дают общее решение распространенных проблем. Это позволяет не изобретать велосипед, а строить реальные модули проектирования.

Традиционные методы разработки программного обеспечения рассматривают данные и процедуры как независимые компоненты. Когда программисту необходимо сделать что-либо с отдельным массивом данных, он должен написать специально для этой операции отдельную процедуру. Процедуры работают с данными, которые им передает программа.

Что делает объектно-ориентированное программирование отличным от традиционного? В объектно-ориентированном программировании (object-oriented programming) данные и предназначенные для их обработки процедуры соединяются в один объект (object). Объект, таким образом, представляет собой комбинацию данных и программного кода. Вместо передачи данных процедурам, программа посылает объекту сообщение (message) выполнить процедуру, уже встроенную в него.

В объектно-ориентированных языках программирования процедуры называются методами (methods). То же сообщение может быть послано множеству других объектов, но каждый объект будет обрабатывать сообщение отлично от другого. Например, объектно-ориентированное финансовое приложение может содержать объекты «Заказчик», которые отсылают сообщения объектам «Счет». Объекты «Счет», в свою очередь, могут содержать объекты «Наличные деньги», «Счета к оплате», «Оплаченные счета».
Данные объекта скрыты от других частей программы и могут быть обработаны только внутри объекта. Способ обработки данных объекта может изменяться внутри самого объекта, не оказывая влияния на остальные части программы. В то же время дочерние объекты могут наследовать свойства родительских, что упрощает процесс разработки приложений. Программисты могут сфокусировать свое внимание на том, что объект должен сделать, а объект решает, как это сделать.

Поскольку данные объекта инкапсулированы (то есть, отделены) от других частей системы, каждый объект представляет собой отдельный программный блок, который может быть использован во многих различных системах без изменения исходного кода. Следовательно, можно предположить, что объектно-ориентированное программирование уменьшит время и стоимость разработки программного обеспечения, предоставив разработчикам повторно используемый код, который можно использовать на самых разных аппаратных платформах.

Некоторые аналитики считают, что в будущем программирование сведется к созданию приложений на основе данных библиотек повторно используемого кода. Объектно-ориентированное программирование привело к возникновению новой технологии, визуальному программированию (visual programming). При использовании визуального программирования программистам не нужно писать код программ. Вместо этого они с помощью мыши копируют необходимые объекты из библиотек или устанавливают связи между объектами простым рисованием линий.

Сущность объектно-ориентированного подхода к программированию

Основные идеи объектно-ориентированного подхода опираются на следующие положения:
— Программа представляет собой модель некоторого реального процесса, части реального мира.
— Модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов.
— Объект описывается набором параметров, значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект.
— Взаимодействие между объектами осуществляется посылкой специальных сообщений от одного объекта к другому. Сообщение, полученное объектом, может потребовать выполнения определенных действий, например, изменения состояния объекта.
— Объекты, описанные одним и тем же набором параметров и способные выполнять один и тот же набор действий, представляют собой класс однотипных объектов.

С точки зрения языка программирования класс объектов можно рассматривать как тип данного, а отдельный объект — как данное этого типа. Определение программистом собственных классов объектов для конкретного набора задач должно позволить описывать отдельные задачи в терминах самого класса задач (при соответствующем выборе имен типов и имен объектов, их параметров и выполняемых действий).

Таким образом, объектно-ориентированный подход предполагает, что при разработке программы должны быть определены классы используемых в программе объектов и построены их описания, затем созданы экземпляры необходимых объектов и определено взаимодействие между ними.

Классы объектов часто удобно строить так, чтобы они образовывали иерархическую структуру. Например, класс «Студент», описывающий абстрактного студента, может служить основой для построения классов «Студент 1 курса», «Студент 2 курса» и т.д., которые обладают всеми свойствами студента вообще и некоторыми дополнительными свойствами, характеризующими студента конкретного курса. При разработке интерфейса с пользователем программы могут использовать объекты общего класса «Окно» и объекты классов специальных окон, например, окон информационных сообщений, окон ввода данных и т.п. В таких иерархических структурах один класс может рассматриваться как базовый для других, производных от него классов. Объект производного класса обладает всеми свойствами базового класса и некоторыми собственными свойствами; он может реагировать на те же типы сообщений от других объектов, что и объект базового класса, и на сообщения, имеющие смысл только для производного класса. Обычно говорят, что объект производного класса наследует все свойства своего базового класса.

Некоторые параметры объекта могут быть локализованы внутри объекта и недоступны для прямого воздействия извне. Например, во время движения объекта-автомобиля объект-водитель может воздействовать только на ограниченный набор органов управления (рулевое колесо, педали газа, сцепления и тормоза, рычаг переключения передач), и ему недоступен целый ряд параметров, характеризующих состояние двигателя и автомобиля в целом.

Как реализуются ООП, можно проследить на примере Java.

Java — это объектно-ориентированный язык программирования, комбинирующий данные и определенные функции обработки этих данных. Java сконструирован таким образом, что программист может создавать апплеты (applets) — крохотные Java-программки, каждая из которых выполняет одну небольшую функцию. К примеру, чтобы изменить данные о подчиненных какого-либо работника, вместо запуска целой персональной информационной системы, вы можете запустить только маленький апплет для выполнения именно этой операции. Теперь, если допустить, что ваша информационная система написана на Java и находится на сервере локальной сети вашей организации, а не на вашем ПК, все, что потребуется вашей программе, — это запросить у системы на сервере необходимые данные. Будут получены только те данные, которые вам необходимы. Когда вы закончите обработку, вы сохраните результаты работы на сервере, а ненужная уже информация автоматически исчезнет с вашего ПК.

Сценарные языки программирования гораздо проще языков четвертого поколения. По сути, все они — языки-интерпретаторы. Это значит, что компьютер исполняет команды программиста в пошаговом режиме, вместо того, чтобы сначала «скомпилировать» (перевести) всю программу в машинный код перед ее выполнением. Написание программы на таком языке сродни придумыванию пар рифмованных строчек, тогда как написание компилируемой программы подобно сочинению сонета.

Это делает сценарные языки идеальными для написания небольших программ, но не для использования в крупных проектах. Кроме того, сценарные языки допускают вольную трактовку правил написания кода, на компьютерном жаргоне они называются «нестрогими». Сценарные языки предназначены для написания программ — посредников между другими программами, а не самостоятельных приложений. Они подобны клею, что делает их удобными для использования в Интернет-приложениях, суть которых как раз и состоит в обмене данными между программами.

И в тоже время программирование «на скорую руку»  является, в первую очередь, объектно-ориентированным. Компьютерные объекты — это удобное представление объектов реального мира в виде программного кода. Например, кнопка на Интернет-странице является объектом.

Программист может манипулировать им, используя ограниченный набор методов, который одинаков для таких кнопок.

Возникает вопрос, что библиотека различных классов (методов) может непомерно расти, что снижает их оперативность применения, и главное, делает систему тяжеловесной и громоздкой в использовании.

Обычно методов не так уж много, в системе «Арт-Вектор» их 50. Однако эффект от использования объектных библиотек значительно превосходит затраты на их хранение. Кроме того методы можно классифицировать по тем или иным признакам.

Пример. Создание отчета с использованием компонентного подхода. Отчет состоит из компонентов двух типов:
— источники, которые занимаются получением данных от прикладных программных систем или СУБД и их предварительной обработкой;
— визуальные, отвечающие за предоставление конечному пользователю информации, полученной от источника данных.

Визуальные компоненты могут быть простыми (отображают часть информации из отчета) и сложными (состоят из десятков или даже сотен простых визуальных компонентов). Собственно говоря, отчет — это и есть сложный визуальный компонент. Таким образом, создание отчета превращается в процесс разработки сложного визуального компонента путем объединения в нем уже существующих простых.
Несмотря на внешнее многообразие, почти все отчеты имеют одинаковые элементы оформления и общие источники данных. Выделение таких частей в виде отдельных компонентов может значительно ускорить разработку всего комплекса отчетности. В итоге, спустя некоторое время, в распоряжении разработчика окажется достаточное количество компонентов (как источников данных, так и простых визуальных), позволяющих просто собирать новые отчеты, подобно тому, как строитель собирает дома из готовых блоков. Но одних только блоков для строительства целого здания недостаточно. Необходимо нечто, связывающее эти блоки друг с другом, т. е. нужен механизм, способный передать визуальным компонентам информацию, полученную от компонентов — источников данных.

Каждый компонент обладает собственным интерфейсом и некоторыми свойствами, называемыми в объектно-ориентированном программировании методами. Процесс формирования отчета заключается не только в сборке всех компонентов вместе, но и в создании интегрального интерфейса отчета, методы которого связывают все выбранные компоненты между собой. А поскольку отчет — равноправный компонент, к нему можно обращаться из любого программного продукта, поддерживающего работу с соответствующими интерфейсами.

В заключение следуют сказать, что авторы не претендуют на исчерпывающий обзор ООП и тем более на их исчерпывающее применение. Однако шаг в этом направлении сделан, система «Арт-Вектор» со своими методами и диалогом — и Интернет-технологии с языками объектно-ориентированного программирования Gava, Delfi, VBS могут дать пользователю то, о чем он давно мечтал: оперативное создание своих программ (скриптов), отвечающих только его требованиям, вкусу и эмоциям. Кроме того, система «Арт-Вектор» — это готовый инструмент для творчества, позволяющий непосредственно в диалоге на экране видеть мир по своему, совершая самые разнообразные перевоплощения.

Диалог система обеспечивает также и элементы конструкторской деятельности в моделировании 3D объектов. А скрипты больше относятся к тренажерной среде обучения и в понимании проблем, стоящих в инженерной и творческой деятельности.