Home > doc > object-model 
 en fr de es it nl pl pt pt_BR sq ca hu cs tr ar fa id vi ko ja ru zh zh_TW eo
Previous  Next  Edit  Rename  Undo  Refresh  Search  Administration  
Documentation
History
 
Warning! This page is not up to date.  See english version 
Објектниот модел на Gambas

1. Објекти и Класи

Објект во Gambas е податочна структура што содржи својства, променливи, методи и настани.

До објектите се достапува „по референца“, т.е. со помош на поинтер, што е всушност посебна променлива чија вредност е адресата на податочната структура на објектот во меморијата.

Адресата на објектот можете да ја видите со помош на инструкцијата PRINT:

DIM aStr AS NEW String[]

PRINT aStr

(String[] 0x80dccf8)

Податочната структура на објектот е опишана со класа.

1.1. Класи

Секој објект од Gambas има соодветна класа што ги опишува сите негови јавни својства, методи и настани. Оваа класа е, исто така, објект од Gambas, чија е класа е класата со име Class.

Статичка класа е класа чии членови се сите статички (видете подолу). Во Gambas, статичка класа се нарекува уште и модул.

Example

Класата System е статичка класа: сите нејзини методи се статички и не е можно да се создаде објект чија класа би била System.

Виртуелна класа е скриена псевдокласа со која не можете директно да манипулирате.

1.2. Својства, методи и променливи

Својствата и методите овозможуваат манипулација со податочните структури.

Својствата, методите или променливите можат да бидат статички:

Методите или променливите можат да биде јавни (public) или приватни (private). Својствата секогаш се јавни.

Приватните симболи можат да се користат само во класата во која се дефинирани. Јавните симболи можат да се користат во целата програма, под услов да имате референца до соодветниот објект.

1.3. Настани

Настаните се сигнали што објектот ги испраќа кога нешто ќе му се случи.

Ако објектот објавува настани, тој ќе има референца до неговиот набљудувач или родителски објект.

Набљудувачот е друг објект што имплементира рачуваќи со настани. Ракувач со настан е обичен јавен метод што се повикува секогаш кога ќе се објави настан.

Обично, набљудувачот е тековниот објект каде што е деклариран новосоздадениот (инстанцираниот) објект објект.

За да објави настан, објектот мора да име настанско име. Ова настанско име се доделува при инстанцирањето на објектот, со помош на инструкцијата NEW и клучниот збор AS и тоа е префикс на сите методи - ракувачи со настани.

Example

Ова создава Button што ќе објавува настани.
DIM hKopce AS Button

hKopce = NEW Button(ME) AS "KopceImeNaNastan"

Ако не е наведено настанско име, објектот нема да објавува настани.

Објектот може да се заклучи така што ќе престане да објавува настани и може да се отклучи така повторно ги објавува. Видете ги методите Object.Lock и Object.Unlock.

Некои настани можат да бидат откажани од ракувачот на настани со помош на инструкцијата STOP EVENT. Ефектот на откажувањето зависи од настанот.

1.4. Референци

Во Gambas не постои garbage collection. Секој објект си има „бројач на референци“ што се инкрементира секогаш кога објектот ќе се референцира од која било променлива, низа, колекција, низа или друг објект и се намалува кога објектот ќе се ослободи.

Овој бројач на референци при создавањето на објектот е 0 и кога повторно ќе стане нула при ослободувањето на некоја референца, објектот се уништува и меморијата што ја зафаќал се враќа на системот.

1.5. Невалидни објекти

Објектот може да стане невалиден. Тоа може да се случи кога, на пример, е поврзан со интерен објектот што не е управуван од Gambas, а кој пак е уништен.

Обидот за употреба на невалиден објект предизвикува објавување грешка.

1.6. Специјални методи

Специјалните методи се декларираат во класи чие име почнива со потцртичка и се повикуваат од страна на интерпретерот во следниве ситуации:

Видете /api/cat/special за повеќе информации.

2. Наследување

Наследувањето е начин на кој се создава класа што е специјализирана верзија на друга класа.

2.1. Што се наследува?

Класата од својот родител ги наследува сите методи, својства, константи и настани.

За да достапите до наследените елементи од родителската класа во внатрешноста на тековната класа морате да го користите клучниот збор ME.

2.2. Која класа може да биде родителска класа?

Можете да наследите која било класа, дури и природна!

На пример, можете да создадете класа MyListBox што ја наследува класата ListBox, но ви овозможува да асоцирате по еден број со секоја ставка на листата.

Забележете дека не можете да го користите зборот INHERITS во датотека со класа што опишува форма, бидејќи формите веќе ја наследуваат класата Form.

Длабочината на стеблото на наследување не може да биде поголема од 16. Ова е константа што е вградена во Gambas интерпретерот.

2.3. Виртуелно проследување

При повикување на метод или достап до својство од референца на објект, Gambas секогаш користи виртуално проследување.

Тоа значи дека секогаш се користи вистинската класа на објектот, а не податочниот тип на променливата што го референцира објектот - како што било случај во Gambas 1.0.

2.4. Наследување и конструктори

За разлика од сите објектни јазици што ги познавам, секоја класа во хиерархијата на наследувањето ги прима параметрите проследени до конструкторот.

Да претпоставиме дека го имаме следново стебло на наследување:

MyListBox ---ја наследува--> ListBox ---ја наследува---> Control

Па така, NEW MyListBox ќе прифати два параметри:

Внимавајте: прво ќе се создаде ListBox._new(), па така сте сигурни дека контролата ListBox веќе постои кога се извршува MyListBox._new().

Според тоа, аргументите треба да се наведуваат во обратен редослед.

Ова ќе ја создаде контролата MyListBox на следниов начин:

hMyListBox = NEW MyListBox("Ime", hContainer)

3. Компоненти

Gambas компонентите се надворешни споделени библиотеки пишувани во C, C++ или Gambas што додаваат нови функции и/или класи на Gambas интерпретерот.

Класите се групираат според компонентите од кои доаѓаат.

3.1. Стандардни интерни компоненти

Интерпретерот содржи стандардна интерна компонента со име gb што ги дефинира сите стандардни класи на јазикот.

Оваа компонента секогаш се вчитува и може да се смета како дел од јазикот.

3.2. Табели на симболи

Секоја компонента има сопствена приватна табела на симболи на класи, така што имињата на класите не доаѓаат во конфликт.

3.3 Глобална табела на симболи

За да се овозможи заедничка работа на компонентите, постои глобална табела на симболи, каде што се чуваат сите класи што се извезени од компонентите и од тековниот проект.

Ако постои конфликт на имињата во глобалната табела на симболи, последната вчитана класа има предност пред претходно вчитаната класа со исто име со употреба на наследување. Со други зборови, класата што има предност е проширување на класата што нема предност.

Оваа особина може да се искористи за:

3.4 Табела на симболи на проектот

Вашиот проект има сопствен приватен симбол како и секоја компонента и може да извезе која било од своите класи во глобалната табела на симболи со помош на клучниот збор EXPORT.

Класите на проектот се вчитуваат по сите компоненти. Така, вашите извезени класи имаа предност пред извезените класи што се декларирани во која било компонента.

See also

Object, Class