Бояться не надо |
Статьи о DelphiОбъектно-ориентированное программированиеБольшим шагом вперёд в развитии технологий программирования было появление объектно-ориентированного программирования. Здесь программный код перестал быть "плоским" и программист оперирует не просто процедурами и функциями, а целыми объектами.Объект — совокупность свойств, методов, событий. Что означает "совокупность"? Это значит, что объект как бы состоит из методов, свойств и событий, и они обеспечивают его полноценную работу. Представим себе кнопку. Она обладает:
Свойства — это переменные, которые влияют на состояние объекта. Например, ширина и высота объекта. Методы — это те же процедуры и функции, т. е. это то, что объект умеет делать. Например, объект может иметь процедуру для вывода какого-то текста на экран. Эта процедура и есть метод, который принадлежит объекту. События — это те же процедуры и функции, которые вызываются при наступлении определенного события. Например, если изменилось какое-то свойство объекта, может быть сгенерировано соответствующее событие и вызвана процедура, которая инициализирует реакцию приложения на это событие. Изначально в объекте может и не быть процедуры для какого-то события, а если и есть, то она действует как обработчик по умолчанию. В среде Delphi в качестве обработчиков вы будете назначать собственные процедуры только в строго определенном формате (в зависимости от события). Формат процедуры заранее определен, и в разных случаях объект должен будет передавать вам различные параметры. Ваши процедуры должны будут соответствовать предопределенному формату, чтобы не было разногласий с объектом, к которому они будут относиться. Рассмотрим пример. Пусть пользователь нажал на кнопку. В этом случае она, как объект, генерирует соответствующее событие. В результате этого может быть вызвана процедура-обработчик, которую вы назначили кнопке при возникновении данного события. В этом случае не требуется никакая дополнительная информация, поэтому объект не будет пересылать вам никаких параметров, кроме указателя на самого себя. Однако, если нужно обработать событие, связанное с перемещением курсора мыши, дело будет обстоять несколько иначе. В этом случае объект будет генерировать событие и автоматически передавать вам новые координаты X и Y курсора, поэтому процедура должна быть объявлена с соответствующими параметрами, чтобы можно было принять их от объекта. Теперь рассмотрим работу свойств, методов и событий как единого целого. И снова для примера возьмем объект — кнопку. Такой объект должен обладать следующим минимальным набором. 1. Свойства:
У каждого объекта обязательно присутствуют два метода: "создать объект" и "уничтожить объект". Во время создания объекта происходит выделение памяти дляхранения необходимых свойств, и заполняются значения по умолчанию. Во время уничтожения объекта происходит освобождение выделенной памяти. Метод для создания объекта называется конструктором (constructor). Метод для уничтожения объекта называется деструктором (destructor). Сам процесс создания объекта называется инициализацией. Теперь рассмотрим использования нашей кнопки. Он выглядит следующим образом:
Давайте напишем прототип небольшой программы, которая пояснит весь процесс создания объекта. Начало программы
Переменные: Доступ к свойствам и методам объектов осуществляется при помощи записи
ИмяОбъекта.Свойство т.е. в записи имя объекта и его свойства или методы объекта разделяются точкой. Создание объекта перед использованием — обязательно. Поэтому, если вы попробуете использовать код, приведенный ниже, то у вас произойдет ошибка. Неправильное использование объекта
Начало программы Здесь мы пытаемся изменить заголовок без создания и уничтожения объекта, а это ошибка! В данном случае переменная Объект1 ещё ничего не хранит и ни на что не указывает. Её необходимо сначала проинициализировать и создать для нее объект-кнопку или присвоить адрес расположения в памяти уже существующей кнопки. Без инициализации можно использовать только простые переменные, такие как число или строка. Тут Delphi выделяет под них память автоматически, потому что размер этих переменных фиксированный и Delphi уже на этапе компиляции знает, сколько памяти нужно отвести под переменную. Сложные переменные типа объектов обязательно должны инициализироваться. Это связано еще и с размещением данных. Простые переменные хранятся в стеке (сегмент стека), а сложные переменные типа объектов хранятся в памяти компьютера. При старте программы сегмент стека инициализируется автоматически. Поэтому переменные могут спокойно размещаться в уже подготовленной памяти сегмента стека. Когда вы создаете объект, он создается в нераспределенной памяти компьютера. Так как память еще не распределена, ее нужно сначала подготовить (выделить нужный объем под создаваемый объект). После того как объект не нужен, эту память необходимо освободить, вызвав деструктор объекта. Простые переменные освобождать не надо, потому что стек очищается автоматически. Объект — очень удобная вещь. Он работает как шаблон, на основе которого создаются переменные типа объектов. Например: Объект в виде шаблона
Начало программы Инициализацию объекта еще очень часто называют созданием экземпляра объекта. И это тоже правильно. Когда вы вызываете конструктор, в памяти создается новый экземпляр объекта. В данном примере можно сказать, что наши переменные объект1 и Объект2 указывают на собственные экземпляры объекта Кнопка, т. е. в памяти получается две независимые копии объекта (кнопки). Любую из них можно независимо менять и она не будет влиять на другую переменную. Теперь более подробно о самом примере. В нем объявляются две переменных типа "кнопка". Потом производятся их инициализация и изменение заголовка на нужный. В результате мы получили из одного объекта две кнопки с разными заголовками. Обе кнопки работают автономно и не мешают друг другу, потому что им выделена разная память. Таким образом создаются новые объекты на основе шаблона и потом раздельно используются, изменяя разные свойства шаблона и используя его методы. По материалам сайта О Delphi |
|
© 2023 Delphi-Manual.ru - Уроки Delphi начинающим с нуля |