Файл: Лр операторы и выражения Delphi.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.01.2024

Просмотров: 279

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ЛР 1. Операторы и выражения Delphi

Оператор присваивания

Арифметические операторы

Оператор конкатенации строк

Логические операторы

Операторы поразрядного сдвига

Операторы отношения

Операторы множеств

Оператор-селектор case

Оператор перехода goto

Организация циклов

ЛР 2. Структурные типы

Множества

Записи

Массивы

ЛР 3. Объекты и классы

Проектирование класса

Управление жизненным циклом объекта

Опережающее объявление класса

Ограничение видимости членов класса

Свойства объекта

Особенности объявления методов

Поля класса и методы класса

Иерархия наследования

Полиморфизм

ЗАДАНИЕ

ЛР4. Опорные классы VCL

Класс TControl

Принадлежность к родительскому контейнеру

Размещение и размеры элемента управления

Видимость и активность элемента управления

Задание

ЛР5. Обработка клавиатурных событий и событий мышки

Щелчки кнопками мыши

Перемещение указателя мыши

Вращение колесика мыши

Операция перетаскивания drag and drop

Задание

ЛР 6. Классы потоков данных

Прототип потоков данных, класс TStream

пассажиров должно быть от 0 до 30!');

end;

Полиморфизм


Концепция наследования порождает еще одну полезную черту классов — полиморфизм. Идея полиморфизма тесно связана с наследованием и заключается в праве экземпляра некоторого класса представлять все классы из его иерархической цепочки. Более того, благодаря полиморфизму мы получаем право скрывать (инструкция override) или переопределять (инструкция inherited) поведение унаследованных методов. Поэтому различные по содержанию процедуры и функции всевозможных объектов могут использовать одно и то же имя. Вызов же метода будет приводить к выполнению кода соответствующего конкретному экземпляру объекта.

Листинг 3.16 поможет нам разобраться с основными принципами полиморфизма, он представляет собой модуль с цепочкой классов-самолетов.


Листинг 3.16. Цепочка классов TAirframe, TAircraft и TJetAircraft




unit Polymorph;
interface

uses SysUtils, Dialogs;
type

TAirframe = class //абстрактный класс планер

procedure Fly; virtual; abstract; end;
TAircraft = class(TAirframe) //самолет

procedure Fly; override; //перезапись метода

end;
TJetAircraft = class(TAircraft) //реактивный самолет

procedure Fly; override; //перезапись метода

end; implementation

procedure TAircraft.Fly;

begin

ShowMessage('Aircraft Fly');

end;
procedure TJetAircraft.Fly;

begin

{позднее этот участок кода будет доработан} ShowMessage('JetAircraft Fly');

end; end.
Первый из классов абстрактный. Это означает, что из него нельзя создать самостоятельный
объект, но в этом и нет необходимости, задача планера TAirframe заключается в определении родовой черты всех своих потомков. Это, ни много ни мало, отвечающий за полет метод Fly(), который должен быть обязательно объявлен и заполнен программной логикой у всех наследников TAirframe — летательных аппаратов, классов TAircraft и TJetAircraft.

Для того чтобы классы TAircraft и TJetAircraft получили право пользоваться одноименным методом Fly(), после объявления его заголовка использована специальная директива override, аннулирующая метод класса-предка.

В результате в момент обращения к процедуре Fly() класса TAircraft выводится окно с текстовым сообщением "Aircraft Fly", процедуре Fly() класса TJetAircraft — "JetAircraft Fly". Одним словом, каждый из самолетов "летает" по-своему. Для того чтобы в этом убедиться, можно воспользоваться листингом 3.17.


Листинг 3.17. Вызов метода Fly() экземпляра класса TJetAircraft




with TJetAircraft.Create do begin

Fly;

Destroy;

end;
В ответ на вызов фрагмента кода (листинг 3.17) мы получим сообщение "JetAircraft Fly".

А теперь настал час провести эксперимент с полиморфизмом, но для этого придется внести незначительное исправление в реализацию метода Fly() класса реактивного самолета TJetAircraft. Поэтому мы добавим в программный модуль всего одну строку с инструкцией inherited (листинг 3.18).


Листинг 3.18. Усовершенствование метода Fly() класса TJetAircraft




unit Polymorph;

...

procedure TJetAircraft.Fly;

begin

inherited; ShowMessage('JetAircraft Fly');

end; end.
Инструкция inherited уведомляет Delphi о том, что при вызове метода Fly() класс TJetAircraft

намерен воспользоваться услугами одноименного метода Fly() своего класса-предка TAircraft.

Если вы, после внесения исправлений

, вновь вызовите предложенный в листинге 3.17 код, то на экране отобразится не одно, а целых два окна сообщений:

  • сообщение "Aircraft Fly" (вызванное методом Fly() класса-предка TAircraft);

  • сообщение "JetAircraft Fly" принадлежащее экземпляру класса TJetAircraft.

ЗАДАНИЕ


Создайте указанную в варианте цепочку классов. Оформите разработанные классы в отдельном файле .pas. Разработайте приложение демонстрирующее работоспособность классов.

Вариант 1


Разработайте цепочку классов:

ШлюпкаКорабльПодводнаялодка

Характеристики шлюпки: скорость движения, угол поворота руля (0..359 градусов).

Характеристики корабля: характеристики шлюпки + двигатель (вкл/откл). Корабль не может двигаться с включённым двигателем.

Характеристики подводной лодки: характеристики корабля + глубина погружения (до 300 метров) + люк ложки (открыт/закрыт). Лодка не может погружаться с открытым люком, люк не может быть открыт на глубине.

Вариант 2


Разработайте цепочку классов:

ВоздушныйшарДирижабль Самолёт

Характеристики воздушного шара: скорость движения, направление движения (0..359 градусов), высота подъёма (до 3000 метров).

Характеристики дирижабля: характеристики воздушного шара + двигатель (вкл/откл). Дирижабль не может двигаться с отключенным двигателем.

Характеристики самолёта: характеристики дирижабля + высота полёта (до 15000 метров) + люк ложки (открыт/закрыт). Самолёт не может “остановиться” в полёте.

Вариант 3


Разработайте цепочку классов:

СвечаЭлектролампочкаПрожектор

Характеристики свечи: зажжена/потушена.

Характеристики лампочки: характеристики свечи + исправна/неисправна, мощность (25..100 Вт), цвет свечения. Лампа не может светиться в выключенном и в неисправном
состоянии.

Характеристики прожектора: характеристики лампочки + только белый цвет + мощность (0,5..50 кВт)+ азимут и угол места направления света.

Вариант 4


Разработайте цепочку классов:

ПлёночныйфотоаппаратЦифровойфотоаппаратЦифроваявидеокамера

Характеристики плёночного фотоаппарата: фотоплёнка установлена/отсутствует, число оставшихся кадров (от 0 до 36), метод — сделать снимок (уменьшает число оставшихся кадров).

Характеристики цифрового фотоаппарата: качество снимка (плохое/хорошее/отличное — соответственно размер файла 0,5/1/2Мб), общий размер флэш-памяти (16/32/64 Гб), остаток свободного места флэш-памяти (уменьшается после каждого снимка).

Характеристики цифровой видеокамеры: характеристики цифрового фотоаппарата + режим работы (фотоаппарат/видеокамера), качество видео (плохое/хорошее/отличное соответственно 1

минута видеофайла занимает 10/50/100 Мб), общий размер памяти (128/256/512 Гб), остаток свободного места.