Разработка классов предметной области "Кошки"
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
Вµ по смыслу проблемы разными способами. В рамках Object Pascal поведенческие свойства класса определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках класса, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т. е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющих разную алгоритмическую основу и, следовательно, придающих объектам разные свойства. Это и называется полиморфизмом объектов.
Методы, определенные в классе, могут быть статическими, виртуальными, динамическими или абстрактными. Тип метода определяется механизмом перекрытия его в потомках.
Для статических методов перекрытие осуществляется компилятором. Например, метод ViewSex класса TPerson1 статически перекрывается одноименным методом класса TPerson2. По умолчанию все методы, описанные в классе, являются статическими.
Динамические и виртуальные методы отличаются от статических тем, что замещение родительских методов методами потомков происходит на этапе выполнения программы. Для объявления виртуального метода в родительском классе необходимо использовать зарезервированное слово virtual, а для объявления динамического метода - зарезервированное слово dynamic. В классе-потомке в заголовке замещающего метода должно быть указано зарезервированное слово override.
Так из описания классов TPerson2 и TPerson3 следует что, метод ViewSex класса TPerson2 является виртуальным и перекрывается одноименным методом класса TPerson3.
Различие между виртуальными и динамическими методами невелико и связано с особенностями реализации их вызовов. Можно сказать, что виртуальные методы более эффективны с точки зрения затрат времени, а динамические методы позволяют более рационально использовать оперативную память.
Абстрактными называются виртуальные или динамические методы, которые определены в классе, но не содержат никаких действий, никогда не вызываются и обязательно должны быть переопределены в классах-потомках. Объявляется абстрактный метод при помощи зарезервированного слова abstract, расположенного после слов virtual или dynamic.
Основное предназначение абстрактных методов - быть родоначальником иерархии конкретных методов в классах-потомках.
Если переопределяемый в классе-наследнике метод имеет другой список параметров, то он не скрывает, а перегружает метод наследник. Для того чтобы метод был перегружаемым, в объявлении метода вместо override. необходимо указать ключевое слово overload.
Классы могут быть описаны только в интерфейсной части модуля (как правило, это и делается) или в разделе реализации модуля, описывать классы в процедурах и функциях запрещено. Методы класса (конструкторы, процедуры и функции) должны быть обязательно описаны в разделе реализации модуля.
Все методы являются методами класса, а не объекта, поэтому при описании метода в названии используется имя класса (например, TPerson1.ViewSex ).
Конструкторы класса используются, как правило, для начальной инициализации полей, предварительно необходимо вызвать конструктор родительского класса, используя директиву inherited.
При создании объекта в памяти (куче) выделяется место под хранение данных и методов класса, а переменная просто является ссылкой на выделенную область.
Компонент в Delphi представляют класс, а компонент установленный на форму уже конкретный объект. При работе с классами - компонентами, система автоматически создает (при установке компонента на форму) и удаляет (при удалении компонента) объекты.
2. Разработка классов транспортных средств
Разработать классы и создать приложение:
- Разработать класс, который инкапсулирует информацию о транспортных средствах, таких как легковые автомобили, автобусы, грузовики. Этот класс (Vehicle) должен хранить следующие данные - количество Мест (Seats), объем бака (Сap), расстояние (mpl), которое проедет автомобиль, используя один литр топлива.
- В классе использовать 3 поля (FSeats, Ffuelcap, Fmpl);
- Создать объект Motor.
- Ввести значения полей(FSeats, FCap, Fmpl).
- Найти максимальное расстояние, которое может пройти автомобиль Motor, имея полный бак.
- Создать класс (Vehicle1) , который является наследником класса Vehicle, определить в нем 3 свойства Passengers (число пассажиров), Fuel (топлива в баке), Mpl, все типа Byte. Последнее свойство работает только на чтение. В процедурах записи значений свойств Passengers, Fuel использовать ограничения.
- В классе Vehicle1, определить метод (MaxDistance), который определяет максимальную дальность поездки, с данной заправкой топливного бака.
- Для класса Vehicle1 разработать конструктор с начальной инициализацией. При этом бак должен быть заполнен наполовину, пассажиров столько сколько мест.
- Создать объект Motor1 класса Vehicle1.
- Ввести значения свойств (Passengers, Fuel).
- Вывести максимальную дальность поездки.
- Ввести расстояние, которое должен пройти автомобиль Motor1 и найти оставшееся количество топлива.
- Создать класс (Vehicle2) , который является наследником класса Vehicle1, переопределить в нем метод (MaxDistance), который определяет максимальную дальность поездки, учетом числа пассажиров (пробег авто на 1 литр бензина уменьшается на (k-1), где к - число пассажиров).
- В классе Vehicle2 определить метод FuelNeeded, который на заданное расстояние возвр