Читаем Песни о Паскале полностью

Здесь в потомке поля A и B имеют другой тип, а имя Calc принадлежит не функции, а процедуре. Но и сейчас поля и методы предка с этими же именами все ещё существуют! Но доступны только предку, вот и все.

А если в объявлении объекта не указаны ключевые слова PRIVATE и PUBLIC? Тогда все его поля и методы по умолчанию будут общедоступными.

Итак, мы рассмотрели идеи и механизмы, лежащие в основе объектно-ориентированного программирования. К сожалению, одной главы маловато для освоения всех тонкостей этой технологии – на то есть другие книги. Объектные технологии – это настоящее и будущее программирования, не жалейте времени на их освоение. Здесь, как и во всем, важна практика. В начале главы я дал пример использования библиотеки Turbo Vision. Изучение этой и ей подобных библиотек – прекрасный способ освоения объектной технологии, подробное описание библиотеки можно найти в Сети и в литературе.

Итоги

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

• Объект – это сложный тип данных, совмещающий в себе собственно данные и процедуры, обрабатывающие их.

• Объектно-ориентированное программирование основано на трех дополняющих друг друга механизмах: инкапсуляции, наследовании и полиморфизме.

• Инкапсуляция – это объединение данных и процедур, их обрабатывающих, в едином объекте.

• Наследование позволяет создавать новые типы объектов на базе существующих. Так создается иерархия родственных объектов.

• Полиморфизм состоит в схожем поведении объектов родственных типов.

А слабо?

А) Разработайте иерархию «человечьих» объектов в соответствии со следующим рисунком (новые типы объектов выделены цветом).



Дайте новым типам объектов подходящие имена, дополните их надлежащими полями, переопределите конструкторы и метод Report. Затем исследуйте механизм полиморфизма на предке и всех его потомках.

Б) Мощность множеств в Паскале не превышает 256, и часто этого бывает недостаточно. Сконструируем свой тип множеств, назовем его TBigSet, мощность которого составит 65536 (соответствует диапазону для типа Word). Оформим это множество как объект.


type

TSetArray = array [0..4096] of word; { хранит 65536 бит (4096*16) }

PSetArray = ^ TSetArray; { тип-указатель на массив }


TBigSet = object

      mArray : PSetArray; { указатель на динамический массив }

      Constructor Init; { создает динамический массив mArray )

      Destructor Done; { освобождает память, занятую массивом }

      procedure ClearAll; { опустошает множество }

      procedure SetAll; { делает множество полным }

      procedure Insert(N); { вставляет элемент N в множество }

      procedure Delete(N); { удаляет элемент N из множества }

      function Member(N):Boolean; { проверяет принадлежность N к множеству }

      function IsEmpty:Boolean; { проверяет пустоту множества }

      procedure Union(BS: TBigSet); { добавляет другое множество }

      procedure InterSect(BS: TBigSet); { формирует пересечение множеств }

      procedure Load(var F: text); { вводит множество из файла }

      procedure Save(var F: text); { выводит множество в текстовый файл }

end;


Примените здесь сведения из главы 48, а также идеи из задачи 49-В (глава 49). Так, включение в множество и исключение из него элемента N может быть выполнено установкой и сбросом бита в массиве mArray^.


      mArray^[N div 16]:= mArray^[N div 16] or (1 shl (N mod 16))

      mArray^[N div 16]:= mArray^[N div 16] and not (1 shl (N mod 16))


Объединение с другим множеством Union(BS:TBigSet) можно сделать логическим суммированием массивов:


for I:=0 to 4095 do mArray^[ I ]:= mArray1^[ I ] or BS.mArray^[ I ]


И так далее. Напишите реализацию всех методов объекта и примените его к решету Эратосфена и прочим задачам из главы 38.

Глава 62

Самое интересное только начинается!



Мы у финишной черты, где принято подводить итоги. Нет, друзья, повременим с итогами, ведь для вас все только начинается, – лучше обсудим ваши планы на будущее.

Крупицы мастерства

Перейти на страницу:

Похожие книги

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы