Програмирање-DELPHI :: E-ZNANJE


Подручја рада
Претрага
Програмирање-DELPHI



DELPHY КАО ОБЈЕКТНО ОРИЈЕНТИСАН ЈЕЗИК

КЛАСЕ

Класе су структуирани типови података чији елементи могу да буду подаци међусобно различитих типова и потпрограми. Елементи класа називају се чланови класа.

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

Објекти у објектно оријентисаном програмирању имају своја стања и методе помоћу којих могу да се мењају стања или да се добијају информације о тренутном стању објекта.

Чланови класа могу да буду подаци и програми. Тренутне вредности података чланова представљају тренутно стање објекта. Потпрограми (функције и процедуре) чланови представљају методе за промену стања објекта.

ДЕФИНИСАЊЕ КЛАСЕ

Општи облик типа класе је:

type

TIme klase = class ( TImeOsnovneKlase)

Član Član ... Član

private

Član Član ... Član

protected

Član Član ... Član

public

Član Član ... Član

published

Član Član ... Član

end;

Član= ImeČlana, ImeČlana, ... , ImeČlana: ImeTipa; ili

ZaglavljePotprogramaČlana

Где су: TIme klase -идентификатор за именовање класе као типа податка, TimeOsnovneKlase – идентификатор типа основне класе, ImeČlana – идентификатор за именовање података члана класе, ImeTipa – идентификатор типа податка чланова који се налазе испред две тачке, а ZaglavljePotprogramaČlana –декларација потпрограма члана класе.

Део ( TimeOsnovneKlase ) може да се изостави. Подразумевана основна класа за све класе у Delphy - ју је класа То bject.

Могу се поставити ограничења из ког дела програмског система могу непосредно да се користе поједини чланови класа. Постоје четири категорије чланова класа у односу на степен заштите приступања:

· приватни чланови ( private ) – могу да се користе само унутар програмског модула у коме је дефинисана и сама класа;

· заштићени чланови ( protected ) – могу да се користе унутар модула посматране класе и унутар свих модула који садрже дефиниције класа које су изведене из посматране класе;

· јавни чланови (public) – могу да се користе без ограничења из свих програмских модула датог програмског система;

· публиковани чланови (published) – јавни чланови чије почетне вредности могу да се поставе у прозору инспектора објекта у току пројектовања апликације.

Сви чланови пре прве од наведених директива private , protected , public или published подразумевано су публиковани чланови. Значи да имају најмањи могући степен заштите.

Пример: дефинисање класе за обраду календарског датума:

type

Tdatum = class

private

Dan, Mes, God: Integer;

public

procedure PraviDatum (D, M, G: Integer);

procedure UzmiDatum (var D, M, G : Integer);

end;

ДЕФИНИСАЊЕ ПРИМЕРАКА КЛАСА

За разлику од осталих типова података, примерци класа смештају се искључиво у динамичку зону меморије. Помоћу идентификатора могу да се обележавају само показивачи на саме објекте.

На пример, помоћу :

Var

Datum: TDatum;

Не дефинише се објекат типа TDatum , већ само показивач на објекте тог типа. Показивач у Delphy - ју ни приликом дефинисања, ни приликом коришћења не треба обележавати (помоћу ^). Дефиниција променљиве подразумева доделу меморијског простора. Овом дефиницијом простор се резервише само за смештање адресе објекта, дакле за показивач на објекат.

Простор у динамичкој меморији мора да уради сам програмер. У ту сврху, у свакој класи аутоматски постоје две методе:

· Функција Create за додељивање меморије

· Процедура Free за ослобађање меморије.

Ове методе се наслеђују из класе То bject , заједничког претка свих класа у Delphy - ју.

Променљиве класних типова су уствари показивачи на део меморије где се налази садржај објекта.

КОРИШЋЕЊЕ ЧЛАНОВА КЛАСА

Општи облик приступања члановима објекта је:

Objekat.ImeČlana ili

Objekat.ImeMetode (Arg, Arg, .... , Arg) ili

with Objekat do Naredba

Пример за коришћење чланова раније дефонисаног објекта Datum типа TDatum:

v ar

Dan, Ме s , God : Integer;

begin

Datum := Tdatum.Create; {Додела меморије }

{Samo unutar modula sa definicijom klase : }

Datum.Dan := 12;

Datum.Mesec := 5;

Datum.Godina := 2003;

Dan:= Datum.Dan;

Mes:= Datum.Mes;

God:= Datum.God;

{U bilo kom delu programa : }

Datum.PraviDatum (12, 5, 2003);

Datum.UzmiDatum (Dan, Mes, God);

Datum.Free {Ослобађање меморије }

end

ДЕФИНИСАЊЕ МЕТОДА

Методе се дефинишу на исти начин као и обичне функције или процедуре. Једино испред имена процедуре треба да стоји идентификатор класе којој припада метода која се дефинише. Тиме се досег идентификатора чланова класе проширује на целу дефиницију методе.

Унутар методе, адреса текућег објекта налази се у показивачу чији је идентификатор Self. По потреби овај показивач може да се користи за приступање члановима скривеног објекта.

Пример за дефинисање методе за раније дефинисану класу TDatum :

procedure TDatum.PraviDatum (D, M, G: Integer)

var

Greska: Boolean;

begin

{ Провера да ли представљају исправан датум. }

if not Greska then

begin

Dan: = D; Mes:=M; God:= G { ili: Self.Dan := ...}

end

end ;

procedure TDatum. UzmiDatum (var D, M, G: Integer)

begin

D:= Dan, M:= Mes; G:= God

end ;

СВОЈСТВА

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

Коришћење својстава за време извршавања програма може да се ограничава само на смештање вредности у њих ( write only ), или само на узимање вредности из њих ( read only).

Чињеница да се својствима може приступити и позивањем неких метода, омогућава састављање класа у којима се, доделом вредности оператором := неком својству, које је и само типа неке класе, копира садржај целокупног изворишног објекта у одредишно својство. То је случај са својствима већине компонената које се користе у Delphy – ју.

ИЗВЕДЕНЕ КЛАСЕ

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

Групе објеката у Delphy – ју представљају се класама. Подгрупе објеката се описују изведеним класама. Полазна класа, која описује општију групу, тада се назива основна класа.

У Delphy – ју постоји само једна основна класа, ТО bject . Све остале класе се изводе из ње, непосредно или посредно. Наиме, ако се у дефиницији класе не наведе основна класа, подразумева се ТО bject .

НАСЛЕЂИВАЊЕ

Објекти у изведеној класи поседују све особине своје основне класе, као и неке додатне, специфичне особине. На пример: особине геометријских фигура у равни могу бити њихови положаји и њихове боје. Осим ових особина, троуглови у равни имају и дужине својих страница.

Каже се да изведена класа наслеђује све чланове ( податке и методе) своје основне класе. Ти чланови унутар изведене класе могу да се користе равноправно са специфичним члановима изведене класе.

Ако се идентификатор наслеђеног члана редефинише унутар изведене класе, одговарајући наслеђени члан постаје невидљив. Другим речима, важиће локална дефиниција из изведене класе.

Због механизма наслеђивања, основна класа се често назива класа предак, а изведена класа потомак. Класа ТО bject је прапредак свих класа у хијерархији свих класа у Delphy – ју.

Пример: дефинисање изведене класе

type

Tosnovna = class {Definicija osnovne klase.}

A : Integer;

end;

TIzvedena = class (TOsnovna) {Definicija izvedene klase.}

B : Integer;

end;

var

Osnovna : TOsnovna; {Primerak osnovne klase.}

Izvedena : TIzvedena; {Primerak izvedene klase.}

begin

Osnovna := TOsnovna. Create; {Dodela memorije osnovnoj klasi.}

Izvedena := TIzvedena.Create; {Dodela memorije izvedenoj klasi.}

Osnovna. A := 55; {Pristup članu osnovne klase}

Izvedena. A := 13; {Pristup članovima izvedene klase}

Izvedena.B := 61;

Free : Osnovna; {Oslobađanje memorije}

Free : Izvedena

end

KO МПАТИБИЛНОСТ ТИПОВА

У Delphy – ју постоји компатибилност типова за доделу вредности од класа потомака према класама предака. То значи да објекту (показивачу) типа класе претка увек може да се додели вредност објекта ( показивача) било ког типа класе потомка ( непосредног или посредног, преко произвољног броја генерација). Обрнуто никада није могуће.

Пример:

var

NekiObjekat : TosnovnaKlasa;

begin

NekiObjekat : TizvedenaKlasa.Create;

end

Када се зна да идентификатор основне класе представља објекат изведене класе, може да се прогласи да има тип изведене класе помоћу оператора as (као). Општи облик израза је:

ImeOsnObjekta as TimeIzvKlase

Где су : ImeOsnObjekta – идентификатор објекта типа основне класе, а TimeIzvKlase – идентификатор изведене класе у односу на тип првог операнда.

Објекат представљен идентификатором ImeOsnObjekta мора да буде типа TimeIzvKlase или из њега изведене класе.

Треба нагласити да се оператором as не врши никаква трансформација првог операнда, већ се само саопштава преводиоцу да објекат с леве странетреба да третира као да има тип означен другим операндом. На пример, треба да дозволи приступ члановима који, формално гледано, не постоје у првом операнду. Ако се у време извршавања утврди некоректно коришћење оператора as , пријавиће се изузетак (грешка) и прекинуће се програм.

Као заштиту од неодговарајућег коришћења оператора as , Delphy нуди оператор is за испитивање типа неког објекта за време избвршавања програма.

Пример руковаоца догађајима који опслужује догађај притисак мишем за више дугмади и који у натпис Oznaka смешта натпис притиснутог дугмета:

procedure Tobrazac.DugmeClick (Sender : TObject);

begin

if Sender is Tbutton then

Oznaka.Caption :=(Sender as Tbutton) . Caption

end;

РУКОВАЊЕ ИЗУЗЕЦИМА

Руковање изузецима дефинише се наредбом try (пробај), чији се општи облик:

try

Naredba; Naredba; ... ; Naredba

except

on Argument do Rukovalac;

on Argument do Rukovalac;

...

on Argument do Rukovalac

end

Argument = Ime argumenta: EklasaIzuzetaka

Rukovalac = Naredba

Наредбе try могу да се уклапају . Наиме, међу наредбама између службених речи try i except mogu da budu druge naredbe могу да буду друге наредбе (непосредно уклапање). Друга могућност је да се утим наредбама позивају потпрограми који садрже даље наредбе try (посредно уклапање).

Прво се извршавају наредбе у делу try ... е xcept . Ако се без грешке дође до речи е xcept , скочи се на завршну реч end , чиме се прескоче сви руковаоци изузецима.

Ако у току извршавања неке наредбе у делу try ... е xcept настане грешка, преостале наредбе се прескоче и у делу иза речи е xcept тражи се надлежни руковалац на основу типа изузетка. Одабере се први први руковалац по редоследу навођења за који је тип аргумента (Е KlasaIzuzetaka) компатибилан са типом насталог изузетка. Због тога прво треба навести руковаоце за изузетке типа класе претка. Руковалац за класу претка може да опслужи изузетке свих класа потомака.

После избора руковаоца на основу типа изузетка, извршава се наредба која чини тело руковаоца. Затим се објекат изузетка аутоматски уништи, и сматра се да је изузетак обрађен. Програм се наставља првом наредбом иза текуће наредбе try .

Руковалац изузецима може да проследи обрађивани изузетак на претходни ниво уклопљених наредаба try . То се постиже наредбом raise без аргумената. На тај начин се објекат изузетка очува и приступа тражењу руковаоца који може да прихвати тај изузетак на претходном нивоу.

У случају да се не нађе руковалац који би могао да се одабере за извршавање ни на основном нивоу, изузетак се прослеђује Delphy – ју , који ће приказати прозор за дијалог с поруком о грешци.

Пример: заштита операције дељења од дељења нулом

try

C := A div B

except

on EDivByZero do

if A = 0 then C:= 0

else if A > 0 then C:= 1E38

else C:= - 1E38

end;

ЗАШТИТА КОРИШЋЕЊА РЕСУРСА

Дужност је програмера да све заузете ресурсе (динамички додељену меморију, датотеку, итд.)

Ослободи када му више нису потребни. Ако се појави изузетак, може се десити да наредбе за ослобађање заузетог ресурса буду прескочене. Delphy нуди механизам заштите који то спречава.

Сигурно ослобађање ресурса обезбеђује се другим обликом наредбе try ( finally – на крају):

try

Naredba; Naredba; ... ; Naredba

finally

Naredba; Naredba; ... ; Naredba

end

Наредбе које чине садржај наредбе try извршавају се редом, и ако се појави изузетак, све се извршавају, укључујући оне иза службене речи finally .

Ако се током извршавања наредаба у делу try ... finally појави изузетак, преостале наредбе тог дела се прескоче и извршевање се наставља иза службене речи finally .

На пример:

МојО bjekat := TmojaKlasa. Create;

try

{Obrada gde može nastati izuzetak}

Finally

MojObjekat. Free;

end ;