Делфи
Tupe
<name >=Class[<имя родителя ><поля методы св-во, события>
Public
Published
<поля, св-во>
Projected
<поля>
Private
<поля, методы, св-во, события >
End;
Внешний пользователь не имеет доступ к этим функциям …он не может не чего изменить и приписать ни удалить …. Общепринятые имена классов …начинать с приставки T …
Да заданий начальных значений …объекта должен использоваться конструктор …если вы не использовали конструктор своего класса …то используется предовский конструктор …Автоматом могут инициализироваться порядковые типы … нуль, байтовым …строки задаются пустыми, (‘ ’) …объявления методов не отличается от объявления процедур и функций …Поля данных должны были защищены от постороннего доступа … только через спец. Метода
Этот метод обязательно включает в себя чтения полей и так далее … тут бла бла бла …
Property <имя сво-во > : ДВОЕТОЧИЯ <Тип>
Read <имя поля, метод чтения >
Write<имя поля, метод записи >
<директива запоминания > вот так описывается свойство в нашем классе …
Имя свойство совпадает с индефекатором
В разделах Read and Write записано имя поля, то предполагается прямое чтения и запись … то чтения и запись … только при помощи функций с этими именами … и возвращаемый тип совпадает с полем с которым мы пишем свойство … имя функции чтения get and set …директива запоминания определяет значения свойство …файл форма с расширением (.dfm) служебное слово Default <значения >
Для примера создадим собственный класс..в классе мы будем описывать некоторые параметры о студенте института.
Создадим модуль (file/new/unit)названия MyClasses
Unit MyClasses
Interface
Uses SysUtils, Diaologs, Classes
Type
Tperson=class
Private
Fname:string;(фамилия имя отчество )
FDep:string (институт )
Fyear:word(дата рождения)
FSex:chat(пол)
FComment:string(понятно же что тут нужно комментировать )
Projected
Property SetSex(value. char)
PubLic
PropertyName:string read Fname write Fname;
PropertyDep:string read FDep write Fdep
PropertyYear:worl read Fyear write Fyear
PropertySex:char read Fsex write SetSex
Default ‘Мужык’
PropertyComment:string read FComment write FComment
End;
Implementation
Property Tperson. SetySex(valu. char)
Begin
If value in [‘мужык’,’жона’] then
Fsex:=Value
Else
ShowMessage(‘недопустимый символ ’+Value+’_в указатель ноль ’)
End;
End;
Var Pers:TPesson
(так как выделяется память )
Pers:Tperson. Create ;
Для удаления pers нужно в обработчике OnDestroy
Pers. Free;
Помещаем на форму 4 окна едит окно мемо для записи или чтения комента о студенте … лейбел сколько хочешь … две кнопки (чтения и записи данных в обьект …)еще можно третью кнопку очиски
Write Pers do
Name :=Edit1.Text;
If Edit2.Text<>’ ’then
Sex:Edit2.text[1]
Dep:=Edit3.text;
Year:=StrToInt(Edit4.text)
Comment:=Memo1.text;
End;
Конструктор и деструктор
Constructor Create
Begin
Inherited
Добавим созданный нами класс 2 новых поля (эти поля были скрыты в private )AgeMax and AgeMin в описания классов включим
uses … , DateUtile, {Year of}
tupe
TPerson:=Class
Private
Описания плей …пол, имя института и так далее
И + к этом … AgeMax and AgeMin (и у них тип word )
Protected
Procedure Set Year(value):word;
Public
(заполнения года и так далее )
Property Year: word read FYear write SetYear;
End;
Procedure Tperson, SetYear(…);
Var NewYear:word;
Begin
{мы должны показать текущий год … }
NewYear:=YearOf(Date);
If (удовлетворяет ли год который мы вытащили …лежит ли возраст …или просто сказать проверка возраста студента )…
(NewYear-Value>=AgeMin) and (NewYear-Value<=AgeMax)
Then Fyear:=Value else (« не возьмут возраст не совпал с разрешённым» )ибо без него … класс Tperson:=
Constructor Create
В раздели implementation
Constructor Tpers. Create
Const UnitNown=”неизвестный ”
Begin inherited
Fsex:=#0;
AgeMax:=#80;
AgeMin:=#14;
Fname:=UnKnow;
Fdep:=unknown;
End;
обычно Destructor создается тогда, когда в классе какой из методов..создает объект находящийся объект распределённый в памяти либо когда объект создает и хранит информацию (комментарии о студенте …)в класс TPerson который будет использоваться
FDoc:^TRichEdit;{ComContrls}
FileTMP:string;
А опчему бы не создать обьект внутри нашего класса..в классе TPERSON создать TRichEdit нельзя!!!!!
В Public записываем SetDoc(var value:TRichEdit-*-*-*-*-*-*-*-*,)
Для удаления временых файлов нужно создать деструкто задача его удалить временные файлы …обьевления деструктора помещаем в открытую часть класса..
Destructer Destroy;
Override;
Реализация это конструктора … Destructor Destroy;
Begin
If FileTmP<>”then DeleteFile(File TMP’);
21,05,12,9,17,45
Методы наследования классов операции с классами
Создадим 2 отрытых метода avetofile и loadtofile
As and Is – это бинарные операции левые части этих операций (обьект, класс)
Aasc — рассматривается как обьект класса С
Aisc –используется в операнде If
Относится ли операция к типу С
Мы уже говорили что родительские методы могут определены в потомках можно вызвать преопределённый метод предка inherited –мы вызывали конструкцию предка …потом можно вызвать конструктор предка…
Inherited Cruet :=<>;
Виртуальные методы полиморфизм, абстрактные классы
Классы : Статические, Виртуальные ….
По умолчанию все методы статические, если вы переопределяете статический метод в потомки …Знай!! То что измененный статический будет менять метод предка..не удобно с ними работать из-за того что подобный метод нужно во всех родственных классах переопределять … нужно увеличивать код!!!
Удобно решать с помощью виртуальных методов, то есть не надо указывать каждый раз какой метод для какого класса вы применяете система сама находит
Virtual и Dinamic
Чтобы перегрузить …Override …
Различи между статическим и виртуальным методом …виртуальные методы (эффективны с точки зрения Времени )
…статические методы(эффективны с точки зрения
памяти)
Абстрактный метод – это динамический или виртуальный метод реализация не определена …в чем его суть (Tstringsàтолько наследник )для обьеквления абстрактного метода нужно написать служебное слово ‘abstract’
Перегрузка виртуального метода ….для того что бы изменить тип или число параметров в виртуальном методе мы должны использовать
Пример!!!
Type
T1=class
Procedure что то тут не понятное написанное на доске!!!
Каждое приложение – должно хорошо конкретизирована …приложения (главное меню, инструментальной панели, контекстное меню (вываливается при нажатие правой кнопки мыши ), язычки подсказок, полоса состояния, файл справки )для исполнения такого кол-во инструментов …специальное технология разработки …речь идет о проектирование списка действий…этот список действий бла бла …
Создание проекта (создания списка действий сначала список может быть не полным …кстати мы неявно это делали )сейчас он расскажет что то делится на стандартные действия и не стандартные методы …и изобретать велосипед не имеет смысла … в делфи предусмотрены компоненты..централизованные управления действий …
При помощь централизованные компоненты …компонент диспетчер…но в делфи создано много для стандартных действий единственно что нужно вызвать диспетчер действий …ВЫ можем использовать действие «Экшен»в это свойство что то там бла бла … все в экшен (что то там!!!бесит уже!!!) КОМПАНЕНТ НАЗЫВАЕТСЯ ACTIOLIST
Этот компонент находится на вкладки стандарт у каждой визуальной компоненты возможно изображения которая выделяет ее из всех остальных для определение списка изображения используется ImageList ()
1)Составляется список действий
2)создается ImageList
3)создается список пиктограмм
3)на главную форму переносится ActionList
4)для стандартных действий основные действия создаются автоматом …
5)переносим мейн меню (соответствующая пиктограмм )
6)инструментальная панель связывается с ImageList обработчики событий нестандартных действий!!!делфи много изображений в каталоги Program FileCommon FileBorland SharedImagesButtons
Для ActionListà нужно свойство ImageList