- •1.Парадигмы программирования.
- •2.Языки программирования. Программа на алгоритмическом языке.
- •Раздел var резервирует место переменным в оперативной памяти. Их следует обязательно назвать и перечислить.
- •3.Алгоритм и его свойства.
- •4.Алгоритмический язык Pascal. Основные понятия языка.
- •5.Концепция типа данных в Pascal.
- •6.Данные целого типа в языке Pascal.
- •7.Данные вещественного типа в языке Pascal.
- •8.Данные логического типа в языке Pascal.(Boolean)
- •9.Данные символьного типа в языке Pascal.
- •10.Строки в языке Pascal.
- •11.Записи в языке Pascal.
- •12.Файловый тип данных в языке Pascal.
- •13.Структура программы на языке Pascal.
- •Раздел var резервирует место переменным в оперативной памяти. Их следует обязательно назвать и перечислить.
- •14.Стандартные процедуры и функции языка Pascal. Стандартные математические функции и процедуры Turbo Pascal
- •15.Подпрограммы в языке Pascal.
- •16.Процедуры с параметрами в языке Pascal. Типы параметров.
- •17.Процедуры без параметров в языке Pascal.
- •18.Функции в языке Pascal.
- •19.Модуль в языке Pascal. Его структура.
- •20.Алгоритмы нахождения минимального и максимального чисел.
- •21.Алгоритмы сортировки.
- •22.Ветвления в Pascal.
- •23.Циклы в Pascal.
- •Операторы ограничения и прерывания цикла
- •24.Массивы Pascal.
- •25.Работа со строками в Pascal.
- •26.Работа с файлами в Pascal.
- •27Объектно-ориентированное программирование.Основные концепции.
- •Концепции
- •28.Особенности программирования в визуальной среде Delphi. Объектно-ориентированные особенности языка
- •Полиморфизм Это методы различных объектов, которые могут иметь одинаковые имена, но по внутреннему содержимому отличаются друг от друга.
- •29.Типы данных Object Pascal.
- •30.Особенности программирования с использованием массивов в Delphi.
- •31.Особенности работы с файловым типом данных в Delphi.
- •Создание динамической библиотеки
27Объектно-ориентированное программирование.Основные концепции.
Объе́ктно-ориенти́рованное или объектное программи́рование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием, — прототипов).
Основным понятием ООП является объект, который в Delphi представляет собой переменную структурированного типа, описываемую с помощью ключевого слова Class. Подобно обыкновенной записи типа Record, переменная типа Class под одним именем объединяет как данные различных типов (поля), так и процедуры и функции обработки этих данных (методы). Такое объединение данных и процедур их обработки называется инкапсуляция.
В Delphi типы объектов называются классами, а сами объекты являются динамическими переменными (символ « ^ » не используется).
Наследственность и полиморфизм
Свойство наследственности заключается в том, что любой класс может быть порожден от другого класса с наследованием всех свойств. Если класс В порожден от класса А, то класс А называют - «класс-родитель», а В - «класс-потомок». Порожденный класс автоматически наследует поля и методы своего родителя. Прародителем всех классов в Delphi является класс TObject.
Свойство полиморфизма позволяет использовать одинаковое название метода для решения сходных, но несколько отличающихся у разных родственных классов задач. В результате в объекте-родителе и объекте-потомке возможно существование двух одноименных методов, реализующих различные алгоритмы.
Создание, уничтожение и операция присваивания объектов
Как всякая динамическая переменная, объект перед началом работы с ним должен быть создан. Нужно выделить под него динамическую область памяти и инициализировать (т.е. подготовить к работе) созданный объект. Для этого в Delphi служит конструктор Create, который является методом класса TObject. Применяется конструктор следующим образом:
<Имя-переменной-типа-класс> := <тип-класса>. Create;
После окончания работы с объектом выделенную под него память необходимо освободить, для чего служат деструкторы класса TObject Destroy или Free. Метод Free удобнее использовать, так как он в отличие от метода Destroy перед освобождением памяти проверяет, не была ли она уже освобождена ранее, т.е. работает более корректно:
<Имя-переменной-типа-класс>. Free;
При необходимости в состав любого пользовательского класса могут быть введены свои методы Constructor и Destructor, которые дополняют Create и Free новыми функциями.
Переменной родительского типа можно присвоить значение переменной типа потомка. Обратное же присваивание запрещено, т.к. при этом некоторые поля или методы могли бы оказаться несуществующими, т.е. у потомка их больше. Однако, если переменная родительского типа указывает на объект, фактически соответствующий переменной типа потомка, то при необходимости ее можно преобразовать к типу потомка с помощью оператора as и присвоить потомку.
Статический, виртуальный и динамический способы реализации полиморфизма
При объявлении в разделе Var и последующей работе с несколькими объектами каждый объект располагается по некоторому адресу. Причем все обычные поля копируются, а методы хранятся в одном экземпляре. Каждый раз, когда вызывается метод, ему через параметр-указатель с именем Self передается адрес того экземпляра объекта, который обращается к методу.
Полиморфизм можно организовать по-разному: используя раннее связывание метода с полями объекта, которое происходит на этапе компиляции, и позднее связывание, которое осуществляется непосредственно в нужный момент при выполнении программы.
Статические методы характеризуются тем, что связывание метода с полями осуществляется во время компиляции (раннее связывание).
Виртуальные и динамические методы связываются во время выполнения программы (позднее связывание). Если метод объявлен виртуальным или динамическим, то нельзя менять типы и число параметров.
Для реализации позднего связывания поступают следующим образом.
В потомке замещающий метод объявляется директивой override. Замещаемый одноименный метод родителя объявляется как динамический или виртуальный с помощью ключевых слов {dynamic) или {virtual). Вызов перекрытого метода родительского класса в одноименном методе потомка достигается с помощью зарезервированного слова Inherited (унаследованный).
Встретив объявления dynamic или virtual, компилятор создает таблицы соответствия DMT и VMT. В этих таблицах помещаются адреса точек входа методов. Адрес VMT «своего» класса хранится в каждом экземпляре объекта в особом, скрытом от программиста поле. Адрес DMT хранится в VMT. При каждом обращении к методу компилятор вставляет в соответствующую таблицу код, позволяющий извлечь затем из нее адрес точки входа в подпрограмму.
Отличие таблиц DMT и VMT в том, что DMT содержит адреса только тех методов, которые объявлены как dynamic в данном классе, a VMT содержит адреса всех виртуальных методов данного класса: как нововведенных, так и унаследованных от родителей.
При реализации позднего связывания в родительском классе часто используют абстрактные методы (abstract), т.е. такие виртуальные методы, тело которых не прописано. Классы, имеющие хотя бы один абстрактный метод, сами называются абстрактными. Объекты абстрактных методов не создаются.
Правила ООП требуют, чтобы обращение к полям осуществлялось посредством методов, однако это не всегда удобно. Поэтому класс имеет свойства - специальный механизм, регулирующий доступ к полям. Свойства объявляются с помощью специальной конструкции property..., read..., write
Обычно свойство связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи в это поле и при чтении из него.