Объектно-ориентированное Программирование

лет назад книгу по Delphi 2 или 3 надо было начинать с азов объектно-ориентированного программирования (ООП). Многие только переходили к Delphi из DOS, многие использовали Borland Pascal for Windows и работали с Windows API напрямую. Объекты еще были в диковинку, и полное разъяснение новых принципов было просто обязательно.

ООП предоставляет вам безусловно лучшие механизмы для его хранения, создания, и эксплуатации, делая эти вещи понятными и легкими для понимания. На суперклассинг я публикую один пример, в котором на главном окне будет создано 10 “измененных” Edit’ов. Каждый такой Edit при клике на нём мышки уничтожит себя сам. Стили класса – это комбинация значений, которые определяют поведение класса. Десятый – дополнительная память, выделяемая классу (тип Integer). По завершению работы приложения желательно уничтожить класс.

Странно, но Дмитрию не известно, что управление памятью классов в ОР реализовано даже не с помощью операторов, а гораздо красивее – на уровне TObject, виртуальными (!) методами NewInstance и FreeInstance. Таким образом, абсолютно ЛЮБОЙ класс может переопределить эти методы для осуществления желания “где хочу – там и буду лежать”. Секрет заключается в механизме классовых ссылок, которые фактически являются ссылками на VMT класса. Классовые ссылки регистрируются в пакетах с помощью процедуры Register. Ну и без виртуальных конструкторов, конечно, здесь тоже каши не сваришь.

В наследниках динамические методы перекрываются так же, как и виртуальные, т.е. TBIobStream Обеспечивает последовательный доступ к большим полям таблиц в базах данных. Файл на диске, раздел оперативной памяти, поле в таблице базы данных (см. табл. 1). Одиннадцатый – дополнительная память (Integer), выделяемая под каждое окно класса. Седьмой – дескриптор кисти, которой будет зарисована клиентская область окна. Этого атрибута нет у структуры типа TWndClass (поняли, в чем отличие TWndClass от TWndClassEx?).

объектно ориентированное программирование delphi

Первое объявление класса TGaugeList называется предварительным (от англ. forward). Оно необходимо для того, чтобы компилятор нормально воспринял объявление поля Owner в классе TDiskGauge. Ну теперь самое интересное – динамическая память. Тут еще проще – у указателей конструкторов и деструкторов нет. Чтобы вызвать конструктор у указателя надо воспользоваться оператором new.

Добавим, что размер памяти, требуемый для экземпляра, можно узнать вызовом предопределенного метода класса InstanceSize. Объекты могут выступать в программе не только в качестве переменных, но также элементов массивов, полей записей, параметров процедур и функций. Кроме того, они могут служить полями других объектов. Во всех этих случаях программист фактически оперирует указателями на экземпляры объектов в динамической памяти. Следовательно, объекты априори приспособлены для создания сложных динамических структур данных, таких как списки и деревья.

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

Все примеры очень простые, они должны дать Вам базовое представление о сабклассинге. • операции над свойством-массивом в целом запрещены; разрешены операции только с его элементами. Кажется беда Delphi как раз в том, что за внешней простотой многие не могут разглядеть ее истинные возможности. Да и решения об использовании конкретного языка принимаются зачастую на уровне руководства, которое вообще ничего не видит, кроме финансовых показателей дяди Билли. VCL не является языковым расширением Паскаля – это “ОО” библиотека. Транспортом же между такими библиотеками и отдельными компонентами выступает некая переделка СОМ от Борланд.

«объектно-ориентированное Программирование В Среде Delphi»

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

объектно ориентированное программирование delphi

В отличие от раннего связывания (early binding), характерного для статических методов, позднее связывание основано на вычислении адреса вызываемого метода при выполнении программы. Метод вычисляется по хранящемуся в каждом объекте описателю типа. Классы инкапсулируют (т.е. включают в себя) поля, методы и свойства; это их первая черта. Следующая не менее важная черта классов — способность наследовать поля, методы и свойства других классов.

После чего этот класс окна готов к использованию. Думаю, что Вы разобрались в примерах и мы можем переходить к сабклассингу средствами Windows API. Ту часть кода примеров, которые не относятся к теме статьи, я снабдил краткими комментариями.

Далее я публикую примеры кода, в которых будут рассмотрены способы сабклассирования окон как средствами VCL, так и средствами WinAPI. Заголовки методов, следующие за списком полей, играют роль предварительных (forward) объявлений. Программный код методов помещается ниже определения класса и будет приведен позже. Наблюдаемое в объектах https://deveducation.com/ объединение данных и операций в одно целое было обозначено термином инкапсуляция (первый кит ООП). Применение инкапсуляции сделало объекты похожими на маленькие программные модули и обеспечило сокрытие их внутреннего устройства. Для объектов появилось понятие интерфейса, что значительно повысило их надежность и целостность.

Аннотация Дисциплины «объектно-ориентированное Программирование»

Свойства объектов аналогичны свойствам, которые мы наблюдаем у обычных предметов. Программно свойства реализуются через поля и методы. Похоже, Дмитрий применительно к безопасности программирования рассматривал только те моменты, которые, по его мнению, хорошо смотрелись в С++ в сравнении с ОР.

Сабклассинг (subclassing) – контроль сообщений окон путем модификации оконной процедуры последних. Сабклассинг подразумевает использование изменённой оконной процедуры до оригинальной (а её можно вовсе и не использовать), позволяя нам создать сколь угодно заготовок оконных процедур для данного объекта. Хотя на практике обычно используется только одна. одно из основополагающих понятий объектно-ориентированного Конструктор иногда имеет параметры, в которых передаются исходные значения полей объекта. Если объект содержит встроенные объекты или другие динамические данные, то конструктор — это как раз то место, где их нужно создавать. Очевидно, что выполняемые при инициализации и деинициализации действия специфичны для каждого конкретного класса объектов.

Чтобы имена свойств не совпадали с именами полей, последние принято писать с буквы F (от англ. field). Кроме того, и конструкторы и деструкторы в ОР имеют приятную особенность (и далеко не одну). Кстати, Self в классовых методах ОР является классовой ссылкой, а не объектной. Представленные разработки могут быть использованы при изучении объектно-ориентированного программирования в школьном курсе информатики. Но на практике эта функция используется для вызова одной оригинальной оконной процедуры окна, которая была до его сабклассирования.

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

Этот способ применяется также для того, чтобы функция DefWindowProc не обрабатывала сообщение. Данная функция предназначена для выполнения стандартных действий системы при поступлении очередного сообщения. В сабклассинге она практически не используется (её роль выполняет оригинальная оконная процедура, в которой, быть может, и находится вызов DefWindowProc). Обратите внимание, что методы Get и Set обслуживают и свойство-массив Gauges, и индексированные свойства GaugeA, GaugeB и GaugeC. Если в описании обычных свойств могут участвовать поля, то в описании свойств-массивов разрешено использовать только методы.

Полиморфизм существенно облегчает труд программиста, так как обеспечивает повторное использование кода уже написанных методов. TMemoryStream Поток, который хранит свои данные в оперативной памяти. Используется для хранения промежуточных результатов, когда файловый поток не подходит из-за низкой скорости передачи данных.

  • Классический язык Pascal позволяет программисту определять свои собственные сложные типы данных — записи (records).
  • После слова learn указывается имя метода, обеспечивающего чтение свойства, после слова write — имя метода, отвечающего за запись свойства.
  • Материал главы рассчитан на читателя, имеющего представление о самом
  • Например, класс СОБАКИ — понятие абстрактное, а экземпляр этого класса МОЙ ПЕС БОБИК — понятие конкретное.
  • Это было неоднократно доказано в дискуссиях с другими фанатами С++.
  • Выделяется необходимая память для данных объекта professor.

В данной главе мы рассмотрим лишь вопросы создания и использования объектов, Чуть позже мы научим вас превращать объекты в компоненты. На основании этой формулы была разработана методология объектно-ориентированного программирования (ООП). Ни разу не доводилось слышать об ограничении указателей ОР на работу только с кучей. Возможность же приводить целое к указателю позволяет “двигаться” по памяти (не думаю, что это секрет для Дмитрия). Кстати, для указателей на строки допустимы операции “+” и “-” (в том числе в комбинации с целыми) без приведения типов.

Правило совместимости классов чаще всего применяется при передаче объектов в параметрах процедур и функций. Например, если процедура работает с объектом класса TResourceGauge, то вместо него можно передать объект класса TDiskGauge или TMemoryGauge. Любой порожденный класс наследует от родительского все поля данных, поэтому классы TDiskGauge и TMemoryGauge автоматически содержат поле FPercentCritical, объявленное в классе TResourceGauge.

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

0 0 votes
Article Rating
Share the Love!
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
As an Amazon Associate I earn from qualifying purchases. This is a very small commission, and is at no cost to you. Please, refer to my Disclaimers page for details.
0
Would love your thoughts, please comment.x
()
x