Лабораторная работа №14 icon

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



НазваниеЛабораторная работа №14
Дата конвертации30.06.2012
Размер62.68 Kb.
ТипЛабораторная работа
1. /OOP/Лабораторная работа ь00-Введение.doc
2. /OOP/Лабораторная работа ь01-Calc&Type.doc
3. /OOP/Лабораторная работа ь02-Drag&Except.doc
4. /OOP/Лабораторная работа ь03-Font&Phrase.doc
5. /OOP/Лабораторная работа ь04-Menu.doc
6. /OOP/Лабораторная работа ь05-Canvas.doc
7. /OOP/Лабораторная работа ь06-Animation.doc
8. /OOP/Лабораторная работа ь07-Hint&Format.doc
9. /OOP/Лабораторная работа ь08-Notepad&BMP.doc
10. /OOP/Лабораторная работа ь09-StringGrid.doc
11. /OOP/Лабораторная работа ь10-MediaPlayer.doc
12. /OOP/Лабораторная работа ь11-Shape.doc
13. /OOP/Лабораторная работа ь12-Events.doc
14. /OOP/Лабораторная работа ь13-Finally&Except.doc
15. /OOP/Лабораторная работа ь14-Animal.doc
16. /OOP/Лабораторная работа ь15-MyButton.doc
17. /OOP/Темы курсовых работ по курсу ООП.doc
Введение
Лабораторная работа №01
Лабораторная работа №02
Лабораторная работа №03
Лабораторная работа №04
Лабораторная работа №05
Лабораторная работа №06
Лабораторная работа №07
Лабораторная работа 08
Лабораторная работа №09
Лабораторная работа №10
Свойства в Delphi
Лабораторная работа №12 События в Delphi
Chapter 12
Лабораторная работа №14
Лабораторная работа №15
Кнопка (TButton)

Лабораторная работа №14.

Классы и модули.

Классы и сокрытие информации


Класс может содержать сколько угодно данных и любое количество методов.
Однако для соблюдения всех правил объектно-ориентированного подхода данные должны быть скрыты, или инкапсулированы, внутри использующего их класса. Использование метода для получения доступа к внутреннему представлению объекта уменьшает риск возникновения ошибочных ситуаций и позволяет автору класса модифицировать внутреннее представление в будущих версиях. В Object Pascal имеются две различные конструкции, подразумевающих инкапсуляцию, защиту и доступ к переменным: классы и модули. С классами связаны некоторые специальные ключевые слова – спецификаторы доступа:

  • private – элементы интерфейса класса видны только в пределах модуля, в котором определен класс. Вне этого модуля private-элементы не видны и недоступны. Если в одном модуле создано несколько классов, то все они видят private-разделы друг друга.

  • Раздел public не накладывает ограничений на область видимости перечисленных в нем полей, методов и свойств. Их можно вызывать в любом другом модуле программы.

  • Раздел published также не ограничивает область видимости, однако в нем перечислены свойства, которые должны быть доступны не только на этапе исполнения, но и на этапе конструирования программы. Раздел published используется при разработке компонентов. Без объявления раздел считается объявленным как published. Такой умалчиваемый раздел располагается в самом начале объявления класса любой формы и продолжается до первого объявленного раздела. В раздел published среда помещает описание вставляемых в форму компонентов. Сюда не нужно помещать собственные элементы или удалять элементы, вставленные средой.

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

Порядок следования разделов может быть любой, любой раздел может быть пустым.

Классы и модули


Приложения Delphi интенсивно используют модули. За каждой формой скрывается соответствующий ей модуль. Однако модули не обязаны иметь соответсвующие формы.

Модуль содержит раздел interface, где объявлено все, что доступно для других модулей, и раздел implementation с реальным кодом. Наконец, модуль может иметь два необязательных раздела : initialization с некоторым кодом запуска, который выполняется при загрузке в память программы, использующей данный модуль, и finalization, который выполняется при завершении программы.

Предложение uses в начале раздела interface к каким другим модулям мы должны получить доступ из раздела interface текущего модуля. Если же на другие модули необходимо сослаться из клда подпрограмм и методов, вы должны добавить новое предложение uses в начале раздела implementation.

В интерфейсе модуля можно объявить несколько различных элементов, в том числе процедуры, функции, глобальные переменные и типы данных. Также можно поместить в модуль класс. Delphi это делает автоматически при создании каждой формы. Чтобы создать новый не относящийся к форме модуль, выберите команду File/New и отметьте на странице New появившегося окна Object Repository элемент Unit.

Модули и область видимости


Область видимости идентификатора ( переменной, процедуры, функции или типа данных, определяет ту часть кода, в которой доступен этот идентификатор. Основное правило состоит в том, что идентификатор является значимым только внутри его области видимости.

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

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

видимости распространяется на любой другой модуль, где объявлен идентификатор. Любой

идентификатор, объявленный в интерфейсе модуля, является глобальным; все другие идентификаторы принято называть локальными.

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


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

Модули можно считать вторичными файлами, к которым обращается основная часть приложения – программа. На практике файл программы обычно является автоматически сгенерированным файлом с ограниченной ролью. Он нужен только для запуска программы, которая выполныет основную форму. Код файла программы, или файла проекта Delphi (DPR), можно отредактировать вручную или с помощью Project Manager и некоторых опций проекта.

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


Правило языка 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 ;


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


(MyAnimal as Dog) . Eat ;

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

Приведение с операцией as отличается от традиционного приведения тем, что в случае несовместимости типа объекта с типом, к которому вы пытаетесь его привести, порождается исключение EInvalidCast.

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


if MyAnimal is Dog then

(Dog (MyAnimal) ) . Eat ;

Задание


Открыть модуль, не связанный с формой и поместить в него три класса:

  • Класс Animal, который содержит в разделе public объявление конструктора Create и объявление метода-функции: Verse – звук, издаваемый животным. Тип результата возвращаемого функцией – string. Метод Verse объявить виртуальным и абстрактным. В разделе private класса определить переменную Kind : string.

  • Класс Dog объявить потомком класса Animal. В разделе public этого класса объявить конструктор и методы Verse и Eat. Метод Eat типа string объявить виртуальным ( пища животного).

  • Класс Cat объявить потомком класса Animal. Раздел public класса содержит те же определения, что и соответствующий раздел класса Dog.

В реализациях конструктора каждого класса переменной Kind присваивается имя соответствующего животного, напрамир для класса Animal : Kind := ‘An Animal’.

В реализациях методов Verse возвращается звук, издаваемый животным, например Verse := ‘Mieow’.

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

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

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

  • В форме расположить три кнопки опций ( компонент RadioButton) с названиями Animal, Dog, Cat ; кнопкой команды (компонент Button) с названием Kind и две крупный надписи (компонент Label) . Нажатию одной из кнопок опций будет соответствовать выбор животного. При нажатии кнопки команды надписи должны отобразить звук, издаваемый животным и его пищу.

  • Определите в классе формы private-переменную MyAnimal. Запишите код для обработчика события OnCreate формы, где создается объект типа Dog на который ссылается переменная MyAnimal.

  • В обработчиках события OnClick каждой кнопки опций записать код, который удаляет текущий объект и создает новый.

  • В обработчике события OnClick кнопки команды записать код, который будет помещать в надписи звук, издаваемый животным и его пищу. Для работы с методом Eat используйте операцию is для приведения типов.

  • Если вы все сделали правильно, при запуске приложения надписи будут отображать пищу и звук для Dog и Cat и приложение завершит работу по ошибке при выборе Animal.

  • Уберите ключевое слово abstract в объявлении метода Verse. Запустите приложение снова. Посмотрите что изменилось в работе приложения. Объясните различия.

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

  • Разработайте два класса потомка от Dog или Cat (согласно варианту), которые будут отображать особенности двух пород собак или кошек соответственно. Разработайте методы для этих классов, позволяющие получить некоторые характеристики породы (рост, длина шерсти, длина ушей и т.д.). Дополните форму компонентами позволяющими увидеть все характеристики разработанных классов.

  • Потомки должны показываться на форме, если пользователь выбирает родителя, и должны быть скрыты, если выбран другой класс.



Похожие:

Лабораторная работа №14 iconЛабораторная работа: создание мини-презентации «Памятники Кремля»
Лабораторная работа проводится в компьютерном классе, с подключением к сети Internet
Лабораторная работа №14 iconДокументы
1. /Lab1/Лабораторная работа 1.doc
2. /Lab2/Лабораторная...

Лабораторная работа №14 iconИ я забуду Покажи мне и я запомню, Дай мне действовать самому и я научусь. Китайская мудрость Тема: Лабораторная работа
Тема: «Лабораторная работа «Измерение работы и мощности тока в электрической лампочке»
Лабораторная работа №14 iconДокументы
1. /Nash/lab1/Лабораторная работа ь1.doc
2. /Nash/lab10/Лабораторная...

Лабораторная работа №14 iconЛабораторная работа №2 «Система безопасности Windows xp»
Лабораторная работа №2 «Система безопасности Windows xp» Цель работы: Изучить систему безопасности Windows xp
Лабораторная работа №14 iconЛабораторная работа «Работа в Windows c помощью основного меню. Использование технологии ole»
Запишите размер папки, выраженный в Мб (мегабайтах) в текстовый редактор блокнот
Лабораторная работа №14 iconЛабораторная работа «Работа с текстовыми фрагментами без помощи мыши»
Скопируйте последнее слово получившегося текста и вставьте его в начало текста один раз
Лабораторная работа №14 iconДокументы
1. /Базовые задачи на обработку массива.doc
2. /ЗадачиНаЛиниВетвление.doc
Лабораторная работа №14 iconДокументы
1. /laba/Лабораторная работа ь1.doc
2. /laba/Лабораторная...

Лабораторная работа №14 iconДокументы
1. /механизация/~$б работа ь4.doc
2. /механизация/~$бораторная...

Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов