Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Могилев А.В. Информатика

.pdf
Скачиваний:
552
Добавлен:
21.05.2015
Размер:
19.49 Mб
Скачать

Рис. 3.19. Основные подклассы класса «Набор» (* - абстрактные классы, экземпляры которых не создаются)

В системе SmallTalk существует два типа объектов:

1)объекты с поименованными переменными (переменные с именами);

2)объекты с индексируемыми переменными (состоят из N объектов; при описании класса, которому принадлежит такой объект, указывается только одна именованная переменная, остальные N-1 индексируются и доступ к ним осуществляется посылкой сообщения "вПозиции: индекс",

ане указанием имен).

Объекты с индексируемыми переменными также могут иметь поименованные переменные экземпляра.

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

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

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

Класс класса называется метаклассом. Классам присваиваются имена, а метаклассам - нет. Для каждого класса существует один метакласс (рис. 3.20).

Между метаклассами тоже существует иерархия, образованная тем же отношением «суперкласс - подкласс». Иерархия классов и иерархия метаклассов изоморфны друг другу.

381

Рис. 3.20. Классы и метаклассы

Вряде случаев необходимо работать с объектами, обладающими свойствами пересечения некоторых классов, но не включения, т.е.:

Класс А не является подклассом класса В Класс В не является подклассом класса А Пересечение А и В не пусто.

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

Рекурсии. Как и в других языках, ориентированных на обработку символов и нашедших применение в создании систем искусственного интеллекта, в SmallTalk важную роль играет рекурсия. Рассмотрим пример определения рекурсивного метода, вычисляющего числа Фибоначчи:

Фибоначчи

"выдать N чисел Фибоначчи, где N - объект-адресат" сам<3 еслиИстина: [^ 1]

еслиЛожь : [^ (сам - 1) фибоначчи + (сам - 2) фибоначчи ]

Классическим примером задачи, требующей рекурсии, является задача о Ханойских башнях. Имеется три штырька. На штырьке №1 расположены кольца разного диаметра в порядке убывания их размера снизу вверх. Требуется переложить кольца со штырька №1 на штырек .№2, пользуясь штырьком .№3 как промежуточным, таким образом, чтобы кольца на штырьке №2 располагались в порядке убывания их диаметра снизу вверх и чтобы в процессе перекладывания кольцо большего размера никогда не накладывалось на кольцо меньшего диаметра.

Данная задача решается рекурсивно.

а) Базис.

Если кольцо одно, то надо просто переложить это кольцо с х на у. б) Рекурсия.

Если число колец равно k, то надо переложить со штырька х на штырек z k-1 колец, затем переложить самое большое k-e кольцо на у и переложить все остальные k-1 колец со штырька z на у.

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

Объекты-параметры - символы '1', '2', '3' (информация: с какого штырька на какой надо переложить кольцо, а какой использовать как дополнительный).

Результат - надписи на экране о последовательности выполнения данной задачи. Следовательно, вызов метода будет осуществляться следующим образом:

<число> ханойС: '1' на: '2' через: '3'

Реализация метода ханойС: х на: у через: z может быть следующей:

382

ханойС: х на: у через: z "головоломка 'Ханойские башни"" сам=1

еслиИстина: [СистемнаяИнформация поместитьВсеПоследующие: 'Переложить со штырька',х,'на штырек',у;символВК.]

еслиЛожь: [(сам - 1) ханойС: х на: z через: у СистемнаяИнформация поместитьВсеПоследующие: 'Переложить со штырька',х,'на штырек',у;символВК.] (сам - 1) ханойС: z на: у через: х]

Контрольные вопросы и задания

1.Какие методологии могут быть использованы при проектировании программных систем?

2.В чем состоит смысл объектно-ориентированной методологии проектирования про-

грамм?

3.Каковы основные шаги разработки программы в объектно-ориентированной методоло-

гии?

4.Как описываются объекты в Турбо-Паскале?

5.В чем отличие методов объектов от обычных процедур? Как методы задаются?

6.Что такое инкапсуляция, наследование и полиморфизм? Приведите примеры.

7.Каково назначение и возможности объектно-ориентированной оболочки Turbo-Vision?

8.Охарактеризуйте основные объекты и методы Turbo-Vision.

9.В чем состоят отличия визуального объектного программирования от более традицион-

ного?

10.Каковы концепции, положенные в основу языка SmallTalk?

11.Какие типы сообщении возможны в языке SmallTalk?

12.Охарактеризуйте основные встроенные в SmallTalk классы.

13.Какие управляющие конструкции существуют в языке SmallTalk?

14.Как определяются новые методы? объекты?

15.Как организуется рекурсия в программах на SmallTalk?

383

384

Дополнительная литература к главе 3

1.Абрамов С. А. и др. Задачи по программированию. - М.: Наука, 1988.

2.Абрамов В. Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.:

Наука,1988.

3.Алексеев В.Е. и др. Вычислительная техника и программирование. Практикум по программированию. - М.: Высшая школа, 1991.

4.Братка И. Программирование на языке Пролог для искусственного интеллекта.-М: Мир,

1990.

5.Брукс Ф.П. Как проектируются и создаются программные комплексы. /Очерки по системному программированию/. - М.: Наука, 1979.

6.Буч Г. Объектно-ориетированное программирование с примерами применения. - Киев: Диалектика, 1992.

7.Ван Тассел Д. Стиль, разработка, эффективность, отладка и испытание программ.-М.:

Мир,1981.

8.Вирт Н. Алгоритмы и структуры данных. - М.: Мир, 1989.

9.Bupт Н. Алгоритмы + структура данных = программы. - М.: Мир, 1985.

10.Герман О. В. Введение в теорию экспертных систем и обработку знаний. -Минск, Ди- зайн-ПРО, 1995.

11.Гудман С, Хидетниеми С. Ведение в разработку и анализ алгоритмов. - М.:

Мир,1981.

12.Дантеманн Д., Мишел Д., Тейлор Д. Программирование в среде Delphy. -Киев: НИПФДиаСофтЛтд., 1995.

13.Дарахавелидзе П., Марков Е. Delphy - среда визуального программирования. -СПб.: BVH-Санкт-Петербург, 1996.

14.Дайтибегов Д.М., Черноусое Е.А. Основы алгоритмизации и алгоритмические языки. - М.: Финансы и статистика, 1992.

15.ДжонсЖ.,Харроу К. Решение задач в системе Турбо-Паскаль. - М.: Финансы и стати-

стика,1991.

16.Дмитриева М.В., Кубенский А.А. Элементы современного программирования.-С.-Пб.: Изд-во С.-П. университета, 1991.

385

17.Довгаль С.И., Литейное Б.Ю., Сбитнев A. Персональные ЭВМ: Турбо-Паскаль V 7.0. Объектное программирование. Локальные сети./Уч. пособие. - Киев:

Информсистема сервис, 1993.

18.Зуев Е.А. Программирование на языке TURBO PASCAL 6.0 - 7.0. - М.: Радио и

связь,1993.

19.Зуев Е.А. Практическое программирование на языке Турбо-Паскаль о.и, 7.0. -М.: Радио

исвязь, 1994.

20.Кетков Ю.Л. Диалог на языке бейсик для мини- и микро-ЭВМ. - М.: Наука, 988.

21.Кнут Д. Искусство программирования. Т. 1, 2, 3. - М.: Мир, 1976 - 1978.

22.Липаев В. В. Проектирование программных средств. - М.: Высшая школа, 1990.

23.Ляхович В. Ф. Руководство к решению задач по основам информатики и вы-- делительной техники. - М.: Высшая школа, 1994.

24.Майерс Г. Искусство тестирования программ. - М.: Финансы и статистика, 1982.

25.МалпасДж. Реляционный язык ПРОЛОГ и его применение. - М.: Наука, 1990.

26.Пильщиков В. Н. Сборник упражнений по языку Паскаль. - М.: Наука, 1989.

27.Поляков Д. Б., Круглое И. Ю. Программирование в среде Турбо-Паскаль. - М.:

А/О Росвузнаука, 1992.

28.Роджерс Д. Ф., Адамс Дж.А. Математические основы машинной графики. -М: Машиностроение, 1980.

29.Рубенкинг И. Турбо-Паскаль для Windows. Т.1,2. - М.: Мир-СК Ферлаг Ин-тернешнл,

1994.

30.Семакин И. Г. Лекции по программированию. - Пермь: Изд-во ПГУ, 1996.

31.Сергиевский М. В., Шалашов А. В. Турбо-Паскаль 7.0. - М.: Машиностроение, 1994.

32.Уэйт М., Прата С., Мартин Д. Язык Си. - М.: Мир, 1988.

33.Федоров А., РогаткинД. Borland Pascal в среде Windows. - Киев: Диалектика, 1993.

34.ФоксДж. Программное обеспечение и его разработка. - М.: Мир, 1985.

35.Хендерсон. Функциональное программирование.

36.Хьюз Дж., Мичтом Дж. Структурный подход к программированию. - М.:

Мир,1980.

37.Шикин Е. В. Начала компьютерной графики. - М.: Диалог-МИФИ, 1994.

38.Язык компьютера. SoftWare. Computer languages./Пер. с англ. Под ред. В.М.Курочкина. -

М.: Мир, 1989.

386

ЧАСТЬ ВТОРАЯ

ГЛАВА 4

ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА

«... Ибо это недостойно совершенства Человеческого - подобно рабам тратить часы на вычисления».

Готфрид Вильгельм Лейбниц

ВВЕДЕНИЕ

Настоящая глава посвящена принципиальным вопросам устройства и функционирования

ЭВМ.

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

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

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

Наконец, в данной главе приведен краткий обзор внешних устройств современных компьютеров - накопителей, устройств ввода и вывода информации, - а также элементарное описание принципов их работы, профессиональные характеристики.

§1. ИСТОРИЯ РАЗВИТИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

1.1.НАЧАЛЬНЫЙ ЭТАП РАЗВИТИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

Все началось с идеи научить машину считать или хотя бы складывать многоразрядные целые числа. Еще около 1500 г. великий деятель эпохи Просвещения Леонардо да Винчи разработал эскиз 13-разрядного суммирующего устройства, что явилось первой дошедшей до нас попыткой решить указанную задачу. Первую же действующую суммирующую машину построил в 1642 г. Блез Паскаль - знаменитый французский физик, математик, инженер. Его 8-разрядная машина сохранилась до наших дней.

387

Рис. 4.1. Блез Паскаль (1623 - 1662) и его счетная машина

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

Еще в 70-х годах нашего века на полках магазинов стояли механические арифмометры и их «ближайшие родственники», снабженные электрическим приводом -электромеханические клавишные вычислительные машины. Как это часто бывает, они довольно долго удивительным образом соседствовали с техникой совершенно иного уровня - автоматическими цифровыми вычислительными машинами (АЦВМ), которые в просторечии чаще называют ЭВМ (хотя, строго говоря, эти понятия не совсем совпадают). История АЦВМ восходит еще к первой половине прошлого века и связана с именем замечательного английского математика и инженера Чарльза Бэббиджа. Им в 1822 г. была спроектирована и почти 30 лет строилась и совершенствовалась машина, названная вначале «разностной», а затем, после многочисленных усовершенствований проекта, «аналитической». В «аналитическую» машину были заложены принципы, ставшие фундаментальными для вычислительной техники.

1. Автоматическое выполнение операций.

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

2. Работа по вводимой «на ходу» программе.

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

3. Необходимость специального устройства - памяти - для хранения данных (Бэббидж назвал его «складом»).

388

Рис. 4.2. Чарльз Бэббидж (1792 - 1871) и его «аналитическая машина»

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

Впервые автоматически действующие вычислительные устройства появились в середине XX века. Это стало возможным благодаря использованию наряду с механическими конструкциями электромеханических реле. Работы над релейными машинами начались в 30-е годы и продолжались с переменным успехом до тех пор, пока в 1944 г. под руководством Говарда Айкена - американского математика и физика - на фирме IBM (International Business Machines) не была запущена машина «Марк-1», впервые реализовавшая идеи Бэббиджа (хотя разработчики, по-видимому, не были с ними знакомы). Для представления чисел в ней были использованы механические элементы (счетные колеса), для управления - электромеханические. Одна из самых мощных релейных машин РВМ-1 была в начале 50-х годов построена в СССР под руководством Н.И.Бессонова; она выполняла до 20 умножений в секунду с достаточно длинными двоичными числами.

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

1.2. НАЧАЛО СОВРЕМЕННОЙ ИСТОРИИ ЭЛЕКТРОННОЙ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

Подлинная революция в вычислительной технике произошла в связи с применением электронных устройств. Работа над ними началась в конце 30-х годов одновременно в США, Германии, Великобритании и СССР. К этому времени электронные лампы, ставшие технической основой устройств обработки и хранения цифровой информации, уже широчайшим образом применялись в радиотехнических устройствах.

Первой действующей ЭВМ стал ENIAC (США, 1945 - 1946 гг.). Его название по первым буквам соответствующих английских слов означает «электронно-числовой интегратор и вычислитель». Руководили ее созданием Джон Моучли и Преспер Эккерт, продолжившие начатую в конце 30-х годов работу Джорджа Атанасова. Машина содержала порядка 18 тысяч электронных ламп, множество электромеханических элементов. Ее энергопотребление равнялось 150 кВт, что вполне достаточно для обеспечения небольшого завода.

Практически одновременно велись работы над созданием ЭВМ в Великобритании. С ними связано прежде всего имя Аллана Тьюринга - математика, внесшего также большой вклад в теорию алгоритмов и теорию кодирования. В 1944 г. в Великобритании была запущена машина «Колосс».

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

Огромный вклад в теорию и практику создания электронной вычислительной техники на

389

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

Рис. 4.3. Джон фон Нейман (1903-

Рис. 4.4. Сергей Александрович Ле-

1957)

бедев (19021974)

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

Первая отечественная ЭВМ - МЭСМ («малая электронно-счетная машина») -была создана в 1951 г. под руководством Сергея Александровича Лебедева, крупнейшего советского конструктора вычислительной техники, впоследствии академика, лауреата государственных премий, руководившего созданием многих отечественных ЭВМ. Рекордной среди них и одной из лучших в мире для своею времени была БЭСМ-6 («большая электронно-счетная машина, 6-я модель»), созданная в середине 60-х годов и долгое время бывшая базовой машиной в обороне, космических исследованиях, научно-технических исследованиях в СССР. Кроме машин серии БЭСМ выпускались и ЭВМ других серий - «Минск», «Урал», М-20, «Мир» и другие, созданные под руководством И.С.Брука и М.А.Карцева, Б.И.Рамеева, В.М.Глушкова, Ю.А.Базилевского и других отечественных конструкторов и теоретиков информатики.

С началом серийного выпуска ЭВМ начали условно делить по поколениям; соответствующая классификация изложена ниже.

390