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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | {================================================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):
1 2 3 4 5 6 7 8 9 10 11 12 | {---------------------------------------------------------------------------} 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | {--------------------------------------------------------------------- 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:
- Bezeroa.pas programaren iturburu-kodea,
- unitatearen unitate.ow objektu-programa eta
- 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.