Разработка классов предметной области "Кошки"

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



Вµ по смыслу проблемы разными способами. В рамках Object Pascal поведенческие свойства класса определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках класса, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т. е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющих разную алгоритмическую основу и, следовательно, придающих объектам разные свойства. Это и называется полиморфизмом объектов.

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

Для статических методов перекрытие осуществляется компилятором. Например, метод ViewSex класса TPerson1 статически перекрывается одноименным методом класса TPerson2. По умолчанию все методы, описанные в классе, являются статическими.

Динамические и виртуальные методы отличаются от статических тем, что замещение родительских методов методами потомков происходит на этапе выполнения программы. Для объявления виртуального метода в родительском классе необходимо использовать зарезервированное слово virtual, а для объявления динамического метода - зарезервированное слово dynamic. В классе-потомке в заголовке замещающего метода должно быть указано зарезервированное слово override.

Так из описания классов TPerson2 и TPerson3 следует что, метод ViewSex класса TPerson2 является виртуальным и перекрывается одноименным методом класса TPerson3.

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

Абстрактными называются виртуальные или динамические методы, которые определены в классе, но не содержат никаких действий, никогда не вызываются и обязательно должны быть переопределены в классах-потомках. Объявляется абстрактный метод при помощи зарезервированного слова abstract, расположенного после слов virtual или dynamic.

Основное предназначение абстрактных методов - быть родоначальником иерархии конкретных методов в классах-потомках.

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

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

Все методы являются методами класса, а не объекта, поэтому при описании метода в названии используется имя класса (например, TPerson1.ViewSex ).

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

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

Компонент в Delphi представляют класс, а компонент установленный на форму уже конкретный объект. При работе с классами - компонентами, система автоматически создает (при установке компонента на форму) и удаляет (при удалении компонента) объекты.

2. Разработка классов транспортных средств

Разработать классы и создать приложение:

  1. Разработать класс, который инкапсулирует информацию о транспортных средствах, таких как легковые автомобили, автобусы, грузовики. Этот класс (Vehicle) должен хранить следующие данные - количество Мест (Seats), объем бака (Сap), расстояние (mpl), которое проедет автомобиль, используя один литр топлива.
  2. В классе использовать 3 поля (FSeats, Ffuelcap, Fmpl);
  3. Создать объект Motor.
  4. Ввести значения полей(FSeats, FCap, Fmpl).
  5. Найти максимальное расстояние, которое может пройти автомобиль Motor, имея полный бак.
  6. Создать класс (Vehicle1) , который является наследником класса Vehicle, определить в нем 3 свойства Passengers (число пассажиров), Fuel (топлива в баке), Mpl, все типа Byte. Последнее свойство работает только на чтение. В процедурах записи значений свойств Passengers, Fuel использовать ограничения.
  7. В классе Vehicle1, определить метод (MaxDistance), который определяет максимальную дальность поездки, с данной заправкой топливного бака.
  8. Для класса Vehicle1 разработать конструктор с начальной инициализацией. При этом бак должен быть заполнен наполовину, пассажиров столько сколько мест.
  9. Создать объект Motor1 класса Vehicle1.
  10. Ввести значения свойств (Passengers, Fuel).
  11. Вывести максимальную дальность поездки.
  12. Ввести расстояние, которое должен пройти автомобиль Motor1 и найти оставшееся количество топлива.
  13. Создать класс (Vehicle2) , который является наследником класса Vehicle1, переопределить в нем метод (MaxDistance), который определяет максимальную дальность поездки, учетом числа пассажиров (пробег авто на 1 литр бензина уменьшается на (k-1), где к - число пассажиров).
  14. В классе Vehicle2 определить метод FuelNeeded, который на заданное расстояние возвр