Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_pascal.doc
Скачиваний:
13
Добавлен:
27.09.2019
Размер:
1.43 Mб
Скачать

Соответствие между римскими и десятичными числами

Римская нотация

Десятичная запись

I

1

II

2

III

3

IV

4

V

5

VI

6

IX

9

X

10

L

50

C

100

D

500

M

1000

  1. Разреженная матрица. Даны две большие матрицы (1000х1000 элементов каждая), большинство элементов этих матриц (95 %) равны нулю. Продумайте способ эффективного хранения этих матриц. Напишите программы сложения и умножения таких матриц.

Контрольные вопросы

  1. Расскажите назначение классов.

  2. Какие элементы могут входить в класс.

  3. Назовите области видимости класса.

  4. Объясните назначение конструкторов и деструкторов.

Лабораторная работа №16

Тема: «Типы данных, определяемые пользователем.

Классы. Наследование. Полиморфизм»

Целью работы является:

  • изучение назначения и структуры классов;

  • освоение принципов наследования классов;

  • изучение полиморфизма классов, виртуальных методов;

  • получение навыков работы с наследуемыми классами.

Задание на выполнение лабораторной работы

Разработать иерархию классов и программу вычисления в соответствии с вариантом задания.

Программа должна включать:

  • объявление классов в соответствии с вариантом задания;

  • ввод исходных данных и их обработка;

  • разграничение области видимости членов класса;

  • разработку виртуальных функций;

  • вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования не ниже Borland Delphi 5.0.

Теоретические основы

Наследование – процесс порождения новых классов на основе уже существующих.

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

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

Полиморфизм – возможность использования одного и того же имени для решения двух или более схожих, но технически разных задач. Полиморфизм реализуется посредством механизма виртуальных методов. Для того чтобы сделать метод виртуальным, необходимо после его объявления дописать зарезервированное слово virtual. Такая запись производится в классе–предке. Вместо слова virtual можно воспользоваться словом dynamic. Отличие лишь в том, что виртуальные методы быстрее вызываются, но занимают больше места в памяти, а динамические – наоборот. Пустой метод, введенный в базовый класс, описывать необязательно, достаточно указать после объявления метода зарезервированное слово abstract. При необходимости метод можно переопределить в классе–наследнике. Для этого после объявления метода пишется зарезервированное слово override.

Новый производный класс объявляется в разделе type с указанием имени класса, от которого он наследуется, например:

type

TShape = class

private

x, y: Extended;

public

procedure Print;

procedure Draw; virtual; abstract;

end;

TCircle = class (TShape)

private

r: Extended;

public

procedure Print;

procedure Draw; override;

end;

Новый переопределенный метод скрывает базовый метод и замещает его телом своего метода, например:

procedure TCircle.Draw;

begin

// вывод на экран окружности

end;

В некоторых случаях требуется выполнить действия метода класса–предка в перегруженном методе. Для этого достаточно вызвать метод класса–предка при помощи зарезервированного слова inherited, например:

procedure TCircle.Draw;

begin

inherited Draw;

// вывод на экран окружности

end;

Варианты заданий

  1. Разработать классы: массив элементов (индексация элементов начинается с нуля), массив с произвольной индексацией элементов (например [-3..5]), элементы которых вещественные числа. Выполнить в виде иерархии классов с базовым абстрактным классом–предком. Разработать способ хранения, обработки, механизмы присваивания, сложения и умножения таких массивов. Классы разработать в отдельном модуле.

  2. Создать иерархию классов: вектор и безопасный вектор с проверкой выхода за пределы. Безопасный вектор определяет переменные: нижний и верхний предел. Определить конструктор, функцию печати, оператор присваивания.

  3. Разработать классы, элементы которых вещественные числа:

  1. обычная матрица и трехдиагональная матрица;

  2. обычная матрица и симметричная матрица;

  3. обычная матрица и сильно разреженная матрица.

Выполнить в виде иерархии классов с базовым абстрактным классом–предком. Разработать способ хранения, механизмы присваивания, сложения и умножения таких матриц. Классы разработать в отдельном модуле.

  1. Разработать иерархию классов графических объектов: линия, прямоугольник, равносторонний треугольник. Создать коллекцию классов и отобразить ее на экране. Классы разработать в отдельном модуле.

  2. Разработать иерархию классов сортировок методом «пузырька» и методом выбора.

  3. Разработать иерархию классов: вселенная, галактики, системы, планеты, звезды, астероиды.

  4. Разработать иерархию классов: планеты, звезды, астероиды, космические корабли, ракеты. Реализовать способ хранения и взаимодействия этих объектов.

  5. Создать классы четырехугольников, квадратов и прямоугольников и представить их в виде иерархии классов. Определить функции печати, конструкторы и деструкторы, вычисление площади и периметра.

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

  7. Создать класс – карта, имеющая ранг и масть. Создать класс – колода, содержащая карты. Создать два производных класса от колоды карт, в одном карты могут доставаться только по порядку, в другом – вытаскиваться произвольно.

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

  9. Создать класс – колесо, имеющее радиус. Определить конструктор и метод доступа к элементу. Создать класс – машина, содержащая колеса, марку, цену. Определить конструкторы и деструктор. Определить производный класс грузовик, имеющий грузоподъемность. Определить конструкторы, деструкторы и функцию печати.

  10. Создать класс – процессор, имеющий мощность (МГц). Определить конструкторы и метод доступа. Создать класс – системный блок, содержащий класс процессора, марку, цену. Определить конструкторы и деструктор. Определить производный класс компьютеров с монитором, имеющий дополнительно размер и тип монитора. Определить конструкторы, деструкторы и функцию печати.

  11. Создать класс – двигатель, имеющий мощность. Определить конструкторы и метод доступа. Создать класс машин, содержащих двигатель, марку, цену. Определить конструкторы и деструктор. Определить производный класс – грузовик, имеющий грузоподъемность. Определить конструкторы, деструкторы и функцию печати.

Контрольные вопросы

  1. Расскажите назначение наследования и полиморфизма классов.

  2. Какие методы называются виртуальными, а какие – статическими.

  3. Расскажите об абстрактных методах.

  4. В чем отличие динамических методов от виртуальных.

  5. Назовите разделы, ограничивающие области видимости элементов, и объясните особенности каждого из них при наследовании.

Лабораторная работа №17

Тема: «Динамические структуры данных.