Чтение онлайн

на главную - закладки

Жанры

Шрифт:

function GetSum: integer; virtual;

end;

Здесь поля A и B, а также функция Calc, скрыты от взоров потомков. Поэтому программист, импортировавший объект типа TParent, может спокойно добавить в него свои поля или методы с теми же самыми именами, например, так:

type TChild = object (TParent) { объект–наследник }

A, B : string;

procedure Calc;

...

end;

Здесь в потомке поля 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

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

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

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

Чем зарабатывает программист? – создает программы. У хорошего мастера дело спорится, и товар его добротен. Как скорее достичь мастерства? За что браться, с чего начать? Вот несколько советов.

Постигайте языки программирования

Первым делом хорошенько оседлайте Паскаль – один из лучших языков программирования. Даже школьник, владеющий Паскалем, – это наполовину инженер, ведь мощная система программирования Delphi построена на этом языке. Часть пути к вершинам Паскаля мы преодолели вместе, но освоили далеко не все его возможности. Дальше ступайте сами: преодолев робость и сомнения, откройте «взрослый» учебник по Паскалю, – некоторые из таких учебников найдете в списке рекомендуемой литературы. Там вас ждет немало открытий!

Поделиться:
Популярные книги

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Сумеречный Стрелок 3

Карелин Сергей Витальевич
3. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 3

Облачный полк

Эдуард Веркин
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Облачный полк

Столкновение

Хабра Бал
1. Вне льда
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Столкновение

Кротовский, не начинайте

Парсиев Дмитрий
2. РОС: Изнанка Империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, не начинайте

Измена. Право на любовь

Арская Арина
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на любовь

Законы Рода. Том 4

Flow Ascold
4. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 4

Невеста напрокат

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Невеста напрокат

Хозяйка усадьбы, или Графиня поневоле

Рамис Кира
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Хозяйка усадьбы, или Графиня поневоле

Город Богов

Парсиев Дмитрий
1. Профсоюз водителей грузовых драконов
Фантастика:
юмористическая фантастика
детективная фантастика
попаданцы
5.00
рейтинг книги
Город Богов

Двойня для босса. Стерильные чувства

Лесневская Вероника
Любовные романы:
современные любовные романы
6.90
рейтинг книги
Двойня для босса. Стерильные чувства

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Барон не играет по правилам

Ренгач Евгений
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон не играет по правилам