Современные проблемы информатики и вычислительной техники

advertisement
Министерство образования РФ
АМУРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
( ГОУВПО «АмГУ» )
УТВЕРЖДАЮ
Зав. кафедрой ИУС
___________А.В.Бушманов
«______»_______________
УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС
по дисциплине «Современные проблемы информатики и вычислительной
техники»
для магистратуры по направлению 230100.68 «Информатика и
вычислительная техника»
1
Составитель доцент кафедры ИУС Галаган Т.А.
Факультет математики и информатики
Кафедра информационных и управляющих систем
2010
Печатается по решению
редакционно-издательского совета
факультета математики и информатики
Амурского государственного
2
университета
Т.А. Галаган
Учебно-методический комплекс по дисциплине «Современные
проблемы информатики и вычислительной техники» для магистратуры
по направлению 230100.68 «Информатика и вычислительная техника» очной
формы обучения. – Благовещенск: Амурский гос. ун-т, 2010.
Пособие содержит рабочую программу, курс лекций, методические
рекомендации
по
проведению
и
выполнению
лабораторных
работ,
самостоятельной работы; составлено в соответствии с требованиями
государственного образовательного стандарта.
3
 Амурский государственный университет, 2010
I.
ПРИМЕРНАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ,
УТВЕРЖДЕННАЯ МИНИСТЕРСТВОМ ОБРАЗОВАНИЯ РФ
Государственный образовательный стандарт высшего
профессионального образования
Направление подготовки магистрата 230100.68 - Информатика и
вычислительная техника
Наименование дисциплины – Современные проблемы информатики и
вычислительной техники
Блок дисциплины направления ДНМ 01
Всего часов – 100
Содержание разделов:
Современные проблемы информатики и вычислительной техники;
математические проблемы информатики, теория сложности алгоритмов;
развитие языков, методов и технологий программирования, современные
архитектуры ВС, параллельные системы, ВС с массовым параллелизмом;
развитие вычислительных сетей и телекоммуникаций; новые принципы и
модели вычислений, новые парадигмы программирования; верификация
программ; системы компьютерной алгебры; синергетика и информатика;
системы искусственного интеллекта; новые технологии извлечения знаний из
больших баз данных; задачи, модели и проблемы человеко-машинного
взаимодействия; тенденции и перспективы развития информатики и
вычислительной техники; правовые, экономические, социальные и
психологические аспекты информатизации деятельности человека.
4
II РАБОЧАЯ ПРОГРАММА
ЦЕЛИ И ЗАДАЧИ ДИСЦИПЛИНЫ
1.1. Цель преподавания дисциплины: изучение современного уровня
развития информатики и вычислительной техники; теории алгоритмов,
языков
и
методов
программирования;
современных
архитектур
вычислительных систем; тенденций и перспектив развития информатики и
вычислительной техники.
1.2. По завершению обучения дисциплине студент должен:
иметь представление об истории развития, а также о современных
проблемах информатики и вычислительной техники;
знать основные архитектурные решения и парадигмы обработки
информации;
уметь строить информационные модели обработки информации;
владеть навыками работы с современным программным обеспечением
и создания программных приложений.
Основная форма индивидуальной деятельности
магистранта
заключается в подготовке обзорных и/или аналитических докладов по
современным проблемам информатики и вычислительной техники.
2. СОДЕРЖАНИЕ ДИСЦИПЛИНЫ
2.1. ФЕДЕРАЛЬНЫЙ КОМПОНЕНТ
Программа курса "Современные проблемы информатики и
вычислительной техники" составлена в соответствие с требованиями с
требованиями государственного образовательного стандарта направления
230102, Блок дисциплины направления ДНМ 01.
2.2. ЛЕКЦИИ (18 часов)
2.2.1. Современное состояние теории алгоритмов (2 часа).
2.2.2. Парадигмы программирования. Современные подходы в
программировании (2 часа).
2.2.3. Понятие, история развития и структура современной системы
программирования (2 часа).
2.2.4. Понятие «синергетика». Аксиомы синергетики (2 часа).
2.2.5. Способы представления знаний (2 часа).
2.2.6. Обзор средств современной вычислительной техники. Перспективы
развития вычислительной техники (4 часа).
5
2.2.7. Современные сетевые технологии работы компьютерных сетей (2
часа).
2.2.8. Информатизация общества. Социально-психологические аспекты
информатизации современного производства (2 часа).
2.3. ПРАКТИЧЕСКИЕ РАБОТЫ –
2.4. ЛАБОРАТОРНЫЕ РАБОТЫ (36 часов)
2.4.1.Изучение основ работы в среди Borland C++ Builder (2 часа).
2.4.2.Создание приложений в среди Borland C++ Builder с
использованием принципов визуального проектирования и событийного
программирования; изучение назначения и применение базовых компонентов
(34 часа)
2.5. КУРСОВАЯ РАБОТА –
2.6. САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ (46 часов)
Основной формой самостоятельной работы магистранта является
подбор материала и подготовка обзорных и/или аналитических докладов
по современным проблемам информатики и вычислительной техники.
Тематика докладов:
2.6.1. Математические проблемы информатики
2.6.2. Параллельные системы. Вычислительные системы с массовым
параллелизмом.
2.6.3.
Современная
аппаратура
компьютерных
сетей
и
телекоммуникаций.
2.6.4. Верификация программ.
2.6.5. История развития систем искусственного интеллекта.
2.6.6. Обзор современных систем искусственного интеллекта.
6
2.6.7. Модели и проблемы человеко-машинного взаимодействия.
2.6.8. История развития робототехники.
2.6.9. Достижения современной робототехники.
2.6.10. Правовые аспекты информатизации деятельности человека
2.7. ЭКЗАМЕНАЦИОННЫЕ ВОПРОСЫ
2.7.1. Современное состояние теории алгоритмов
2.7.2. Основные направления развития теории алгоритмов
2.7.3. Парадигмы программирования
2.7.4. Стили программирования
2.7.5. Современные подходы в программировании
2.7.6. История развития систем программирования
2.7.7. Структура современной системы программирования
2.7.8. Способы представления знаний
2.7.9. Понятие «синергетика»
2.7.10. Аксиомы синергетики
2.2.11. Способы представления знаний
2.2.12. Обзор средств современной вычислительной техники
2.2.13. Перспективы развития вычислительной техники
2.2.14. Стандарты и технологии сети Ethernet
2.2.15. Стандарты и технологии сети Token Ring
2.2.16. Технологии работы компьютерных сетей FDDI
2.2.17. Информатизация общества.
7
2.2.18.
Социально-психологические
аспекты
информатизации
современного производства
2.2.19. Правовые аспекты информатизации деятельности человека
2.2.20. Современные системы искусственного интеллекта
2.2.21. Верификация программ
2.2.22. Параллельные системы
2.8. РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА
Основная:
2.8.1. Сырецккий Г.А. Информатика. Т.1: Основы информационной и
вычислительной техники– СПб: БХВ-Петербург. – 2005. – 809 с.
2.8.2. Сырецккий Г.А. Информатика. Т.2: Информационные технологии
и системы – СПб: БХВ-Петербург. – 2007. – 842 с.
2.8.3. Кудинов Ю.И., Пащенко Ф.Ф. Основы современной
информатики. – СПб: Изд-во: «Лань», 2009. – 256 с.
2.8.4.Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы,
технологии, протоколы. – СПб: Изд-во: «Питер». – 2009. – 958 с.
2.8.5. Молчанов А.Ю. Системное программное обеспечение. – СПб:
Изд-во: Питер. – 2007. – 400 с.
Дополнительная:
2.8.6. Гаврилова Т. А., Хорошевский В. Ф. Базы знаний
интеллектуальных систем. – СПб: Изд-во «Питер», 2001. – 384 с.
2.8.7. Гагарина Л.Г., Петров А.А. Современные проблемы
информатики и вычислительной техники. Серия: Высшее образование. Издво: Форум, Инфра-М. – 2010. – 368 с.
2.8.8. Городняя Л.В. Парадигмы программирования. М.: ИнтернетУниверситет информационных технологий. – 2007. (http://www.intuit.ru)
2.8.9. Митропольский Ю.И. Мультиархитектура – новая парадигма для
суперкомпьютеров // Электроника: наука, технология, бизнес. 2005. № 3. С.
42 – 47.
2.8.10. Казиев В.М. Введение в анализ, синтез и моделирование систем.
М.: Изд-во: Бином. – 2007. – 244 с.
2.8.11. Митропольский Ю.И. Мультиархитектура – новая парадигма
для суперкомпьютеров // Электроника: наука, технология, бизнес. 2005. № 3.
С. 42 – 47.
8
III КОНСПЕКТ ЛЕКЦИЙ
Современное состояние теории алгоритмов
Информатика является одной из самых молодых наук. Выделение
теорию вычислений в отдельное направление способствовали численное
решение уравнений физики, расчеты в атомной сфере и управление
космическими кораблями и спутниками.
Следующим источником множества вычислительных задач стали
вопросы оптимизации в экономических задачах. Здесь к основным
достижениям относят формулировку задачи линейного программирования
(Канторовича), симплекс-метод, алгоритмы Кармаркара и алгоритм Хачияна.
Успехи
приборов
математической
и
рентгенов
статистики
породили
и
развитие
необходимость
измерительных
в
алгоритмах
автоматической диагностики и обработки данных томографии, и сейчас
очень широко проводится внедрение компьютерной техники в самых разных
направлениях медицины.
С
ростом
объемов
информации
возникла
необходимость
в
эффективных механизмах ее использования и хранения, поэтому к числу
наиболее широко применяемых относятся алгоритмы обработки запросов в
базах данных.
Наибольший объем информации человек воспринимает зрением.
Поэтому
широко
моделирования
развиваются
пейзажей
и
алгоритмы
движения
по
обработки
изображений,
воображаемой
местности
(виртуальная реальность). Огромные усилия тратятся на разработку все
новых алгоритмов сжатия растровых изображений, аудио и видео потоков
(MPEG4, JPEG).
9
Главным
направлением
развития
информационных
технологий
последних двух десятилетий стал Интернет и распределенные вычисления.
Теория алгоритмов здесь находит свое применение в задачах маршрутизации
пакетов (TCP/IP и DNS) и поисковых системах. Небывалый успех системы
Google стал, пожалуй, самым запоминающимся случаем, когда простая
математическая идея (алгоритм PageRank) привела к феноменальному
коммерческому успеху.
Особое значение играет решение задач искусственного интеллекта. К
ним относят автоматическое распознавание речи, отпечатков пальцев, лиц
людей, системы распознавания типа «свой – чужой», автоматическая
классификация, автоматический контроль качества.
В результате, теория алгоритмов пришла к тому, что объектами
обработки
стали
сами
алгоритмы.
Основными
задачами
являются
автоматическая верификация и оптимизация программ и системы по
распараллеливанию
выполнения
программ
на
многопроцессорных
вычислительных системах.
Еще одним направлением являются лингвистические алгоритмы:
проверка
орфографии,
автоматический
перевод,
«разговаривающие»
программы, а также работа с грамматикой.
Наконец, методы машинного обучения используются в разработке
роботов (особенно заманчивой звучит создание футбольной команды
роботов, способной выиграть у чемпионов мира 2050 года). Естественно
ожидать, что время распространения устройств, оснащенных датчиками и
способных самостоятельно принимать оптимальное решение, наступит очень
скоро.
Наиболее популярным прикладным направление в самое последнее
время стали исследования в биоинформатике: вычисление (восстановление)
геномов и построение наиболее вероятной цепочки мутаций, которая
переводит один генотип в другой.
10
Идеи и техники в теории алгоритмов
Одновременно с решением тех или иных вычислительных задач теория
алгоритмов накапливает и систематизирует фундаментальные идеи и
техники эффективных вычислений.
Первой
попыткой
оценки
эффективности
было
число
шагов,
выполняемых соответствующей машиной Тьюринга. После понимания
неадекватности этой меры была предложена новая модель (RAM), дающая
более точное приближение вычислительной сложности на практике.
Кроме
времени
работы,
полезно
изучать
и
другие
ресурсы,
используемые при вычислениях. Это объем используемой компьютерной
памяти (что стало особенно важным в последнее время), количество раундов
и объем передаваемых сообщений в распределенных вычислениях.
Также получается разное понимание трудоемкости алгоритмов, если
рассматривается сложность в среднем или сложность в худшем случае.
Первой
фундаментальной
идей
теории
вычислений
стало
то
наблюдение, что почти каждому алгоритму соответствует специально
подобранная структура данных, которая позволяет работать с данными
максимально эффективно. Таким образом, удалось выделить и изучить
отдельно базовые задачи (сортировка, удаление, вставка, поиск), а затем
использовать эти конструкции как составные части более сложных
алгоритмов.
Следующей идеей большого значения является рекурсия. Многие
алгоритмы наиболее естественно описываются при помощи самих себя. Это
сразу порождает огромные сложности. Как известно, никакая проверка
корректности алгоритмов (даже установления факта окончания работы) в
общем случае не может быть решена. Тем не менее, рекурсия является одним
из наиболее часто используемых приемов при разработке новых алгоритмов.
11
Теория сложности выделила класс задач, которые имеют переборное
решение, но до сих пор не решенные эффективно (класс NP). Найден целый
ряд идей и техник: локальный поиск, рандомизация, модифицированная
рекурсия, которые позволили в ряде случаев существенно ускорить
экспоненциальный перебор. (например, с 2n до 1.331n для задачи 3-SAT).
Таким образом, атака задач, являющихся трудно решаемыми с точки зрения
теории сложности, может привести к новым нетривиальным идеям теории
алгоритмов.
В настоящее время теория алгоритмов развивается, главным образом,
по трем направлениям.
1.
В
классической
теории
алгоритмов
изучение
проблемы
формулировки задач проводится в терминах формальных языков; вводится
понятие задачи разрешения, проводится классификация задач по классам
сложности (P, NP и др.).
В теории алгоритмов классами сложности называются множества
вычислительных задач, примерно одинаковых по сложности вычисления.
Говоря более узко, классы сложности – это множества предикатов (функций,
получающих на вход слово и возвращающих ответ 0 или 1), использующих
для вычисления примерно одинаковые количества ресурсов. Каждый класс
сложности (в узком смысле) определяется как множество предикатов,
обладающих
некоторыми
свойствами.
Типичное
определение
класса
сложности выглядит так:
Классом сложности X называется множество предикатов P(x),
вычислимых на машинах Тьюринга и использующих для вычисления O(f(n))
ресурса, где n — длина слова x.
В качестве ресурсов обычно берутся время вычисления (количество
рабочих
тактов
машины
Тьюринга)
или
рабочая
зона
(количество
использованных ячеек на ленте во время работы). Языки, распознаваемые
предикатами из некоторого класса (то есть множества слов, на которых
предикат возвращает 1), также называются принадлежащими тому же классу.
12
Кроме того, многие классы могут также быть описаны в терминах
математической логики или теории игр.
Для каждого класса существует категория задач, которые являются
«самыми сложными». Это означает, что любая задача из класса сводится к
такой задаче, и притом сама задача лежит в классе. Такие задачи называют
полными задачами для данного класса. Наиболее известными являются NPполные задачи. Полные задачи – хороший инструмент для доказательства
равенства классов. Достаточно для одной такой задачи предоставить
алгоритм, решающий её и принадлежащий более маленькому классу, и
равенство будет доказано.
2. В теории асимптотического анализа алгоритмов рассматриваются
методы получения асимптотических оценок ресурсоемкости или времени
выполнения алгоритмов, в частности, для рекурсивных алгоритмов.
Асимптотический анализ позволяет оценить рост потребности алгоритма в
ресурсах (например, времени выполнения) с увеличением объема входных
данных.
3. В теории практического анализа вычислительных алгоритмов
решаются задачи получения явных функции трудоёмкости, интервального
анализа функций, поиска практических критериев качества алгоритмов,
разработки методики выбора рациональных алгоритмов.
Изучив список самых значимых результатов теории алгоритмов,
и
посмотрев на время, когда были сделаны эти открытия, можно сделать
интересный вывод. Почти в каждом случае эти понятия и алгоритмы были
предложены
до
того,
как
соответствующий
раздел
теоретической
информатики вышел на пик своей популярности. То есть, для проведения
наиболее важных исследований стоит ориентироваться не на области,
которые сейчас вызывают наибольший интерес, а на те, которые еще только
могут попасть в центр развития теории.
13
Поэтому так интересно попытаться сделать прогноз и угадать
основополагающие темы исследований ближайшего будущего. Укажем здесь
три направления, которые представляются очень перспективными.
1. Алгоритмы,
сложности».
Для
которые
обрабатывают
вычислительных
задач,
объекты
«второго
работающих
с
уровня
базовыми
математическими объектами, такими как строки, элементы упорядоченных
множеств, натуральные числа, (взвешенные) графы, конечные автоматы,
матрицы,
построено
немало
эффективных
алгоритмов.
Напротив,
автоматическая обработка более сложных объектов, непредставимых
напрямую этими элементарными понятиями, еще только становиться
предметом
изучения.
Сейчас
мы
пытаемся
подобрать
эффективные
алгоритмы обращения с такими понятиями, как программа (автоматическая
оптимизация, распараллеливание и верификация), Интернет (поиск и
сортировка сайтов по значимости), тексты на естественных языках
(автоматический перевод и проверка грамотности) или геном человека.
2. Алгоритмы, использующие базы знаний. Технологии настоящего
позволяют собрать уйму интереснейшей информации о человечестве:
структуру взаимоотношений (социальные сети), полную статистику покупок,
музыкальные, книжные и кино-предпочтения, список и динамику поисковых
запросов каждого человека. Все эти огромные объемы данным пока остаются
сравнительно бесполезными. Однако представляется, что в самое ближайшее
время удастся наладить автоматическое извлечение из таких данных каких-то
общих закономерностей и шаблонов, и использовать их для предсказания
будущих событий в различных сферах.
14
3. Продвижение на пути к понимаю вопросов на естественном языке.
Сейчас все программы способны обрабатывать входные данные лишь строгоопределенного математического типа. В то время как абсолютным идеалом
стала бы машина, способная ответить на любой человеческий вопрос.
Первым
шагом
на
этом
пути
должно
стать
выделение
некого
промежуточного языка запросов, который, если и не совпадает с
естественным, то хотя бы существенно выразительней языка запросов,
которым мы пользуемся в поисковых системах в Интернете.
Для третьего направления большую роль может сыграть тесное
сотрудничество со специалистами по лингвистике. Вполне возможно, что
лингвистика
станет
следующим
стратегическим
партнером
теории
алгоритмов и уже сейчас стоит задуматься о самом тесном сотрудничестве с
представителями этой науки.
Понятие «синергетика»
Синергетика
(от
греч.
«совместно»
и
«действующий»)
–
междисциплинарное направление научных исследований, задачей которого
является изучение природных явлений и процессов на основе принципов
самоорганизации систем (состоящих из подсистем). «…наука, занимающаяся
изучением процессов самоорганизации и возникновения, поддержания,
устойчивости и распада структур самой различной природы…».
Синергетика изначально являлась междисциплинарным подходом, так
как принципы, управляющие процессами самоорганизации, представляются
одними и теми же (безотносительно природы систем) и для их описания
должен быть пригоден общий математический аппарат.
Иногда
синергетику
позиционируют,
как
«глобальный
эволюционизм» или «универсальную теорию эволюции», дающую единую
основу для описания механизмов возникновения любых новаций подобно
тому, как некогда кибернетика определялась, как «универсальная теория
15
управления»,
одинаково
пригодная
для
описания
любых
операций
регулирования и оптимизации: в природе, в технике, в обществе и т. п. и т. д.
Основное
понятие
синергетики
–
определение
структуры
как
состояния, возникающего в результате многовариантного и неоднозначного
поведения таких многоэлементных структур или многофакторных сред,
которые не деградируют к стандартному для замкнутых систем усреднению
термодинамического типа, а развиваются вследствие открытости, притока
энергии извне, нелинейности внутренних процессов, появления особых
режимов с обострением и наличия более одного устойчивого состояния. В
этих системах не выполняется ни второе начало термодинамики, ни теорема
Пригожина о минимуме скорости производства энтропии, что может
привести к образованию новых структур и систем, в том числе и более
сложных, чем исходные.
Этот феномен трактуется синергетикой как всеобщий механизм
повсеместно
элементарного
наблюдаемого
и
в
примитивного
природе
–
к
направления
эволюции:
сложносоставному
и
от
более
совершенному.
Аксиомы синергетики
Сформулируем
основные
аксиомы
теории
информационных
динамических процессов (информационной синергетики).
Аксиома 1. Развитие (эволюция) системы определяется некоторой
целью и информационными ресурсами системы, ее информационной
открытостью.
Аксиома 2. При стремлении к цели система воспринимает входную
информацию, которая используется и для изменения внутренней структуры
самой системы, внутрисистемной информации.
Аксиома 3. Изменение внутрисистемной информации происходит
таким образом, чтобы увеличивалась негэнтропия (мера порядка) системы,
уменьшалась энтропия (мера беспорядка) в системе.
16
Аксиома 4. Любое изменение внутренней структуры системы или
внутрисистемной
информации
оказывает
воздействие
на
выходную
информацию системы (т.е. на окружающую среду системы); внутренняя
энтропия изменяет внешнюю энтропию системы.
Большое значение при исследовании управляемости системы, ее
управляющих параметров, развития системы во времени, в пространстве, по
структуре
имеют
синергетические
принципы,
сформулированные
И.Пригожиным и его последователями, в частности, следующие:
принцип эволюции системы, необратимости процессов ее развития;
принцип возможного решающего воздействия (при определенном
стечении обстоятельств) малых изменений поведения системы на ее
эволюцию;
принцип
множественности
(многовариантности)
путей
развития
системы и возможности выбора оптимальных из них;
принцип невмешательства в процессы самоуправляемого развития и
непредсказуемости эволюционного поведения системы и, в то же время, –
учёт
возможности организовать управляющие воздействия на ресурсы и
процессы в системе;
принцип
учета
стохастичности
и
неопределенности
процессов
(поведения систем);
принцип взаимовоздействия усложнения организации, устойчивости и
темпов развития систем;
принцип учета факторов стабильности и нестабильности системы
(возникновения устойчивости из неустойчивого поведения), порядка и хаоса
в
системе
(возникновения
порядка
из
хаоса),
определенности
и
неопределенности;
принцип взаимовлияния устойчивости среды отдельной подсистемы
или элемента (микросреды) и процессов во всей системе (макросреды).
Так как синергетика – теория возникновения новых качественных
свойств и структур, а возникновение смысла (интерпретация и понимание
17
сообщений) всегда связано с качественными изменениями в системе, то
можно говорить об информационной самоорганизации. Информация –
синергетическая среда, с помощью которой поддерживается вся система, ее
отдельные подсистемы и которая генерирует информацию о том, как должна
развиваться (саморазвиваться) система.
Важным условием рождения информации в системах является их
открытость. В замкнутых системах, согласно второму началу термодинамики
(энтропия замкнутой системы не может убывать и растет до тех пор, пока не
достигнет
максимума,
а,
следовательно,
информация
становится
минимальной), структуры распадаются (на макроскопическом уровне).
Поэтому информация не может рождаться и храниться в системах в
состоянии теплового равновесия, так как в замкнутых системах всегда
устанавливается тепловое равновесие.
Пример.
Магнитный
диск
в
состоянии
теплового
равновесия
размагничивается и не может хранить информацию. Со временем дискеты
приходят в состояние теплового равновесия, и магнитное покрытие
разрушается, информация теряется.
Открытые
системы
поддерживают
"дистанцию"
от
состояния
теплового равновесия – за счет потоков ресурсов (вещества, энергии,
информации) и за счет самоорганизации, вследствие которой эти потоки
существуют и направляются в соответствии с подчиненностью постоянно (от
элементов – к подсистемам, от них – к системе).
Пример. Структурной единицей нервной системы является нейрон –
нервная клетка. Кора переднего отдела мозга содержит несколько десятков
миллиардов нейронов. Нейроны бывают различного типа: сенсорные (от
рецептора кожи к спинному мозгу); сетчатки (от рецепторов сетчатки глаза –
к зрительному нерву); двигательные (от рецепторов мышц – к двигательной
коре). Они образуют своеобразные регистры (зрительные, слуховые,
тактильные и др.). Нейрон служит для передачи информации за счет нервных
импульсов. Расшифровка нервных импульсов (информации) происходит в
18
соответствующих областях коры головного мозга. Нейроны коры мозга
функционируют параллельно. Это – их замечательное преимущество (по
сравнению с памятью другого вида). В коре переднего мозга около 50 млрд.
нейронов. Они организованы, примерно, в 600 млн. функционирующих
параллельно
систем.
(распределенного
Производительность
матричного
или
такого
нейросистемы)
типа
очень
"процессора"
впечатляет.
Особенностью мозга является высокое качество, скорость обработки
информации. Нейроны выполняют обработку со скоростью всего около 100
инструкций в секунду (сравнить с ЭВМ, выполняющей миллионы
инструкций в секунду), но они быстрее и эффективнее решают наиболее
сложные (для ЭВМ, в частности) задачи распознавания и классификации,
принятия решений и другие плохо формализуемые и структурируемые
проблемы. Человеческий мозг – это система параллельно работающих
подсистем, структур, самоорганизующихся с помощью ассоциативных
связей
для
выработки,
принятия
логических
(алгоритмических,
рациональных) решений. Там, где невозможно принять такое решение (т.е. не
удается ассоциировать такие связи), принимается эвристическое решение. На
каждом нейроне коры головного мозга одновременно (параллельно)
обрабатываются возбуждения разного типа: мотивации, целеполагания,
внешние возбуждения – отражения текущего состояния управляемого
объекта, возбуждения памяти (опыта). Их согласованная обработка дает
картину объекта и позволяет принимать решения. Так, мозг, непрерывно
перебирая результаты всех прошлых действий в аналогичных ситуациях и
сравнивая их с текущей ситуацией, выбирает вариант, наиболее подходящий,
целесообразный и эффективный в данной конкретной ситуации. Если при
этом
не
найдется
такая
ситуация,
то
выбирается
(прогнозируется
многокритериально) такое состояние, результат которого будет наиболее
адекватен; этот результат и запоминается далее. У человека существует
самостоятельная потребность в информации. Нормальная жизнедеятельность
возможна лишь тогда, когда из внешней среды имеется приток не только
19
вещества, энергии, но и информации, когда нет явлений "информационного
голода". Получение новой информации связано со сжатием информации,
например, с пересылкой в долговременную память (подсознание) образов,
смыслов и т.д.
На
этапе
самоорганизации
вырабатывается
коллективное,
корпоративное поведение (т.е. новый уровень иерархии образования смысла,
семантики). В живых системах при этом используется не только связь со
средой, но и генетически заложенная информация или информация
самоорганизации.
Информация может быть неполной, образной, например, в виде
фрагментов, по которым быстро восстанавливается (самоорганизуется) более
полная информация. Особенно важно быстро и полно восстанавливать эту
информацию. Поэтому необходим процесс обучения, сжатия и передачи
информации, знаний от поколения к поколению. Так как области знаний
расширяются и углубляются, а информация лавинообразно растет, то важно
находить синергетические инварианты, принципы, технологии ее передачи.
Наблюдаемая математизация и информатизация современной науки
убедительно показывает, что их эффективность зависит как от данной науки,
сложности и возможности адекватного описания ее законов и принципов
математическими и информационными моделями, так и от используемого
математического аппарата.
Парадигмы программирования
Программированием
называют
планирование,
распределение
во
времени или исполнение заданий или событий.
В середине 20-го века термин "программирование" не подразумевал
связи
с
компьютером.
Можно
было
увидеть
название
книги
"Программирование для ЭВМ". Теперь по умолчанию этот термин означает
организацию процессов на компьютерах и компьютерных сетях.
20
Программирование как наука существенно отличается от математики и
физики
с
точки
зрения
оценки
результатов.
Уровень
результатов,
полученных физиками и математиками, обычно оценивают специалисты
близкой
или
более
программирования
высокой
большую
квалификации.
роль
играет
В
оценка
оценке
результатов
пользователя,
не
претендующего на программистские познания. Поэтому, в отличие от
обычных наук, специалисты в области программирования частично
выполняют функцию переводчика своих профессиональных терминов в
понятия пользователя, а программирование обладает своим специфичным
методом установления достоверности результатов – это компьютерный
эксперимент.
Паради́гма (от др.-греч.) в философии науки означает совокупность
-явных и неявных (и часто не осознаваемых) предпосылок, определяющих
научные исследования и признанных на данном этапе развития науки, а
также
универсальный
метод
принятия
эволюционных
решений,
гносеологическая модель эволюционной деятельности.
Знакомое из философии понятие "парадигма" имеет в информатике и
программировании узкопрофессиональный смысл, сближающий их с
лингвистикой. Парадигма программирования как исходная концептуальная
схема
постановки
проблем
и
их
решения
является
инструментом
грамматического описания фактов, событий, явлений и процессов, возможно,
не существующих одновременно, но интуитивно объединяемых в общее
понятие.
Каждая парадигма программирования имеет свой круг приверженцев и
класс успешно решаемых задач. При оценке качества программирования
приняты разные приоритеты, также отличаются инструменты и методы
работы и стиль мышления.
Общие парадигмы программирования, сложившиеся в самом начале
эры
компьютерного
программирования,
–
парадигмы
прикладного,
21
теоретического и функционального программирования имеют наиболее
устойчивый характер.
Прикладное
программирование
компьютеризацией
решает
информационных
и
проблемы,
связанные
вычислительных
с
процессов
численной обработки, исследованных задолго до появления ЭВМ. Здесь
программирование мало отличается от кодирования. Для него, как правило,
достаточно операторного стиля представления действий. В практике
прикладного программирования принято доверять проверенным шаблонам и
библиотекам процедур, избегать рискованных экспериментов. Ценится
точность и устойчивость научных расчетов. Язык Фортран – ветеран
прикладного программирования. Сейчас он уступает в этой области языкам
Паскаль
и
Си, а на суперкомпьютерах – языкам параллельного
программирования, таким как Sisal.
Теоретическое программирование придерживается публикационной
направленности, нацеленной на сопоставимость результатов научных
экспериментов
в
области
программирования
и
информатики.
Программирование пытается выразить свои формальные модели, показать их
значимость и фундаментальность. Эти модели унаследовали основные черты
родственных математических понятий и утвердились как алгоритмический
подход в информатике. Стремление к доказательности построений и оценка
их эффективности, правдоподобия, правильности, корректности и других
формализуемых отношений на схемах и текстах программ послужили
основой структурного программирования и других методик достижения
надежности
процесса
разработки
программ,
например,
грамотное
программирование.
Функциональное
математической
программирование
направленности
при
сформировалось
исследовании
как
и
дань
развитии
искусственного интеллекта и освоении новых горизонтов в информатике.
Абстрактный
подход
к
представлению
информации,
лаконичный,
универсальный стиль построения функций, ясность обстановки исполнения
22
для разных категорий функций, свобода рекурсивных построений, доверие
интуиции
математика
и
исследователя,
уклонение
от
бремени
преждевременного решения непринципиальных проблем распределения
памяти, отказ от необоснованных ограничений на область действия
определений – все это увязано Джоном Мак-Карти в идее языка Лисп.
Продуманность и методическая обоснованность первых реализаций Лиспа
позволила быстро накопить опыт решения новых задач, подготовить их для
прикладного и теоретического программирования.
Основные средства и методы программирования сложились по мере
возрастания сложности решаемых задач. Произошло расслоение парадигм
программирования в зависимости от глубины и общности проработки
технических деталей организации процессов компьютерной обработки
информации. Выделились разные стили программирования, наиболее зрелые
из которых – низкоуровневое (машинно-ориентированное), системное,
декларативно-логическое,
оптимизационно-трансформационное,
и
высокопроизводительное/параллельное программирование.
Низкоуровневое
программирование
характеризуется
аппаратным
подходом к организации работы компьютера, нацеленным на доступ к
любым возможностям оборудования. В центре внимания - конфигурация
оборудования,
состояние
памяти,
команды,
передачи
управления,
очередность событий, исключения и неожиданности, время реакции
устройств
и
успешность
реагирования.
Ассемблер
в
качестве
предпочтительного изобразительного средства на некоторое время уступил
языкам Паскаль и Си даже в области микропрограммирования, но
усовершенствование пользовательского интерфейса может восстановить его
позиции.
Системное программирование долгое время развивалось под прессом
сервисных
и
заказных
работ.
Свойственный
таким
работам
производственный подход опирается на предпочтение воспроизводимых
процессов и стабильных программ, разрабатываемых для многократного
23
использования. Для таких программ оправдана компиляционная схема
обработки, статический анализ свойств, автоматизированная оптимизация и
контроль. В этой области доминирует императивно-процедурный стиль
программирования,
являющийся
операторного
прикладного
стиля
непосредственным
обобщением
программирования.
Он
допускает
некоторую стандартизацию и модульное программирование, но обрастает
довольно
сложными
построениями,
спецификациями,
методами
тестирования, средствами интеграции программ и т.п. Жесткость требований
к
эффективности
и
надежности
удовлетворяется
разработкой
профессионального инструментария, использующего сложные ассоциативно
семантические эвристики наряду с методами синтаксически-управляемого
конструирования и генерации программ. Бесспорный потенциал такого
инструментария на практике ограничен трудоемкостью освоения - возникает
квалификационный ценз.
Высокопроизводительное программирование нацелено на достижение
предельно возможных характеристик при решении особо важных задач.
Естественный резерв производительности компьютеров – параллельные
процессы. Их организация требует детального учета временных отношений и
неимперативного
стиля
управления
действиями.
Суперкомпьютеры,
поддерживающие высокопроизводительные вычисления, потребовали особой
техники
системного
программирования.
Графово-сетевой
подход
к
представлению систем и процессов для параллельных архитектур получил
выражение в специализированных языках параллельного программирования
и суперкомпиляторах, приспособленных для отображения абстрактной
иерархии процессов уровня задач на конкретную пространственную
структуру процессоров реального оборудования
Декларативное
упрощение
лингвистов,
(логическое)
функционального
решающих
программирование
программирования
задачи
символьной
для
возникло
математиков
обработки.
как
и
Особенно
привлекательна возможность в качестве понятийной основы использовать
24
недетерминизм, освобождающий от преждевременных упорядочений при
программировании обработки формул. Продукционный стиль порождения
процессов с возвратами обладает достаточной
лингвистического
подхода
к
уточнению
естественностью для
формализованных
знаний
экспертами, снижает стартовый барьер внедрения информационных систем.
Трансформационное программирование методологически объединило
технику оптимизации программ, макрогенерации и частичных вычислений.
Центральное понятие в этой области - эквивалентность информации. Она
проявляется в определении преобразований программ и процессов, в поиске
критериев
применимости
преобразований,
в
выборе
стратегии
их
использования. Смешанные вычисления, отложенные действия, "ленивое"
программирование, задержанные процессы и т.п. используются как методы
повышения эффективности информационной обработки при некоторых
дополнительно выявляемых условиях.
Дальнейшее развитие парадигм программирования отражает изменение
круга лиц, заинтересованных в применении информационных систем.
Формирование
естественная
экстенсивных
реакция
на
подходов
радикальное
к
программированию
улучшение
–
эксплуатационных
характеристик оборудования и компьютерных сетей. Происходит переход
вычислительных средств из класса технических инструментов в класс
бытовых
приборов.
Появилась
почва
для
обновления
подходов
к
программированию, а также возможность реабилитации старых идей, слабо
развивавшихся из-за низкой технологичности и производительности ЭВМ.
Представляет интерес развитие исследовательского, эволюционного,
когнитивного и адаптационного подходов к программированию, создающих
перспективу рационального освоения реальных информационных ресурсов и
компьютерного потенциала.
Исследовательский
подход
с
учебно-игровым
стилем
профессионального, обучающего и любительского программирования может
дать
импульс
изобретательности
в
совершенствовании
технологии
25
программирования, не справившейся с кризисными явлениями на прежней
элементной базе.
Эволюционный подход с мобильным стилем уточнения программ
достаточно явно просматривается в концепции объектно-ориентированного
программирования,
постепенно
перерастающего
в
субъектно-
ориентированное и даже эго-ориентированное программирование.
Субъектно-ориентированное
программирование
(СОП)
–
метод
построения объектно-ориентированных систем, как композиции субъектов.
Однозначный общепринятый перевод термина subject-oriented programming
на русский язык на сегодняшний момент не выработан.
В целом СОП включает разбиение системы на субъекты; написание
правил для их правильной композиции.
СОП дополняет ООП, решая проблемы, возникающие при разработке
больших систем, при решении задач интеграции и переносимости.
В СОП субъект – это коллекция классов или фрагментов классов,
представляющих свою (субъективную) иерархию классов. Субъектом может
быть само приложение, либо часть приложения, объединение которой с
другими субъектами даёт приложение целиком. Композиция субъектов
комбинирует иерархию классов так, что получаются новые субъекты,
включающие функциональность существующих субъектов.
Повторное использование определений и наследование свойств
объектов могут удлинить жизненный цикл отлаживаемых информационных
обстановок, повысить надежность их функционирования и простоту
применения. Когнитивный подход с интероперабельным стилем визуальноинтерфейсной разработки открытых систем и использование новых аудиовидео средств и нестандартных устройств открывают пути активизации
восприятия сложной информации и упрощения ее адекватной обработки.
Адаптационный
подход
с
эргономичным
индивидуализируемого
конструирования
информационных
предоставляет
систем
стилем
персонифицированных
информатикам
возможность
26
грамотного программирования, организации и обеспечения технологических
процессов реального времени, чувствительных к человеческому фактору и
переносу систем.
Стабилизирующееся в наши дни доминирование одной архитектурной
линии, стандартного интерфейса, типовой технологии программирования и
т.д. чревато потерей маневренности при обновлении ИТ. Особенно уязвимы в
этом отношении люди, привыкшие прочно усваивать все раз и навсегда. При
изучении языков программирования подобные проблемы обходят за счет
одновременного преподавания различных языков программирования или
предварительного изложения основы, задающей грамматическую структуру
для обобщения понятий, изменяемость которых трудно улавливается на
упрощенных учебных примерах. Именно такую основу дает изучение
функционального программирования тем, что оно нацелено на изложение и
анализ парадигм, сложившихся в практике программирования в разных
областях деятельности с различным уровнем квалификации специалистов,
что может быть полезно как концептуальная основа при изучении новых
явлений в информатике.
Парадигма программирования является инструментом формирования
профессионального
поведения.
Информатика
прошла
путь
от
профессионального программирования высококвалифицированной элиты
технических
специалистов
и
научных
работников
до
свободного
времяпрепровождения активной части цивилизованного общества. Освоение
информационных систем через понимание с целью компетентных действий и
ответственного применения техники сменилось интуитивными навыками
хаотичного воздействия на информационную среду со скромной надеждой на
везение, без претензий на знание. Обслуживание центров коллективного
пользования, профессиональная поддержка целостности информации и
подготовки данных почти полностью отступили перед самообслуживанием
персональных компьютеров, независимым функционированием сетей и
разнородных серверов со взаимодействием различных коммуникаций.
27
Противопоставление разрабатываемых программ, обрабатываемых
данных и управления заданиями уступает представлению об интерфейсах,
приспособленных для участия в информационных потоках подобно
навигации. Прежние критерии качества: скорость, экономия памяти и
надежность обработки информации - все больше заслоняются игровой
привлекательностью и широтой доступа к мировым информационным
ресурсам. Замкнутые программные комплексы с известными гарантиями
качества
и
надежности
форсировано
вытесняются
открытыми
информационными комплектами с непредсказуемым развитием состава,
способов хранения и обработки информации.
Многие важные для практики программирования понятия, такие как
события, исключения и ошибки, потенциал, иерархия и ортогональность
построений, экстраполяция и точки роста программ, измерение качества и
т.д. не достигли достаточного уровня абстрагирования и формализации. Это
позволяет прогнозировать развитие парадигм программирования и выбирать
учебный материал на перспективу компонентного программирования
(COM/DCOM, Corba, UML и др.). Если традиционные средства и методы
выделения многократно используемых компонентов подчинялись критерию
модульности,
сопряжения
понимаемой
при
как
максимальной
оптимальный
выбор
функциональности,
то
минимального
современная
элементная база допускает оперирование многоконтактными узлами,
выполняющими простые операции.
Эти симптомы обновления парадигмы программирования определяют
направление изменений, происходящих в системе базовых понятий, в
концепции
информации
и
информатики.
Тенденция
использования
интерпретаторов (точнее неполной компиляции) вместо компиляторов,
анонсированная в концепции Java в сравнении с Си, и соблазн объектноориентированного программирования на фоне общепринятого императивнопроцедурного стиля программирования можно рассматривать как неявное
движение к функциональному стилю. Моделирующая сила функциональных
28
формул достаточна для полноценного представления разных парадигм, что
позволяет на их основе экстраполировать приобретение практических
навыков организации информационных процессов на будущее.
Критерии качества программы весьма разнообразны. Их значимость по
существу зависит от класса задач и условий применения программ:
результативность,
эффективное
надежность,
использование
устойчивость,
ресурсов
(время,
автоматизируемость,
память,
устройства,
информация, люди), удобство разработки и применения, наглядность текста
программы, наблюдаемость процесса работы программы, диагностика
происходящего.
Упорядочение критериев нередко претерпевает изменения по мере
развития
области
применения
программы,
роста
квалификации
пользователей, модернизации оборудования, информационных технологий и
техники программирования. Вытекающее из этого непрерывное развитие
пространства,
в
котором
решается
задача,
вводит
дополнительные
требования к стилю программирования информационных систем: гибкость,
модифицируемость, улучшаемость.
Программирование как наука, искусство и технология исследует и
творчески развивает процесс создания и применения программ, определяет
средства и методы конструирования программ, с разнообразием которых нам
предстоит познакомиться в дальнейших лекциях, посвященных анализу ряда
основных парадигм программирования.
Имеются явные сложности классификации языков программирования и
определения их принадлежности конкретной парадигме программирования.
В
данном
курсе
парадигма
программирования
характеризуется
взаимодействием основных семантических систем, таких как обработка
данных, хранение данных и управление обработкой данных. При таком
подходе выделятся три категории парадигм:
низкоуровневое программирование;
программирование на языках высокого уровня;
29
подготовка программ на базе языков сверхвысокого уровня.
Низкоуровневое программирование связано со структурами данных,
обусловленными архитектурой и оборудованием. При хранении данных и
программ используется глобальная память и автоматная модель управления
обработкой данных.
Программирование на языках высокого уровня приспособлено к
заданию
структур
данных,
отражающих
природу
решаемых
задач.
Используется иерархия областей видимости структур данных и процедур их
обработки,
подчиненная
структурно-логической
модели
управления,
допускающей сходимость процесса отладки программ.
Подготовка программ на базе языков сверхвысокого уровня нацелено
на представление регулярных, эффективно реализуемых структур данных,
при обработке которых возможны преобразования представления данных и
программ,
использование
подобий
и
доказательных
построений,
гарантирующих высокую производительность вычислений и надежность
процесса разработки программ.
Понятие и структура системы программирования
Любой компилятор не существует сам по себе, а решает свои задачи в
рамках всего системного программного обеспечения. Основная цель
компиляторов – обеспечивать разработку новых прикладных и системных
программ с помощью языков высокого уровня.
Всякая программа, как системная, так и прикладная, проходит этапы
жизненного цикла, начиная от проектирования и вплоть до внедрения и
сопровождения. При этом компиляторы – это средства, служащие для
создания программного обеспечения на этапах кодирования, тестирования и
отладки. Это программное обеспечение, которое функционирует в тесном
взаимодействии с другими техническими средствами, применяемыми для
разработки программного обеспечения.
30
Основные технические средства, используемые в комплексе с
компиляторами, включают в себя следующие программные модули:
текстовые редакторы, служащие для создания текстов исходных
программ;
компоновщики,
позволяющие
объединять
несколько
объектных
модулей, порождаемых компилятором, в единое целое;
библиотеки прикладных программ, содержащие в себе наиболее часто
используемые функции и подпрограммы в виде готовых объектных модулей;
загрузчики,
обеспечивающие
подготовку
готовой
программы
к
выполнению;
отладчики, выполняющие программу в заданном режиме с целью
поиска, обнаружения и локализации ошибок;
другие программные средства, служащие для разработки программ и
их компонентов (о некоторых из этих средств будет рассказано далее).
Все эти средства разработки функционируют в тесном взаимодействии друг с
другом. Данные, полученные одним модулем, поступают на вход другого и
наоборот. В современных средствах разработки интеграция модулей столь
высока, что пользователь часто даже и не представляет, что он работает с
несколькими программными средствами.
Весь этот комплекс программно-технических средств составляет понятие
«система программирования».
Возникновение систем программирования
Первоначально компиляторы разрабатывались и поставлялись вне
связи с другими техническими средствами. Единственным средством
разработки, которое поставлялось вместе с компилятором, были библиотеки
стандартных функций языка программирования. В задачу разработчика
входило обеспечить взаимосвязь всех используемых технических средств:
подготовить
тексты
исходной
программы
на
входном
языке
компилятора;
31
подать данные в виде текста исходной программы на вход
компилятора;
получить от компилятора результаты его работы в виде набора
объектных файлов;
подать
весь
набор
полученных
объектных
файлов
вместе
с
необходимыми библиотеками подпрограмм на вход компоновщику;
получить от компоновщика единый файл программы (исполняемый
файл) и подготовить его к выполнению с помощью загрузчика;
поставить программу на выполнение, при необходимости использовать
отладчик для проверки правильности выполнения программы.
Все эти действия выполнялись с помощью последовательности команд,
инициировавших
запуск
соответствующих
программных
модулей
с
передачей им всех необходимых параметров. Параметры передавались
каждому модулю в командной строке и представляли собой набор имен
файлов и настроек, реализованных в виде специальных «ключей».
Для
создания
компиляторов
был
командных
предложен
файлов
компиляции
специальный
пользователям
командный
язык.
Вся
последовательность действий, необходимых для порождения исполняемого
файла, представляла собой специального вида программу на языке. Makefile.
В этой программе перечислялись все используемые входные модули,
библиотеки подпрограмм, все порождаемые объектные файлы, «ключи» и
правила обработки для каждого типа файлов. Программа Makefile позволяла
в достаточно гибкой и удобной форме описать весь процесс создания
программы от порождения исходных текстов до подготовки ее к
выполнению.
Появление Makefile стало первым шагом по созданию систем
nporpaммирования. Язык Makefile стал стандартным средством, единым для
компилятров всех разработчиков. Сам командный язык Makefile был по
сложности сравним с простым языком программирования.
32
Появление интегрированных сред разработки
Командная строка – эффективное, но не всегда удобное средство
управления компиляцией
Следующим шагом в развитии систем программирования стало
появление так называемой «интегрированной среды разработки», которая
объединила в себе возможности текстовых редакторов и командный язык
компиляции. Пользователь (разработчик исходной программы) теперь не
должен был отвечать за передачу данных с выхода одного средства
разработки на вход другого, от него также не требовалось описывать этот
процесс с помощью языка Makefile Теперь было достаточно только указать в
удобной интерфейсной форме состав необходимых для создания программы
исходных модулей и библиотек Команды, библиотеки и «ключи»,
необходимые компилятору и другим средствам разработки, также задавались
в виде интерфейсных форм настройки.
После этого интегрированная среда разработки сама автоматически
готовили всю необходимую последовательность команд Makefile, выполняла
их, получала результат и сообщала о возникших ошибках при их наличии. Но
главным преимуществом интегрированной среды разработки было то, что
все действия пользователь мог выполнять непосредственно в окне
редактирования исходного текста программы.
Создание интегрированных сред разработки – второй шаг в развитии
систем программирования. Оно стало возможным благодаря бурному
развитию персональных компьютеров и появлению развитых средств
интерфейса пользователя (сначала текстовых, а потом и графических).
Первой удачной средой такого рода можно признать интегрированную среду
программирования Turbo Pascal на основе языка Pascal производства фирмы
Borland. Её популярность на рынке определила тот факт, что со временем все
разработчики компиляторов обратились к созданию интегрированных
средств разработки для своих продуктов.
33
Развитие
интегрированных
сред
снизило
требования
к
профессиональным навыкам разработчиков исходных программ. От них
требовалось лишь знание исходного языка.
Дальнейшее
развитие
средств
разработки
также
тесно
связано
с
повсеместным распространением развитых средств графического интерфейса
пользователя (GUI — Graphical User Interface). Такой интерфейс стал
неотъемлемой составной частью многих современных ОС и так называемых
графических оболочек. Со временем он стал стандартом «де-факто» во всех
современных прикладных программах.
Структура современной системы программирования
Системой программирования – комплекс программных средств,
предназначенных для кодирования, тестирования и отладки программного
обеспечения. Нередко системы программирования взаимосвязаны и с
другими
техническими
средствами,
служащими
целям
создания
программного обеспечения на более ранних этапах жизненного цикла (от
формулировки требований и анализа до проектирования).
Системы программирования в современном мире доминируют на
рынке средств разработки, Как правило, разработчики компиляторов
поставляют
свои
продукты
и
составе
соответствующей
системы
программирования. Отдельные компиляторы являются редкостью и, как
правило, служат узкоспециализированным целям.
34
На
рис.
приведена
программирования.
общая
структура
На ней выделены
современной
системы
основные и их взаимосвязь.
(Отдельные составляющие разбиты по группам в соответствии с этапами
развития средств разработки.)
Видно, что современная система программирования – это достаточно
сложный комплекс различных программно-технических средств. Все они
служат цели создания прикладного и системного программного обеспечения.
Текстовый редактор позволяет готовить и вносить изменения в тексты
исходных программ, но в современных системах программирования его
функции не ограничиваются только этим – с ним связаны практически все
сервисные возможности.
Редактор ресурсов дает возможность разработчику готовить ресурсы
пользовательского
интерфейса
для
результирующей
программы.
Как
правило, подготовка ресурсов выполняется в графическом виде (в форме
графических образов), а результатом является описание ресурсов интерфейса
на языке описания ресурсов, которое, в свою очередь, может быть
обработано с помощью обычного текстового редактора.
Компиляторы
являются
главной
составляющей
системы
программирования. В состав системы программирования могут входить
несколько компиляторов. Основным, конечно, является компилятор с
исходного языка, на работу с которым ориентирована данная система. Также
35
необходимым является компилятор ресурсов, обеспечивающий обработку
описания ресурсов. Остальные компиляторы включаются в состав системы
программирования по мере необходимости (например, в состав многих
систем программирования входит компилятор с языка ассемблера).
Библиотеки подпрограмм обеспечивают работоспособность системы
программирования и ее конкурентоспособность на рынке средств разработки.
Компоновщик обеспечивает объединение всех исходных модулей в
единый файл. Функции этого средства разработки практически не
изменились за всю историю развития систем программирования.
Загрузчик обеспечивает подготовку результирующей программы к
выполнен
в
современных
ОС
он
не
входит
в
состав
систем
программирования, а является частью самой ОС.
Отладчик способствует поиску и локализации ошибок в программе.
Обычно речь идет о семантических ошибках, так как подавляющее
большинство синтаксических ошибок обнаруживаются компилятором.
Тенденция такова, что развитие систем программирования сейчас идет
в направлении неуклонного повышения их дружественности и сервисных
возможностей.
Способы представления знаний
Среди
способов
представления
знаний
различают
словари
с
определениями понятий, тезаурусы, таксономии, онтологии, базы знаний.
Тезаурусом называют множество смысловыражающих единиц некоторого
языка с заданной на нём системой семантических отношений. Каждому
понятию сопоставляется синонимичный дескриптор, и для дескрипторов
явным образом указываются семантические отношения: род – вид, часть –
целое, цель – средство и т. д.
Управление знаниями (knowledge management) – новая дисциплина,
занимающаяся
вопросами
создания
и
управления
знаниями,
представляющими интерес для компаний. Управление знаниями определяют
36
также
как
совокупность
распространением,
процессов,
обработкой
и
которые
управляют
использованием
созданием,
знаний
внутри
предприятия. Управление знаниями включает определение ценных для
компании знаний, их распространение среди сотрудников компании,
использование и генерирование новых знаний.
Известно, что приобретаемый опыт в производстве изделий позволяет
сокращать издержки и затраты, что связано с расширением знаний. В сфере
социологии знания генерируются, главным образом, в коллективах. На
макроуровне – развиваются идеи постиндустриального, информационного
или основанного на знании общества. На микроуровне исследуется
поведение человека в группах и сообществах.
В философии и психологии КМ исследует различия между скрытыми и
явными знаниями, между "знать как" и "знать что". Психология изучает то,
как люди обучаются, забывают, действуют и т.п.
Различают корпоративные знания явные и неявные. Явные знания –
содержание документов организации (писем, статей, справочников, патентов,
чертежей, программного обеспечения и т. п.). Неявные (скрытые) знания –
это
персональные
знания,
связанные
с
индивидуальным
опытом
сотрудников. Часто именно скрытое знание является ключевым при
принятии решении и управлении производственными процессами.
В управлении знаниями можно выделить следующие этапы:
1. Накопление, часто происходящее стихийно и бессистемно.
2. Извлечение.
3. Структурирование – выделение основных понятий, выработка
способов представления информации.
4. Формализация – перевод знаний в машинный формат.
5.
Сопровождение
(обслуживание)
–
удаление,
корректировка,
добавление, фильтрация данных и знаний для поиска информации,
необходимой пользователям.
37
Таксоном называют объект (понятие) некоторой предметной области.
Таксономия (т.е. закон и упорядочение) – иерархическая структура
классификаций определенного набора таксонов. В таксономиях отражены
отношения "род-вид".
Онтология (в информатике) – формальное представление некоторой
области знаний, включающее иерархическую структуру понятий, их связи и
правила (теоремы, ограничения), принятые в этой области. Онтология вместе
с набором индивидуальных экземпляров классов образует базу знаний. В
действительности, трудно определить, где кончается онтология и где
начинается база знаний. При этом онтологией можно называть базу
однозначно понимаемых знаний.
Современная вычислительная техника
Сегодня существует множество разнообразных компьютеров. Это
небольшие карманные, домашние, офисные, мобильные и еще много-много
других. Отрасль компьютерных технологий одна из самых развитых во всем
мире, и продолжает предоставлять пользователям новинки. Никто уже не
удивляется тому факту, что придумали еще более усовершенствованный
процессор, а ноутбук стал еще меньше по размерам. Компьютеры 2010 года
серьезно отличаются от прошлогодних собратьев в лучшую сторону. В них
более совершенные процессоры, материнские платы, видеокарты и другие
комплектующие. В нынешнем году популярны традиционные системные
блоки, модели ноутбуков, нетбуков, и изделия с новыми, улучшенными
характеристиками. Они полностью отвечают всем запросам и требованиям
покупателей.
Слово компьютер является производным от английских слов to
compute, computer, которые переводятся как «вычислять», «вычислитель»
(английское слово, в свою очередь, происходит от латинского computo –
«вычисляю»). Виды компьютеров:
38
миникомпьютер,
мейнфрейм,
ноутбук (лэптоп),
настольный компьютер,
нетбук,
субноутбук,
смартбук,
планшетный компьютер,
ультрамобильный ПК,
электронная книга,
игровая приставка,
карманный компьютер (КПК),
надеваемый компьютер (носимый компьютер),
суперкомпьютер.
По конфигурации компьютеры делят на следующие группы:
стационарные — системные блоки плюс монитор, мышь, клавиатура;
мобильные — ноутбуки и нетбуки, карманные компьютеры.
Системные
блоки
стационарных
компьютеров
чаще
всего
используются на работе и дома.
Офисный вариант не требует особых суперсовременных и дорогих
комплектующих.
Достаточно,
чтобы
скорость
была
приемлемой,
и
существовала возможность установить пакет необходимого программного
обеспечения. Этим критериям отвечают конфигурации системных блоков в
пределах 15 тысяч рублей. Помимо обработки офисных приложений, эти
компьютеры 2010 года прекрасно подходят для обучения ребенка с помощью
специальных программ, просмотра фильмов, выхода в интернет и несложных
компьютерных игр. Плюс ко всему, материнская плата этих сборок позволяет
сделать апгрейд.
Домашние компьютеры 2010 года должен быть универсальным. Дома
можно заняться непрофессиональной обработкой звука, видео, осваивать
39
самые "требовательные" игры, новые приложения, хранить большие объемы
информации на жестком диске и работать над созданием собственных
приложений.
В
зависимости
от
поставленных
задач,
стационарный
компьютер в пределах 20 тысяч рублей, имеет весьма широкие возможности.
Элитные модели: Для начинающих и опытных программистов "железо"
не бывает совершенным, однако мы может предложить весьма и весьма
достойные варианты, чтобы профессионал мог выжать из такой техники
максимум.
Для
работы
с
музыкальными
и
видео-приложениями,
программирования и прочего мы представляем самые "навороченные"
системные блоки.
Самым дорогим серийным компьютером, доступным в продаже в
России в 2010 году, является компьютер - «3D Max Meijin Intel Core i7
Extreme 980X X58 24G 4T 2x NVIDIA Quadro FX 5800 SSD Blu-ray Windows
7», его стоимость составляет около 511,6 тысяч рублей. По совместительству
этот компьютер является и самым мощным серийным компьютером.
В самом мощном компьютере потрясает не только цена, но и
производительность – в нём установлен шестиядерный процессор Intel Core
i7 Extreme
c
одновременную
частотой
3,3
работу
трёх
Ггц. Материнская
видеокарт
плата поддерживает
PCIExpress.
Общий
объём
трёхканальной оперативной памяти этого монстра составляет 24 гигабайта с
пропускной способностью 10,6 мегабайт в секунду.
Жёсткий диск самого мощного компьютера 2010 года может хранить
на своих просторах до 2 терабайт (2000 гигабайт) различной информации.
Видеосистема (обратите внимание, это именно видеосистема, а не
видеокарта) построена на видеокартах NVIDIA Quadro FX 5800 с общим
объёмом видеопамяти 8 гигабайт.
Самый дорогой компьютер снабжён полным набором считывающих
устройств: универсальным картридером, устройством для чтения не только
обычных DVD и CD-дисков, но и дисков, записанных по технологии BlueRay.
40
При это самым мощным компьютером в мире является американский
суперкомпьютер Jaguar, который не продаётся.
Самый мощный компьютер в мире расположен в Национальной
Лаборатории Департамента энергетики США (штат Теннесси). Компьютер
был запущен впервые в 2008 году, но первые испытания не позволили
развить предполагаемую мощность. После замены основных электронных
плат в 2009 году, к 84 «шкафам» XT4 добавили еще 200Cray XT5 с
процессорами разработанными по технологии AMD Opteron. Все 181 000
ядер "Ягуара" заработали в полной синхронности и по сегодняшний день
этот самый мощный компьютер 2010 года.
"Ягуар" имеет 362 ТБ оперативной памяти и дисковую подсистему
объемом 10 ПБ. Пропускная способность каналов обмена с памятью равна
578
ТБ/с,
а
подсистема
ввода-вывода
—
узкое
место
многих
высокопроизводительных систем – способна перемещать каждую секунду
284 ГБ данных.
Для людей, предпочитающих мобильность, чтобы всегда иметь
возможность выхода в интернет и работать в любом удобном месте, мы
предлагаем ноутбуки и нетбуки.
Ноутбук — компактный компьютер, обладающий всеми достоинствами
стационарных моделей. Его преимущество в небольших размерах и
возможности автономного использования от электросети.
iPad ( «Айпэд», «Айпад») — портативный планшетный компьютер,
весящий всего 680 граммов, обязан своим появлением компании Apple.
Основным
преимуществом
нового
устройства
iPad,
по мнению
разработчиков, являются простота и доступность просматривания веб-сайтов,
использование электронной почты, чтение электронных книг, просмотр фото
и видео.
Все встроенные
приложения
на iPad
были
созданы
с нуля
для использования на устройстве с сенсорным экраном.
Ультрамобильный ПК Ultra-Mobile PC (UMPC), ранее известная под
кодовым
именем
Origami
Project —
спецификация
на
мобильные
41
компьютеры небольшого размера. Разрабатывалась компаниями Microsoft,
Intel, Samsung и рядом других участников. Проект и прототипы устройств
были впервые представлены в начале марта 2006 года на CeBIT.
Устройства UMPC — новый тип мобильных
компьютеров, нечто
среднее между планшетным и карманным ПК. Это небольшое устройство,
работающее на процессоре с низким потреблением Intel Pentium или VIA C7M, на частоте около 1 ГГц.
Современные процессоры:
Intel Core 2 Duo – несмотря на то, что этот продукт выпускается уже
довольно давно, его ещё нельзя считать полностью устаревшим: многие
ноутбуки и домашние компьютеры по прежнему комплектуются им. Intel
Core 2 Duo имеет 2 ядра. Собственно, если процессор имеет более одного
ядра, то его уже можно считать многозадачным.
Intel Core 2 Quad – то же самое, что Intel Core 2 Duo, но количество
ядер уже целых 4.
Intel Core i3 – двухядерный процессор. Подходит для большинства
задач типичного пользователя компьютера: достаточно мощный на данный
момент (2010 год).
Intel Core i5 – в зависимости от того, какая модель, есть двух и четырех
ядерные. Тоже для для большинства домашних пользователей вполне
подойдет, но чуть более старшая модель, а следовательно и более мощная,
чем i3.
Intel Core i7 – на данный момент старшая и самая дорогая модель
линейки iX – современный четырехядерный процессор, подходит для самых
последних и ресурсоёмких игр и приложений.
С процессорами AMD в плане ядер всё гораздо проще — у них в
спецификации есть буква X и цифра, так вот эта цифра и означает количество
ядер.
AMD Athlon II X2, X3, X4 – младшие модели процессоров AMD.
Сегодня их нельзя считать достаточно производительными для дома, но для
42
офиса это — лучшее решение из-за своей демократичной цены. Ядер 2, 3 и 4
— выбираете в зависимости от задач.
AMD Phenom II X3, X4 – это уже для производительных компьютеров.
К слову, три ядра — это по сути четырехядерные процессоры с бракованным
и отключенным из-за этого ядром.
Перспективы развития вычислительной техники
По мнению главного футуролога консалтингового подразделения Cisco
IBSG Дэйва Эванса (Dave Evans), следующее десятилетие поставит перед
человечеством целый ряд сложных задач. За 10 лет нужно будет разработать
интеллектуальные
машины,
способные
самостоятельно
анализировать
данные, получать знания и экономить время сотрудников. «В предстоящие
пять, десять и, тем более, пятьдесят лет мир очень сильно изменится, –
убежден Эванс. – При этом не думаю, что кто-то из нас вполне представляет
себе масштабы грядущих перемен».
Предстоящие изменения главный футуролог Cisco IBSG уподобляет
снежной лавине. Ее предвестники сегодня едва различимы, но через 10-20
лет то, что пока кажется слабыми завихрениями, превратится в сметающий
все на своем пути поток информации, который кардинально изменит
привычный нам мир. Более того, Эванс считает, что все открытия, сделанные
человечеством за последние 8000 лет, – «ничто по сравнению с тем, что мы
увидим на протяжении следующих двух десятилетий».
По расчетам Эванса, в 2029 году всего за $100 можно будет купить
систему для хранения 11 петабайт данных. Петабайт равен одному
квадриллиону байт, т.е. одному байту с 15 нулями, а 11 петабайт – это
видеофильм, если б его непрерывно записывали на камеру Flip с 1492 года по
сей день, причем в таком устройстве еще остался бы неиспользованный запас
электронной памяти. Другими словами, емкость средств хранения растет, как
на дрожжах, а их стоимость стремительно сокращается.
43
То же самое, говорит Эванс, происходит в мире сетевых технологий. За
последние 20 лет емкость сетей существенно увеличилась. Так, в
принадлежащем Эвансу доме со дня, когда он первый раз подключился к
Интернету, емкость канала доступа увеличилась в 170000 раз. Но и это сущие
пустяки по сравнению с тем, что готовит нам будущее, утверждает главный
футуролог Cisco IBSG: уже испытываются гигабитные каналы домашнего
доступа, а ученые работают над терабитной технологией Ethernet.
Тем
временем
грядут
астрономические
перемены
и
в
области
вычислительных технологий: к середине 2020-х годов появятся квантовые
компьютеры. «Представьте себе пять тысяч планет, каждая размером с
Землю, полностью покрытые кремниевыми компьютерами, – говорит Эванс.
– А теперь представим себе квантовый компьютер размером с молекулу.
Всего одно такое устройство будет иметь ту же вычислительную мощность».
Сегодня вычислительная мощность ПК стоимостью около тысячи
долларов
составляет
2-3
процента
мощности
человеческого
мозга,
выполняющего примерно 100 триллионов вычислений в секунду. К 2050 году
вычислительная мощность компьютера стоимостью в те же $1000 сравняется
с вычислительной способностью всех 9 миллиардов людей, которые к тому
времени будут населять нашу планету.
В информационной сфере наблюдается быстрое распространение
множества новых приложений, видеоклипов, музыкальных файлов, облачных
вычислений, онлайновых операций резервирования, хранения и т.д. Все это
создает то, что можно назвать «эксапотопом». Сегодня одно-единственное
приложение Cisco TelePresence генерирует больше трафика, чем вся
Всемирная сеть в начале нынешнего тысячелетия. В 2015 году, по сравнению
с 2006 годом, американский сегмент Интернета увеличится в 20 раз.
По мнению Эванса, технологическая лавина породит ряд инноваций, которые
будут самым непосредственным образом связаны с повседневной работой
миллионов людей:
44
В скором времени к Интернету подключится более триллиона
устройств. Это будут не только сотовые телефоны, но и множество офисных
контроллеров - от температурных датчиков до устройств, считывающих
электронные пропуска. Люди будут перепоручать сетям все больше
интеллектуальных функций, и в результате сети приобретут множество
новых возможностей, включая перевод с одного языка на другой.
Планшетные
устройства
вроде
iPad
получат
более
широкое
распространение. Человек сможет свернуть компьютер и положить его в
карман. Стеклянные окна приобретут функцию дисплеев.
Существующие ныне пикопроекторы к 2012 году станут использовать
гигабитную технологию для беспроводной передачи данных, встроенную в
мобильные устройства. В результате люди смогут пользоваться мобильными
устройствами
с
высокоскоростным
подключением
и
функциями
демонстрации изображений в натуральном размере для организации
видеоконференций в любом месте – дома, на борту самолета и т.д. Кроме
того, с помощью пикопроектора человек сможет проецировать клавиатуру
сотового телефона на свою ладонь и набрать на ней нужный номер.
Вычислительным устройством сможет стать любая поверхность.
Дополненная
реальность
(Augmented
Reality
–
виртуальные
компьютерные изображения, увеличивающие размер реальных предметов)
развивается семимильными шагами и лет через пять станет ведущей
технологией в мире «белых воротничков». Представьте себе участников
конференции с применением технологии Cisco TelePresence, над головами
которых висят «облака» с указанием их имен, открытых вопросов,
нерешенных проблем и т.п. Такую же информацию через несколько лет
можно будет видеть на линзах обычных очков, а еще лет через 10 - и на
контактных линзах.
В офисах появятся «виртуальные помощники», способные отыскивать
нужную информацию и справляться с информационным «эксапотопом».
Такая помощница по имени Хэйли уже работает в 11-ом корпусе
45
корпоративной штаб-квартиры Cisco в Сан-Хосе (штат Калифорния). Она
управляет окружающей средой, проверяет рабочие расписания сотрудников,
передает новости и биржевые котировки. В скором времени сотрудники
смогут общаться с такими «виртуальными помощниками», обмениваясь с
ними электронными и голосовыми сообщениями. Это избавит работников во
плоти и крови от целого ряда рутинных обязанностей, позволив им
сосредоточиться на выполнении более творческих задач. По словам Эванса,
роботы уже сейчас обладают большей выносливостью и сообразительностью,
чем живые люди, и поэтому мы будем все чаще видеть их на рабочих местах.
Интерфейсы «человек-машина». На рынке уже есть игра MindFlex
стоимостью 80 долларов. Играющие в нее прикрепляют к своей голове
небольшое устройство и силой мысли передвигают шарик по экранному
лабиринту. Кроме того, люди используют силу мысли, чтобы управлять
искусственными конечностями, причем, по замечанию Эванса, такая
конечность не обязательно должна физически прикрепляться к телу человека.
А теперь представьте нью-йоркского врача, который в удаленном режиме
оперирует человека на другом конце континента. Ничто, по мнению Эванса,
не помешает встраиванию этой технологии в гарнитуры Bluetooth и другие
устройства в ближайшие годы.
По прогнозам Эванса, набор инструментальных средств, которыми
пользуются ныне компании, будет очень быстро меняться. Желание освоить
и применять эти устройства приобретает все большую важность, в том числе
с точки зрения конкурентной борьбы. «Пять лет назад многих средств,
ставших нашими надежными помощниками (Google, Twitter, Wikipedia,
блоги и RSS), не было и в помине, – говорит Эванс. – Так что практически
невозможно предугадать, какими средствами компании станут пользоваться
в будущем».
Информатизация общества
Информатизация стала одной из важнейших характеристик нашего
времени. Нет ни одной области человеческой деятельности, которая в той
46
или иной мере не была бы связана с процессами получения и обработки
информации для ее практического использования. Не удивительно, что
имеются многочисленные попытки понять сущность информатизации
общества и отсюда – дать ее определение.
Информатизация
построение
и
–
политика
развитие
и
процессы,
направленные
телекоммуникационной
на
инфраструктуры,
объединяющей территориально распределенные информационные ресурсы.
Процесс информатизации является следствием развития информационных
технологий и трансформации технологического, продукт-ориентированного
способа производства в постиндустриальный. В основе информатизации
лежат
кибернетические
методы
и
средства
управления,
а
также
инструментарий информационных и коммуникационных технологий.
Можно выделить два основных теоретико-методологических подхода к
информатизации общества.
Технократический подход сводит информатизацию общества, грубо
говоря, к технико-технологическому оснащению трудовой деятельности
людей в сфере производства и управления. В этом случае информационные
технологии расцениваются как средство повышения производительности
труда. Ограниченность такого подхода весьма очевидна, поскольку он
рассматривает
техническое
развитие
изолированно
от
человеческих
ценностей и идеалов, наделяет технику свойством самодвижения и
саморазвития. По своей сути технократическое понимание информатизации
общества
обосновывает
бессилие
человека
и
общества
управлять
информационными процессами и является антигуманным. Для такого
понимания
информатизации
общества
не
существует
категорий
нравственности, совести, человеческого переживания, достоинства.
Другое направление в понимании сущности информатизации общества
– социологическое. В этом случае информатизация рассматривается как
процесс,
охватывающий
все
сферы
человеческой
деятельности,
воздействующий на самого человека – его знания и мораль, экономические и
47
духовные интересы, его развитие как личности. Информатизация общества
предстает как совокупность взаимосвязанных технических, экономических,
социальных,
политических
обеспечивают
развитие
и
и
духовно-культурных
широкомасштабное
факторов.
получение,
Они
обмен
и
применение информации в обществе в целях дальнейшего развития и
совершенствования общества и его членов.
Информатизация
социальный
и
–
даже
это
не
столько
культурологический
технологический,
процесс,
сколько
связанный
со
значительными изменениями в образе жизни населения. Такие процессы
требуют серьезных усилий не только властей, но и всего сообщества
пользователей информационно-коммуникационных технологий на многих
направлениях,
включая
ликвидацию
компьютерной
неграмотности,
формирование культуры использования новых информационных технологий
и др.
Цель информатизации – трансформация движущих сил общества,
которое должно быть нацелено на производство услуг, формирование
производства информационного, а не материального продукта. В ходе
информатизации решаются задачи изменения подходов к производству,
модернизируется уклад жизни, система ценностей. Особую ценность
обретает свободное время, воспроизводятся и потребляются интеллект,
знания, что приводит к увеличению доли умственного труда. От граждан
информационного общества требуется способность к творчеству, возрастает
спрос на знания. Изменяется материальная и технологическая база общества,
ключевое значение начинают иметь различного рода управляющие и
аналитические информационные системы, созданные на базе компьютерной
техники
и
компьютерных
сетей,
информационной
технологии,
телекоммуникационной связи.
Таким
образом,
информатизация
общества
представляет
собой
глобальный процесс овладения информацией как ресурсом управления и
развития
с
помощью
средств
информатики
с
целью
повышения
48
интеллектуального потенциала общества, его членов, обеспечивающего
дальнейший прогресс цивилизации. В таком аспекте информатизация
общества предстает как феномен современной культуры.
Современный
экономический
рост
характеризуется
ведущим
значением научно-технического прогресса и интеллектуализацией основных
факторов производства.
Распространение информации и оптимизация производственной и
непроизводственной деятельности предприятия невозможно без применения
новых информационных технологий. Уже ни для кого не секрет, что в
мировой
экономике
в
настоящее
время
доля
компьютерных
и
информационных технологий очень существенна.
Информатизация производства – это процесс интеграции программного
обеспечения и реального производственного учета. Чем больше предприятие,
объемы выполняемых работ, количество учитываемого оборудования, тем
выше потребность в информатизации. С ростом объема информации перед
компанией встает вопрос о недостаточном качестве данных, которые ведутся
с помощью подручных средств вроде таблиц в Excel'е. К низкому качеству
информации
добавляется
невозможность
слияния
и
эффективного
представления данных.
При
информатизации
предприятия
резко
меняется
организация
производства:
вместо жесткого конвейера с узкой специализацией работающих
вводятся
интеллектуальные
рабочие
станции
с
командой
квалифицированных специалистов;
вместо непрерывного потока материальных компонентов производства
– подача заготовок и материалов к рабочим станциям по принципу "то, что
нужно, и точно в срок";
вместо цеховых запасов и незавершенного производства - исключение
местных складов и устранение "залеживания" каких-либо материальных
объектов производства.
49
Фактически с помощью компьютеров создается информационная
модель производственного процесса, каждый шаг производства связывается с
информацией (конкретной и точной) и объект труда вместе с точным
информационным описанием поступает к команде думающих творческих
специалистов. Их работа – не навешивать детали и крутить гайки (это
сегодня делают роботы), а отслеживать и контролировать качество именно
там, где оно закладывается.
Информационные преобразования, их закономерность и экономическая
оценка становятся все более важным компонентом, поскольку за счет их
усложнения упрощается материальное производство. Хотя в области
информационной обработки достигнут несомненный прогресс, главный
эффект от внедрения информационных систем заключается в повышении
качества управления и качества основных производственных процессов, а не
в прямой экономии и ускорении обработки данных.
В
процессе
разработки
различных
концепций
информатизации
общества и обследования типичных производственных процессов было
установлено, что 90 % всех транспортных перемещений людей связано с
информационными целями (передача опыта, согласование технологий и
решений, совещания, справки, подписи и т.д.).
Замена транспортных перемещений "движением" информации по
каналам компьютерных телекоммуникаций не только ускоряет решение
вопросов
получения
информационными
информации
сообщениями,
или
повышает
но
и
скорость
снижает
обмена
интенсивность
территориальных перемещений людей до минимума. Сочетание уже
известных и новых методов общения в современных технических системах
позволяет по-новому поставить вопрос общения, создав атмосферу, близкую
к реальности.
Видеоконференции
представляют
собой
одну
из
новейших
информационных технологий организации дистанционного визуального
группового общения, проведения совещаний, обучения.
50
На основе технологии видеоконференций создается стратегическая
методика интерактивной обучающей компьютерной среды. При этом упор в
учебном процессе делается на прямое взаимодействие между обучающимся и
источником информации посредством электронной киберсреды (передающей
речь, данные, изображение) и последующей дискуссии с широким
использованием средств видеоконференций.
Но,
может
быть,
самое
главное
достоинство
информатизации
заключается в том, что она открывает потенциальную возможность решить
важнейшую проблему экономической жизни человечества – избавить людей
от угрозы
безработицы.
Одной из главных причин возникновения
безработицы является высокая стоимость новых рабочих мест.
По оценкам ряда американских специалистов, стоимость рабочего
места в сельскохозяйственном производстве составляет около 55 тыс. долл., в
промышленности – 35 тыс. долл. Стоимость рабочего места в условиях
информационного общества оценивается в сумму 1-2 тыс. долл., что означает
достаточно реальную возможность создать практически неограниченное
число рабочих мест. Телекоммуникации и электронная информационная
технология, которые являются общественной базой для множества рабочих
мест, не имеют пределов роста и развития.
Электронная
информационная
технология
изменяет
в
целом
возможности человека в его эволюционном развитии, методы его работы и
обучения.
Индивидуализация
интерактивного
взаимодействия
обучения,
с
возможность
компьютером
"творческого"
позволяют
человеку
овладеть большим объемом знаний (за одно и то же время обучения) и более
глубоко понять содержание изучаемого предмета, чем при традиционном
обучении.
Социально-психологические аспекты информатизации
современного производства
51
В качестве примера можно привести следующую ситуацию, достаточно
типичную для сегодняшних предприятий России. Естественно, что наиболее
ценной частью персонала любого предприятия у нас традиционно считались
квалифицированные
рабочие,
которые
и
определяли
во
многом
эффективность работы данного предприятия. А уровень квалификации
рабочего зависел и от качества его профессиональной подготовки, и от стажа
работы. Объективно, пика своей профессиональной формы такой рабочий
достигал примерно к 35 – 40 годам, и после этого до самой пенсии работал
уже примерно на одном профессиональном уровне, обеспечивавшем
солидный заработок и приличную пенсию. Именно эта категория работников
была истинной элитой государства, его надёжной (до определённого
момента) социальной опорой, и этим, кстати, а не идеологическими
предпочтениями объяснялась комплиментарность власти в те годы по
отношению к таким рабочим. К этой, если так можно выразиться, “рабочей
аристократии” относились рабочие, занятые в оборонной промышленности,
машиностроении,
приборостроении,
добывающей
отрасли,
отчасти
в
транспорте.
Ещё
в
недавнем
прошлом
роль
рабочих
на
промышленных
предприятиях была несравнимо более значительной, чем, например, роль
инженерно-технического
персонала
(пресловутых
ИТР).
Это
чётко
выражалось в соотношении заработной платы первых и вторых. На
современном же производстве, по мере внедрения в него высоких
технологий, ситуация часто диаметрально противоположная. Основную роль
играют
квалифицированные
менеджеры,
экономисты,
технологи,
конструкторы и программисты. Заметим, кстати, что для всех этих
специальностей сегодня жизненно необходимо знание компьютера на
профессиональном уровне. На европейском сленге эту категорию работников
называют “синими воротничками” – в противовес “белым воротничкам”, то
есть всевозможным офисным служащим. Так вот, если совсем недавно в
развитых странах именно “белые воротнички” составляли основу среднего
52
класса, то теперь всё более значительную его часть формируется именно из
представителей технической интеллигенции. Квалифицированные рабочие,
ещё вчера сознававшие себя привилегированной частью общества, в таких
условиях испытывают значительный психологический дискомфорт.
Итак,
информатизация
современного
производства
косвенно
провоцирует возникновение напряжённости между рабочими и инженернотехническим персоналом. Кроме этого она также порождает своеобразный
конфликт “отцов и детей”. Рабочие с большим трудовым стажем, за
единичными исключениями, абсолютно не знакомы с компьютерными
технологиями, а, следовательно, не могут рассчитывать ни на существенный
карьерный рост, ни на получение более современной и, как правило, более
высокооплачиваемой специальности. Гораздо большими возможностями в
этом плане обладают недавние выпускники
школ, профтехучилищ и
техникумов. Возникает ситуация, когда опытные, заслуженные и хорошо
знающие своё дело рабочие и служащие оказываются ущемлёнными (или, во
всяком случае, ощущают себя таковыми) по сравнению со вчерашними
школьниками.
53
IV. ТЕХНОЛОГИЯ ВЫПОЛНЕНИЯ И ЗАДАНИЯ К ЛАБОРАТОРНЫМ
РАБОТАМ
Лабораторная работа №1
Знакомство со средой программирования Borland C++ BUILDER
Все пользовательские программы в среде Borland C++ BUILDER
оформляются в виде проектов. Действия по управлению объектами
осуществляет
программный
специальный
программный
комплекс
–
Менеджер проектов.
Интерфейс Borland C++BUILDER представлен следующими окнами:
1. главное окно (Project1);
2. окно формы (Form1);
3. окно Инспектора Объектов (object Inspector);
4. окно Кода программы (Unit1.cpp).
Команда File→New Application
открывает новую, так называемую,
форму – заготовку для помещения обработчиков событий компонентов,
которые будут размещаться в форме из набора (палитры) и реакции на
события. Реакции в программах задаются обработчиками событий.
C++ BUILDER связывает с каждым приложением, оформленным как
проект, следующие исходные файлы:
Unit1.cpp – текст программы;
Unit1.h – интерфейсный модуль с объявлениями компонентов,
расположенных в данной форме, глобальных переменных, функций и т.д.;
Unit1.dfm – хранит описания формы и всех расположенных в ней
компонентов.
Это
файл
поддерживается
и
обновляется
средой
автоматически;
54
Project1.cpp – главная управляющая программа проекта – проектный
файл. Любая новая форма автоматически включается в этот файл. С его
помощью вызывается, выполняется и завершается код проекта;
Project1.res – файл ресурсов проекта. В нем хранятся значки,
используемые в проекте, заданные как разработчиком, так и системой.
Форма – окно будущей программы, имеющее заголовок и системные
кнопки. На форме размещаются компоненты, формирующие программу.
Помещение
компонента
в
форму
осуществляется
следующими
способами:
1. найти нужный компонент на вкладках палитры, щелкнуть по нему
мышью, перевести указатель мыши на нужное место окна дизайнера форм,
снова щелкнуть мышью.
2. дважды щелкнуть на нужном компоненте на вкладке;
3. если требуется несколько экземпляров одного компонента, нажать
Shift и щелкнуть на нужном компоненте палитры, затем указывая
необходимые места формы. Для прекращения – дважды щелкнуть на
компоненте вкладки.
Одновременно с открытием новой формы создается новый элемент,
окно которого появляется на экране вместе с формой – Инспектор объекта.
Он
также создается для каждого помещенного в форму компонента.
Инспектор объекта позволяет увидеть основные свойства (Properties) и
события (Events) объекта. Полный перечень свойств, событий и методов
можно увидеть
по справочной службе Help (F1) при выделенном
компоненте. Наиболее часто используемым событием является OnClick –
щелчок мыши.
Инспектор
объектов
имеет
свое
контекстное
меню,
которое
открывается правой кнопкой мыши.
Основными свойствами компонентов являются:
55
Name – имя объекта, в котором можно использовать латинские буквы и
арабские цифры. Это свойство является обязательным;
Font – параметры шрифта;
Caption – заголовок;
Visible – видимость (возможные значения true и false);
Color – цвет объекта;
Width – ширина объекта;
Height – высота объекта.
Окно
кода
первоначально
перекрыто
окном
формы.
Для
редактирования текста модуля требуется:
- открыть вкладку с именем требуемого модуля в окне Редактора кода
(для переключения между окном Редактора и формой используют клавишу
F12) или открыть диалоговое окно командой View|Units и выбрать в нем
требуемый модуль.
- поместить курсор Редактора в нужное место текста и редактировать
по правилам стандартных текстовых редакторов.
У Редактора кодов существует свое контекстное меню, открывающееся
правой кнопкой мыши. Вкладки этого окна позволяют изменять параметры
настройки редактора:
устанавливать
общие настройки(автоматический
отступ, вставка и пр.), изменять режима ввода на экран ( форма курсора,
ширина полей, шрифт), управлять цветом и шрифтом для выделения
синтаксических конструкций (ключевых слов, комментариев и пр.),
организовывать различные подсказки с помощью так называемого «суфлера
кодов». Суфлер кода помогает быстрее и правильнее набирать текст
программы, выдавая оперативную информацию.
56
Для размещения компонента на форме нужно среди палитры
компонентов щелкнуть мышью на выбранном, после чего щелкнуть в том
месте формы, где предполагается размещение объекта. Удалить компонент
можно с помощью клавиши Delete.
К основным компонентам относятся: TLabel – метка, служащая для
отображения текста на экране; TPanel – контейнер общего назначения;
TButton – командная кнопка, позволяющая выполнять некоторые действия
при ее нажатии при выполнении программы.
Компонент TLabel выводит в форму текст, который пользователь в
режиме исполнения приложения не может редактировать. Если цвет метки
совпадает с цветом фона, то при сокращении надписи до нулевой длины, она
может исчезнуть. Тогда для ее розыска нужно развернуть список компонент
в Инспекторе Объектов.
Свойства TLabel
Aligment – задает способ выравнивания текста;
FocusСontrol – имеет раскрывающийся список, в который попадают
компоненты, которые могут быть связаны с меткой и получать от нее фокус
ввода. Для этого после выбора компонента, в ее тексте (свойство Caption)
указывается символ & перед символом, который станет горячей клавишей
при исполнении приложения.
Layout – размещение текста, заданного в свойстве Caption, в поле
метки.
Transparent – если некоторый компонент расположен под меткой, он
может быть невидимым. Чтобы этого не произошло, надо сделать метку
прозрачной (трансарентной).
WordWrap – если это свойство равно true, а свойство AutoSize – false,
все слова текста в свойстве Caption станут располагаться в разных строках.
57
Компонент TPanel используется в качестве базового класса для
определения объектов, которые включают в себя другие объекты.
При
перемещении панели компоненты перемещаются вместе с ней. Перечислим
лишь основные ее свойства, события и методы.
Свойства TPanel
ВevelInner – определяет стиль внутренней кромки;
ВеvelOuter – стиль внешней кромки;
BevelWidth – ширина кромок в пикселах;
BorderWidth – расстояние в пикселах между внутренней и внешней
кромками;
Align – размещает панель в форме в соответствии со значениями этого
свойства;
Aligment – определяет выравнивание названия панели относительно
самой панели;
Ct3D – появление панели в трехмерном или двумерном виде.
Методы TPanel
CanFocus( ) – показывает, может ли компонент получить фокус, т.е.
стать активным; возвращает true, если свойства Visible и Enabled компонента
и его родителя имеют значение true.
Focused( ) – определяет, имеет ли компонент входной фокус;
Hide( ) – делает компонент невидимым, устанавливая его свойство
Visible в false.
SetFocus( ) – делает компонент активным;
Show( ) – показывает компонент, если он до этого был спрятан.
Редактор кода, срр-модуль h-файл
58
Когда открывается новая форма, к ней создается два файла: один для
программ – обработчиков событий (его расширение срр), а другой с
расширением h. Обоим файлам система присваивает имена по умолчанию,
так для первой формы Unit1.cpp и Unit1.h. Файл Unit1.cpp можно
редактировать, внося в него требуемые команды. ( его можно увидеть в
Инспекторе Объекта по нажатию клавиши F12).Срр-модуль содержит
указатель на класс TForm, что позволяет обращаться к членам класса. Формы
автоматически
нумеруются
в
порядке
их
создания.
Любая
форма,
вставляемая в проект, получает имя Formi, i=1, 2, 3, … То же происходит с
компонентами формы: кнопками, метками и пр.
Обращения к элементам класса происходит в виде:
имя объекта->имя элемента класса
Например,
Form1->Button1
Form1->Button1->Caption
Имена
обработчиков
событий
также
даются
системой
по
определенному правилу: к имени компонента добавляется имя события.
Чтобы нарисовать что-либо в форме, можно воспользоваться событием
OnPaint, которое возникает всякий раз, когда рисунок в форме изменяется.
Общий вид обработчика этого события формы следующий:
{
int x,y;
x=y=0; //начальные координаты графика
Form1->Canvas->MoveTo(0,Height); // начальная точка графика
Form1->Canvas->Pen->Color=clRed; // цвет графика – красный
// в цикле рисуем точки графика
while (x< Form1->Width && y< Form1->Height )
{
x++;
// увеличиваем х на единицу
59
y=f(x); // задаем значение функции – его нужно конкретизировать, напр.
y=х*х;
Form1->Canvas->LineTo(x, Height –y); // рисуем точку линии
}
}
Задание
1. Задайте свойства для формы. Разместите на форме TLabel , укажите
произвольный текст, задав шрифт, его размер, цвет. Ниже расположите
компонет TPanel, задав внешнюю и внутреннюю ширину рамки так, чтобы
панель была вдавленной. Самостоятельно изучите методы и свойства
TButton. На панели разместите три кнопки с надписями произвольных
цветов. Создайте поочередно события на реакцию нажатия каждой кнопки.
Должен меняться в соответствии с надписью цвет формы, а также текстовая
надпись, ее цвет, размер. Дополнительно создайте окна сообщения с
условием задачи и фамилией разработчика.
2. Создайте программу построения графика функции на форме. На
форме должны присутствовать 2 кнопки: построить график и стереть график.
Варианты:
1) y=2sin(x)
2) y=3+lg(x2+30)
3) y=10cos2(x)
4) y=sin(x)+cos(x)
5) y=tg(6x)/100
6) y=cos(4x)+1
Лабораторная работа №2
Компоненты TEdit, TMainMenu, TMemo, TPopupMenu
60
Компонент TEdit задает в форме однострочное редактируемое окно
для ввода и вывода данных.
Свойства TEdit
AutoSelect – значение true, когда компонент получает фокус ввода на
весь текст, false – курсор ввода остановится в начале текста.
BorderStyle – наличие или отсутствие окантовки;
CharCase – задает регистр ввода текста: EcLowerCase – текст
преобразуется в символы нижнего регистра, EcUpperCase – верхний регистр;
EcNormal – оба регистра.
HideSelection – значение true, если при перемещении фокуса ввода
выделенный текст не меняется подсветки, false – подсветка исчезает при
выделении другого компонента.
PasswordChar – при записи вида Edit->PasswordChar=’*’; вместо
вводимых символов в поле Edit высветятся звездочки.
ReadOnly – при значение true пользователь не может менять текст в
поле компонента.
Text – поле ввода-вывода текста.
Методы TEdit
Clear( ) – очищает поле компонента, удаляя весь текст.
ClearSelection( ) – удаляет выделенный текст.
ClearUndo( ) – очищает буфер Undo, после чего невозможна отмена
предыдущих изменений текста.
CopyToClipBoard( ) – удаляет выделенный текст, копируя его в буфер
памяти.
CutToClipBoard( ) – вставляет текст из буфера памяти, заменяя
выделенный текст.
PasteFormClipBoard( ) – вставляет текст из буфера памяти, заменяя
выделенный текст.
SelectAll( ) – выделяет весь текст в поле компонента.
61
Undo( ) – отменяет все изменения после последнего вызова
ClearUndo( ). Если этот метод не вызывался – отменяет все изменения.
CanFocus( ) – определяет, может ли компонент получить фокус ввода.
SetFocus( ) – делает компонент активным.
GetTextLen( ) – возвращает длину текста в компоненте.
Hide( ) – делает компонент невидимым.
Show( ) – делает компонент видимым.
Компонент TMemo – многострочное редактируемое поле. TMemo –
массив пронумерованных текстовых строк типа Tstrings. Для обращения к
его i-ой строке следует писать: Memo->Lines->Strings[i];
Количество строк: Memo->Lines->Count;
Длина i-ой строки: Memo->Lines->Strings[i].Lengs;
Очищение текстового поля: Memo->Lines->Clear( );
Свойства TMemo
Lines – открывает Редактор текстовых строк, в котором можно набрать
текст как в обычном текстовом редакторе.
MaxLength – задает максимальную длину строки текста.
ScrollBars – задает полосы прокрутки окна Memo-поля.
WantReturns – при значении true можно ли вставлять символы возврата
в текст.
События и методы аналогичны соответствующим событиям и методам
компонента TEdit.
Компонент TMainMenu
создает главное меню приложения и с
помощью него управляет работой всех его частей, т.е. запускает разные части
приложения на выполнение отдельными командами, обеспечивает выход из
приложения.
62
Меню добавляется в форму
перенесением его значка из палитры
компонентов. С формой меню связывается через свойство формы Menu.
После формирования меню, запуск приложения будет сопровождаться
появлением в верхней левой части формы строки, содержащей главные
опции меню. Главные опции могут распадаться на детальные команды,
расположенные сверху вниз.
Для формирования опций меню используют Дизайнер меню, который
открывается через команду MenuDesigner в контекстном меню компонента,
либо двойным щелчком по компоненту.
В левом верхнем углу окна Дизайнера меню располагается синие поле,
предназначенное для названия первой опции. После задания его названия
(свойство Caption), справа появится новое серое поле – заготовка для
следующей опции. Каждая опция – новый объект и имеет собственный
Инспектор объекта.
Если
данная
опция
–
последняя
в
иерархии,
т.е.
является
исполнительной, нужно с помощью ее Инспектора объекта перейти на
вкладку Events и дважды щелкнуть в поле события OnClick. В открывшийся
обработчик события нужно вписать требуемые действия. После этого можно
продолжить формирование следующей опции горизонтальной строки.
Свойства TMainMenu
Images – обеспечивает появление изображений слева от названия
команд и подменю.
63
Items – массив, хранящий все опции меню. В поле этого свойства
содержится кнопка с многоточием, открывающая дизайнер меню. Это
свойство само является указателем на класс TMenuItem и может
использоваться для обращения к свойствам и методам этого класса. Кроме
того, оно является массивом, хранящим все опции меню. Например,
количество строк меню с именем MainMenu1 можно посчитать так:
MainMenu1-> Items->Count. К опции можно обратиться по номеру:
MainMenu1->Items[i]
OwnerDraw – задает возможность рисования некоторого объекта при
выборе опции меню, по умолчанию имеет значение false. При установление
true в обработчике события OnDrwItem будет появляться рисунок
Основные свойства опций TMainMenu
Bitmap – позволяет выбрать значок в открывающемся диалоговом окне.
Значок появится слева от названия опции.
Checked – осуществляет контроль выбора данной команды меню: в
обработчике события OnClick этой опции надо присвоить свойству Checked
значение true. Если свойство RadioItem некоторой опции имеет значение
false, то при щелчке мышью на этой опции слева от ее названия появится
галочка. Если же наоборот – опция не будет отмечена. При
Checked=
RadioItem= true будет всегда помечена только одна опции из всех, у которых
свойство GroupIndex имеет одинаковое значение. Пометка будет сделана в
виде жирной точки слева от названия опции.
Shortcut – в раскрывающемся списке надо выбрать комбинацию
клавиш, которая в режиме исполнения приложения заменит нажатие мышью
на опцию. Действие этих клавиш возможно только при открытом меню и
распространяется только на команды подменю.
64
Компонент TPopupMenu
может быть связан с любым другим
компонентом (кнопкой, формой и пр.) у которого имеется свойство
PopupMenu (всплывающее меню). При помещении TPopupMenu в форму, его
имя будет видно в любом из компонентов формы со свойством PopupMenu.
Если меню связано с формой, оно появляется при нажатии правой кнопки
мыши в активной форме.
Свойства TPopupMenu
Многие свойства совпадают со свойствами TMainMenu. Свойство Item
также является массивом строк-опций меню и указателем на класс
TMenuItem. Обращаться к опции можно, указав ее порядковый номер в
меню: PopupMenu->Items[i] Нумерация начинается с нуля, а общее
количество считается как PopupMenu->Items->Count. Для обращения к
вложенным опциям надо указать имя объекта – основной опции.
Aligment – задает расположение меню, при его появлении при нажатии
правой кнопки мыши.
AutoPopup – при значении false появление выпадающего меню надо
устанавливать
программно
с
помощью
метода
Popup,
иначе
оно
автоматически привязывается к компоненту, с которым связано.
MenuAnimation – задает анимационный эффект появления меню на
экране.
Trackbutton – задает кнопку мыши, при нажатии которой меню
появляется.
Задание
Создать приложение согласно заданиям индивидуального варианта. В
каждом приложении должна обеспечиваться
регистрация пользователя в
приложении.
65
Регистрация
пользователя
должна
реализовываться
с помощью
дополнительной формы, в которой расположены:
- компоненты TEdit ( для ввода имени и пароля пользователя);
- кнопка «Завершение регистрации», которая прекращает регистрацию
вместе с приложением;
- экземпляр компонента TMemo, в котором заданы истинные имя
пользователя и пароль, с которыми надо сверять вводимые значения. На
этапе разработки данный компонент невидимый.
Форма регистрации должна иметь статус главной, т.е. при запуске
проекта она вызывается первой. При условии верной регистрации должен
осуществляться вызов формы самого приложения. В четных вариантах при
регистрации в имени и пароле могут присутствовать только символы
нижнего регистра, в нечетных - верхние.
Расчеты в вариантах производить с помощью циклических алгоритмов.
Варианты
1. Составить программу для расчета выплат по кредиту по месяцам.
Входными данными являются: сумма кредита, процентная ставка, количество
месяцев,
на
которые
предоставлен
кредит.
Погашение
кредита
предполагается равными долями, а формула для начисления процентов по
кредиту
которую
 p
An = A0 
100


,

налагаются
где
Àn
- начисленные проценты,
проценты,
p-
процентная
À0 -
ставка.
сумма, на
Проценты
начисляются ежемесячно на остаток кредитной суммы (ежемесячный
процент р/12).
В программе создать меню, которое по желанию пользователя выводит
полный список выплат или выплаты определенного месяца. Указать общую
сумму выплат и сумму переплаты.
66
2. Составить программу начисления процентов и итоговой суммы
вклада.
p

An = A0 1 +
100

n




Входными данными являются: сумма вклада,
процентная ставка, количество месяцев, на которые требуется рассчитать
доход.
В программе создать меню, которое по желанию пользователя
выводит полный список процентов, либо полный список суммы на счете,
либо проценты и сумма вклада на определенный месяц.
3. В первом квартале текущего года стоимость товара составила х
тыс. руб. Ежеквартальное увеличение цены составляет р%. Вычислить
ежеквартальный спрос на y единиц товара по формуле y= 3.4x0.4.
В программе создать меню, которое позволяет по желанию пользователя
выводит либо спрос в определенном квартале, либо полный список спроса по
кварталам. Определить среднее значение спроса в текущем году.
4. Объем продажи авиабилетов в 1 квартале текущего года составил х
млн. руб. Ежеквартальный темп прироста объема продаж составляет n %.
Рассчитать
объем
продажи
билетов
на
2
года
вперед,
средний
ежеквартальный объем продаж, величину прироста объема продаж за
указанный период. Указанные величины должны появляться в форме через
пункты меню.
5.
Первоначальная
стоимость
основного
фонда
предприятия
составляет S млн. руб. Амортизация ежегодно составляет n% (следовательно,
настолько уменьшается стоимость основного фонда). Рассчитать стоимость
основного фонда предприятия на t лет вперед. Вычислить разницу стоимости
в определенный год от начальной. На сколько млн. руб. измениться
стоимость основного фонда, если каждые два года вкладывать в
строительство основных фондов М млн. руб? Указанные величины должны
появляться в форме через пункты меню.
6. Известен средний ежеквартальный расход электроэнергии Р кВ/час.
При этом известно:
67
в 1 квартале расход на 15% выше среднего,
во 2 и 4 кварталах – на 5 % ниже среднего,
в 3 квартале – на 8% ниже среднего.
Вывести расход энергии в каждом квартале и суммарный расход за год.
Указанные величины должны появляться в форме через пункты меню.
Справочная информация о синтаксических конструкциях языка,
необходимая для выполнения задания
Синтаксис оператора if:
if (<выражение>) <оператор1>; [ else <оператор 2>;]
Ветвь с ключевым словом else не является обязательной. Поэтому она
взята в квадратные скобки.
Примеры:
if ( fvalue>=0.0 ) fvalue = fvalue;
else fvalue = -fvalue; // вычисляется модуль числа
if ( x<10 ) x+ =10; else x *=2;
if ( f != 0 ) с = 100 / f;
if ( e= =1000 ) { e /=10; cout << ”e= ” << e; } else { e =10+y*у; y++; }
if ( a<b && ( a>d || a==0 ) ) b++;
else { b*=a; a=0; } // &&- логическое И || - логическое ИЛИ
Цикл с предусловием реализован в С++ оператором цикла while:
while (<условие> )
{ <тело цикла>
}
Цикл с постусловием реализован в С++ оператором цикла do … while и
имеет вид:
do
{ <тело цикла>
} while (<условие>);
68
Цикл for называют также циклом с заданным числом повторений. Он
имеет следующий формат:
for (инициализация; выражение (условие) ; модификации ) оператор;
Примеры
for ( ; ; );
// пример бесконечного цикла
for (y=2; y<20; y++) r+=y;
В инициализации и модификации параметра можно писать несколько
операторов, разделенных запятой.
for (i = 1, s=1; i<11; i++) s*=i;
// вычисления факториала 10
Допускается объявление переменной прямо в строке инициализации
цикла for. Значение счетчика цикла может не только увеличиваться, но и
уменьшаться, причем на произвольный шаг, который может быть не только
целым, но и числом с плавающей точкой.
for (float k = 11.5; k>0.5; k - = 0. 5) s+=k;
В качестве параметра цикла можно использовать и символьную
переменную.
for (char ch=’a’; ch< ‘z’; ch++)
Синтаксис объявления массива:
<Тип данных> <имя массива> [размерность массива];
Примеры:
int array[45];
//массив из 45 элементов целого типа с именем
double rt[12];
// массив rt, состоящий из 12 элементов типа
array
double
const int ARRAY_SIZE=90;
float alp[ARRAY_SIZE];
//
вещественный
массив
alp
из
90
элементов
69
Возможна инициализация массива при его объявлении, при этом
размерность массива указывать необязательно. Если размерность указана, и
количество элементов, заключенных в фигурные скобки больше ее –
компилятор выдаст ошибку. Если элементов меньше указанной размерности,
то в случае статического массива недостающие элементы инициализируются
нулями, в остальных случаях «мусором», хранящимся в памяти компьютера.
int a[5]={4, 90, 71, 45, 3};
float x[ ]= {4, 8, 19};
// размерность массива х равна 3
Пример: Программа подсчета суммы элементов массива.
#include<iostream.h>
void main ( ) {
const int n=10;
int i, m[n], s=0;
cout << “ введите” << n << “чисел” <<endl;
// ввод элементов массива с клавиатуры
for ( i=0; i < n; i++) cin >> m[ i];
for ( i=0; i < n; i++) s+=m[ i ] ;
cout << ”сумма введенных элементов равна “<<s<<endl;
}
Для улучшения эффективности алгоритма ввод элементов массива и
подсчет их суммы можно объединить в один цикл:
for ( i=0; i<10; i++) { cin >> m[i]; s+=m[i];
}
Лабораторная работа № 3
Компоненты TListBox, TСomboBox, TMaskEdit
70
Компонент TListBox создает прямоугольную область, в которой
отображается список текстовых строк, которые можно добавлять, удалять,
выбирать. Список строк может быть заранее приготовлен в файле, который
загружается в ListBox. На этапе разработки приложения часто формируют,
так называемый отладочный список, который формируют с помощью
редактора текста (аналогично компоненту TMemo). Редактор текста
открывается в свойстве Items.
Свойства ТListBox
Items является указателем на класс TStrings, который имеет свойство
Strings, являющееся массивом строк типа AnsiString. Свойство Count
содержит количество строк. Запись вида ListBox1->Items->Count возвращает
количество строк.
Класс TStrings содержиттметоды Add( ) – добавить строку в конец
списка, Delete( ) – удалить строку и др. Например,
ListBox1->Items-> Add(“новая строка” );
ListBox1->Items->LoadFromFile(“spisok.txt”);
ItemIndex хранит выбранную в списке строку:
ListBox1->Items->Strings[ListBox1-> ItemIndex]
MultiSelect – определяет возможность выбора более одной строки за
один раз. Когда это свойство имеет значение true, и выбрано множество
строк, значение свойства ItemIndex, указывает на строку, имеющую фокус,
т.е. на последнюю отмеченную.
Sorted – устанавливает сортировку по алфавиту.
Style – определяет вид вывода на экран названия элементов.
Методы TListBox
Clear( ) – удаляет список,
SetFocus( ) – делает список активным,
Hide( ) – скрывает список,
71
Show( ) – делает список видимым,
Sort( ) – сортирует элементы в порядке возрастания.
Если количество строк не помещается в отведенный размер,
автоматически включается вертикальная полоса прокрутки, при условии, что
длина строки меньше ширины прямоугольника. Для выполнения этого
условия, можно ограничить длину строки:
int MaxWidth=500;
ListBox1->Perform(LB_SETHORIZONTALEXTENT, MaxWidth, 0)
Компонент TComboBox является комбинацией редактируемого поля и
списка TListBox – редактируемое поле с треугольной кнопкой справа. Выбор
данных из списка возможен двумя способами: щелчком мыши по нужной
строке или вводом нужной строки в редактируемое поле.
Компонент TMaskEdit создает редактируемое текстовое поле (маску)
для ввода данных специфического формата: даты, времени, номера телефона
и
т.п. При задании формата ввода данных проверяется их соответствии
формату. Маска налагает ограничения на вводимые символы. Маска состоит
из трех полей, разделенных точкой с запятой.
Первое поле маски может содержать перечень специальных символов:
!
–
его
присутствие
интерпретирует
необязательные
символы
как
лидирующие пробелы;
> – все последующие символы должны быть набраны в верхнем регистре до
коца маски, либо до появления <;
< – аналогично предыдущему для нижнего регистра;
<> – возможно использование обоих регистров;
\ – символ ввода, следующий за этим – символьная константа;
L – ввод символов алфавита языка, установленного по умолчанию;
l – в позицию, которую он занимает, можно вводить только символы
алфавита;
A – ввод алфавитно-цифровых символов;
а – совпадает с предыдущим, но не требует обязательного ввода;
72
C – требует обязательного ввода любого символа в позицию, которую он
занимает;
0 – требует обязательного ввода цифры;
9 – требует необязательного ввода цифры;
# – необязательный ввод цифры или знаков + и –;
: – используется при вводе времени
/ – используется при вводе даты;
; – деление частей маски;
_ – вставляет пробелы в текст.
Остальные символы могут использоваться в качестве литералов,
вставляемых автоматически (курсор ввода перескакивает через них). Кроме
того, после использования в маске символа \ все последующие символы
воспринимаются как литералы.
Второе поле маски – один символ, указывающий, могут ли символылитералы из маски включаться в данные. Например, маски телефонного
номера: (000)_000-0000;0;*. Нуль во втором поле означает, что свойство Text
включает 10 цифр, а остальные литералы не включаются в результат ввода.
Третье поле маски содержит символ, который пользователь увидит до
того, как будут введены данные. По умолчанию этот символ _.
Маска задается с помощью редактора маски, который открывается
нажатием кнопки многоточие, расположенной в свойстве EditMask.
Задание
Создать приложение, содержащее возможность выбора в списке
фамилий нескольких строк и копирование их (по нажатию кнопки) в другой
список. Исходный список должен храниться в файле. Отсортировать новый
список в алфавитном порядке. Для каждой фамилии из списка предусмотреть
ввод персональных данных, согласно заданию варианта. Для ввода
персональных данных использовать маски.
Варианты
73
1. Персональные данные: имя, отчество, дата рождения, сведения о
документе (вид документа, серия, номер, дата выдачи, место выдачи).
2. Персональные данные: имя, отчество, домашний адрес (индекс,
область, населенный пункт, улица, номер дома, номер квартиры).
3. Персональные данные: имя, домашний телефон ( с указанием кода
города), сотовый телефон, e-mail.
4. Персональные данные: имя, отчество, пол, семейное положение.
5. Персональные данные: имя, отчество, место работы, должность,
стаж работы (полный и в данной организации)
6. Персональные данные: имя, отчество, полные сведения о членах
семьи.
Лабораторная работа №4
Компоненты TIMage, TShape, TBevel
Через
компонент
TIMage
в
форму
выводится
графическое
изображение, которое указывается в свойстве Picture. Компонент TIMage
содержит свойства, определяющие формат вывода изображения внутри
границ объекта, заданного в виде пустого квадрата. Некоторые из них:
Picture – указатель на класс ТPicture, объектами которого являются
значки, метафайлы, растровые изображения. Для загрузки изображения в
компонент в поле этого свойства находится кнопка с многоточием, с
помощью которой можно открыть диалоговое окно загрузки изображения.
Методы TPicture: LoadFromFile( ) позволяет загрузку изображения: Image>Pictuche->SaveToFile(“имя файла”); SaveToFile( ) – сохраняет изображение в
файле;
74
Stretch – имеет значение true, если изображение должно принимать
размеры и форму компонента и менять их в соответствии с изменением
параметров
формы.
Изменение
размеров
изображения
происходит
непропорционально, что приводит к искажению изображения. Во избежание
этого требуется пользоваться свойством AutoSize. Если это свойство
установлено в true, рамка компонента автоматически настраивается на размер
изображения и ее нельзя изменить. Свойство Stretch при этом отключается.
Canvas – класс со свойствами и методами, позволяющими рисовать
изображения. Оно доступно только для изображения формата bmp.
Орудиями рисования являются Pen, Brush и методы.
Assign – используется при копировании изображения в буфер по
правилу : куда->Assign( откуда); Для запоминания изображения в буфере в
программный модуль должен быть включен файл Clipbrd.hpp.
Clipboard( 0->Assign(Image1->Picture) //копирование изображения в буфер
Компонент
TShape
предназначен
для
рисования
простых
геометрических фигур, вид которых задается свойством Shape. Цвет и способ
штриховки фигуры задаются в свойстве Bruch с помощью вложенных
свойств Color и Style. Характеристики контура фигуры задаются во
вложенных свойствах свойства Pen, а заливка свойством Bruch.
Компонент TBevel задает обрамление: рамку, кадр или линии (свойство
Shape), которые могут быть вогнутыми или выпуклыми (свойство Style).
Задание
Создать программу, демонстрирующую свойства перечисленных компонент.
Лабораторная работа №5
Компоненты TPageControl, TScrollBar, TScrollBox
75
Компонент TPageControl позволяет построить набор страниц в рамках
одной формы, которые перекрывают друг друга и которые можно
перелистывать с помощью щелчка.
Для создания страниц необходимо поместить компонент TPageControl
в форму и открыть контекстное меню. Управлять формированием страниц
возможно командами: New Page, Previos Page, Delete Page. Если страницы не
умещаются в поле компонента, автоматически формируются полосы
прокрутки. Изменение формы полей с названиями страниц происходит по
свойству Style.
Каждая страница компонента TPageControl представляет собой объект
– экземпляр класса TTabSheet c собственными свойствами и событиями,
например:
PageIndex указывает номер страницы в списке, нумерация страниц
начинается с нуля. Значение поля изменяется, если страница удаляется или
перемещается. Например, значение TabSheet1->PageIndex выводит номер
страницы во множестве страниц компонента.
TabIndex показывает порядковый номер страницы среди видимых
страниц.
Свойства компоненты TPageControl:
ActivePage указывает на активную (открытую) в данный момент
страницу. Можно с помощью него установить активную страницу:
PageControl1->ActivePage=TabSheet5;
RaggedRight, равное true, сжимает поля с названиями страниц и делает
их компактными.
TabPosition определяет, в какой части компонента будут появляться
вкладки: в верхней(Top), нижней(Botton), слева(Left) или справа(Right).
76
ScrollOpposite
задает,
как
при
многострочном
режиме
будут
прокручиваться вкладки. При значение false все вкладки после их
переключения остаются на той же стороне компонента, на которой они были.
Если значение true, и при этом значение TabPosition – Left или Right, все
вкладки которые находятся справа (слева) от переключаемой вкладки
перемещаются на противоположную сторону компонента.
ActivePageIndex
представляет
индекс
конкретной
страницы.
Множество страниц компонента определено в массиве Page[].
Pages – массив страниц. С его помощью можно добраться до любой
страницы, задав ее номер, например для пятой страницы,
PageControl1-
>Page[4].
PageCount содержит число страниц компонента TPageControl.
Из
событий
компонента
компонента
TPageControl
выделяется
OnChange – оно возникает, когда страница выбрана.
Компонент TScrollBar используется для прокручивания содержимого
окон, форм, компонентов, у которых нет свойства прокрутки содежимого.
Свойства TScrollBar:
Kind указывает вертикальность (SbVertical) или горизонтальность
(SbHorizontal) полосы прокрктки.
LargeChange задает, какое свойство примет Position, если пользователь
щелкнкт мышью по полосе прокрутки вне движка или нажмет клавиши
«PageUp» «PageDown»
Max и Min определяют диапазон, в котором изменяется свойство
Position.
PageSize определяет размер движка полосы прокрутки.
Position показывает текущую позицию движка в полосе прокрутки.
Если его задать программно, можно заставить перемещаться движок полосы
прокрутки. Например, Position=Min заставит движок появиться с левого края
горизонтальной прокрутки или – с верхнего – в вертикальной.
77
SmallChange определяет, насколько изменяется свойство Position, когда
пользователь нажимает кнопки со стрелками на полосе прокрутки или
клавиатуре.
Лабораторная работа №6
Создание классов
Класс является типом данных, определяемым пользователем. Он
представляет собой модель реального объекта в виде данных и функций для
работы с ними. Каждый представитель класса называется объектом.
Объединение данных и функций, которые обрабатывают объект
определенного типа, в одном описании называется инкапсуляцией.
Данные класса называются полями. Функции класса – методами. Поля
и методы называются элементами класса. Описание класса выглядит
примерно так:
class <имя> {
[ private: ]
< описание скрытых элементов>
[ public: ]
< описание доступных элементов>
[ protected: ]
< описание защищенных элементов>
};
Описанию элементов предшествуют ключевые слова, являющиеся
спецификаторами доступа.
Открытые элементы (public) доступны снаружи класса. Они, как
правило, отвечают за внешний интерфейс класса и являются методами
класса.
78
Закрытые элементы (private) предназначены только для внутреннего
использования в классе. Как правило, они являются полями. Закрытые
элементы доступны только методам класса, в состав которого они входят.
Защищенные элементы (protected) доступны для методов данного
класса и классов, производных от него.
При создании класса программист самостоятельно решает, какие из
членов класса будут общедоступными, а какие закрытыми. Однако
большинство
классов имеет типичную схему: закрытая часть содержит
данные (поля), а открытая – функции для работы с этими данными
(методы).
Спецификатор доступа не является обязательным, и если он не
присутствует, по умолчанию элементы класса становятся закрытыми.
Рассмотрим класс, созданный для хранения даты и времени.
class TTime {
private:
int year, month, day, hour, minute;
public:
void Dispay( );
void SetTime(int d, int m, int y, int hr, int min);
};
Методы класса объявлены прототипами функций. Предположительно,
они выполняют какие-то действия над полями. Их тела будут описаны
позднее. Тогда их описанию должны обязательно предшествовать имя
класса и операция разрешения видимости ( :: ), сообщающая о
принадлежности метода классу.
// Определение методов
void TTime::SetTime(int d, int m, int y, int hr, int min) {
day = d;
month = m; year = y; minute = min; hour = hr;
};
void TTime::Display( ) {
79
char s[40];
printf ( "Дата: %2d. %2d. %4d Время: %2d:%2d ", day, month, year,
hour, minute);
};
Тело метода может также содержаться внутри определения класса. В
этом случае метод является встроенной (inline) функцией.
Большинство встроенных операций не могут применяться к классам.
Нельзя использовать операцию сложения для двух объектов, или оператор
= = для их сравнения. Но все эти операции применимы для полей классов.
Для самих объектов справедливы следующие встроенные операции: выбор
элемента (.), присваивание (=), получение адреса (&), косвенная адресация
(*), и операция ->.
Для доступа к элементам объекта используются операции точка
(выбора) при обращении к элементу через имя объекта и операция -> при
обращении через указатель. Обращение таким способом возможно только к
элементам со спецификатором доступа public. Получить или изменить
значения закрытых элементов (private) можно только через обращение к
соответствующим методам класса.
Использование методов класса TTime возможно в функции main( )
следующим образом.
void main ( ) {
TTime day;
//объявление объекта day класса TTime
day.SetTime( 24, 2, 1996, 4, 20);
// вызов метода SetTime для объекта day
day.Display( );
// вызов метода Display для объекта day
};
80
Язык C++ имеет две встроенных особенности при работе с классами –
конструкторы и деструкторы – помогающие не забывать про инициализацию
объектов и про очистку памяти после завершения работы с ними.
Использование конструкторов и деструкторов необходимо во избежание
массы досадных ошибок.
Конструктор – функция, автоматически вызываемая при создании объекта (инициализации класса). Внутрь конструкторов могут быть помещены
процедуры инициализации для установки необходимых значений полей до
использования объекта. В одном классе можно объявлять сразу несколько
конструкторов. Это требуется для инициализации объектов различными
способами.
Конструктор является методом класса и носит тоже имя. Он вызывается автоматически компилятором при создании каждого представителя
класса. Если конструктор в программе не определен, то компилятор
автоматически генерирует его без параметров (конструктор умолчанию).
Конструктор не возвращает значение, поэтому в его описании
возвращаемый тип не указывается, причем даже void. Возможно объявление
несколько конструкторов с разными наборами параметров для разных видов
инициализации. Конструктор, вызываемый без параметров, называется
конструктором по умолчанию. Конструктор не наследуется;
Синтаксис
объявления
конструктора
аналогичен
синтаксису
объявления любого другого метода класса. Например,
class XYValue {
int x, y;
public:
XYValue (int X = 100, int Y = 10) {x=X; y=Y; }
};
Примерами вызова конструкторов для объектов данного класса могут
служить следующие конструкции:
XYValue S( 200, 300), М(50), Z;
81
При использовании нескольких конструкторов в одном классе
необходимо помнить, что они должны отличаться набором параметров.
Каждый из них должен иметь уникальный набор параметров, иными
словами, уникальную сигнатуру.
Деструктор является дополнением конструктора. По завершению
работы с объектом автоматически вызывается функция, называемая
деструктором.
Он также носит имя класса, но ему предшествует префикс-тильда (~).
Деструктор вызывается всякий раз, когда уничтожается представитель
класса. Для деструктора
выполняются те же правила, что и для
конструктора.
Задание
В соответствии с вариантом составить описание класса. Класс должен
обязательно содержать не менее двух конструкторов – по умолчанию и с
параметрами,
деструктор.
Объявить
объекты
созданного
класса
и
продемонстрировать работу всех методов.
Варианты
1.
Организовать
класс
матрица,
содержащий методы
вывода
матрицы в общепринятом виде, нахождения транспонированной матрицы и
определителя матрицы.
2.
Организовать класс треугольник, определенный по длинам трех
сторонам содержащий методы нахождения периметра и площади (по
формуле Герона).
3.
Организовать класс треугольник, определенный по координатам
вершин и содержащий конструктор, деструктор, функции нахождения длин
сторон, периметра, и высоты на большую сторону.
4.
Организовать класс параллелограмм, определяемый длиной сторон
и меньшим углом и содержащий методы нахождения периметра и площади
параллелограмма, длин его диагоналей.
82
5.
Организовать класс окружность, определяемый координатой
центра и длиной радиуса. Класс должен содержать методы вычисления
площади круга и длины окружности.
6.
Организовать класс дробь, содержащий методы вывода дроби в
общепринятом виде и функцию выделения целой части.
Лабораторная работа № 7
Наследование
Простое наследование описывает родство между двумя класса. Класс,
являющийся прародителем называется базовым классом (родителем). Класс,
созданный из базового класса называется производным классом (потомком).
Производный класс наследует все элементы базового класса и может
обладать новыми элементами, свойственными только ему.
На основе одного базового класса можно создавать многие классы.
Производный класс сам может быть базовым. Таким способом создается
иерархия классов. Синтаксис механизма наследования:
class <идентификатор>: [ключ доступа] <идентификатор базового класса>
{тело класса};
Разница между использованием различных ключей доступа при
объявлении наследования представлена в таблице:
Ключ доступа
private
protected
Спецификатор
Ключ доступа
в базовом классе
в производном классе
private
нет
protected
private
public
private
private
нет
protected
protected
public
protected
83
public
private
нет
protected
protected
public
public
84
Указание ключа доступа необязательно, по умолчанию для классов
используется ключ доступа private.
class Base {
private:
int count;
// поле класса
public:
Base( ) { count = 0; }
// определение конструктора
void SetCount(int n) { count = n; }
// определение метода
int GetCount( ) { return count; }
// определение метода
};
Если требуется класс, имеющий все свойства Base, но, дополнительно,
обладающий способностью изменения значения поля объекта на заданную
величину, можно объявить производный класс вида
class Derived: public Base {
public: Derived( ):Base( ){ };
void ChangeCount(int n) {SetCount( GetCount( ) + n ) };
};
Вызов функций базового класса предпочтительнее копирования
фрагментов кода из базового класса в производный.
Кроме сокращения
объема программы, этим достигается упрощение ее модификации.
Задание
Изменить программу предыдущего задания, организовав на основе
существующего класса производный класс. Производный класс также
должен содержать не менее двух конструкторов.
85
Исходная программа должна содержаться в двух файлах. В первом
описание классов, во втором реализация, т.е. работа с объектами.
Продемонстрировать работу всех методов базового и производного классов.
Варианты
1. Организовать производный класс, дополнительно содержащий
функции нахождения произведения и сложения матриц.
2. Организовать производный класс, содержащий дополнительно
функцию нахождения углов треугольника, высоты и новой функции
нахождения площади по основанию и высоте.
3. Организовать производный класс, содержащий дополнительно
функцию нахождения площади по высоте и основанию.
4. Описать
производный
класс
параллелепипед,
наследующий
свойства базового класса и определяющий объем параллелепипеда, длины
диагоналей основания и самого параллелепипеда.
86
5. Организовать производный класс конус, определенный по радиусу
основания и координатой вершины, и содержащий функции нахождения
площади поверхности и объема конуса.
6. Организовать
производный
класс,
содержащий
функции
вычисления сложения и вычитания дробей.
Лабораторная работа №8
Полиморфизм: виртуальные функции, перегрузка функций
Полиморфизм – это третий принцип, лежащий в основе создания
классов. При полиморфизме родственные объекты ( т.е. происходящие от
одного базового класса) могут вести себя по-разному в зависимости от
ситуации, возникающей в момент выполнения программы. Для этого один и
тот же метод базового класса переопределяют в каждом классе потомке.
Виртуальные функции должны объявляться в обоих классах с
атрибутом virtual, записываемым перед типом функции.
Например,
virtual void Set (int x, int y);
Правила объявления виртуальных функций:
Если в базовом классе метод определен как виртуальный, то метод,
определенный в производном классе с тем же именем и набором параметров,
автоматически становится виртуальным, а отличающимися параметрами обычным.
Виртуальные
производном
методы
классе
наследуются,
требуется
только
т.е.
при
переопределять
необходимости
их
в
задания
различающихся действий.
Если виртуальный метод переопределен в производном классе,
объекты этого класса могут получить доступ к методу базового класса с
помощью операции разрешения видимости.
Виртуальный метод не может быть объявлен как static, но может быть
дружественным.
87
По отношению ко всем виртуальным методам компилятор применяет
стратегию
динамического
связывания.
Это
означает,
что
на
этапе
компиляции он не определяет, какой из методов должен быть вызван, а
передает ответственность программе, которая принимает решение на этапе
выполнения, когда уже известно, каков тип объекта.
Виртуальная функция вызывается только через указатель или ссылку
на базовый класс. Определение того, какой экземпляр виртуальной функции
вызывается, зависит от класса объекта, адресуемого указателем или ссылкой,
и осуществляется во время выполнения.
Например,
#include <iostream.h>
class Base {
protected: int x;
public:
Base (int y) {x=y;}
void PrintX( ) { cout<< “x=”<<x;}
virtual ModifyX( ) {x*=2;}
};
class Derived : public Base {
public:
Derived ( int f) : Base( f ) {}
virtual ModifyX( ) {x/=2;}
};
int main ( )
{ Base b(10); Derived d(10);
b.PrintX( ); d.PrintX( );
Base *pB;
pB=&b; pB-> ModifyX( ); pB-> PrintX( );
pB=&d; pB-> ModifyX( ); pB-> PrintX( );
}
Программа выведет
х=10 х=10 х=20 х=5
88
Если в классе вводится описание виртуального метода, он должен быть
определен хотя бы как чисто виртуальный.
Виртуальная функция, объявленная в базовом классе иерархии
порождения, часто никогда не используется для объектов этого класса, т.е. не
имеет определения. Чтобы подчеркнуть это, используется следующая запись:
virtual int init(void) = 0;
Такие функции называются чисто виртуальными функциями.
Класс с одной или с большим количеством чисто виртуальных
функций называется абстрактным классом. Абстрактный класс может быть
использован только как базовый класс для последующих порождений новых
классов. Следовательно, нельзя создавать объекты абстрактного класса и
нельзя использовать его в качестве типа значения, возвращаемого функцией,
и типа параметров функции.
Пример
class Shapes {
protected:
public:
int x, y;
virtual void draw ( ) = 0;
virtual void rotate ( int ) = 0;
};
class Circle : public Shapes {
private:
public:
radius;
circle ( int r, int xx, int yy ) { r=radius; x=xx; y=yy;}
void draw ( ) { …}
void rotate ( int u ) { …}
};
Теперь невозможно создать объекта класса Shapes, поскольку он
содержит чисто виртуальные функции. Объявлять объекты класса Circle
возможно. Так как виртуальные функции draw ( ) и rotate ( ) в нем
переопределены.
89
Если базовый класс содержит хотя бы один базовый метод, то
рекомендуется снабжать этот класс виртуальным деструктором, даже если он
ничего не делает. Это предотвратит некорректное удаление объектов
производного класса, адресуемых через указатель на базовый класс.
Под перегрузкой функций (не обязательно методов класса) понимается
создание нескольких прототипов функции, имеющих одинаковое имя.
Компилятор различает их по набору аргументов. Перегруженные функции
оказываются весьма полезными, когда одну и ту же операцию необходимо
выполнить над аргументами различных типов. Какую именно функцию
требуется вызвать, компилятор определяет по типу фактических параметров.
Этот процесс называется разрешением перегрузки. Тип возвращаемого
значения в разрешении перегрузки не участвует.
Разрешается осуществлять не только перегрузку функций, но и
операторов.
В
большинстве
языков
программирования
реализована
концепция перегрузки операторов, пусть и в неявном виде. Так, например,
оператор суммирования позволяет складывать значения разных типов.
В создаваемом классе можно изменить свойства большинства
стандартных операторов, таких как +, -, *, /, заставив их работать не только с
данными базовых типов, но и также с объектами.
Перегружать явным образом можно большинство операций, за
исключением: .
?:
#
##
sizeof.
Перегрузка осуществляется с помощью методов специального типа
(функций-операций). Синтаксис функции-операции:
<тип> operator <операция> (список параметров) {тело функции}
Например,
class angle {
int degree, minite, second;
public:
angle_value (char *);
int operator > ( angle &a) {
// перегруженный оператор
if (3600*degree+60*minite+second>3600*a.degree+60*a.minite+a.second)
90
return 1;
else return 0;
}
};
На перегрузку операторов накладываются следующие ограничения:
- сохраняются количество аргументов,
приоритет оператора и
порядок группировки его операндов, используемые в стандартных типах
данных;
- невозможно изменить синтаксис оператора;
- смысл стандартного оператора применительно к базовым классам
переопределять нельзя;
- невозможно создавать новые операторы,
- функции-операции не наследуются;
- функции-операции не могут быть объявлены как static.
#include <iostream.h>
#include <string.h>
#include <conio.h>
const size = 80;
class Phrase {
private:
char str[size];
public:
Phrase ( ) { strcpy (str, “ “); }
Phrase (char *s) { strcpy (str, s); }
void display ( ) { cout<< str<<endl;}
Phrase operator + = (Phrase a)
{
// перегрузка оператора + =
if ( strlen(str) + strlen(a. str) < size) strcat (str, a. str);
else cout<< “строка слишком длинная”;
return (*this);
}
};
91
void main ( )
{ clrscr( );
Phrase b; Phrase c ( “ тест”);
b+=c;
b. display( );
Phrase d ( “еще “);
d + = c+ =d; d. display( );
}
Варианты
1. Изменить программу предыдущей лабораторной работы, используя
для сложения и умножения матриц перегрузку соответствующих операций.
2. Изменить программу предыдущей лабораторной работы, определив
виртуальную функцию для нахождения площади таким образом, чтобы в
базовом и производном классе тела функций определялись по-разному.
3. Описать абстрактный класс Животное. Класс должен содержать
характеристики животных: название, вид, местообитание, функцию вывода
всех данных на экран. На его основе реализовать классы Млекопитающее,
Рыба, Птица. Отдельными характеристиками классов являются: для
млекопитающих – травоядное, хищник или всеядное; для рыб – морская или
пресноводная; для птиц – дикая, домашняя, если дикая перелетная, или нет.
4. Создать абстрактный класс Средство передвижения. На его основе
реализовать классы самолет, машина, корабль. Все классы должны хранить
параметры средств передвижения: скорость, расход топлива, наименование
производителя, год выпуска, метод вывода на экран всех данных,
определения срока службы. Индивидуально для самолета указать высоту и
максимальную дальность полета, для машины – объем двигателя, для
самолета и корабля – количество посадочных мест, для корабля –
водоизмещение.
92
5.
Создать абстрактный класс правильный многоугольник. На его
основе создать классы треугольник, квадрат, пятиугольник. Предусмотреть
методы создания объектов, вычисления их периметра, площади, величины
угла.
6. Изменить программу предыдущей лабораторной работы, используя
для вычитания и сложения дробей соответствующие перегруженные
операции.
93
V.
МЕТОДИЧЕСКИЕ
РЕКОМЕНДАЦИИ
ПО
ПРОВЕДЕНИЮ
И ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ
Лабораторные работы проводятся по подгруппам в компьютерном
классе. Каждый студент получает индивидуальное задание в соответствии с
вариантом.
Выполняя задание, студент пользуется материалом, изложенным в тексте
лабораторной работы.
Перед созданием любой программы требуется точно продумать
алгоритм. Надо четко определить, входные и выходные данные, в какой
последовательности выполнять действия. При кодировании программы
нужно определить тип используемых данных в зависимости от возможного
диапазона принимаемых значений. При вводе величины не забывать
осведомить об этом пользователя, а иногда сообщить и о типе, диапазоне
или порядке ввода значений. Такое сообщение должно быть информативно и
коротко. Вывод данных лучше сопровождать текстом и форматированием.
Формат вывода можно уточнить при помощи модификаторов.
Для отладки программы нужно запустить ее на выполнение несколько
раз, задавая различные значения вводимых величин. Перед запуском
необходимо иметь заранее подготовленные тестовые примеры, содержащие
исходные данные и ожидаемые результаты. Их количество зависит от
алгоритма. проверьте реакцию программы на заведомо неверные исходные
данные.
Для быстрого поиска ошибки в алгоритме рекомендуется выводить
промежуточные данные.
При сдаче лабораторной работы студент должен продемонстрировать
преподавателю созданную программу, правильно работающую, отлаженную.
94
Преподаватель, принимая лабораторную работу, тестирует программу
студента и задает ему вопросы по конструкциям, используемым в программе
и теоретическим основам программирования.
VI. КАРТА ОБЕСПЕЧЕННОСТИ ДИСЦИПЛИНЫ КАДРАМИ
ПРОФЕССОРСКО-ПРЕПОДАВАТЕЛЬСКОГО СОСТАВА
Все виды занятий по данной дисциплине ведет канд. техн. наук, доцент
Галаган Т.А.
95
СОДЕРАНИЕ
I.
ПРИМЕРНАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ,
УТВЕРЖДЕННАЯ МИНИСТЕРСТВОМ ОБРАЗОВАНИЯ РФ
II.
РАБОЧАЯ ПРОГРАММА
III.
КОНСПЕКТ ЛЕКЦИЙ
IV.
ТЕХНОЛОГИЯ ВЫПОЛНЕНИЯ И ЗАДАНИЯ
4
7
К ЛАБОРАТОРНЫМ РАБОТАМ
V.
3
50
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ПРОВЕДЕНИЮ
И ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ
VI.
86
КАРТА ОБЕСПЕЧЕННОСТИ ДИСЦИПЛИНЫ КАДРАМИ
ПРОФЕССОРСКО-ПРЕПОДАВАТЕЛЬСКОГО СОСТАВА
87
Татьяна Алексеевна Галаган (составитель),
доцент кафедры ИиУС АмГУ
Учебно-методический комплекс по дисциплине «Современные
проблемы информатики и вычислительной техники»
Изд-во АмГУ.
Усл. печ. л.
Подписано к печати
Тираж
Заказ
Формат 60х84/16.
96
Download