Модульное программирование является развитием и совершенствованием процедурного программирования и библиотек специальных программ. Основная черта модульного программирования - стандартизация интерфейса между отдельными программными единицами. Модуль - это отдельная функционально-законченная программная единица, которая структурно оформляется стандартным образом по отношению к компилятору и по отношению к объединению ее с другими аналогичными единицами и загрузке. Как правило, каждый модуль содержит паспорт, в котором указаны все основные его характеристики: язык программирования, объем, входные и выходные переменные, их формат, ограничения на них, точки входа, параметры настройки и т.д. Объем модуля обычно не превышает 1000 команд ЭВМ или операторов языка программирования. В противном случае модуль становится громоздким и трудным к восприятию и использованию.
Модульное программирование - это искусство разбиения задачи на некоторое число различных модулей, умение широко использовать стандартные модули путем их параметрической настройки, автоматизация сборки готовых модулей из библиотек, банков модулей.
-каждый модуль имеет единственную точку входа и выхода;
-размер модуля по возможности должен быть минимизирован;
-каждый модуль может быть разработан и закодирован различными членами бригады программистов и может быть отдельно протестирован;
-вся система построена из модулей;
-модуль не должен давать побочных эффектов;
-каждый модуль не зависит от того, как реализованы другие модули.
3. Нисходящее программирование
Нисходящее программирование (top-down programming). Способ разработки программ, при котором программирование ведется методом "сверху вниз", от общего к деталям. Алгоритм решения задачи разбивается на несколько более простых частей или подзадач. Их выделяют таким образом, чтобы, программирование подзадач было независимым. При этом составляют план решения всей задачи, пунктами которого и являются выделенные части. План записывают графически в виде блок-схемы, где определяют головную и подчиненные подзадачи и связи между ними, т. е. интерфейс. Здесь же устанавливают, какие начальные данные (или аргументы) получает каждая подзадача для правильного функционирования и какие результаты она выдает. По блок-схеме составляется программа, в которой содержатся вызовы подпрограмм (процедур или функций), соответствующих выделенным подзадачам.
Суть такого программирования состоит в том, что сначала выделяются несколько подпрограмм, решающих глобальные задачи, потом каждый из этих модулей разбивается на небольшое число других подпрограмм и так происходит до тех пор, пока вся задача не окажется реализованной. Достоинство такого подхода в том, что небольшие программы легче отлаживать, программа становится более надежной и подпрограммы можно использовать повторно.
4. Структурное программирование.
Структурное программирование — методология разработки ПО, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.
В соответствии с данной методологией:
1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
- последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
- ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
- цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
2. Повторяющиеся фрагменты программы могут оформляться в виде подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
3. Разработка программы ведётся пошагово, методом «сверху вниз».
5. Понятия объекта, класса объектов.
Объект – это структурированная переменная, содержащая всю информацию о некотором физическом предмете или реализуемом в программе понятии, класс – это описание таких объектов и действий, которые можно с ними выполнять.
Класс - разновидность абстрактного типа данных в ООП, характеризуемый способом своего построения. Наряду с понятием «объекта» класс является ключевым понятием в ООП. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен. На практике ООП сводится к созданию некоторого количества классов, включая интерфейс и реализацию, и последующему их использованию. Графическое представление некоторого количества классов и связей между ними называется диаграммой классов. Объектно-ориентированный подход за время своего развития накопил множество рекомендаций по созданию классов и иерархий классов.
Имена свойств объектов класса объявляются с помощью ключевого слова var, методы, применимые к объектам данного класса, описываются функциями. Внутри определения класса можно использовать ключевое слово this для обращения к те кущему представителю класса.
6. Основные понятия объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм.
Инкапсуляция — свойство языка программирования, позволяющее объединить данные и код в объект и скрыть реализацию объекта от пользователя (прикладного программиста). При этом пользователю предоставляется только спецификация (интерфейс) объекта. Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью директив: public, private, protected.
Наследование — механизм, позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. Другими словами, класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса
Полиморфизм — взаимозаменяемость объектов с одинаковым интерфейсом. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования. Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций»
7. Данные типа класс, объявление класса, объекты.
Класс - это определенный пользователем тип данных, который обладает внутренними данными и методами в форме процедур или функций и обычно описывает родовые признаки и способы поведения рода похожих объектов.
Класс — это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Объект — это экземпляр класса. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.
Класс считается объявленным даже тогда, когда в нём полностью отсутствует информация о членах класса.
Ключевое слово Class это центральная часть Объектно-ориентированного кода.
Это определение содержит так называемые 'члены' - данные и методы (подпрограммы). Когда объект класса создан, он становится автономным элементом - вы можете обратиться к данным и методам объекта независимо от любого другого объекта. Оно похоже на запись Delphi, но с активными компонентами - методами. Элементы метода осуществлены в разделе implementation модуля.
Объявление класса имеет следующее типичное описание:
type
className = class(BaseClass)
private // Определения данных/методов локальные для этого модуля
protected // Определения данных/методов, локальных для этого класса + потомки
public // Определения данных/методов пригодных для использования всеми объектами этого класса
published // Внешне общественные определения
end;
Параметры можно передать при создании объектного образца класса. Они передаются методу Constructor класса. Слово Constructor используется вместо функции или метода. Вы можете иметь множество конструкторов для различных наборов параметра. Они снабжены ключевым словом overload; после конца определения конструктора. Обычно, название метода конструктора - Create. Когда объект разрушают, вызывают метод Destructor. Обычно, название метода деструктора - Destroy.
Объект — сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции (и линковки) исходного кода на выполнение). Экземпляр типа класс принято называть объектом. Объекты класса всегда распределяются в куче в отличие от экземпляров объектового типа. Итак, класс - это описание, объект - то, что создано в соответствии с этим описанием.
8. Данные типа запись, оператор присоединения, правила использования.
Данные типа запись представляют собой совокупность логически связанных элементов различного типа, которые называются полями.
Для обращения к полю записи используется составное имя, в котором необходимо указать путь от вершины до нужного поля.
Ввод, вывод и др. операции над записью выполняются для отдельных полей, в соответствии с их типами.
Доступ к полям записи можно осуществить двумя способами.
Указанием имени переменной и имени поля. Например, klass[2].fam, klass[3].b1, klass[1].b4. Поэтому ввод фамилий и оценок учащихся, то есть элементов массива klass, можно задать так:
Использованием оператора присоединения, который позволяет осуществлять доступ к полям записи, таким образом, как если бы они были простыми переменными. Его общий вид:
With <имя записи> Do <оператор>.
Внутри оператора к компонентам записи можно обращаться только с помощью имени соответствующего поля.
Запись - это структурированный тип, содержащий набор объектов разных типов. Составляющие запись объекты называются ее полями. В записи каждое поле имеет свое собственное имя. Чтобы описать запись, необходимо указать ее имя, имена объектов, составляющих запись и их типы. Общий вид такой:
Type
"имя записи" = Record
"поле 1": "тип 1"; ... "поле n": "тип n"
End;
9. Методы объекта и их реализация с помощью процедур и функций.
Базовым в ООП является понятие объекта. Состояние объекта задаётся значениями его признаков. Объект «знает», как решать определённые задачи, то есть располагает методами решения. Программа, написанная с использованием ООП, состоит из объектов, которые могут взаимодействовать между собой.
Программная реализация объекта представляет собой объединение данных и процедур их обработки. Объектный тип содержит не только поля, описывающие данные, но также процедуры и функции, описания которых содержится в описании объекта. Эти процедуры и функции называют методами. Методы описываются внутри объявления объекта и бывают нескольких типов.
static (статические) — это простые процедуры и функции. Если при описании метода вы ничего не указали, то используется именно этот тип. Для компилятора это самый простой тип метода, потому что в потомках такой метод не может быть изменен, и поэтому заранее можно узнать адрес этого метода в памяти.
virtual (виртуальные) — такие методы могут быть переопределены в потомках объекта. Для определения адреса Delphi строит таблицу виртуальных методов, которая позволяет во время выполнения программы определить адрес метода. В такой таблице хранятся все методы текущего объекта и его предка.
Dynamic (динамические) — эти методы схожи с виртуальными, но для определения адреса используется другой способ. Для каждого объекта строится таблица только из его методов. Каждому методу назначается уникальный индекс. В данном случае экономится память, потому что не надо хранить адреса методов предков, но для поиска любого из них тратится намного больше времени.
Message (сообщения) — такие метода реагируют на события операционной системы. Для большинства сообщений ОС Windows в Delphi уже есть специальные обработчики событий, но если вам нужно, чтобы метод реагировал на определенное событие, которого нет у компонента, необходимо определить его вручную.
Abstract (абстрактный) — такой метод будет только объявлен в объекте, а реализации у него не будет. Если в объекте есть хотя бы один такой метод, то он считается абстрактным. Такой объект нельзя использовать.
Процедура Delphi просто выполняет требуемые операции, и возвращает результаты в списке своих параметров.
Функция Delphi также позволяет выполнить всё перечисленное, но дополнительно возвращает результат в присвоенном ей самой значении. То есть вызов функции может присутствовать в выражении справа от оператора присваивания. Таким образом, функция - более универсальный объект!
var
Form1: TForm1;
A, B, Summa: Integer;
function Sum(A, B: Integer): Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
A:=StrToInt(Edit1.Text);
B:=StrToInt(Edit2.Text);
Summa=Sum(A, B);
Caption:=IntToStr(Summa);
end;
function Sum(A, B: Integer): Integer;
begin
Result:=A+B;
end;
10. Конструкторы и деструкторы
Если у класса есть конструктор, он вызывается всякий раз при создании объекта этого класса. Если у класса есть деструктор, он вызывается всякий раз, когда уничтожается объект этого класса. Конструкторы и деструкторы - это специальные методы класса. Разумеется, эти методы обладают целым рядом особенностей (именно поэтому они и выделены в специальную группу). Их особенности:
1. В отличие от других методов они должны называться особым образом. Если обычные методы могут называться как угодно, то имя конструктора должно совпадать с именем класса, а имя деструктора - с именем класса с приписанной в начале «~».
2. В отличие от других методов конструктор и деструктор вызываются сами (другие методы вызываем явным образом). Конструктор вызывается в момент создания экземпляра класса, а деструктор - в момент уничтожения. Именно поэтому конструкторы обычно используются для задания некоторых начальных значений для переменных класса, а деструкторы - для освобождения памяти (в случае если у вас есть внутри класса переменные-указатели).
3. Ни конструктор, ни деструктор не возвращают никакого значения (даже типа void). Это означает, в частности, что при объявлении конструктора и деструктора в классе мы перед ними не пишем ни какой тип.
4. В классе может быть несколько конструкторов (и они должны различаться параметрами), и только один деструктор (у него параметров нет).
Наверное, наиболее часто используемый элемент Delphi IDE - Палитра компонентов. Это инструментальная панель с множеством закладок, расположенная в верхней части экрана. На Палитре компонентов расположены все компоненты, установленные в среде Delphi. Для удобства компоненты располагаются на разных закладках. В общем случае компоненты предназначены для размещения на форме.
Палитра компонентов состоит из нескольких вкладок.
Standard — все эти компоненты являются аналогами компонентов Windows.
Additional — дополнительные компоненты.
Win32 — компоненты, которые есть только в семействе ОС Win32.
System — системные компоненты, с помощью которых облегчается доступ к системе.
Data Access — компоненты доступа к базам данных.
Data Controls — компоненты для работы с базами данных.
dbExpress — компоненты доступа к базам данных, которые пришли на смену BDE.
BDE — старые компоненты доступа к базам данных.
ADO — это тоже компоненты для доступа к базам данных, только по технологии Active Data Object (ADO). Данные компоненты удобны при работе с базами данных от Microsoft.
WebServices — компоненты доступа к сети Internet.
InternetExpress — компоненты доступа к сети Internet.
FastNet — сетевые компоненты. Мы будем мало их использовать.
Dialogs — компоненты, облегчающие доступ к стандартным диалогам.
Win3.1 — компоненты доступа к компонентам Win 3.1.
Samples — различные примеры компонентов. Некоторые из этих компонентов доступны в исходных кодах и поставляются вместе с Delphi.
Окно формы представляет собой проект Windows-окна будущей программы. Вначале это окно содержит стандартные для Windows интерфейсные элементы - кнопки вызова системного меню, максимизации, минимизации и закрытия окна, полосу заголовка и очерчивающую рамку. Вся рабочая область окна обычно заполнена точками координатной сетки, служащей для упорядочения размещаемых на форме компонентов.
Программист “достает” из палитры компонентов нужный компонент и размещает его на “наборном поле” окна формы. Программист в любой момент времени контролирует содержание окна создаваемой программы и может внести в него необходимые изменения.
Окно инспектора объектов. Совокупность cвойств отображает видимую сторону компонента: положение относительно левого верхнего угла рабочей области формы, его размеры и цвет, шрифт и текст надписи на нем и т. п.; совокупность событий - его поведенческую сторону: будет ли компонент реагировать на щелчок мыши или на нажатие клавиш, как он будет вести себя в момент появления на экране или в момент изменения размеров окна и т. п.
Каждая страница окна Инспектора объектов представляет собой двухколончатую таблицу, левая колонка которой содержит название свойства или события, а правая - конкретное значение свойства или имя подпрограммы, обрабатывающей соответствующее событие.
Окно кода программы предназначено для создания и редактирования текста программы. Этот текст составляется по специальным правилам и описывает алгоритм работы программы. Совокупность правил записи текста называется языком программирования. В системе Delphi используется язык программирования Object Pascal. Первоначально окно кода содержит минимальный исходный текст, обеспечивающий нормальное функционирование пустой формы в качестве полноценного Windows-окна. В ходе работы над проектом программист вносит в него необходимые дополнения, чтобы придать программе нужную функциональность.
12. Файл проекта. Модуль формы. Файл ресурсов. Файл параметров проекта. Модули. Связь между файлами проекта. (Среда DELPHI)
Файл проекта (dpr). Фактически он содержит собственно программу, в то время как связанные с проектом многочисленные файлы форм и dll представляют собой подпрограммы.
Модуль "Формы" предназначен для создания на сайте разнообразных форм обратной связи. С помощью модуля могут быть созданы как небольшие формы обратной связи, так и разнообразные анкеты с большим количеством полей для получения разнородной информации от посетителей сайта.
Файл ресурсов используется для отображения дополнительных сведений в шаблоне формы. Файлы ресурсов включаются в форму при сохранении и публикации шаблона формы.
Модуль в программировании представляет собой функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом или поименованной непрерывной его части, предназначенный для использования в других программах. Модули позволяют разбивать сложные задачи на более мелкие, в соответствии с принципом модульности. Обычно проектируются таким образом, чтобы предоставлять программистам удобный для многократного использования функционал (интерфейс) в виде набора функций, классов, констант. Модули могут объединяться в пакеты и, далее, в библиотеки.
Модули могут быть обычными, т.е. написанными на том же языке, что и программа, в которой они используются, либо модулями расширения, которые пишутся на отличном от языка основной программы языке. Модули расширения обычно пишутся на более низкоуровневом языке, что позволяет получить выигрыш в скорости выполнения (производительности) программы.
Для того чтобы компилятор знал, какие конкретно файлы входят в проект, необходимо какое-то организующее начало. Это так называемый файл проекта, имеющий расширение DPR (сокр. от Delphi Project). Он представляет собой главный программный файл на языке Delphi, который подключает с помощью оператора uses все файлы модулей, входящих в проект. Для каждого проекта существует только один DPR-файл.
13. Визуальные компоненты. Свойства компонентов, динамическое изменение свойств. События и делегирование
Визуальные компоненты видимы при работе программы; они используются непосредственно пользователем: кнопки, метки, Картинка; блоки списков и др. Они выглядят одинаково и на стадии проектирования, и во время работы приложения.
Для создания интерфейса приложений Delphi предлагает обширный набор визуальных компонентов, основные из которых располагаются на страницах Standard (Стандартная), Additional (Дополнительная), Win32 (32-разрядный интерфейс Windows) Палитры компонентов.
Свойства позволяют управлять внешним видом и поведением компонентов при проектировании и при выполнении приложения. Свойства компонентов, доступные при проектировании приложения, также доступны при его выполнении. Вместе с тем, есть свойства времени выполнения, которые доступны только при выполнении приложения. Обычно установка значений большинства свойств компонентов выполняется с помощью Инспектора объектов.
Динамические свойства компонента могут быть простыми, как например изменение положения по касанию, так им многозадачными – изменение цвета, «интеллектуальное» масштабирование. Динамический компонент можно образовать из любого компонента. В свою очередь, компонент может состоять из элементов, групп и других компонентов. Отличительной особенностью компонента является то, что любые изменения автоматически отображаются во всех копиях. Динамические компоненты анимируются, масштабируются, копируются.
События — это свойства процедурного типа, предназначенные для создания пользовательской реакции на те или иные входные воздействия.
Поскольку события — это свойства объекта, их значения, можно изменять в любой момент во время выполнения программы. Эта замечательная возможность называется делегированием. Можно в любой момент взять способы реакции на события у одного объекта и присвоить (делегировать) их другому: Object1.OnMouseMove := Object2.OnMouseMove;
Принцип делегирования позволяет избежать трудоемкого процесса порождения новых дочерних классов для каждого специфического случая, заменяя его простой подстановкой процедур.
14. Компоненты ввода-вывода и редактирования при разработке.
ВВОД И ВЫВОД ДАННЫХ Общие сведения
Для ввода данных можно использовать:
Ø реализующие диалоги функции InputBox и InputQuery;
Ø редакторы Edit, LabeledEdit, MaskEdit, Memo;
Ø компоненты для ввода целых чисел UpDown, SpinEdit;
Ø компоненты для работы со списками строк ListBox, ComboBox;
Данные можно вводить с клавиатуры, загружать из файла, формировать программно (случайным образом или по определённым правилам).
При вводе с клавиатуры необходимо учитывать, что многие компоненты, предназначенные для ввода данных, работают со строками. Поэтому при вводе чисел необходимо использовать функции для перевода строки в число.
Обязательное требование: к обработке данных приступать только после корректного ввода.
Основная проблема – контроль вводимых данных. Наиболее общее решение – это использование имеющихся в Delphi средств обработки исключительных ситуаций, то есть формирование защищённого блока и обработка возникающих исключений. Но этот универсальный подход не всегда удобен, так как предусматривает прерывание естественного хода обработки данных. В ряде случаев желательно контролировать данные непосредственно при вводе, то есть разрешать вводить только определённые символы.
При использовании нескольких полей ввода или больших объёмов данных необходимо так организовать их контроль, чтобы пользователю не пришлось полностью повторять ввод, если ошибка была сделана где-то в конце ввода.
Компоненты, обеспечивающие ввод данных (за исключением переключателей), прекрасно приспособлены для вывода информации. Кроме того, специально для отображения данных предназначены компоненты- таблицы StringGrid и компоненты для вывода строк Label и StaticText.
15. Меню. Создание главного и контекстного меню. Создание приложений с использованием меню.
Главное меню — компонент MainMenu. В Delphi имеется два компонента, представляющие меню: MainMenu — главное меню, и PopupMenu — всплывающее меню. Оба компонента расположены на странице "Standard".
MainMenu - это невизуальный компонент, т.е. место его размещения на форме в процессе проектирования не имеет никакого значения для пользователя — он все равно увидит не сам компонент, а только меню, сгенерированное им.
Обычно на форму помещается один компонент MainMenu. В этом случае его имя автоматически заносится в свойство формы Menu. Но можно поместить на форму и несколько компонентов MainMenu с разными наборами разделов, соответствующими различным режимам работы приложения. В этом случае во время проектирования свойству Menu формы присваивается ссылка на один из этих компонентов. А в процессе выполнения в нужные моменты это свойство можно изменять, меняя соответственно состав главного меню приложения.
Контекстное всплывающее меню — компонент PopupMenu. Контекстное меню привязано к конкретным компонентам. Оно всплывает, если во время, когда данный компонент в фокусе, пользователь щелкнет правой кнопкой мыши. Контекстному меню соответствует компонент PopupMenu. Поскольку в приложении может быть несколько контекстных меню, то и компонентов PopupMenu может быть несколько. Оконные компоненты: панели, окна редактирования, а также метки и др. имеют свойство PopupMenu, которое по умолчанию пусто, но куда можно поместить имя того компонента PopupMenu, с которым будет связан данный компонент.
16. Данные строкового типа. Стандартные подпрограммы для строкового типа.
Данные строкового типа – это последовательность символов переменной длины. Такой тип еще называют типом STRING. Он во многом похож на одномерный массив символов, однако, в отличие от последнего, количество символов в строке–переменной может меняться от 0 до N, где N – максимальное количество символов в строке.
Описание строкового типа состоит из ключевого слова string, после которого в квадратных скобках указано максимальное количество символов строки данного типа. Это количество может выражаться с помощью целой константы или имени целой константы. Если максимальный размер строки не указан, то он автоматически принимается = 255 – max. Длина переменной такого типа может динамически изменяться между 1 и значением константы. Символы в строке следует воспринимать как пронумерованные в интервале от 1 до значения константы.
Переменную типа STRING можно сравнивать с другой переменной или константой типа STRING, используя операторы =,<,>,<=,>=,<>. Строки сравниваются посимвольно от первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом.
Подпрограмма - это группа операторов, оформленных как самостоятельная программная единица. Подпрограмма записывается однократно в определенной части программы, а затем в нужных местах программы обеспечивается только обращение к ней.
Стандартные функции обработки строк:
1) Функция Length(Str: String) - возвращает длину строки (количество символов).
2) Функция SetLength(Str: String; NewLength: Integer) позволяет изменить длину строки. Если строка содержала большее количество символов, чем задано в функции, то "лишние" символы обрезаются.
3) Функция Pos(SubStr, Str: String) - возвращает позицию подстроки в строке. Нумерация символов начинается с единицы (1). В случае отсутствия подстроки в строке возращается 0.
4) Функция Copy(Str: String; Start, Length: Integer) - возвращает часть строки Str, начиная с символа Start длиной Length. Ограничений на Length нет - если оно превышает количество символов от Start до конца строки, то строка будет скопирована до конца.
5) Процедура Delete(Str: String; Start, Length: Integer) - удаляет из строки Str символы, начиная с позиции Start длиной Length.
6) Процедура Insert(SubStr: String; Str: String; Pos: Integer) - вставляет в строку Str подстроку SubStr в позицию Pos.
7) Функции UpperCase(Str: String) и LowerCase(Str: String) преобразуют строку соответственно в верхний и нижний регистры:
17. Иерархия объектов. Характеристики объектов. Абстрактный класс. Визуальные компоненты.
Иерархии объектов. Используя инструменты для связи объектов, можно создать иерархию, в которой трансформации, примененные к одному объекту, наследуются объектами, связанными с ним и расположенными ниже его.
Терминология для иерархии объектов:
- Верхний уровень иерархии называется корнем.
- Объект, связанный с объектами, расположенными ниже его, называется объектом предка. Все объекты ниже предка являются потомками.
- Объект, связанный с объектом, расположенным выше его, называется дочерним объектом. Все объекты, которые можно проследить от дочернего объекта обратно к корню, называются родителями.
Абстрактным классом называется класс, который содержит один или несколько абстрактных методов. Абстрактный класс не может использоваться для создания объектов. Как правило, абстрактный класс описывает некий интерфейс, который должен быть реализован всеми его производными классами. Абстрактный класс можно использовать только как базовый для других классов. При этом если производный класс не содержит реализации абстрактного метода, то он также является абстрактным классом.
18. Создание списков и таблиц. Кнопочные компоненты, переключатели Формы. Модальные формы SDI и MDI приложения.
Списки выбора (TListBox).
Выпадающие списки (TComboBox).
Компоненты ListBox и ComboBox отображают списки строк. Они отличаются друг от друга прежде всего тем, что ListBox только отображает данные и позволяет пользователю выбрать из них то, что ему надо, a ComboBox позволяет также редактировать данные. Кроме того различается форма отображения списков. ListBox отображает список в раскрытом виде и автоматически добавляет в список полосы прокрутки, если все строки не помещаются в окне компонента. ComboBox позволяет отображать список как в развернутом виде, так и в виде выпадающего списка, что обычно удобнее, так как экономит площадь окна приложения. Основное свойство обоих компонентов, содержащее список строк, — Items
Таблица строк — компонент StringGrid. Компонент StringGrid представляет собой таблицу. Данные таблицы могут быть только для чтения или редактируемыми. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента. Кнопочные компоненты. TButton и BitBtn
Простейшей и наиболее часто используемой кнопкой является кнопка Button, расположенная на странице библиотеки "Standard". Реже используется кнопка BitBtn, отличающаяся, прежде всего, возможностью отобразить на ее поверхности изображение. Большинство свойств, методов и событий у этих видов кнопок одинаковы.
Переключатели. CheckBox и CheckListBox, RadioGroup, RadioButton и GroupBox
CheckBox и CheckListBox используются в приложениях в основном для того, чтобы пользователь мог включать и выключать какие-то опции.
RadioGroup, RadioButton и GroupBox. Радиокнопки образуют группы взаимосвязанных индикаторов, из которых обычно может быть выбран только один
В Windows есть два основных типа приложений: однодокументные SDI, и многодокументные MDI (Multiple document interface). Однодокументные приложения состоят из одного или нескольких независимых друг от друга форм. MDI представляет собой окна, расположенные под одним общим окном (как правило, за исключением модальных окон), в отличие от окон, расположенных отдельно друг от друга (SDI).
Управлять видимостью форм на экране можно с помощью методов Show и Hide. Процедура Show отображает форму в немодальном режиме (ShowModal – модальный режим), при этом свойство Visible устанавливается в значение true, а сама форма переводится на передний план. Процедура Hide скрывает форму, устанавливая ее свойство Visible в значении False.
Для закрытия формы используется метод Close. Данный метод не уничтожает созданный экземпляр формы, и форма может быть снова вызваны на экран. Уничтожение формы происходит с помощью методов Release, Free, Destroy.
19. Использование файлов ресурсов
Файлы ресурсов — это полезный механизм для отделения локализуемой информации от кода. Строковые ресурсы ссылаются на текст, применяемый в таких элементах пользовательского интерфейса приложения, как меню, диалоговые окна, информационные и предупреждающие сообщения и сообщения об ошибках. Если приложение предназначено для пользователей региона, отличающегося от места разработки приложения, эти ресурсы должны быть локализованы. Файл ресурсов используется для отображения дополнительных сведений в шаблоне формы. Файлы ресурсов включаются в форму при сохранении и публикации шаблона формы.
В шаблон формы можно добавить следующие типы файлов ресурсов.
- Файлы формата HTML можно использовать для отображения сведений в пользовательской области задач.
- Файлы формата XML можно использовать для заполнения элементов управления «Список», «Поле со списком» или «Раскрывающийся список». При использовании файла ресурсов формы, основанные на шаблоне формы, открываются быстрее, чем формы, использующие подключение данных для заполнения этих элементов. Для того чтобы воспользоваться возможностью загрузки картинки из ресурса, необходимо сначала создать файл ресурсов, поместив в него нужные картинки. Файл ресурсов можно создать при помощи утилиты Image Editor (Редактор изображений), которая запускается выбором команды Image Editor меню Tools. Для того чтобы создать новый файл ресурсов, надо из меню File выбрать команду New, а затем в появившемся подменю — команду Resource File (Файл ресурсов). В результате открывается окно нового файла ресурсов, а в строке меню окна Image Editor появляется новый пункт — Resource.
Обработка исключительных ситуаций (англ. exception handling) — механизм языков программирования, предназначенный для описания реакции программы на ошибки во время выполнения и другие возможные проблемы (исключения).
Условно классы исключения можно разделить на три типа:
- Контролируемые исключения могут происходить при нормальном выполнении системы и в большинстве своем характеризуют такие ситуации, как ошибки соединения с внешним сервисом, неверный пользовательский ввод и т.д.
- Неконтролируемые исключения – это исключения, которые возникают вследствие выполнения некорректного кода. Эти исключения, как правило, могут быть перехвачены, но исправлению подлежат лишь в единичных случаях. К таким исключениям относят исключения возникающие при обращении по нулевому указателю, вызове несуществующего или защищенного метода, в результате неверного приведения типов и т.д.
- Фатальные исключения описывают ошибки, большую часть которых приложение не должно перехватывать. К ним относятся такие ситуации, как нехватка памяти, переполнение стека, попытка оперирования уже уничтоженным потоком приложения, внутренняя ошибка виртуальной машины или интерпретатора и многие другие.
Пример, простейший блок исключений выглядит следующим образом:
Tru //Здесь ты пишешь код, в котором может произойти ошибка
Except //Если ошибка произошла, то выполнится этот код
end;
Рассмотрим простейший пример.
tru
х:=у/0;
except //Здесь можно вывести сообщение об ошибке.
end; х:=0;
При использовании tru ... except не будут выполнены только операторы между строкой, которая стала причиной ошибки, и except. После оператора except ... end все будет выполняться, как будто ничего не произошло. Если бы мы поменяли 0 на любое другое число, то ошибки бы не было, и код между except и end никогда не выполнился бы. Теперь давайте разберемся с еще одним типом исключительных ситуаций — tru . . . finally.
Tru //Здесь пишется код, в котором может произойти ошибка
Finally //Этот код выполнится в любом случае
end;
Между tru и finally вы пишете свой сомнительный код, в котором может произойти ошибка. А между finally и end пишется код, который должен выполниться вне зависимости от результата кода между tru и finally. В этом случае мы не можем информировать пользователя об ошибке, потому что в разделе finally мы не знаем, произошла ошибка или нет.
21. Способы хранения и обработки данных. Связанные списки. Использование строковых массивов.
Различаются следующие способы обработки данных:
- Централизованный.
- Децентрализованный способ связан с появлением ПЭВМ, дающих возможность автоматизировать конкретное рабочие место.
- Распределенный способ основан на распределении функций обработки между различными ЭВМ, включенными в сеть.
- Интегрированный предусматривает создание информационной модели управляемого объекта, т.е. создание распределенной БД.
Свя́зный спи́сок — структура данных, состоящая из узлов, каждый из которых содержит как собственные данные, так и одну или две ссылки («связки») на следующее и/или предыдущее поле.
Виды связных списков:
- Односвязный список. В односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента из данного невозможно.
- Двусвязный список. По двусвязному списку можно передвигаться в любом направлении — как к началу, так и к концу. В этом списке проще производить удаление и перестановку элементов, т.к. всегда известны адреса тех элементов списка, указатели которых направлены на изменяемый элемент.
- Кольцевой связный список. Разновидностью связных списков является кольцевой (циклический, замкнутый) список. Он тоже может быть односвязным или двусвязным. Последний элемент кольцевого списка содержит указатель на первый, а первый (в случае двусвязного списка) — на последний.
Строковые массивы как и строковые переменные, этот тип массивов - может хранить слова, предложения и абзацы, состоящие из букв и цифр. Основное отличие от переменных - возможность хранения нескольких отдельных элементов.
22. Потоки.
Поток - объект внутри процесса, отвечающий за выполнение кода и получающий для этого процессорное время
Процесс - экземпляр выполняемого приложения. При запуске приложения происходит выделение памяти под процесс, в часть которой и загружается код программы.
Для того чтобы программа заработала, в нём создаётся поток. Любой процесс содержит в себе хотя бы один поток, и именно он отвечает за выполнение кода и получает на это процессорное время. Этим и достигается мнимая параллельность работы программ, или, как её еще называют, псевдо параллельность. Мнимая потому, что реально процессор в каждый момент времени может выполнять только один участок кода. Windows раздаёт процессорное время всем потокам в системе по очереди, тем самым создаётся впечатление, что они работают одновременно. Реально работающие параллельно потоки могут быть только на машинах с двумя и более процессорами.
При запуске приложения система автоматически создает поток для его выполнения. Поэтому если приложение однопоточное, то весь код будет выполняться последовательно, учитывая все условные и безусловные переходы. Каждый поток может создать другой поток и т.д. Потоки не могут существовать отдельно от процесса, т.е. каждый поток принадлежит какому-то процессу и этот поток выполняет код, только в адресном пространстве этого процесса. Иными словами, поток не может выполнить код чужого процесса. Многопоточность обеспечивает псевдопараллельную работу множества программ. В delphi существует специальный класс, реализующий потоки - tthread. Это базовый класс, от которого надо наследовать свой класс и переопределять метод execute.
tnew = class(tthread)
private { private declarations }
protected
procedure execute; override;
end;
…
procedure tnew.execute;
begin
{ place thread code here } // Код, который будет выполняться в отдельном потоке
end;
23. Процедуры и функции для преобразования данных.
Преобразование строки символов в числовое значение
1. Процедура для преобразования строки в числовое значение: Val (Edit.Text: string, R: integer (real), code: integer), где Edit.Text – строка символов, введенная в компонент; R – результат преобразования процедурой Val (переменная целого либо вещественного типа); Code – код преобразования процедуры Val (переменная целого типа, равная 0, если преобразование выполнено верно, либо 1, если преобра зование невозможно).
Например: Val (Edit1.Text, r, code)
2. Функция для преобразования строки в целое число: StrToInt(Edit.Text: string): integer
Например: L:=StrToInt(Edit1.Text)
3. Функция для преобразования строки в вещественное число: StrToFloat(Edit.Text: string):real
Например: L:=StrToFloat(Edit1.Text)
Преобразование числового значения в строку символов
1. Процедура для преобразования числа в строку: Str (R: integer (real), Label.Caption: string),
где Label.Caption – строка символов для вывода; R – переменная целого либо вещественного типа;
Например:Str(R:6:3, Label.Caption)
2. Функция для преобразования целого числа в строку: IntToStr (K: integer): string
3. Функция для преобразования вещественного числа в строку: FloatToStr (K: Extended): string
Например: Label1.Caption:= FloatToStr(K)
4. Функция для преобразования вещественного числа в строку в формате: FloatToStrF (K: Extended, F, n,m: byte): string,
где F – формат вывода изображения числового значения (ffGeneral – универсальный, ffFixed – с фиксированной точкой (рекомендуемый), ffExponent – научный, ffNumber – с разделителями групп разрядов, ffCurrency – финансовый), n – ширина поля для вывода числа, m – количество цифр после десятичной точки.
Программа может получить данные из окна ввода или поля редактирования (Edit).
24. Компонент Memo, назначение, правила использования, основные св-ва компонента. Ввод и вывод числовых данных с помощью компонента memo.
Представляет собой окно редактирования многострочного текста.
Компонент Delphi Memo это простой текстовый редактор. Delphi Memo позволяет вводить многострочный текст с клавиатуры, загружать его из файла, редактировать и сохранять в файл текстового формата. Простота текстового редактора компонента Delphi Memo заключается в том, что текстовый редактор Delphi Memo не обладает возможностями форматирования содержащегося в нём текста. Текст в компоненте Delphi Memo размещается построчно. Поэтому имеется доступ к каждой строке текста отдельно. Строки в редакторе Delphi Memo являются объектами Lines[i] типа String, где i - номер строки, отсчитываемый от нуля. Объект Lines[i] доступен и для чтения, и для записи. Соответственно, текст в компоненте Memo можно редактировать не только с клавиатуры, но и программно:
var S: String;
begin
Memo1.Lines[3]:='Четвёртая строка по счёту'; S:=Memo1.Lines[3];
end;
Естественно, для успешного присвоения текста определённой строке необходимо, чтобы эта строка физически существовала! То есть, данным способом можно только редактировать текст. Новую строку создать таким способом невозможно. Для создания новых строк служат методы Add() Insert()
Метод Add() добавляет новую строку в конец, а метод Insert() внедряет новую строку после указанной, для чего метод Insert() имеет соответствующий параметр:
begin
Memo1.Lines.Add('Это будет последняя строка');
Memo1.Lines.Insert(2, 'Эта строка будет четвёртой'); //Так как отсчёт идёт от нуля!
end;
Компонент Delphi Memo позволяет получить доступ к тексту как целому. Свойство Text типа String является текстом, содержащимся в редакторе, в виде одной строки. Необходимо учитывать, что эта строка также будет включать в себя и непечатаемые символы конца строки #13 и символы переноса строки #10. Чтобы продолжить текст с новой строки, необходимо использовать последовательно оба этих символа:
Memo1.Text:='Предыдущий текст'+#13+#10+'Это уже новая строка';
25. Методы класса TStrings. Компонент StringGrid.
Свойства объекта TStrings
count — это свойство, которое вы можете только читать. Здесь хранится количество строк, содержащихся в объекте.
strings — здесь хранится набор строк. К любой строке можно получить доступ, написав такую конструкцию:
Переменная:=Имя_Объекта.Strings[Номер строки];
Имя_0бъекта.Strings[Номер строки]:= Переменная;
Первая строка кода запишет в переменную содержимое указанной строки. Вторая строка, наоборот, запишет содержимое переменной в указанную строку. Строки в этом объекте нумеруются с нуля.
Text — в этом свойстве хранятся все строки в виде одной целой строки, разделенные кодами конца строки и перевода каретки.
Основные Методы объекта TStrings
Add (Строка) — метод добавляет строку, указанную в качестве параметра, в конец набора строк объекта. Возвращает номер, под которым добавлена новая строка.
Append (Строка) — этот метод тоже добавляет строку, указанную в качестве параметра, в конец набора строк объекта. Он ничего не возвращает.
AddStrings (Набор строк типа TStrings) — метод добавляет ВСЕ Строки ИЗ другого объекта типа TStrings.
clear — метод удаляет все строки из объекта.
Delete (номер строки) — метод позволяет удалить строку под указанным номером.
Equals (Набор строк типа TStrings) — метод допускает сравнение собственного набора строк с указанным в качестве параметра. Если наборы равны, то метод вернет true, иначе false.
Exchange (Номер!, Номер2) — метод меняет местами строки указанных номеров.
Get (номер строки) — метод возвращает строку указанного номера.
indexdf(Строка) — этот метод позволяет найти указанную в качестве пара метра строку. Если такая строка существует в наборе, то метод вернет ее индекс, иначе — 1.
insert (Номер, Строка) — метод позволяет вставить в набор новую строку под указанным номером.
LoadFromFile(HMH файла) — данный метод используется, чтобы загрузить набор строк из указанного текстового файла.
SaveToFile(Имя файла) — метод обеспечивает сохранение набора строк в указанном текстовом файле.
Move (Номер!, Номер2) — метод перемещает строку под номером 1 на место с номером 2.
Таблица строк — компонент StringGrid
Компонент StringGrid представляет собой таблицу, содержащую строки. Данные таблицы могут быть только для чтения или редактируемыми. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента. Каждой ячейке таблицы может быть поставлен в соответствие некоторый объект.
Свойства компонента StringGrid:
ColCount - Количество колонок таблицы; RowCount - Количество строк таблицы; DefaultColWidth - Ширина колонок таблицы; DefaultRowHeight - Высота строк таблицы; FixedCols - Количество зафиксированных слева колонок таблицы. Зафиксированные колонки выделяются цветом и при горизонтальной прокрутке таблицы остаются на месте; FixedRows - Количество зафиксированных сверху строк таблицы. Зафиксированные строки выделяются цветом и при вертикальной прокрутке таблицы остаются на месте; Cells - Соответствующий таблице двумерный массив. Ячейке таблицы, находящейся на пересечении столбца с номером col и строки с номером row, соответствует элемент cells [col] [row].
26. События. Переменные и их типы.
Переменные всегда будут содержать только значения, указанного типа. Если вводить значение, другого типа, которое можно изменить так, чтобы оно соответствовало указанному типу переменной, программа выполнит такое превращение - это называется приведением типов. Наиболее часто используемые типы переменных:
o Integer –2147483648..2147483647
o Int64 –2^63..2^63–1
o Byte 0..255
o Real 5.0 x 10^-324 .. 1.7 x 10^308 15-16 Максимальное число в цифре
o Boolean содержит 2 байта – это логическое значение True (правда)/False (ложь)
o Date содержит 8 байтов – это дата
o String – переменная строка. Длину можно указать: Dim str As String*50 (строка размером в 50 символов)
o Variant – содержит 16 байт и любые характеристики, если неизвестен тип переменной
o Type – пользовательский тип.
27. Константы, выражения и функции. Перегрузка функций.
Константа – величина, не изменяющая своего числового или символьного значения в течение всей программы.
Блок описания Const может располагаться в любом месте программы, таких блоков может быть несколько или не быть вообще.
Константы вводятся для удобства программиста. Компилятор запоминает значения всех простых констант и при трансляции программы заменяет все имена констант их значениями. Именно поэтому константы не могут стоять слева в операторах присваивания, так как не могут изменять значения в ходе выполнения программы.
Выражения представляют собой операнды, которые объединены посредством арифметических и логических операций, а также операций отношения (сравнения). Большинство операций является бинарными, т.е. содержат два операнда.
Порядок вычисления выражений следующий:
- Вычисляются значения операндов
- Выполняются операции арифметические, сравнения, логические.
Цель перегрузки функций состоит в том, чтобы функция с одним именем по-разному выполнялась и возвращала разные значения при обращении к ней с разными по типам и количеству фактическими параметрами. Для обеспечения перегрузки функций необходимо для каждого имени определить, сколько разных функций связано с ним, т.е. сколько вариантов сигнатур допустимы при обращении к ним.
Распознавание перегруженных функций при вызове выполняется по их сигнатурам. Перегруженные функции поэтому должны иметь одинаковые имена, но спецификации их параметров должны различаться по количеству и (или) по типам, и (или) по расположению.
Перегруженная операция может быть определена как компонент класса; в этом случае она имеет один параметр или вообще не имеет параметров. У дружественной перегруженной операции может быть один или два параметра. Поэтому бинарные операции следует перегружать как дружественные.
Средства создания динамических структур данных, которые позволяют во время выполнения программы:
-образовывать объекты;
-выделять для них память;
-уничтожать, когда в них исчезает необходимость.
Динамические структуры – это данные, размер которых может меняться во время работы программы. В Delphi есть массивы, которые так и называются динамическими. Динамический массив есть контейнер, содержащий определенное число данных, которые могут быть записаны либо извлечены для каких-нибудь с ними действий. Проще говоря, это лимитированный список различных значений одной переменной (Integer, String и т.д.), каждый из которых можно затребовать простым указанием порядкового номера. Указатель представляет из себя переменную, содержащую адрес другой переменной. Точнее говоря, указатель содержит адрес начала другой переменной (которая, в принципе, может занимать достаточно большой объем памяти). Указатели бывают типизированные и нетипизированные. Типизированный указатель — это указатель на переменную определенного типа, например, целого, строкового или типа массива. Нетипизарованный указатель — это адрес первого байта области памяти, в которой может размещаться любая информация вне зависимости от ее типа.
CTS CLR – это сокращение от Common Type System. CTS включает предопределенные, базовые .NET типы, которые доступны в любом .NET языке. Это означает, что integer больше не определяется каждым компилятором, а встроен в CTS и поэтому integer полностью одинаков во всех .NET языках.
CTS не ограничен только integer, а включает много других типов. CTS разделяет типы на две базовые категории: значения и ссылочные типы.
Типы значений - это типы, которые записываются в стеке. Типы значений включают integers, bytes и другие примитивы, структуры и перечисления.
Ссылочные типы – это типы, значения которых сохраняются в куче, и ссылки используются для доступа к ним. Ссылочные типы включают objects, interfaces и pointers
29. Организация ссылок на ресурсы Internet, связей между компьютерами.
Компьютерная сеть (Computer NetWork) – это совокупность компьютеров и других устройств, соединенных линиями связи и обменивающихся информацией между собой в соответствии с определенными правилами – протоколом.
Основная цель сети – обеспечить пользователей потенциальную возможность совместного использования ресурсов сети. Ресурсами сети называют информацию, программы и аппаратные средства.
Под топологией вычислительной сети понимается конфигурация графа, вершинам которого соответствуют компьютеры сети (а иногда и другое оборудование), а ребрами - физические связи между ними.
Полносвязная топология. Громоздкий и неэффективный вариант, т.к. каждый компьютер должен иметь большое кол-во коммуникационных портов.
Ячеистая топология. Данная топология характерна для глобальных сетей.
Общая шина. Дешевый и простой способ, недостатки – низкая надежность. Дефект кабеля парализует всю сеть.
Кольцевая топология – данные передаются по кольцу от одного компьютера к другому, если компьютер распознает данные как свои, он копирует их себе во внутренний буфер.
Топология Звезда – каждый компьютер подключается к концентрату (хаб). Главное преимущество большая надежность. Недостаток – высокая стоимость оборудования и ограниченное кол-во узлов в сети (т.к. порта ограничены)
Иерархическая Звезда – топология типа звезды, но используется несколько концентратов, иерархически соединенных между собой связями типа звезда. Самый распространенный способ связей как в локальных сетях, так и в глобальных.
30. Объявление переменных. Встраиваемые функции.
Для хранения различных данных в языках программирования используют переменные. Переменной называется область памяти, имеющая имя, которое иначе называют идентификатором. Переменные объявляют в операторе описания. Оператор описания состоит из спецификации типа и списка имён переменных, разделённых запятой. В конце обязательно должна стоять точка с запятой.
Команда объявления переменных в языке Delphi:
var имя_переменной: тип_переменной;
Слово var - ключевое. Именем может быть любой идентификатор, если он не был описан ранее и не является одним из ключевых или зарезервированных слов языка Delphi. Если нужно описать несколько переменных одного типа, то их перечисляют, отделяя запятой: var A, B, C : Integer;
Если несколько описаний следуют друг за другом, то ключевое слово var повторно можно не указывать:
var A, B : Integer; C, D : String;
Встраиваемые функции
Процесс вызова процедуры или функции занимает определенное количество машинного времени. В ситуации, когда быстрота работы программы важнее, чем компактность ее кода, многие языки программирования позволяют использовать встраиваемые функции. Встраиваемые функции и процедуры не вызываются программой. Вместо этого их код просто добавляется в участок вызова. Таким образом, мы выигрываем в скорости (не тратится время на вызов функции), но проигрываем в размерах программы (код функции помещается в программу много раз). Для того чтобы определить встраиваемую функцию или процедуру, к ее заголовку необходимо добавить ключевое слово inline.
Встраиваемыми могут быть не только отдельные функции и процедуры, но и методы классов. 1. встраивание функций не всегда приводит к реальной оптимизации работы программы. 2. для встраиваемых процедур и функций существует ряд ограничений. Функция (процедура) не может быть встраиваемой, если она:
- является конструктором или деструктором класса;
- является методом класса и помечена как виртуальная, динамическая или как обработчик сообщения;
- является методом класса и обращается к другому методу с более ограниченной областью видимости;
-содержит ассемблерную вставку;
31. Интерфейсы и реализация.
Интерфейс (от лат. inter — между и лат. face — поверхность) — это семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом. Интерфейс определяет границу взаимодействия между классами или компонентами, специфицируя определенную абстракцию, которую осуществляет реализующая сторона. В отличие от многих других видов интерфейсов, интерфейс в ООП является строго формализованным элементом объектно-ориентированного языка и, в качестве семантической конструкции, широко используется кодом программы.
Реализация методов интерфейса. Класс, который реализует интерфейс, нужен, чтобы обеспечить реализацией каждый метод, объявленный в интерфейсе. Реализация может быть обеспечена или явным объявлением или в соответствии с наследованием от предка класса.
Вариантов реализаций здесь несколько:
o Запрет. В одном классе просто запрещается реализовывать несколько интерфейсов, имеющих методы с одинаковыми сигнатурами.
o Явное разрешение неоднозначности. Вариантом этого решения является явное переименование для совпадающих по именам наследуемых или реализуемых методов
o Общая реализация одноимённых методов. Хорошо подходит для случаев, когда одноимённые методы разных интерфейсов идентичны по предполагаемой функциональности.
В Delphi интерфейсы были введены для поддержки COM технологии фирмы Microsoft.
Интерфейсы в Delphi напоминают классы. Как все классы являются наследниками класса TObject, так и все интерфейсы происходят от интерфейса IUnknown, соответствующего стандартному одноимённому COM-интерфейсу.
Пример объявления интерфейса:
IMyInterface = interface
procedure DoSomething;
end;
Для того, чтобы объявить о реализации интерфейсов, в описании класса необходимо указать их имена в скобках после ключевого слова class, после имени класса-предка. Так как интерфейс — это контракт, который нужно выполнить, программа не компилируется пока в реализующем классе не будет реализована procedure DoSomething;
Вышеупомянутая ориентированность интерфейсов Delphi на технологию COM привела к некоторым неудобствам. Дело в том, что интерфейс IUnknown (от которого наследуются все остальные интерфейсы) уже содержит три метода: QueryInterface,_AddRef, _Release, следовательно, любой класс, реализующий любой интерфейс, обязан реализовать эти методы, даже если интерфейс и класс не имеют никакого отношения к COM.
Пример класса, реализующего интерфейс
TMyClass = class(TMyParentClass, IMyInterface)
procedure DoSomething;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
32. Свойство Canvas. Назначение, свойства объекта Canvas.
Canvas не является компонентом, Канва представляет собой область компонента, на которой можно рисовать или отображать готовые изображения. Она содержит свойства и методы, существенно упрощающие графику Delphi.
Свойство Canvas. У ряда объектов из библиотеки визуальных компонент есть свойство Canvas, которое предоставляет простой путь для рисования на них. Эти объекты - TBitmap, TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid, TFileListBox, TForm, TImage, TListBox, TOutline, TPaintBox, TPrinter, TStringGrid. Canvas является в свою очередь объектом, объединяющим в себе поле для рисования, карандаш (Pen), кисть (Brush) и шрифт (Font). Canvas обладает также рядом графических методов: Draw, TextOut, Arc, Rectangle и др. Используя Canvas, Вы можете воспроизводить на форме любые графические объекты - картинки, многоугольники, текст и т.п. без использования компонент TImage,TShape и TLabel (т.е. без использования дополнительных ресурсов).
Свойства Canvas :
Ø Brush -кисть, является объектом со своим набором свойств:
Ø Bitmap- картинка размером строго 8x8, используется для заполнения (заливки) области на экране.