Объектно-ориентированное программирование (ООП)

Объектно-ориентированное программирование - метод изготовления граблей по принципу матрешки
или подробно о "граблях" здесь  http://www.bladezone.ru/  и здесь

 Литература
1. Антнони Синтес Объектно-ориентированное программирование (207 руб. Вильямс)
Книга имеет два основных отличия от других учебников по объектно-ориентированному программированию. Многие классические монографии по объектно-ориентированному программированию предназначены для специалистов по программному обеспечению, и материал в них изложен на академическом уровне, причем сами монографии, как правило, могут служить учебным пособием по годичному курсу объектно-ориентированного программирования. В отличие от таких монографий, прорабатываемых под руководством преподавателя, в этой книге изложение ведется на уровне, доступном для начинающего программиста, при этом большое внимание уделяется тщательной проработке основных концепций объектно-ориентированного программирования. Автор предвосхищает все вопросы, которые могут возникнуть у начинающего программиста, и дает на них исчерпывающие ответы. Во всех уроках изложение доступно, материал запоминается автоматически, читателю даже не приходится прилагать каких-либо усилий, а ответы на контрольные вопросы и выполнение упражнений позволяют не только проконтролировать свои знания, но и обрести уверенность в правильном применении объектно-ориентированного подхода при разработке приложений.
 
В то время как другие книги по этой тематике учат применять объектно-ориентированный подход к разработке приложений на конкретном языке программирования, укладывая парадигму объектно-ориентированного программирования в прокрустово ложе преподаваемого языка программирования (к этой категории могут быть отнесены, например, многочисленные учебники по объектно-ориентированному программированию на C++), в данной книге изучаются именно концепции объектно-ориентированного программирования, а не их реализация в каком-либо языке программирования. Хотя все примеры программ в книге написаны на Java, программы разработаны так, чтобы представить концепции, которые читатель сможет реализовать в любой объектно-ориентированной среде. Книга предназначена для пользователей средней и высокой квалификации. Введение к книге см. таже здесь



Объектно-ориентированные технологии
Метод OOSE: подход, управляемый видами использования. Ивар Якобсон, Магнус Кристиансен, Ларри Константайн
Метод OOSE (Object-Oriented Software Engineering) - это систематизированный метод промышленной разработки программного обеспечения (ПО), разработанный Иваром Якобсоном. Он основывается на проектировании, управляемом видами использования - подходе, центральным звеном которого является понимание того, как фактически используется система. Организуя модели анализа и проектирования на основе последовательных взаимодействиях пользователя и системы (т.е. фактических сценариях её использования), указанная методология позволяет создавать более удобные, прочные системы, легче приспособляемые к изменениям. (Перевод А.Г.Иванова).

Объектно-ориентированный подход к технологии программирования, А.Г. Иванов, А.А. Пятницкий, Ю.Е. Филинов
Обобщается опыт применения объектно-ориентированного подхода к технологии программирования. По сравнению с традиционным функциональным подходом, вместо последовательных этапов цикла жизни программы решение задачи представляется в виде иерархии уровней, начиная с требований пользователя и кончая сопровождением готовой программы. Все уровни разрабатываются в единой среде программирования с использованием одного языка. Отмечается, как в объектно-ориентированной технологии решаются проблемы, присущие функциональному подходу: слабая формализация связей между этапами цикла жизни, внесение изменений в проект, повторное использование результатов разработок.
Возможность применения вышеуказанной схемы обеспечивают три единые для всех уровней средства: объектно-ориентированный язык, среда программирования, база данных (библиотека классов). Эти средства в явном виде составляют основу любой объектно-ориентированной технологии



Символьный С++: Введение в компьютерную алгебру с использованием объектно-ориентированного программирования

OOП на С++

Айра Пол Объектно-ориентированное программирование на С++
462 cтр.; тираж: 2000; мягкая обложка; формат: 70x100/16; Издательства: Невский Диалект, Издательство БИНОМ
Санкт-Петербург, 1999 год

Аннотация:
Книга Айры Пола, автора многих популярных изданий по С и С++, не является ни учебником по С++, ни курсом по объектно-ориентированному программированию (ООП) «вообще», хотя может быть полезна и в этих двух качествах. Задача книги (точно отраженная в названии) совершенно конкретна: научить читателя писать на С++ объектно-ориентированные программы. Для многих абстрактных идей и понятий ООП в С++ существуют конкретные воплощающие их конструкции. В каждой главе автор вводит и объясняет очередную «порцию» таких конструкций, демонстрирует технику их эффективного использования. В некоторых случаях возникающие перед программистом на С++ проблемы не могут быть непосредственно решены средствами языка. Здесь на помощь приходят разнообразные приемы, не владея которыми трудно программировать на С++ реальные задачи. Такие приемы поясняются автором на многочисленных примерах, причем наиболее показательные программы подвергаются тщательному разбору.
Много внимания на страницах книги уделено самым последним дополнениям С++: стандартной библиотеке шаблонов (STL), пространствам имен (namespaces), механизму идентификации типов во время выполнения (RTTI), явным приведениям типов (cast-операторам) и другим.
Книга в первую очередь рассчитана на программистов, желающих получить ясное представление о парадигме объектно-ориентированного программирования в С++. Издание также будет полезно преподавателям, студентам и всем, кто хочет освоить объектно-ориентированное программирование на С++



Бьерн Страуструп. Язык программирования С++

Книга Б. Страуструпа "Язык программирования С++" дает описание языка,
его ключевых понятий и основных приемов программирования на нем. Это
завершенное руководство, написанное создателем языка, которое содержит
описание всех средств С++, в том числе управление исключитель- ными
ситуациями, шаблоны типа (параметризованные типы данных) и мно- жественное
наследование.

Книга делится на три части. Первые десять глав являются учебником,
служащим введением в язык, включая подмножество собственно С. В трех
последующих главах обсуждаются вопросы проектирования и создания
программного обеспечения с помощью С++. Книга завершается полным
справочным руководством по языку.

В книге вы найдете:
* законченный учебник и руководство по языку.
* полное освещение средств языка, нацеленных на абстрактные типы данных
и объектно-ориентированное программирование.
* обсуждение программистских и технических вопросов, возникающих в про-
цессе проектирования и создания больших программных систем.
* описание способов построения библиотек высокого класса.
* примеры реализации ключевых типов данных, определяемых пользователем,
таких как графические объекты, ассоциативные массивы и потоки ввода-
вывода.
Эта книга будет хорошим помощником опытному программисту, решившему
использовать С++ для нетривиальных задач. Ее можно считать ключевой в
любом собрании книг по С++.



А.Л.Фридман Основы объектно-ориентированной разработки программных систем
Рассматриваются основные понятия объектно-ориентированного программирования, методы анализа задач и проектирование программных систем на его основе. Исследуются современные способы организации процесса создания программного обеспечения и их взаимосвязь с методами анализа проектирования систем, прежде всего на основе подхода "проектирование по образцам". Для студентов старших курсов, обучающихся по специальностям "Прикладная математика", "Кибернетика", "Вычислительная техника и управление", а также для всех, кто интересуется современными средствами разработки программного обеспечения


Visual RSL — среда разработки компонентов, предоставляющая в распоряжение разработчика набор базовых визуальных компонентов, достаточный для создания отчета. Еще более расширяет возможности программиста поддержка пакетом технологии ActiveX (пример).



Кнут Д.Э. - 2000, 703 стр. Искусство программирования.
В трех томах всемирно известной книги, которая уже давно стала учебником по вычислительной математике для многих поколений студентов.
ТОМ 1. ОСНОВНЫЕ АЛГОРИТМЫ
Значительно переработан раздел, посвященный вычислительной математике.
ТОМ 2. ПОЛУЧИСЛЕННЫЕ АЛГОРИТМЫ
Автор рассматривает фундаментальные понятия теории вероятности в приложении к вычислительным системам, предоставляя читателю готовые алгоритмы компьютерных программ. Особого внимания заслуживает новый метод автора генерации случайных чисел и описание алгоритмов вычисления формальных степенных рядов.
Том 3. Сортировка и поиск.
Дан обзор классических алгоритмов сортировки, поиска и и универсального хэширования.



Э. Петруцоса и К. Хау "Visual Basic 6 и VBA для профессионалов".
После краткого введения в основы объектно-ориентированного программирования авторы рассматривают построение компонентов ActiveX их использование в приложениях для Интернет. Отдельно описаны особенности построения элементов ActiveX для связи с данными. Многих читателей наверняка заинтересуют возможности расширения среды MS VB-6 при помощи надстроек (add-ins). В этой связи авторы демонстрируют достаточно тонкие детали использования различных свойств объектов для создания и подключения надстроек.  Это и работа с графикой в задаче о расчете фракталов, и построение DLL из среды Visual C++ 6 для последующего использования в среде VB-6, вопросы программирования для Web. Здесь также заслуживают внимания предложенные авторами способы создания активных страниц ASP для последующего использования с объектами ADO и построения приложений для MS IIS с использованием DHTML.


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


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


А.А.Семенов , А.Г.Юдина
Знакомство с объектно-ориентированным программированием на примерах и на занятиях.



Азы С++

Аннотации, введения, выдержки

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

Цель книги - дать вам прочные базовые знания в объектно-ориентированном программировании. Через 21 день вы будете хорошо разбираться в основных понятиях ООП. Используя эту базу, можно начать применять ООП в повседневных проектах, и в то же время пополнять свои знания в ООП, занимаясь дополнительно. За 21 день вы не обучитесь всему, что известно об ООП, - это просто нереально. Можно, однако, получить прочные базовые знания, что пригодится в дальнейшей учебе. Данная книга поможет вам именно в этом.

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

Во 2-й неделе говорится о процессе развития объектно-ориентированного программного обеспечения. В уроках дня 1-го "Вступление в объектно-ориентированное программирование" вам даются знания без какого либо руководства к действию, это подобно тому, если бы вам дали стройматериалы, пилу, молоток, несколько гвоздей и велели построить дом. В уроках недели 2 "Учимся применять объектно-ориентированный подход" рассказывается, как применять инструменты, о которых говорится в уроках недели I.

Неделя 3 "Собираем все вместе: полный объектно-ориентированный проект" содержит полный курс обучения ООП. В процессе изучения данного курса вы получите полное представление о предмете ООП, а также выполните много практических заданий по программированию. Я надеюсь, что это поможет вам научиться применять теоретические знания на практике.

В конце книги содержится большое количество приложений. Особенно важны приложение Б "Учебник для начинающих по языку Java", где излагаются основы Java и приложение Г "Избранная библиография", где содержится избранная библиография. Приложение Б "Учебник для начинающих по языку Java" является прекрасным учебником начал языка программирования Java. Библиография указывает источники, к которым можно обратиться при дальнейшем изучении ООП. Эти источники оказали большую помощь при написании данной книги.

О примерах
Примеры исходных программ написаны на Java и вам будет несколько проще разобраться, если вы уже знакомы с этим языком. Однако если вы его подзабыли или никогда с ним раньше не работали, вам поможет приложение Б "Учебник для начинающих по языку Java". Было довольно сложно подобрать наиболее доступные примеры, рассчитанные на то, что у вас есть минимум знаний по программированию. Автор намеренно избегал использования в примерах специфических особенностей языка Java и его уловок.

Что необходимо знать для работы с этой книгой
Эта книга предполагает наличие у читателя определенного опыта в программировании, и обучение основам не является ее целью. С ее помощью вы сможете применить уже имеющиеся у вас знания для написания объектно-ориентированного программного обеспечения. Чтобы читать и понимать эту книгу, ученая степень "гуру" в области программирования не нужна. Вам необходимо усвоить какой-нибудь вступительный курс программирования или же прочитать один из самоучителей программирования (одна из книг по программированию в серии Освой самостоятельно (Teach yourself), выпускаемой издательством Sams).

Чтобы от примеров и упражнений получить максимальную пользу, необходим компьютер и доступ к Internet. Операционную среду и программу редактирования выбирайте по своему вкусу. Единственное требование состоит в том, чтобы вы сумели загрузить, проинсталлировать и запустить Java. В приложении Б "Учебник для начинающих по языку Java" рассказывается, как получить Java SDK .

И, наконец, будьте решительны, настойчивы и любознательны. Научиться объектно-ориентированному программированию не так просто и это потребует больше, чем 21 день, однако с помощью этой книги вы получите прочные базовые знания.

Удивительный мир ООП ждет...


Подход OOSE (полный текст здесь)
Разрабатываемые в процессе анализа модели полностью ориентированы на приложения, а не на среду реализации. Это "существенные" модели, которые не зависят от операционной системы, языка программирования, СУБД, распределения процессов, конфигурации аппаратуры. Это и будет нашим определением анализа: моделирование системы без учёта реальной среды реализации. Цель состоит в том, чтобы сформулировать проблему и построить модели, которые могут решить её при идеальных условиях. Поскольку модели целиком проблемно-ориентированы и не уделяется никакого внимания реальной среде реализации, эти модели довольно просто могут быть разработаны от постановки задачи до их функционирования. Мы, следовательно, можем сконцентрироваться целиком на проблеме как таковой и отбросить на первом этапе технические детали. Модели, основанные на проблемно-ориентированных понятиях, можно обсуждать с пользователями без употребления реализационных терминов.

В конечном счёте, система должна быть адаптирована к среде реализации: это делается на этапе конструирования. Тот факт, что во время анализа среде реализации не посвящается много внимания, гарантирует, что результирующая архитектура системы будет основана на самой проблеме без влияния условий, превалирующих на этапе реализации. Конечно, невозможно разрабатывать систему полностью без учёта реализации, поскольку модели и их архитектура должны быть реализуемы. Другое большое преимущество этой процедуры то, что модели анализа могут оставаться нетронутыми и применимыми, если и когда условия реализации меняются.

На этапе анализа разрабатываются две различных модели: модель требований и модель анализа. Они основаны на спецификациях требований и дискуссиях с будущими пользователями системы. Первая, модель требований, должна определить границы системы и те действия, что происходят внутри системы. Для этой цели мы разрабатываем концептуальную картину системы, используя объекты проблемной области, а также описания специального интерфейса, если это важно для системы.

Кроме того, мы описываем систему как набор "видов использования", которые выполняются некоторым числом "актёров". Актёры составляют среду использования системы, а виды использования - это то, что происходит внутри системы. Вид использования - одно из уникальных понятий методологии OOSE.

Модель анализа - архитектурная модель, используемая для анализа целостности системы. Она даёт концептуальную конфигурацию системы, состоящую из различных классов объектов: активных контроллеров, проблемных сущностей, интерфейсных объектов. Цель этой модели - найти прочную и расширяемую структуру для системы как основу для конструирования. Каждый тип объекта имеет специальную цель для такой прочности: вместе они составят общую функциональность, которая была определена в модели требований. Для управления разработкой модель анализа может группировать объекты в подсистемы.

Модель анализа состоит из общей функциональной спецификации разрабатываемой системы, без учёта среды реализации. Модель проектирования, разрабатываемая в процессе конструирования, включает в себя части этой среды, язык реализации, СУБД, и т.п. Модели анализа и проектирования обе суть модели системы, но каждая имеет различную цель. Способность слежения за системой улучшается благодаря тому, что объекты одной модели могут прямо соответствовать объектам другой модели.

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

Процесс тестирования следует за процессом конструирования. Здесь все виды использования системы тестируются и проверяются на правильность. Это не означает, что мы должны ждать перед началом сертификации системы, когда все части будут сконструированы. Вместо этого мы пытаемся сделать как можно больше параллельно. Мы даже пытаемся начать конструирование до того, как будет завершена фаза анализа.

Какова же цель процесса конструирования? Разве нельзя написать текст программы прямо из модели анализа, которая уже описывает и объекты системы, и как они относятся друг к другу? Есть три главные причины необходимости процесса конструирования.

Модель анализа недостаточно формальна, чтобы плавно перейти к тексту программы. Мы должны уточнить объекты: какие следует предложить операции, как в точности должна выглядеть связь между различными объектами, какие посылать сообщения и т.д.
Необходимо выполнить адаптацию к фактической среде реализации. На фазе анализа мы предполагаем, что наша система окружена идеальным миром. Мы теперь должны преобразовать модель анализа из пространства анализа в пространство проектирования, принимая во внимание, например, такие факторы: требования к производительности, требования к реальному времени и параллельности действий, системное программное обеспечение, свойства языка программирования, используемую систему управления базами данных и т.д.
Мы хотим выполнить доказательство правильности результатов анализа. По мере расширения нашей системы и повышения степени её формализации, мы будем видеть, насколько хорошо модели анализа описывают систему. Во время конструирования мы можем увидеть, будут ли результаты анализа подходящими. Если мы обнаружим неясные места в моделях анализа или требований, нужно прояснить их, возможно путём возврата к процессу анализа.
Конструирование делится на две фазы: проектирование и реализацию, каждая из которых разрабатывает модель. Модель проектирования - дальнейшее уточнение и формализация модели анализа, в которой учитывается влияние среды реализации. Модель реализации - фактическая реализация системы.

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

Компонентное тестирование выполняется на специальном компоненте, который может быть разного размера, от класса до целой подсистемы. Первоначально компонент тестируется структурно (т.е. как "белый ящик"). Это означает, что мы используем наши знания о внутреннем устройстве компонента. У нас есть различные критерии покрытия для тестов, минимальный из которых покрывает все операторы текста программы. Однако критерии покрытия бывает трудно определить из-за полиформизма, когда много ветвлений управления в объектно-ориентированных программах происходят неявно. Использование наследования также усложняет тестирование, поскольку нам приходится заново тестировать операции на различных уровнях и иерархии наследования. Тем не менее, полиформизм повышает независимость объектов, делая их легче тестируемыми как отдельные части. Далее, поскольку у нас меньше текста программы, то и тестировать легче.

Тестирование спецификации компонента делается в основном по протоколу объекта (так называемое тестирование "чёрного ящика"). Здесь для нахождения подходящих случаев для тестов мы используем "эквивалентное разбиение". В методологии OOSE тестирование выполняется в течение всей разработки. Даже интегральное тестирование можно начинать на ранних стадиях разработки. Экземпляры различных классов можно объединять непрерывно в течение процесса разработки. Понятие вида использования имеет решающее значение для фактической



Какие-то отдельные моменты:
Широко распространены объектно-ориентированные расширения традиционных языков (Си++)
 Объектно-ориентированная база классов представляет собой иерархический набор (библиотеку) классов - строительных блоков для сборки новых уровней создаваемого программного продукта. Здесь хранятся классы "джентльменского набора" библиотек языков программирования, а также классы, описывающие понятия прикладных предметных областей.
Классы представляют собой накопленные знания о ранее изготовленных продуктах, следовательно здесь вполне допустимо употребление термина "база знаний". База классов должна обеспечивать легкий поиск классов, их изучение, модификацию, включение новых классов. Язык и база классов объединяются в интегрированную объектно-ориентированную среду программирования (ООСП), в которой все средства поддержки процесса разработки программ написаны на данном языке и входят на равных правах в состав базы классов. Типичными примерами таких средств являются графический многооконный интерфейс с пользователем, иерархические меню, компилятор, интерпретатор, отладчик, текстовый редактор.

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

Основные идеи объектно-ориентированного подхода опираются на следующие положения:

- Программа представляет собой модель некоторого реального процесса, части реального мира.

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

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

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

- Объекты, описанные одним и тем же набором параметров и способные выполнять один и тот же набор действий представляют собой класс однотипных объектов.

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

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

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

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

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

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

Наиболее используемыми в настоящее время объектно-ориентированными языками являются Паскаль с объектами и Си++, причем наиболее развитые средства для работы с объектами содержатся в Си++.

Практически все объектно-ориентированные языки программирования являются развивающимися языками, их стандарты регулярно уточняются и расширяются. Следствием этого развития являются неизбежные различия во входных языках компиляторов различных систем программирования. .Наиболее распространенными в настоящее время являются системы программирования Microsoft C++ , Microsoft Visual C++ и системы программирования фирмы Borland International. Дальнейший материал в данном пособии излагается применительно к системе программирования Borland C++. Это связано прежде всего наличием в этой системе программирования развитой интегрированной среды, объединяющей текстовый редактор, компилятор, редактор связей (компоновщик) и отладочные средства.



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

Java – это объектно-ориентированный язык программирования, разработанный для использования в Интернет. Java является кросс-платформенным языком, что позволяет выполнять Java-программы на различных компьютерных системах, независимо от того, какие микропроцессоры или операционные системы эти компьютеры используют
 

2.4 Новые подходы и инструменты разработки программного обеспечения

--------------------------------------------------------------------------------

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

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

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

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

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

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

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

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

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


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

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

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

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


Японские разработчики не оценили перспектив развития Интернета, не поняли возникшей необходимости использовать совершенно иные подходы.

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

Эти языки получили широкое распространение из-за высокой гибкости и адаптации к нуждам Интернета. Яркие примеры - Perl, применяемый для обмена данными между интернет-сервером и компьютером пользователя, и Python, используемый, помимо прочего, для управления интернет-форумами. Есть языки и с более странными именами, такими как Tcl/Tk, awk и C Shell. Есть даже сценарный язык JavaScript, но его название - не более чем маркетинговый ход, поскольку этот язык никак не связан с Java.

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

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


Объектный подход

Еще одной тенденцией, которая появилась до возникновения Интернета, но получила благодаря ему хороший стимул к развитию, был переход к объектно-ориентированному программированию. Компьютерные объекты, о которых идет речь, - это удобное представление объектов реального мира в виде программного кода. Например, кнопка на интернет-странице является объектом. Программист может манипулировать им, используя ограниченный набор методов, который одинаков для таких кнопок. Это отличает объектные языки от «процедурных» языков, таких как Fortran и C, которые предполагают самостоятельное создание конкретных элементов, например рисования кнопки на экране. В этом случае программисту приходится заново придумывать кнопку для каждой новой программы. Как показывает пример с кнопкой, объекты особенно хороши для использования в графическом интерфейсе пользователя - на удобном рабочем столе, который предлагают пользователям Windows и Всемирная паутина.

Цена, которую приходится платить за использование объектов, - необходимость оснащения языка программирования обширной библиотекой различных классов объектов. Это делает язык тяжеловесным и громоздким в использовании. В некоторых версиях Smaltalk, первого объектно-ориентированного языка, библиотеки содержали тысячи объектных классов. Однако эффект от использования объектных библиотек значительно превосходит затраты на их хранение, особенно сейчас, когда мощность процессора и емкость памяти высоки и одновременно дешевы. В исключительных случаях, когда размер все-таки важен, объектные библиотеки могут быть урезаны до минимума. Java, который является объектно-ориентированным языком, сейчас поставляется и в мини-версии, которая умещается на смарт-карте - кредитке с чипом для шифрования данных в мобильных телефонах и других портативных устройствах.

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

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

Одновременно с появлением сценарных и объектно-ориентированных языков программирования, которое отражает новые веяния, в последнее десятилетие произошли изменения в понимании природы языка программирования. Успех Java и надежды, которые Microsoft возлагает на C#, не имеют отношения к языкам как таковым (оба являются версиями C++ - объектного варианта языка C). Более важным для этих языков является то, что они встроены в программную среду Интернета.



О Перле
Все о Perl


КОМПЬЮТЕРНАЯ И МЕТОДИЧЕСКАЯ СТОРОНЫ В РАЗРАБОТКЕ СТРУКТУРЫ ЭЛЕКТРОННОГО УЧЕБНИКА ПО АСТРОНОМИИ (объектно-ориентированный подход)

Дерево понятий на примере организации обучения одной группы



Щедрина А.А. Интеллектуальные агенты как средство автоматизации роли преподавателя
Данная статья посвящена проблеме автоматизации роли преподавателя в дистанционной системе обучения. Ее решениwе представлено с использованием технологии мультиагентов на основе использования системы взаимодействия клиент–сервер. Система позволяет вести учетные записи пользователей (контроль, прохождение материала и т.д.), проводить тестирование, общение и на их основе представлять направляющую информацию обучаемому. Особое внимание уделяется мультиагентным технологиям в дистанционном образовании.

Диграммы структурирования