Пищов за делфи - Класове, обекти, полета, методи
| Информационни технологии | 2009-12-04 | 78 сваляния |
КласовеКласът или класовия тип декларира структура която вкл полета методи и св-ва. Инстанциите на класовия тип се наричат обекти. Полетата на класовия тип са данните на обекта. За вс обект се заделя самостоятелна памет в която се разполагат полетата. Методите на обекта са проц и ф-ции които обработват полетата му. За вс обекти от класов тип се използват еднакви методи. Т.е методите се реализират 1кратно в изпълн код. Св-вата на класа са interface за достъп до полетата. Те имат спецификатори за достъп като така се четат и контрол полета на obj. Оbj от класов тип се създават със спец методи-констуктори и се унищож с деструктори. От самия класов тип могат да се създадат променливи но те са реф данни които се насочват към конкретен екземпляр или инстанция на класа след изпълнение на съотв конструктор. Всеки клас се декларира в раздел на типовете. Изполазване на анонимни класове не е разрешено <име на клас> =bg-BG">родител> ) <компоненти> .. end; Родител може да не се посочи тогава малки скоби няма. Такъв клас наследява Tobject. | Обекти и спец за достъп.Обектните типове не са производни на Tobject затова не нямат предварително дефиниран констр и деструктор. Ако има нужда се създава. Обектите се създават с new и се освобождават с dispose. Към вс компоненти от такъв обект се прави обръщени с косвено адресиране. А при класовия тип става автоматично. Вс компон на класов тип имат спецификация за достъп опеделяща видимостта им от останалата част. Ако няма такава получава от предхождащия компон. СЗД се записва в началото. Видове СЗД: -private- компонентът се вижда във файла в който е деклариран класа и в самия клас. -protected-комп се вижда във файла в който е деклар класа и във всички негови наследници. -public- комп се вижда и вън от файла в който е създаден класа. -published- съвпада с public но разликата е че се подготвя runtime type info необходима на етап дизайн. Вс методи могат да са published като не се допуска предефиниране. Полетата могат да са published | ПолетаПолетата на един клас (обект) могат да са от всякакъв тип. За вс поле се заделя памет статично. При адресиране връзката към полетата се решава на етап компилация. Това е от значение когато адресирането е в контекст на обект, реф данна за който е от класовия тип на родителя а създадения обект от класовия тип на наследника. Родител и наследник са съвместими по присвояване. На реф променлива от класов тип родител може да се присвои адрес към наследник. | МетодиРеализация на методиПри декларация на класа методите участват само със своето заглавие. Вън от деклар те трябва да бъдат реализирани. Класът може да се декларира в интерфейсната част или в реализацията. Методите се реализират винаги в секция реализация на 1-во ниво. Не могат да се влагат в проц и ф-ции. При дефиниране на методи могат да се укажат формални параметри. За ф-циите е задължително да се укаже тип на връщаната ст-т. В тялото на методите могат да се използват 2 ключови думи -Inherited : тя може да се срещне така: Inherited <<SPAN LANG="bg-BG">име метод> това е нормално извикване за изпълнение на метода като той се търси в непосредствения родител. Ако методът се нуждае от аргументи те се предават така: Inherited<</I>име на метод>() Така се вика метод за изпълнение със съвпадащо име на текущото реализиране. Inherited; -така се вика метод със съвпадащо име като формалните параметри на текущо реализирания метод се предават в качеството на аргументи; -self в тялото на метода, self представя контекста на obj в който метода се изпъл |
| Той е прародител на вс класове в ObjPascal. Класът може да няма собствени компоненти. Тогава може да се пропусне тиловото end В тялото на класа могат да се създават специф компоненти за него. Могат да се предекларират наследени такива от родител. В този случаи компонентите от родителя се скриват но не се отхвърлят. Новият клас не може да се откаже от наследените компон. Всяко описано в класа име се вижда мястото на опис до тиловото end; вижда се и в реализацията на методите която се записва след декларацията на класа. По тази причина в тялото на вс метод може да се обърнем към имена описани в класа без уточняване. | ако са от класов или интерфейсен тип. Published могат да са: Вс скаларни типове освен real48; св-ва с класов интерфейсен тип или указатели към методи; множества с база от 0 до 31; Масиви от св-ва не могат да са published. В началото на класа се подразбира СЗД published ако класа се компилира с {$M+} или е наследник на клас който се компилира с тази директива. Ако е с {$M-} => СЗД public. Ако се виждат всички компон в класа се адресират с прости имена. Вън от класа ако компон имат достатъчно ниво на видимост се адресират с уточнение имена. Има 2 вида уточняване <<SPAN LANG="bg-BG">име на obj>.<<SPAN LANG="bg-BG">компо> - адресирането е в контекст на обект; <име на клас>.<комп> - адресирането е в контекст на клас. | | <обект>.<метод>() така се вика метода в контекста на обекта. Свързване на методиСвързванията се делят на 3 вида: статични динамични ,виртуални. Последните два вида могат да се прикриват. -Статични методи връзката към тях е на етап компилация като компилатора решава кой метод да се изпълни въз основа на класовия тип на реф данна. По подразбиране всички методи са статични. -виртуални и динамични методи методът става вирт или динам ако при деклар на класа се запише директива съотв. Virtual,dynamic. Разлика м-у тях няма. Vir се изпълняеа по бързо а dyn дава по компактен код. Метод който е виртуален може да се прикрие в клас наслед като се деклар отново с директива override. Новата и старата деклар трябва да съвпадат. При извикване на вирт метод връзката към него се осъщ динамично. Вс методи могат да се предефинират. Декларацията на такъв метод съдържа директивата overload |
Тагове от реферата: деклрира, совия, пищов, руктура, методи











