Наследование. Любой класс может быть порожден от другого класса. Порожденный класс автоматически наследует все члены родителя, но может и пополнять их.
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Структура модулей

Модуль имеет следующую структуру:

Unit <имя>;

Interface

<Интерфейсная часть>

Implementation

<исполняемая часть>

Initialization

<инициирующая часть>

Finalization

<завершающая часть>

end.

Здесь

Unit - зарезервированное слово; начинает заголовок модуля; <имя> - имя модуля (правильный идентификатор);

interface - зарезервированное слово; начинает интерфейсную часть модуля;

implementation - зарезервированное слово; начинает исполняемую часть;

initialization - зарезервированное слово; начинает инициирующую часть модуля (необязательный раздел);

finalization - зарезервированное слово; начинает заключительную часть модуля (необязательный раздел);

end - зарезервированное слово - признак конца модуля.

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

 

  1. Классы, объекты. Объявление класса, принципы ООП.
  2. Инкапсуляция и разграничение доступа к членам класса.

Классы – это типы специального вида, которые содержат поля, методы и свойства.

       Классы, как и любые другие типы, служат образцами для создания конкретных экземпляров.

       Конкретные экземпляры класса называются объектами

                             Объявление класса

Type

          TmyCl=class(Tobject)

                          Fint:integer;

                          Fstr:string;

                       Function Func1(a:real):integer;                          Procedure Proc1;

          End;

В основе классовой борьбы лежат три фундаментальных принципа

инкапсуляция

наследование

полиморфизм

Инкапсуляция – это объединение в одно целое трех сущностей: полей, методов и свойств.

          Поля методы и свойства называются членами классов.

          Как мы увидим в дальнейшем, инкапсуляция позволяет создавать обособленные самодостаточные объекты. Выполнение программы представляет обмен сообщениями между объектами.

Полиморфизм is , as

(man as Tman).Obed; //приведение типа

if man is Tman then …;//определение типа

  1. События

Событие – это то, что происходит в результате работы компьютера. На низком уровне это изменения, (нажатие кнопки, исход времени, деление на ноль) вызывающие прерывания.

С точки зрения языка событие - это свойство процедурного типа, его значением является указатель на некоторый метод.

Присвоить такому свойству значение – означает указать адрес метода, который будет выполняться в момент наступления события.

Такие методы называются обработчиками событий.

Type
      TControl = class (TComponent)
          Private
            FOnDblClick: TNottifyEvent ;
           ……………………..
          Protected

 property OnDblClick: TNottifyEvent read FOnDblClick write FOnDblClick;
           ………………………
      end;

TNotifyEvent = Procedure(Sender:TObject) of object;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

 

  1. Дерево классов DELPHI
  2.           Принцип наследования позволяет использовать любой класс использовать как предка для создания новых классов. При этом члены класса предка наследуются.

  1. Класс TObject.

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

Constructor Create – выделяет динам память, инициализацию не делает, т.к. перегружается.
Destructor Destroy; virtual; - освобождает выделенную память.
Procedure Free – проверяет существование и, если память выделялась, то освобождает ее.

          Методы класса:
ClassName: shortString; - возвращает имя класса данного объекта
ClassNameIs (const Name:string):Boolean; - данный класс совпадает Name
InheritsForm(aClass:Tclass):Boolean; - является ли класс предком дан класса
InstanceSize:Longint; - возвращает размер класс или объекта

 















Класс TPersistent.

Его объекты инкапсулируют в себе некоторый носитель информации. Память или дисковые файлы.

          МЕТОДЫ:

Procedure Assign(Source:Tpersistent); - присваивает данному
          объекту данные, содержащиеся в объекте с именем Source

Function GetNamePath: string; dynamic; - возвращает строку,
           содержащую имя объекта.

Function GetOwner: TPersistent; dynamic;- возвращает
             указатель на владельца объекта.

 

  1. Класс T С omponent .

Вершина иерархии компонентов. Потомки его - невизуальные компоненты (TApplication, Tform таймер, меню, диалоговые окна).

          Свойства
Name (строка ) – имя компонента. При помещении компонента на форму присваивается стандартное имя Label1, Edit1, которое можно заменить на более осмысленное, при этом имя должно быть правильным идентификатором.
Tag: Longint; - некоторое число, которым разработчик может распоряжаться по усмотрению.

В классе TComponent вводится концепция принадлежности, которая распространяется на всю VCL. Суть:

любой компонент Делфи является собственностью другого компонента.

при разрушении компонента владельца автоматически разрушается принадлежащие ему компоненты.

 

Свойства реализующие концепцию принадлежности:
ComponentCount:Integer; - количество компонентов во владении
ComponentIndex:Integer; - номер компонента в списке владельца (нумерация с нуля).
Components [Index:Integer]:TComponent; - список компонен-тов, для которых данный является владельцем.

Owner: TComponent; - содержит указатель на компонент владелец для текущего компонента.

МЕТОДЫ
Constructor Create (AOwner: TComponent);virtual; - создает объект данного класса, помещает ссылку на себя в массив Components, своего владельца, имя которого указано в AOwner.

Destroy Tcomponent;- удаляет из памяти компоненты данного владельца.
Procedure InsertComponent(Acomponent: TComponent); - вставляет новый компонент с именем Acomponent.
Procedure RemoveComponent(Acomponent: TComponent); - удаляет компонент Acomponent.    

 












Класс T С ontrol .

Потомки этого класса называются элементами управления.

Это визуальные компоненты с их помощью информация выводится на экран.

          В потомках TControl вводится понятие родительского элемента управления суть его в следующем:

          Каждый элемент управления может быть помещен в группирующий элемент. Дочерние не могут выходить за рамки родительского, при перемещении родительского перемещаются и дочерние.
Дочерний элемент использует некоторые родительские свойства (цвет, шрифт). Визуально изображение родительского и дочернего на экране получает единый хороший стиль.
          В качестве родительского может выступать только оконный элемент управления, т.е. потомок TWinControl, дочерние элементы управления могут быть любыми.

          Не следует путать владельца и родителя

 



Класс TGraphicControl.

Потомки этого класса имеют общее название – графические элементы управления.

          Потомки TGraphicControl: фокус ввода не получают, не могут быть родительскими для других, реагируют на события мыши.

          Их назначение – вывод информации на экран, улучшение внешнего вида.Представители: Label, Shape- фигура, PaintBox – паненль рисования, Imege.

              

Property Canvas: TCanvas; - (канва - холст) средства предназ-наченные для создания на экране графического изображения.

Procedure Paint; - рисует изображение графического элемента управления. В потомках обычно переопределяется, чтобы учесть специфику.

 

  1. Приложение в Delphi. Классификация компонентов VCL

  1. Компоненты VCL для создания GUI

 

 

 

  1. Форма. Характеристики формы. Управление видимостью.

 

  1. События формы. Оформление формы. Модальные формы.

 

  1. Диалоговые окна. MessageDlg. InputBox. Шаблоны форм.

Диалоговое окно — вспомогательное окно, содержащее кнопки и другие элементы управления, при помощи которых можно выполнить ту или иную команду или задачу.

Виды диалоговых окон:

окна ввода информации;

окна вывода информации (окна сообщений).

ShowMessage(const Msg: String);

Окно сообщения с кнопкой OK. В заголовке окна название исполняемого файла, а строка Msg выводится как текст сообщения.

Стандартные диалоговые окна.

MessageDlg

MessageDlg(const Msg:String; Atype:TmsgDlgType; Abuttons:tMsgButtons;HelpCtx: Longint) :Word;

Окно сообщения типа Atype в центре экрана и позволяет получить ответ на него. Тип окна:

mtWarning – черный восклицательный знак в желтом треугольнике; Warning

mtError – белый крест в красном круге заголовок Error

mtInformation – буква I в белом круге заголовок Information

mtConfirmation – знак вопроса заголовок Confirmation

mtCustom – нет картинки в заголовке имя исполняемого файла

Тип кнопки Abuttons задает набор кнопок и может принимать любой набор значений : mtError mbNo mbCancel mbHelp mbAbort mbRetry mbIgnore mbAll Abuttons имеет две константы, задающие кнопки: mbYes, NoCancel и mbOkCancel. При нажатии любой из кнопок происходит закрытие окна (кроме Help), а свойство ModalResult возвращается функцией MessageDlg.

HelpCtx – определяет контекст справки.

MessageDlgPos(const Msg: String; AType:TmsgDlgType; Abutton:TmsgDlgButtonS; HelpCtx:Longint; X,Y:integer):Word;

Отличается от функции MessageDlg наличием параметров положения окна на экране.

InputBox

InputBox(const Acaption, Aprompt, Adefault: string):string;

Функция создающая диалоговое окно для ввода строки текста, возвращает строку. Окно в центре содержит поле ввода с надписью и кнопки OK Cancel.

Acaption, - заголовок окна

Aprompt – поясняющий текст к полю ввода.

Adefault – строка возвращаемая при отказе.

Например

InputBox(‘пользователь’,’введите фамилию’,’Иванов’);

Procedure InputQuery(const Acaption, Aprompt, Adefault: string; var value:string):Boolean;

Возвращает результат в value. Результат True, если выход Ок, False если выход кнопкой Cancel.

Приложение. Свойства и события.

Приложение описывается классом Tapplication. Объект автоматически создается при каждом запуске среды. На этапе конструирования объект не доступен, но его создание отражается в файле проекта .dpr.

program Prim;

uses

Forms,

im in 'im.pas' {Form1};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

Title: string; Определяет название приложения и содержит текст идентифицирующий приложение. По умолчанию название совпадает с именем exe файла project1.

ExeName:string; Содержит путь и имя исполнимого файла, доступно для чтения на этапе выполнения.

Active:Boolean; Активно ли приложение

HelpFile:string; Имя справочного файла.

 

Application.HelpFile:=’D:\ Help.hlp’; По умолчанию пустая строка. Если несколько файлов в справочной системе, то они активизируются по необходимости этой же командой.

HintPause; HintHidePause; HintColor;( Hint – текст подсказки в кажд эл) По умолчанию подсказка появляется через 0.5с убирается через 2.5с. временные задержки задаются в свойстваx

Application.HintPause:=100;

Application.HintHidePause:=5000;

Application.HintColor:=clRed;

Application.Icon.loadFromFile(primer.ico); - задание значка.

Методы.

ProcessMessages

При длительных вычислительных операциях приложение не реагирует на поступающие сообщения, в том числе и на действия пользователя. Чтобы исправить положение есть метод ProcessMessages procedure TForm1.Button1Click(Sender: TObject);

var i:longint;

begin

for i:=1 to 10000000 do

   begin

       edit1.Text:=intToStr(i);

       application.ProcessMessages;

   end;

end;

Объект Application доступен только на этапе выполнения приложения, поэтому для облегчения кодирования обработчиков удобно использовать компонент ApplicationEvent со страницы Additional. После размещения на форме этого компонента все события и их обработчики становятся доступными на этапе конструирования.

События.

Наиболее часто встречающиеся события OnIdle, OnException, OnHint OnIdle – возникает при простое приложения. Операции, включенные в этот обработчик выполняются каждый раз когда приложение становится в режим ожидания.

  1. Кнопки. Button, BitBtn, SpeedButton.
  2. Компоненты ввода и вывода текстовых данных. Метка Tlabel

Иерархия TObject-TPersistent-TComponent-TControl-TGraphicControl-TcustomLabel. Страница палитры Standard.

Предназначена для вывода на экран текстовой информации (названия разъяснения).

Основным свойством является caption (TControl). Туда помещается выводимый текст.

Label1.caption:=‘выводимый текст’;

Обрабатывает события связанные с использованием мыши/

По умолчанию для метки основным является событие OnClick

  1. Класс TCustomEdit .

Класс TCustomEdit.

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

TObject-TPersistent-TComponent-TControl-TWinControl-TCustomEdit.

Property AutoSelect:Boolean; - ИСТИНА по умолчанию, текст выделяется при активизации редактора.

Property borderStyle; - вид границы.

Property MaxLength:Integer; - максимальное число символов, которые можно поместить в редакторе. Если 0 (по умолчанию), то любое число символов.

Property ReadOnly: Boolean; - по умолчанию ЛОЖЬ, только ли для чтения.

Property PasswordChar:Char; - задает символ, который будет выводиться при вместо реально вводимых символов, как при вводе пароля.

Procedure Clear; virtual; - удаляет текст, помещенный в редактор.

Procedure ClearSelection; - удаляет выделенный фрагмент.

Procedure CopyToClipboard; - копирует в буфер.

Procedure CutToClipboard; - вырезает в буфер.

Procedure PasteFromClipboard; - вставляет.

Procedure SelectAll; - выделяет весь текст в редакторе.

Строка ввода Edit .

Edit

Компонент Delphi Edit представляет собой однострочное текстовое поле, служащее для ввода данных пользователем. Основным свойством компонента Delphi Edit, передающим введённую информацию, является свойство Edit1.Text типа String.

TObject-TPersistent-TComponent-TControl-TWinControl-TCustomEdit-TEdit.

Страница палитры Standart.

Основным свойством строки ввода является текст.

Property Text: TCaption; - символьная строка в редакторе. Type TCaption=string;

Может быть помещена либо на этапе конструирования, либо на этапе выполнения, чаще для ввода информации. Это оконный элемент управления и он обрабатывает все события от мыши и клавиатуры, а так же событие OnChenge

Type OnChange: TNotifyEvent; - возникает при изменении текста строки ввода

Класс TStrings .

Класс TStrings.

TObject-TPersistent-TStrings

Абстрактный класс инкапсулирует поля и методы для работы с наборами строк. Особенностью TStrings является, то что элементами наборов являются пары строка объект. Строка – строка символов, а объект – объект любого класса.

Property Count:integer; - определяет число элементов в списке.

Property Objects[Index:integer]:TObject; - определяет указатель на объект, ассоциированный со строкой с номером index.

Property Strings[Index:integer]:string; - определяет строку с номером index, начиная с нуля.

Property Text:string;- содержит все строки списка, включая разделители (ВК,ПС #13 #10).

Методы, определенные в классе.

Function Add(const S:string):integer;virtual; - добавляет строку S в список и возвращает порядковый номер этой строки в списке.

Function AddObject(const S:string; AObject:TObject):integer;virtual; - добавляет строку S и связанный с ней объект AObject в список и возвращает индекс строки и объекта в списке.

Procedure AddString(string:TString);virtual; - добавляет список другого объекта String класса TString к текущему списоку.

Procedure Clear;virtual;abstract; - удаляет все строки и указатели на объекты из списка.

Procedure Delete(Index:integer);virtual;abstract; - удаляет из списка элемент с номером Index.

Procedure Exchange(index1,index2:integer);virtual; - меняет местами два элемента списка с номерами..

Procedure Move(CurIndex,NewIndex:integer);virtual;- перемещает элемент списка из позиции ..в

Procedure Insert(index:integer; const S:string);virtual;abstract; - вставляет в список строку S номером Index.

Procedure LoadFromFile(const FileName:string);virtual; загружает список из файла с именем FileName.

Procedure SaveToFile(const FileName:string);virtual; - помещает список в файл с именем FileName.

  1. Текстовый редактор Memo.

Текстовый редактор Memo.

TObject-TPersistent-TComponent-TControl-TWinControl-TCustomEdit-ЕСustomMemo.

Property Lines:TStrings; - задает список строк, помещенных в редактор.

Type TScrolStyle=(ssNone,ssHorizontal,ssVertical,ssBoth);

Property ScrollBars:TScrollBars; - задает наличие линеек скроллинга.

Property WantReturns:Boolean; - ИСТИНА, то по клавише Enter происходит переход на новую строку текста, иначе переход делается Ctrl+Enter.

Текстовый редактор Memo обрабатывает все события связанные с мышью и клавиатурой, а также событие OnChange.

Компонент Delphi Memo это простой текстовый редактор. Delphi Memo позволяет вводить многострочный текст с клавиатуры, загружать его из файла, редактировать и сохранять в файл текстового формата.

Свойства memo:

Name - Имя компонента. Используется в программе для доступа к свойствам компонента

Text - Текст, находящийся в поле Memo. Рассматривается как единое целое

Lines - Текст, находящийся в поле Memo. Рассматривается как совокупность строк. Доступ к строке осуществляется по номеру

Lines.Count - Количество строк текста в поле Memo

Left - Расстояние от левой границы поля до левой границы формы

Top - Расстояние от верхней границы поля до верхней границы формы

Height - Высоту поля

Width - Ширину поля

Font - Шрифт, используемый для отображения вводимого текста

ParentFont - Признак наследования свойств шрифта родительской формы

Список ListBox .

Страница Standart.Предназначен для непосредственного отображения списка строк на экране. Применяется его как список выбора, т.е. может быть выделена одна или несколько строк.

Свойства:

Items:TStrings; - задает элементы списка.

MultiSelect:Boolean; - определяет разрешается ли одновременно выделять несколько элементов списка.

ItemIndex:Integer; - определяет индекс выделенного элемента в списке. Нумерация с нуля. Если выделенного нет, то значение минус 1. Если может быть выделено несколько элементов, указывается индекс активного. Свойство доступно только на этапе выполнения программы.

Selected[Index:Int]:Boolean; - если i-й элемент списка выделен, то True. Доступно только на этапе выполнения программы. Sorted:Boolean; - должны ли строки в списке автоматически сортироваться в алфавитном порядке.

Метод:

Clear - метод удаляет все элементы списка.

Событие:

OnClick - по умолчанию - оно возникает, когда в окне ListBox выделяется один или несколько элементов

 

  1. Комбинированная строка ввода ComboBox.

ComboBox - поле со списком. Объединяет в себе возможности строки ввода Edit и списка ListBox, поэтому свойства и методы заимствованы из обоих объектов. Используя ComboBox можно вводить в список новые элементы, осуществлять поиск нужного элемента в списке, отображать активный элемент списка.

Свойства:

Item:TStrings; - задает элементы списка.

DroppedDown:Boolean; - отображается ли в данный момент раскрывающийся список.

DropDownCount:Integer; - число элементов, отображаемое в раскрывающемся списке.

ItemIndex:Integer; - определяет индекс выделенного элемента в списке. Нумерация с нуля. Если выделенного нет, то значение минус 1.

Text:TCaption; - текст выбранной или введенной строки.

Отсутствует свойство MultiSelect не допускается множественный выбор. Основные операции такие же как и в ListBox.

OnChange - событие по умолчанию, возникает при изменении текста в окне редактирования.

  1. Таблица StringGrid .

Страница Additional.

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

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

Если задан режим редактирования, то на этапе выполнения программы разрешен ввод и редактирования данных, находящихся в ячейке.

Нумерация начинается с нуля, координаты каждой ячейки задаются парой чисел: номер столбца, номер строки. (3,4) – 4столбец, 5 строка.

Свойства:

Col/ Row :Longint; - столбец /строка где находится активная ячейка.

ColCount / RowCount :Longint; - число столбцов / строк.

ColWidths[i] / RowHeigths[i]:integer; - ширина и высота i-й строки в таблице.

DefaultColWidths:integer; DefaultRowHeight:integer; - задает исходную ширину высоту всех строк.

FixedColor:TColor; - цвет фиксированных ячеек.

FixedCols:Integer; - число фиксированных столбцов

FixedRows:Integer; - число фиксированных строк (1 по умолчанию).

property Selection:TGridRect; - указывает область текущего выделения. При выделении указываются номера строк и столбцов.

Каждая ячейка может находиться в одном из пяти состояний: пассивном, выделенном (выделена цветом), активном (выделена рамкой из точек), фиксированном (выделена особым цветом) и редактирования (значение флага goEditing равно True). Для определения поведения таблицы используется свойство Property Options

GoFixedVertLine GoFixedHorzLine– фиксированные ячейки разделяются вертикальными горизонтальн линиями.

GoVertLine GoHorzLine – остальные ячейки разделяются вертикальными гоизонтальными линиями.

GoRangeSelect – допустимо выделение нескольких ячеек.

GoRowSizing GoColSizing– высота строк столбцов может изменяться.

GoRowMoving GoColMoving – строки столбцы таблицы могут перемещаться.

GoEditing – ячейки могут редактироваться.

GoTabs – переход от ячейки к ячейке может с помощью клавиши Tab.

GoRowSelect – вы деление только целых строк таблицы.

GoAlwaysShowEditor – при выделении ячейки она сразу же становится активной ( в противном случае двойным нажатием, либо любой символьной клавишей).

GoThumbTacking – перемещение подвижной части таблицы синхронно с перемещением ползунка скроллинга, в противном случае – перемещение происходит после отпускания клавиши.

Доступ к данным находящимся в ячейках осуществляют следующие свойства (все доступны на этапе выполнения программы).

Cells[Acol,Arow:integer]:string; - содержимое ячейки с заданным столбцом и строкой.

Cols[Index:integer]:TStrings; - список ячеек всех строк, принадлежащих столбцу с индексом Index.

Rows[Index:integer]:TStrings; - список ячеек всех столбцов, принадлежащих строки с индексом Index.

Objects[Acol,Arow:integer]: TObject; двумерный массив, элементами которого являются указатели на объекты, каждый из которых ассоциирован на ячейку с индексами …

Переключатель RadioButton

Компонент RadioButton – кружок с точкой. Располагаются обычно по группам. Группа может объединяться в одном из следующих контейнеров – Form, Panel, GroupBox, ScrollBox. Выбор переключателя – взаимоисключающий. Повторным нажатием его состояние не изменяется.

Checked:Boolean

Флажок CheckBox

Флажок – независимый переключатель, главная особенность, то, что можно установить или сбросить одновременно любое количество флажков, часто они объединяются в группы с общим названием. Флажок может находится в двух состояниях – вкл./выкл. Действия с одним флажком не отражаются на других.

Caption -заголовок

Checked:Boolean. True – вкл. По умолчанию False.

Пользователь может переключать состояние флажка щелчком мыши или нажатием клавиши <пробел> (если компонент в фокусе).

Кроме двух состояний (установлен/снят) флажок может иметь и третье состояние – запрещенное, или недоступное. Устанавливается с помощью свойства

AllowGrayed:Boolean. При значении True, щелчок мышью приведет к циклическому переходу между тремя состояниями. В недоступном состоянии флажок выделен серым цветом, и в нем установлена галочка. Для анализа и установки одного из трех состояний флажка служит свойство State типа TCheckBoxState. Оно может принимать следующие значения:

- cbUncheked (выкл.);

- cbChecked (вкл.);

- cbGrayed (недоступен).   

Событие onClick.

 

Компонент Timer .

Страница System.

Предназначен для инициирования какой либо операции через заданные промежутки времени. Невизуальный компонент.

Свойства

Enabled: Boolean; - если true, то реагирует на собственное событие OnTimer.

Interval: cardinal; - интервал в милисекундах после которого начинается событие OnTimer.

Событие OnTimer возникает по истечении интервала времени.

Является событием по умолчанию.

OpenDialog, SaveDialog

Property FileName: TFileName; - имя выбранного файла.

Property Files: TStrings; - содержит список имен выделенных файлов (только для чтения).

Property Filter:sting; - Содержит описание одного или нескольких файловых фильтров.

property FilterIndex:Integer; - определяет какой элемент фильтра будет показан по умолчанию при открытии диалогового окна.

Property InitialDir:string; - определяет папку, содержимое которой появляется при открытии диалогового окна.

FontDialog

Property Font:TFont;

Задает характеристики шрифта будет использоваться один из шрифтов, зарегистрированных в ОС.

Активизируется методом Execute.

  1. Создание меню. Класс TMenuItem. Контекстное меню PopupMenu.

Создание меню.

Для создания главного меню имеется невизуальный компонент MainMenu, расположенный на странице Standart.

Главное свойство, которого Items:TMenuItem;Default; - содержит элементы нулевого уровня нулевого уровня главного меню Процесс создания меню на этапе конструирования осуществляется с помощью встроенного конструктора меню (Menu Designer).

Для его вызова устанавливается компонент MainMenu; двоиной щелчок по нему, или контекстное меню и вызватьMenu Designer, или открыть меню Items.

Главное меню.

Каждый элемент меню представляет собой объект класса TMenuItem, который является непосредственным потомком TComponent.элемент меню может представлять собой:

подменю;

команду;

разделительную линию.

Bitmap:TBitmap – указатель на объект, содержащий побитовое отображение изображения. Используется для связывания элемента меню и изображения.

Caption:string; – текст элемента меню. Если перед символом поместить &, то создастся клавиша быстрого перехода (акселератор) для открытого меню. Переход осуществляется при нажатии Alt+символ.

Cheked:Boolean; – если ИСТИНА, элемент помечается галочкой

Count:Integer; - содержит число младших элементов, находящихся в свойстве Item. Доступно только для чтения.

Default:Boolean; - если ИСТИНА, то текст меню выделяется полужирным , а двойное нажатие старшего элемента приводит к появлению у текущего элемента обработчика события OnCleack. По умолчанию ЛОЖЬ. Enabled:Boolean;

Items[i]:TMenuItem;default; - задает младшие по отношению к текущему элементу. Число младших задается свойством Count. Нумерация с нуля, свойство доступно для чтения.

Type TShortCut=Low(Word)..High(Word);

Propery ShortCut:TShortCut; - определяет комбинацию «горячих» клавиш для быстрого выбора элемента меню.

 

Событие.

Property OnClick:TnotyfyEvent; - возникает при выборе элемента меню.

Контекстное меню PopupMenu.

Контекстное меню может быть создано для любого оконного элемента управления. Для вызова его необходимо поместить на элементе указатель мыши и щелкнуть правой кнопкой. Конструирование контекстного меню аналогично главному меню, но необходимо установить связь с оконным элементом, для чего используется свойство PopupMenu оконного элемента (в нем указывается ссылка на компонент контекстное меню).

Type TPopupAlignment=(paLeft,paRight,paCenter);

Property Alignment: TpopupAlignment; - определяет положение курсора относительно мыши: слева, справа, по центру.

Property AutoPopup:Boolean; - если ИСТИНА, то контекстное меню появляется при нажатии правой клавиши мыши. ЛОЖЬ - следует применять метод Popup

Procedure Popup(X,Y:Integer);virtual; - выводит на экран контекстное меню с координатами левого угла X Y.

Property OnPopup:TNotifyEvent; - возникает при выборе элемента меню и нажатии Enter или левой кнопки мыши.

Контекстное меню создается аналогично главному с той разницей, что привязывается к одному или нескольким оконным элементам.

 

 

  1. Обработка исключений. Глобальная и локальная обработка исключений. Операторы Try

 

Обработка исключений. Классы исключений. Наиболее часто используемые исключения.

Обработка исключений.

Механизм обработки ошибок инкапсулирован в классе Exception. Возникающие динамические ошибки (времени выполнения) автоматически преобразуются в средствами Делфи в объекты-исключения. Объект-исключение содержит информацию о типе ошибки и при возникновении исключения заставляет программу временно приостановиться. После обработки объекты-исключения автоматически удаляются.

 

Классы исключений.

Базовым классом для всех исключений служит класс Exception, описан он в модуле SysUtils. Потомки содержат большое количество исключений, которые могут возникнуть в процессе выполнения приложения. Любые новые исключения должны быть потомками Exception, что обеспечивает возможность их распознавания и обработки как исключения. Имена потомков исключения начинаются с Е.. Класс Exception происходит от Tobject и имеет простое описание 2 свойства и 8 методов. Исключения создаются при выполнении приложения, поэтому свойства доступны также при выполнении.

 

Свойства

 

Message:string;

Содержит описание исключения, при возникновении исключения этот текст возникает в диалоговом окне обработчика события.

 

HelpContext:ThelpContext;

Хранит уникальный номер (идентификатор контекста), указывающий на раздел контекстной помощи для объекта исключения.

 

Методы

 

Create(const Msg:String);

Конструктор, который создает объект исключение. Msg – текст исключения.

 

Наиболее часто используемые исключения.

Eabort - Тихое исключение без вызова глобального обработчика

Eout OfMemory - Нехватка оперативной памяти для выполнения операции.

EIntOutError - Базовый класс для ошибок связанных с целочисленными вычислениями

EmathError - Базовый класс для обработки ошибок с плавающей запятой.

EinvalidPointer - Некорректная операция с указателем.

EconvertError - Ошибка преобразования типа.

EcreateError - Ошибка создания файла.

EopenError - Ошибка открытия файла.

ElistError - Ошибка в списках.

EprinterError - Ошибка печати.

28. Обработка исключений. Глобальная обработка. Локальная обработка. Вызов исключений.

Обработка исключений.

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

 

Глобальная обработка.

Глобальная обработка реализуется через объект Application , который есть в любом приложении. При получении от операционной системы сообщения об исключении объект Application генерирует событие OnException, обработчик которого является глобальным обработчиком исключений

 

Локальная обработка.

Для локальной обработки в языке есть две конструкции

 

Try //инструкции, выполнение которых может вызвать ошибку

finaly // инструкции, которые выполняются даже при ошибке (освобождение памяти, закрытие файла), т.е. обработки не происходит, используется перед передачей глобальному обработчику

end;

try //инструкции, выполнение которых может вызвать ошибку

except // инструкции, которые должны быть выполнены при ошибке

end;

данная форма используется для перехвата исключения и его обработки. Работает конструкция так: если в try возникает исключение, входим в Except, иначе выполняем следующий оператор за end. Для исключений такого вида глобальный обработчик не вызывается, обработку ошибок делает сам программист.

 

Блок Except может быть разбит на несколько частей с помощью конструкций on…do, позволяющих анализировать класс исключения для его более удобной полной обработки

 

On {идентификатор: класс исключения} do {инструкция обработки исключения этого класса} else {инструкции};

 

procedure TForm1.Button1Click(Sender: TObject);

var x,y,res:real;

begin

try

x:=StrToInt(Edit1.Text); y:=StrToInt(Edit2.Text);

res:=x/y;

edit3.Text:=FloatToStr(res);

except

on EzeroDivide do

   begin

   messageDlg('попытка дел на нуль',mtError,[mbOk],0);

       edit2.SetFocus; edit3.Text:='ошибка';

   end;

end;

end;

Вызов исключений.

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

 

Raise ClassExeption.Method;

 

ClassExeption – класс исключения, на основе которого создается исключение. В качестве метода обычно используется Create – метод создания исключения.

 

Пример:

 

function test(edt:string):string;

begin

if length(edt)>5

   then raise Exception.Create('слишком длинная строка')

   else test:=edt+'тел';

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

try

   edit1.Text:=test(edit1.Text);

except

   on EO:Exception do

       begin

           MessageDlg(EO.Message, mtError,[mbOK],0);

           edit1.SetFocus;

       end; 

end;

end;

  1. Finaly, try  except.

 

  1. Работа с файловой системой. Работа с диском SysUtils. Работа с каталогами и файлами.

Работа с файловой системой.

Для работы с файловой системой предназначены компоненты Win3.1 fileListBox DirectoryListBox, DriveComboBox, FilterComboBox.

Для файловых операций используются средства системных модулей System и SysUtils. System реализует средства низкого уровня – ввод/вывод, обработка строк, опер с дин памятью. SysUtils – дополняет возможности System, в нем находятся средства по работе с дисками, каталогами, файлами, исключения, строки.

Диск. SysUtils.

Для определения размера диска и свободного пространства  DiskSize(Drive:byte):Int64

DiskFree(Drive:byte):Int64 – возвращают размер в байтах, при ошибке –1

Drive:byte – номер диска: 0- текущий, 1-А, 2-В, 3-С и т.д. если задан номер не существующего устройства ошибка не генерится а выводится 0.

Каталоги. SysUtils.

GetCurrentDir: string – возвращает тек кат

SetCurrentDir(dir:string):boolean – смена каталога .

CreateDir(dir:string):Boolean

RemoveDir(dir:string):Boolean – создает новый и удаляет каталог (пустой )

Файлы.

FileCreate(FileName):integer – создает файл в качестве результата дискриптор

RenameFile(Old,NewName):Boolean; - переименует

DeleteFile(FileName):Boolean; - удаляет

FileGetAttr(FileName):integer; - возвращает атрибуты

FileSetAttr(FileName, attr:integer):integer; - устанавливает атрибуты .

Поиск и проверка наличия.

FileExist(filename):Boolean – проверяет наличие

FileSearch(Name,DirList):string – поиск по имени в каталогах

FindFirst(path,atr,seach) -

FindNext(path,atr,seach) – поиск в кат path с атр

FindClose(,seach)

DirectoryListBox.

Компонент служит для просмотра и перемещения по дереву каталогов. Прямоугольная область со скроллингом, в котором отображается дерево каталогов с выбранным текущим каталогом. Строка с выбранным каталогом находится в свойстве Directory не доступном инспектору. DirectoryListBox1.Directory:=’a:\first’;

Отобразить выбранный каталог через свойство dirLabel автоматически отображает каталог на метке, при этом на длину строки накладывается ограничение 24 символа.

При необходимости полного отображения всей строки можно использовать надпись Label не связанную с DirectoryListBox значение которой присвоить в обработчике события OnChange

FileListBox.

Для просмотра списка файлов заданного каталога и выбора имени файла.

Просматриваемый каталог задается свойством Directory. Если FileListBox и DirectoryListBox связанны свойством FileList, то обновление происходит одновременно. Список файлов каталога доступен через Items.

Для автоматического отображения выбранного файла можно использовать компонент Edit, который связать с FileListBox с помощью свойства FileEdit.

Если список поддерживает выбор нескольких файлов свойство MultiSelect должно иметь значение TRUE, а вместо однострочного редактора Edit можно использовать Memo, при этом автоматического отображения не происходит.

При выборе файла в свойство FileName заноситься его полное имя. Свойство доступно и для чтения и для записи, поэтому можно программно выбирать файл.

FilterComboBox.

Выбор маски для списка файлов. Компонент содержит фильтры, пользователь может выбрать. Фильтр состоит из текстового описания и маски. Свойство FileList связывает фильтр со списком.

 

  1. Мультимедийные возможности. Компонент Animate. Компонент MediaPlayer

 

  1. Взаимодействие приложения с внешними программами. Запуск из приложения внешних программ. Запуск внешней программы функции WinExec, ShellExecute

 

  1. Динамический обмен данными — технология DDE. Технология OLE. Динамически подключаемые библиотеки (DLL).

 

57 Этапы развития технологии программирования

       Этапы развития технологии программирования

Структурное тестирование

Структурное тестирование называют также тестированием по «маршрутам», так как в этом случае тестовые наборы формируют путем анализа маршрутов, предусмотренных алгоритмом.

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

Покрытие операторов. Критерий покрытия операторов подразумевает такой подбор тестов, чтобы каждый оператор программы выполнялся, хотябы один раз.

Покрытие решений (переходов). Чтобы результат проверки каждого условия (т.е. решение) принимал значения «истина» или «ложь», по крайней мере, один раз.

Покрытие условий. Все возможные результаты каждого условия в решении были выполнены, по крайней мере, один раз.

Комбинаторное покрытие условий. Этот критерий требует создания такого множества тестов, чтобы все возможные комбинации результатов условий в каждом решении и все операторы выполнялись, по крайней мере, один раз.

 

Функциональное тестирование

Программа рассматривается как «черный ящик», и тестирование производится на всех возможных наборах данных.

При функциональном тестировании различают следующие методы формирования тестовых наборов:

• эквивалентное разбиение;

• анализ граничных значений;

• предположение об ошибке.

 

Эквивалентное разбиение.

•  Область всех возможных наборов входных данных программы по каждому параметру разбивают на конечное число групп - классов эквивалентности. Наборы данных такого класса объединяют по принципу обнаружения одних и тех же ошибок: если набор какого-либо класса обнаруживает некоторую ошибку, то предполагается, что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку и наоборот.

•           Разработку тестов методом эквивалентного разбиения осуществляют в два этапа: на первом выделяют классы эквивалентности, а на втором - формируют тесты.

Анализ граничных значений.

Граничные значения - это значения на границах классов эквивалентности входных значений или около них. Анализ показывает, что в этих местах резко увеличивается возможность обнаружения ошибок. Например, если в программе анализа вида треугольника было записано А + В ≥ С вместо А + В > С, то задание граничных значений приведет к ошибке: линия будет отнесена к одному из видов треугольника.

 

Предположение об ошибке. Часто программист с большим опытом находит ошибки, «не применяя никаких методов». На самом деле он подсознательно использует метод «предположение об ошибке».

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

Проиллюстрируем применение всех рассмотренных выше методов на примере

 

Комплексное тестирование.

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

 

 75 Критерии завершения тестирования и отладки.

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

Предложено очень много критериев. Все критерии можно разделить на три группы:

· перестают выявлять ошибки;

· основанные на оценке возможного количества ошибок - возможное количество ошибок оценивают экспертно, или по специальным методикам, а затем завершают тестирование при нахождении примерно 93-95% ошибок

· основанные на исследовании результатов тестирования - строят график зависимости количества обнаруженных ошибок от времени тестирования, тестирование можно завершать.Часто тестирование завершают потому, что закончилось время, отведенное на выполнение данного этапа. В этом случае тестирование сворачивают, обходясь минимальным вариантом.

Минимальное тестирование предполагает:

· тестирование граничных значений;

· тщательную проверку руководства;

· тестирование минимальных конфигураций технических средств;

· тестирование устойчивости к ошибкам пользователя

Оценочное тестирование

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

Оценочное тестирование, которое также называют «тестированием системы в целом», включает следующие виды:

·Тестирование удобства использования - последовательная проверка соответствия программного продукта и документации на него основным положениям технического задания;

· тестирование на предельных объемах - проверка работоспособности программы на максимально больших объемах данных, например, объемах текстов, таблиц, большом количестве файлов и т. п.;

·тестирование на предельных нагрузках - проверка выполнения программы на возможность обработки большого объема данных, поступивших в течение короткого времени;

· тестирование удобства эксплуатации - анализ психологических факторов, возникающих при работе с программным обеспечением; это тестирование позволяет определить, удобен ли интерфейс, не раздражает ли цветовое или звуковое сопровождение и т. п.;

·тестирование защиты - проверка защиты, например, от несанкционированного доступа к информации;

· тестирование производительности - определение пропускной способности при заданной конфигурации и нагрузке

 

 77 ОТЛАДКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Отладка - это процесс локализации и исправления ошибок, обнаруженных при тестировании ПО.

Локализация - процесс определения того оператора программы, выполнение которого вызвало нарушение нормального вычислительного процесса. Для исправления ошибки необходимо определить ее причину, т. е. определить оператор или фрагмент, содержащие ошибку.

Сложность отладки обусловлена :

 • необходимостью знаний специфики АО и ОС, среды, ЯП, специфики различных ошибок, методик отладки;

 • дискомфортностью, так как необходимо искать собственные ошибки;

 • возможностью взаимовлияния ошибок в разных частях программы;

 • отсутствием четко сформулированные методики отладки.

В соответствии с этапом обработки, на котором проявляются ошибки, различают:

синтаксические ошибки - ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы (ЯПс защищенным синтаксисом и с незащищенным синтаксисом);

ошибки компоновки - ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;

ошибки выполнения - ошибки, обнаруженные операционной системой, аппаратными средствами или пользователем при выполнении программы.

Ошибки выполнения. Самые сложные ошибки. Способы проявления таких ошибок:

• ошибки, зафиксированные схемами контроля машинных команд, например, переполнении разрядной сетки, ситуации «деление на ноль», нарушении адресации и т. п.;

• ошибки, обнаруженные ОС, например, нарушении защиты памяти, попытке записи на устройства, защищенные от записи, отсутствии файла с заданным именем и т. п.;

• «зависание» компьютера, как простое, когда удается завершить программу без перезагрузки операционной системы, так и «тяжелое», когда для продолжения работы необходима перезагрузка;

несовпадение полученных результатов с ожидаемыми.

 

Несовпадение полученных результатов с ожидаемыми.

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

• неверное определение исходных данных;

• логические ошибки;

• накопление погрешностей результатов вычислений

 

 

Структура модулей

Модуль имеет следующую структуру:

Unit <имя>;

Interface

<Интерфейсная часть>

Implementation

<исполняемая часть>

Initialization

<инициирующая часть>

Finalization

<завершающая часть>

end.

Здесь

Unit - зарезервированное слово; начинает заголовок модуля; <имя> - имя модуля (правильный идентификатор);

interface - зарезервированное слово; начинает интерфейсную часть модуля;

implementation - зарезервированное слово; начинает исполняемую часть;

initialization - зарезервированное слово; начинает инициирующую часть модуля (необязательный раздел);

finalization - зарезервированное слово; начинает заключительную часть модуля (необязательный раздел);

end - зарезервированное слово - признак конца модуля.

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

 

  1. Классы, объекты. Объявление класса, принципы ООП.
  2. Инкапсуляция и разграничение доступа к членам класса.

Классы – это типы специального вида, которые содержат поля, методы и свойства.

       Классы, как и любые другие типы, служат образцами для создания конкретных экземпляров.

       Конкретные экземпляры класса называются объектами

                             Объявление класса

Type

          TmyCl=class(Tobject)

                          Fint:integer;

                          Fstr:string;

                       Function Func1(a:real):integer;                          Procedure Proc1;

          End;

В основе классовой борьбы лежат три фундаментальных принципа

инкапсуляция

наследование

полиморфизм

Инкапсуляция – это объединение в одно целое трех сущностей: полей, методов и свойств.

          Поля методы и свойства называются членами классов.

          Как мы увидим в дальнейшем, инкапсуляция позволяет создавать обособленные самодостаточные объекты. Выполнение программы представляет обмен сообщениями между объектами.

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

           

                          Все классы OBJECT PASCAL являются потомками класса TОbject. Наследование приводит к тому, что создается дерево классов, разрастающееся по мере удаления от потомка.

          Программисты создавая новые классы, на основе старых не вникают в подробности программного кода старых. Значительно возрастает преемственность кода.

          Полиморфизм – это возможность в классах потомках переопределять (перекрывать) методы родителей.

          Поведенческие свойства класса определяются набором методов входящих в класс, изменяя тот или иной метод в потомке, мы изменяем в нем свойства родителя, хотя имя метода остается прежним.

ИНКАПСУЛЯЦИЯ
 Инкапсуляция – это объединение в одно целое трех сущностей: полей, методов и свойств (членов класса).

Поля – это данные.

Методы – это процедуры, обрабатывающие данные.

Свойства – это механизм доступа к данным.

Инкапсуляция позволяет изолировать класс от остальных частей программы, сделать его самодостаточным для решения конкретной задачи.

          Инкапсуляция предполагает разграничение доступа разработчиков разного уровня к различным членам класса.(если ты разрабатываешь класс, то тебе доступны все члены класса, если ты используешь класс, то только те, которые определят поведение класса)

                          Потому что:

1. Пользователи класса не должны видеть подробности, которыми оперируют разработчики.

2. Прямой доступ к полям хотя и возможен, но не всегда желателен, т.к. бесконтрольность может привести к ошибкам.

Часто поля делают узко доступными, а свойства (именно они проводят контроль корректности) широко.

В Delphi есть четыре модификатора разграничения доступа:

- public

- published

- protected

- private

-           Модификатором public объявляют (помечают ) члены класса видимые везде.

-           А именно, в любой программе и в любом модуле, которые имеют доступ к нашему модулю, (т.е. где наш модуль объявлен в разделе USES).

-           Модификатором published объявляют члены класса видимые везде, но более того, свойства помещенные в эту секцию видимы еще и в инспекторе объектов.

-           Секция, не имеющая модификатора доступа, по умолчанию считается published

-           Модификатором protected объявляют члены класса доступные методам самого класса и их потомкам.

-           Модификатором private объявляют члены класса видимые только в модуле, где описан класс, т.е. это локальные описания.

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

-           Поля – это данные, инкапсулированные в классе.

-           В классе поля описываются как обычные переменные.

-           Если разворачиваются несколько объектов одного класса, то каждый объект получает уникальный набор полей и общий набор методов и свойств.

- Как мы помним:

- Свойства – это механизм доступа к данным.

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

-           Инкапсулированные в классе процедуры и функции называются методами.

-           Методы объявляются в классе как обычные подпрограммы.

-           В заголовке описания реализации метода используют составное имя метода (имя класса точка имя метода).

-    В теле описания реализации метода собствен-ные поля используются без указания имени класса. (этим методы отличаются от прочих процедур)

 

  1. Методы (виды методов), конструктор и деструктор.

 

Инкапсулированные в классе процедуры и функции называются методами.

          Методы объявляются в классе как обычные подпрограммы.

          В заголовке описания реализации метода используют составное имя метода (имя класса точка имя метода).

В теле описания реализации метода собственные поля используются без указания имени класса. (этим методы отличаются от прочих процедур)

Type

TmyCl=class(Tobject)

    Fint:integer;

    procedure proc1(var m:integer);

End;

Var O1: TmyCl;   

procedure TmyCl.proc1(var m:integer);
Begin         
          m:= Fint +3;// заметим Fint, а не TmyCl.Fint

End;
Begin
…… O1.proc1(k);//в основной проге составное имя
End.

Методы класса

Конструктор и деструктор

Виртуальные

Динамические

 Абстрактные

Перегружаемые

  1. Перекрытие методов, перекрытие конструктора, inherited

ПЕРЕОПРЕДЕЛЕНИЕ (ПЕРЕКРЫТИЕ) МЕТОДОВ

Type
Tpar=class
     Procedure DoWork;
End;

Tchild=class(Tpar)
     Procedure DoWork;
End;

Var O1: Tpar;    O2: Tchild;

Procedure Tpar . DoWork;
Begin writeln(‘стучит молотком’); end;

Procedure Tchild . DoWork;
Begin writeln(‘играется в песочнице’); end;

Begin
O1
:= Tchild.create;

O1.DoWork; // стучит молотком

O2.DoWork; // играется в песочнице
end.

 

ПЕРЕОПРЕДЕЛЕНИЕ КОНСТРУКТОРА

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

 

  1. Поля, Свойства.

 

                                                                                                                                                                                 

 

















Полиморфизм is , as

(man as Tman).Obed; //приведение типа

if man is Tman then …;//определение типа

  1. События

Событие – это то, что происходит в результате работы компьютера. На низком уровне это изменения, (нажатие кнопки, исход времени, деление на ноль) вызывающие прерывания.

С точки зрения языка событие - это свойство процедурного типа, его значением является указатель на некоторый метод.

Присвоить такому свойству значение – означает указать адрес метода, который будет выполняться в момент наступления события.

Такие методы называются обработчиками событий.

Type
      TControl = class (TComponent)
          Private
            FOnDblClick: TNottifyEvent ;
           ……………………..
          Protected

 property OnDblClick: TNottifyEvent read FOnDblClick write FOnDblClick;
           ………………………
      end;

TNotifyEvent = Procedure(Sender:TObject) of object;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

 

  1. Дерево классов DELPHI
  2.           Принцип наследования позволяет использовать любой класс использовать как предка для создания новых классов. При этом члены класса предка наследуются.

  1. Класс TObject.

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

Constructor Create – выделяет динам память, инициализацию не делает, т.к. перегружается.
Destructor Destroy; virtual; - освобождает выделенную память.
Procedure Free – проверяет существование и, если память выделялась, то освобождает ее.

          Методы класса:
ClassName: shortString; - возвращает имя класса данного объекта
ClassNameIs (const Name:string):Boolean; - данный класс совпадает Name
InheritsForm(aClass:Tclass):Boolean; - является ли класс предком дан класса
InstanceSize:Longint; - возвращает размер класс или объекта

 















Класс TPersistent.

Его объекты инкапсулируют в себе некоторый носитель информации. Память или дисковые файлы.

          МЕТОДЫ:

Procedure Assign(Source:Tpersistent); - присваивает данному
          объекту данные, содержащиеся в объекте с именем Source

Function GetNamePath: string; dynamic; - возвращает строку,
           содержащую имя объекта.

Function GetOwner: TPersistent; dynamic;- возвращает
             указатель на владельца объекта.

 

  1. Класс T С omponent .

Вершина иерархии компонентов. Потомки его - невизуальные компоненты (TApplication, Tform таймер, меню, диалоговые окна).

          Свойства
Name (строка ) – имя компонента. При помещении компонента на форму присваивается стандартное имя Label1, Edit1, которое можно заменить на более осмысленное, при этом имя должно быть правильным идентификатором.
Tag: Longint; - некоторое число, которым разработчик может распоряжаться по усмотрению.

В классе TComponent вводится концепция принадлежности, которая распространяется на всю VCL. Суть:

любой компонент Делфи является собственностью другого компонента.

при разрушении компонента владельца автоматически разрушается принадлежащие ему компоненты.

 

Свойства реализующие концепцию принадлежности:
ComponentCount:Integer; - количество компонентов во владении
ComponentIndex:Integer; - номер компонента в списке владельца (нумерация с нуля).
Components [Index:Integer]:TComponent; - список компонен-тов, для которых данный является владельцем.

Owner: TComponent; - содержит указатель на компонент владелец для текущего компонента.

МЕТОДЫ
Constructor Create (AOwner: TComponent);virtual; - создает объект данного класса, помещает ссылку на себя в массив Components, своего владельца, имя которого указано в AOwner.

Destroy Tcomponent;- удаляет из памяти компоненты данного владельца.
Procedure InsertComponent(Acomponent: TComponent); - вставляет новый компонент с именем Acomponent.
Procedure RemoveComponent(Acomponent: TComponent); - удаляет компонент Acomponent.    

 












Класс T С ontrol .

Потомки этого класса называются элементами управления.

Это визуальные компоненты с их помощью информация выводится на экран.

          В потомках TControl вводится понятие родительского элемента управления суть его в следующем:

          Каждый элемент управления может быть помещен в группирующий элемент. Дочерние не могут выходить за рамки родительского, при перемещении родительского перемещаются и дочерние.
Дочерний элемент использует некоторые родительские свойства (цвет, шрифт). Визуально изображение родительского и дочернего на экране получает единый хороший стиль.
          В качестве родительского может выступать только оконный элемент управления, т.е. потомок TWinControl, дочерние элементы управления могут быть любыми.

          Не следует путать владельца и родителя

 



Дата: 2019-07-25, просмотров: 274.