2024(e)ko apirilaren 8(a), astelehena

32. Ariketa: unitateak (I)

ZER DAKIDAN:
Karpeta batean kokaturik dagoen .PAS iturburu-programa batetik abiatuta .EXE programa exekutagarria lortzen ikasi dut, badakit ere .EXE programa exekutagarria karpeta berean sortuko dela, hots, iturburu-programaren karpetan.



ZER IKASIKO DUDAN:
Unitate bat sortzen ikasiko dut. Unitate bat ezin daiteke exekutatu. Unitate batek bi zati ditu: INTERFACE zati publikoa eta IMPLEMENTATION zati pribatua.





UNITATE BATEN BARNE EGITURA 

Unitateak direla eta, gaiaren nondik norako teorikoak Konpiladorea eta estekatzailea artikuluan biltzen dira eta oinarrizko adibide bat Unitateak artikuluan erakusten da, beste bi adibide aberatsago 10. astea | itsas-bataila (I) artikuluan eta 10. astea | itsas-bataila (II) artikuluan kontsulta daitezke.

Orain unitate bat sortzen ikasiko dugu. Unitate batek bi zati ditu, zati publikoa eta zati pribatua:

  • INTERFACE, unitatearen zati publikoa da. Hemen adierazten diren elementu guztiak bezero-programak erabili ahal izango ditu
  • IMPLEMENTATION, unitatearen zati pribatua da. Hemen dagoena bezero-programak ezin du atzitu. IMPLEMENTATION zati pribatuan garatzen da INTERFACE zati publikoan adierazten dena

Gure unitatearen iturburu-programa unitatea.pas izango da, eta konpilatu ondoren unitatea.ow eta unitatea.ppw fitxategiak lortuko ditugu.




unitatea.pas

Unitate bat programatuko dugu bere barnean bi prozedura izango dituena, prozedura batek datu-fitxategi bat sortzeko balio du eta bigarren prozedurak datu-fitxategiaren edukia pantailaratzeko balio du. Unitateari unitatea deituko diogu eta, horregatik, unitatearen iturburu-programari unitatea.pas deituko diogu, bere kodea ondoko hau da: 

{================================================unitatearen hasiera=======}
UNIT unitatea ;

{------------------------------------------------zati publikoa-------------}
INTERFACE

type
integer = longint ; { INTEGER-entzat 4 byte }
tfrAbiadurak = file of real ;
tsKate250 = string[250] ;

procedure UNITATEA_Real_FitxategiaSortu(sFitxIzen: tsKate250) ;
procedure UNITATEA_Real_FitxategiaIkusi(sFitxIzen: tsKate250) ;


{------------------------------------------------zati pribatua-------------}
IMPLEMENTATION

procedure UNITATEA_Real_FitxategiaSortu(sFitxIzen: tsKate250) ;
var
f: tfrAbiadurak ;
rAbiadura: real ;
iZenbat, k: integer ;
begin
assign(f, sFitxIzen) ;
rewrite(f) ;

repeat
write('Zenbat auto izango dira? ') ;
readln(iZenbat) ;
until iZenbat > 0 ;

for k:=1 to iZenbat do
begin
write(k, '. abiadura adierazten duen zenbaki erreala eman: ') ;
readln(rAbiadura) ;
write(f, rAbiadura) ;
end ;

close(f) ;
end ;


procedure UNITATEA_Real_FitxategiaIkusi(sFitxIzen: tsKate250) ;
var
f: tfrAbiadurak ;
rAbiadura: real ;
begin
assign(f, sFitxIzen) ;
reset(f) ;

while not eof(f) do
begin
read(f, rAbiadura) ;
writeln(filepos(f), '. autoaren abiadura = ', rAbiadura:0:2, ' Km/h') ;
end ;

close(f) ;
end ;

END.
{================================================unitatearen amaiera=======}

Unitateren egiturak bi zati ditu, bat publikoa eta bestea probatua. Zati publikoa INTERFACE blokean zehazten da, deklarazio bat besterik ez da, eta programa-bezeroak ezagutu behar du derrigorrez. Zati pribatua IMPLEMENTATION blokean garatzen da eta bere kodea bezeroak ez du zertan ezagutu behar.

Adibidearen unitatea.pas iturburu-programa konpilatu ondoren unitatea.ow objektu-programa eta unitatea.ppw unitate konpilatua lortzen dira. Berez, unitate bat ezin da exekutatu, bere barneko bi prozedurak beste programa batek (unitatearen bezeroak) erabiliko ditu. 





Bezeroa.pas

Orain programa bat idatziko dugu unitatea izeneko unitatea erabiliko duena, programa honi Bezeroa.pas deituko diogu, eta bere kodea programatuko duen programatzaileak unitatearen interfazea ezagutu behar du (INTERFACE blokea ezagutu behar du):

{---------------------------------------------------------------------------}  
INTERFACE

type
integer = longint ; { INTEGER-entzat 4 byte }
tfrAbiadurak = file of real ;
tsKate250 = string[250] ;

procedure UNITATEA_Real_FitxategiaSortu(sFitxIzen: tsKate250) ;
procedure UNITATEA_Real_FitxategiaIkusi(sFitxIzen: tsKate250) ;
{---------------------------------------------------------------------------} 

Bezeroa.pas programan UNITATEA_Real_FitxategiaSortu prozedura edo UNITATEA_Real_FitxategiaIkusi prozedura edo tsKate250 datu-mota edo tfrAbiadurak datu-mota  erabili nahi badira, lehendik unitatea delako unitateaz baliatuko dela adierazi behar du programatzaileak uses klausularen bidez. Ikusi Bezeroa.pas iturburu-programaren kodeak zer nola hasiera izan behar duen:

{---------------------------------------------------------------------
Bezeroak ezagutzen duena:
---------------------------------------------------------------------
INTERFACE

type
integer = longint ; (* INTEGER-entzat 4 byte erabili *)
tfrAbiadurak = file of real ;
tsKate250 = string[250] ;

procedure UNITATEA_Real_FitxategiaSortu(sFitxIzen: tsKate250) ;
procedure UNITATEA_Real_FitxategiaIkusi(sFitxIzen: tsKate250) ;
----------------------------------------------------------------------}

program Bezeroa ;

uses
unitatea,

...

Bezeroa.exe programa exekutagarria eskuratzeko, Bezeroa.pas programaren iturburu-kodea konpilatu beharra dago. Horretarako, Bezeroa.pas programaren iturburu-kodea eta unitatea izeneko unitatea karpeta berean kokatu behar ditugu. Gure helburua den Bezeroa.exe programa exekutagarria eskuratzeko, hiru fitxategi hauek beharko ditugu:

  1. Bezeroa.pas programaren iturburu-kodea,
  2. unitatearen unitate.ow objektu-programa eta
  3. unitatearen unitate.ppw unitate konpilatua

Azken bi fitxategiak unitate.pas unitatearen konpilaziotik eratorriak dira. Aipatutako hiru fitxategi horiek karpeta berean kokatu behar dira Bezeroa.exe programa exekutagarria lortzearren.



 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.