Разработка простого приложения Delphi

Автор работы: Пользователь скрыл имя, 23 Февраля 2011 в 07:41, лабораторная работа

Описание работы

. Цель работы

Ознакомление со средой визуального программирования Delphi и разра-

ботка в ней простейших приложений.

Файлы: 1 файл

ЛАБОРАТОРНАЯ РАБОТА по дельфи.doc

— 416.00 Кб (Скачать файл)

   3.4. Модули и программы

          Приложение Delphi создается из файлов  исходного текста двух

разных  видов. Это один или несколько  модулей и один файл программы.

          Модули можно считать вторичными  файлами, к которым обраща-

ется основная часть приложения – программа. На практике файл программы

обычно  является автоматически сгенерированным  файлом с ограниченной

ролью. Он нужен только для запуска программы, которая выполняет основ-

ную форму. Код файла программы, или файла  проекта Delphi (DPR), можно

отредактировать вручную или с помощью Project Manager и некоторых оп-

ций проекта.

  3.5. Информация  о типе на этапе выполнения

          Правило языка Object Pascal о совместимости типов для классов-

потомков  позволяет вам использовать класс-потомок  там, где ожидается

класс - предок, обратное невозможно. Теперь предположим, что класс Dog

содержит  функцию Eat, которая отсутствует  в классе Animal.

          Если переменная MyAnimal ссылается  на объект типа Dog, вызов

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

функцию, а переменная ссылается на объект другого класса, возникнет

ошибка. Поскольку  компилятор не способен определить, будет ли значение

правильным  на этапе выполнения, то, делая явное  приведение типов, мы

рискуем вызвать опасную ошибку этапа  выполнения программы.

          Для решения данной проблемы  можно воспользоваться некоторы-

ми подходами, основанными на системе RTTI. Каждый объект знает свой

тип и  своего предка и может получить эту  информацию с помощью опера-

ции is. Параметрами  операции is являются объект и тип:

   if MyAnimal is Dog then …

          Выражение is становится истинным, только если в настоящее вре-

мя объект MyAnimal имеет тип Dog или тип потомка  от Dog. Другими сло-

вами, это  выражение приобретает значение True, если вы можете без риска

присвоить объект (MyAnimal) переменной заданного  типа данных (Dog).

Такое прямое приведение можно выполнить так: 

   if MyAnimal is Dog then

      MyDog := Dog (MyAnimal) ; 

   То же действие можно выполнить напрямую с помощью другой опера-

ции RTTI – as. Мы можем написать так: 

   MyDog := MyAnimal as Dog ;

   Text := MyDog. Eat ;

                                    41 
 

         Если мы хотим вызвать функцию  Eat, можно использовать и дру-

 гую форму записи: 

    (MyAnimal as Dog) . Eat ;

           Результатом выражения будет  объект с типом данных класса Dog,

 поэтому  вы можете применить к нему  любой метод этого класса.

           Приведение с операцией as отличается  от традиционного приведе-

 ния  тем, что в случае несовместимости  типа объекта с типом, к которому  вы

 пытаетесь  его привести, порождается исключение EInvalidCast.

           Чтобы избежать этого исключения, используйте операцию is и в

 случае  успеха делайте простое приведение: 

     if MyAnimal is Dog then

       (Dog (MyAnimal) ) . Eat ; 

4. Порядок  выполнения работы 

1.   В среде программирования Delphi cоздайте  новый проект, выбрав пункт

     меню File/New Application.

2.   Сохраните этот проект в папке  "С:\Ваша_группа\Ваша_фамилия Lab4".

     (Unit1.pas под новым именем Main4.pas, а  Project1.dpr под новым именем

     Lab4.dpr).

3.   Открыть модуль, не связанный  с формой (File/New и отметьте на  страни-

     це New появившегося окна Object Repository элемент  Unit), и поместить в

     него три класса:

♦    Класс Animal, который содержит в разделе public объявление конструк-

     тора Create и объявление метода-функции: Voice – звук, издаваемый жи-

     вотным. Тип результата возвращаемого функцией, – string. Метод Voice

     объявить виртуальным и абстрактным. 

       public

       constructor Create;

       function GetKind: string;

       function Voice: string; virtual; abstract; 

         В разделе private класса определить переменную Kind: string.

♦   Класс Dog объявить потомком класса Animal:

        TDog = class (TAnimal)

         В разделе public этого класса  объявить конструктор и методы Voice

 и Eat. Метод Eat типа string объявить

         виртуальным (пища животного). 

                                          42

public

       constructor Create;

       function Voice: string; override;

       function Eat: string; virtual;

♦ Класс Cat объявить потомком класса Animal.

        TCat = class (TAnimal)

         Раздел public класса содержит те  же определения, что и соответст-

 вующий раздел класса Dog.

        public

       constructor Create;

       function Voice: string; override;

       function Eat: string; virtual;

               В реализациях конструктора каждого класса переменной Kind

 присваивается  имя соответствующего животного,  например, для класса

Animal:

        Kind := ‘An Animal’.

           В реализациях методов Voice возвращается  звук, издаваемый жи-

 вотным, например:

        Voice := ‘Mieow’.

           В реализациях методов Eat возвращается  название пищи, которой

 питается  соответствующее животное:

        Eat:= 'A bone, please!';

4. Задать  имя модуля и имя проекта,  в который этот модуль будет  включен.

7. Добавить  в проект форму, которой присвоить имя Animals, также задать

    имя модулю, связанному с формой.

8. В форме  расположить три кнопки опций  (компонент RadioButton) с на-

    званиями Animal, Dog, Cat ; кнопкой команды  (компонент Button) с на-

    званием Kind и две крупные надписи (компонент Label)(рис. 4.1). Нажа-

    тию одной из кнопок опций  будет соответствовать выбор  животного.

    При нажатии кнопки команды  надписи должны отобразить звук, изда-

    ваемый животным, и его пищу. 
 
 
 

                                     43 
 

                        Рис. 4.1. Форма проекта 

9.  Определите  в классе формы private-переменную MyAnimal.

       private

       MyAnimal: TAnimal;

        Запишите код для обработчика  события OnCreate формы, где созда-

 ется  объект типа Dog, на который ссылается переменная MyAnimal.

       begin

       MyAnimal := TDog.Create;

       end;

10. В обработчиках  события OnClick каждой кнопки опций  записать код,

    который удаляет текущий объект  и создает новый.

    begin

      MyAnimal.Free;

      MyAnimal := TAnimal.Create;

      end;

11. В обработчике  события OnClick кнопки команды записать  код, который

    будет помещать в надписи звук, издаваемый животным.

    begin

    LabelVoice.Caption := MyAnimal.Voice;

      end; 
 
 
 

                                    44 
 

                            Рис. 4.2.Звук для Cat 
 
 
 

                     Рис. 4.3. Сообщение об ошибке 

12. Если  вы все сделали правильно, при  запуске приложения надписи будут

    отображать пищу и звук для  Dog и Cat (рис. 4.2) и приложение завершит

    работу по ошибке при выборе Animal (рис. 4.3).

13. Уберите  ключевое слово abstract в объявлении  метода Voice. Запустите

    приложение снова. Посмотрите, что  изменилось в работе приложения.

    Объясните различия.

14. Попробуйте  использовать метод Eat без приведения типов (без is).

15. Доработайте  проект согласно варианту индивидуального  задания. 

                                     45 
 

5. Варианты  индивидуальных заданий

    Вариант 1

    Разработайте два класса потомка  от Animal, которые будут отображать

 особенности  двух пород собак. Разработайте  методы для этих классов, по-

 зволяющие  получить некоторые характеристики  породы (рост, длина шер-

 сти,  длина ушей и т.д.). Дополните  форму компонентами, позволяющими

 увидеть  все характеристики разработанных классов.

    Примерная форма проекта представлена  на рис. 4.4.

    После запуска программы представляется  возможность выбора между

 значениями: Animal, Dog, Cat. Выбор осуществляется  при помощи кнопки

SELECT. Далее  предоставляется дополнительная возможность для выбора

 породы  собаки.

    При выделении знаком: 

    интересующей породы можно получить  дополнительную информацию. 

    Вариант 2

    Разработайте два класса потомка  от Animal, которые будут отображать

особенности двух новых животных Wolf (волк) и Jascal (шакал). Разрабо-

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

ристики этих видов животных (рост по холке, длина клыков, вес и т.д.). До-

полните форму компонентами, позволяющими увидеть  все характеристики

Информация о работе Разработка простого приложения Delphi