Le te njohim pak me shume seicilin nga konceptet e prezantuar me siper.
Ne fillim sic thame ishte programimi dirket ne gjuhen e makines(bitet). Nje program i shkruar do te ngjante mjaft me kete:
CD03e3a20fa0aaaa99a889896655465
Shenim: Shemublli eshte paraqitur ne HEX dhe eshte nje trillim por aktualisht mund te edhe te kryejendonje veprim qofte te rrezikshem si fshirjen e te dhenave . Nese jeni kureshtar hapni nje redaktues(tekst editor) ne windows dhe ruani nje skedar me permbajtjen e me siperme ne prapashtesen .COM dhe ekzekutojeni.
Pastaj u krijua shtresa e assemblerit, por edhe kjo shtrese nuk eshte nje nga synimet e ketij leksioni po paraqes vetem nje preshkrim te shkurter te ketij ambienti programimi.
Ne gjuhen Assembler programi eshte nje seri, ne plote kutpimin e fjales, intsuksionesh qe perkthehen ne instruksione ose gjuhe kompjuteri. Pra, forma finale pas perpilimit te ketij kodi eshte ajo e prezantuar me siper. E vetmja menyre per te modifikuar rrjedhen e programit eshte midis kercimeve te mirefillta sipas adresave psh:
Nese kemi nje matrice dydimensionale ku ne kolonen e pare ndodhen adresat ose radha e ekzekutimit te instruksionit dhe ne kolonen e dyte kemi intruskionet e vetmja menyre per te ndryshuar rrjedhen e intruskioneve eshte krijimi i kercimeve sipas numrave te paracaktuar te adresave, ne kete rast numrat ne kolonen e pare.
Kodi:
| 0, 1 |
| 1, 234 |
| 2, 123123 |
| 3, 89 |
| 4, 43 |
| 5, 90 |
Modifikimi i rrjedhes se programit:
Kodi:
Fillim:
| 0, 1 |
| 1, 234 |
Mes:
| 2, 123123 |
Nese jo e vertete shko ne fund
| 3, 89 |
Nese e vertete shko ne fillim
| 4, 43 |
Fund:
| 5, 90 |
Per ata qe duan te shohin paksa kod assembler shembulli me poshte eshte nje Hello World ne Assembler qe mund te ekzekutohet ne ambiente te tipit UNIX dhe mund te perpilohet me NASM(mund ta gjeni ne faqen sourceforge.net):
Kodi:
BITS 32 ;per ambiente 32 bit qe jane normale sot
Jmp start
Shfaq:
Xor eax, eax ;bejme eax = 0
Pop edx ; kjo merr adresen ku ndodhen karakteret(eshte nje menyre e perdorur shume nga taktikat bufferoverflow )
Push 0x1 ;stdout
Push edx ; karkateret
Push 0xC ;gjatesia e karaktereve
Mov eax, 0x4 ;write() syscall
Push eax ;Kjo duhet ne *BSD
Int 0x80 ;ne ditet e sotme perdoret shume SYSENTER
Start:
Call shfaq
Db Hello World ;karakteret qe do te shfaqen ne ekran
Sic duket jo nje metode shume frytdhenese. Nje programues qe modifikon kodin e shkruar nga dikush tjeter duhet ta studioje ata ne menyre rrenjesore qe te jete i sigurte se modifikimi ne nje pjese te programit sdo te shkaktoje probleme ne pjese te tjera.
Gjithashtu, kjo gjuhe ne projekte te medha mund te krijoje nje rremuje te madhe pasi kemi vetem nje fushe dhe te gjithe variblat duhet te kene emra te ndryshem.
Gjithe sqarimin e gjuhes assembler e bera qe ta kuptoni pse ishin kaq te nevojshme gjuhe te nivleit me te larte dhe kjo do te qartesohet akoma me shume kur te mesoni te perdorni keto gjuhe.
Koncepti procedurial:
Sic ju kam treguar me pare dhe e konkretizova disi me siper, praktikat e deri atehershme ne programim ishin te kufizuara tek njerez me eksperience dhe conin ne kosto mjaft te medha per krijimin e programeve. Keshtu u desh te krijohej nje praktike e re me koncepte te reja ne kete fushe. Mbas kerkimeve u arrit ne konceptin e njohur sot si metoda proceduriale me gjuhe te nivelit te larte.
Nje nga perdorimet e para te kesaj praktike jane te lidhura me fillimet e sistemit te shfrytezimit(OS, mos u cudisni ky eshte emir i perdorur ne shkollat e informatikes) UNIX. Ky system ishte nga projektet e para te medha ku perdoreshin keto koncepte si dhe per te cilin u krijua nje nga gjuhet me te perdorura deri me sot C.
Ky kocept mundohet te permiresoje praktikat e meparshme me koncepte te reja ku nder me thelbesoret jane:
Fusha te shumta emrash,
Grupim te variablave ne menyre llogjike,
Grupim te instruksioneve ne menyre llogjike
Dhe me e rendesishmja nga te gjihta shprehja e ketyre instruksioneve ne nje menyre me te kuptueshme nga njerezit.
Cdo te thote fusha te shumta emrash?!
Sic pame gjate gjuhes assembler ne cdo cast te ekzekutimit te programit ne mund te kercenim ne cfaredolloj pjese te programit dhe te modifikonim cfaredolloj variable dhe kjo nenkuptonte nje hapesire te vetme veprimi.
Ne koceptin e ri te krijuar u pa e arsyeshme qe kjo liri te kufizohej(jo nga pikepamja e sigurise) duke krijuar ndarjen e instruksioneve dhe ndryshoreve ne menyre llogjike qe lehtesonin mirembajtjen dhe leximin e ketij kodi. Per me teper ky kod tani nuk do te shkruhej ne nje menyre shume te afert me makinen por duke ju afruar sa me shume shprehjeve llogjike te njerezve psh:
Zakonisht ne jemi mesuar te shprehim nje veprim matematikor vleredhenie te nje rezultati nga nje funkion ne formen y = f(x). Ky shenim u gjykua te mbartej dhe ne kete prezantim per shkak te lehtesimit te leximit te tij ndryshe nga forma e tij ne assembler qe eshte:
Push x
Call f(x)
Pop y.
Duke vazhduar me kete llogjike u mendua meqe funskioni f(x) mund te kete cfaredolloj veprimesh brenda te tij te konsiderohet si nje fushe e vecante qe te dallohet ne menyre te qarte si nje grumbull intruksionesh. Pra cdo ndryshore ose veprim qe behet brenda kesaj fushe te kete kuptim vetem ne kete fushe dhe e gjithcka do te arrihej me thirrjen f(x) qe mund te konsiderohet emir i grupimit dhe vlerat brenda kllapave informacioni qe i nevojitej kesaj fushe per te llogaritur nje rezultat.
Shenim: Per ata qe jane te njohur me Algjebren Lineare mund te bejne nje lidhje te drejtperdrejt midis fushave te percaktuara aty me fushat ne metoden proceduriale. Psh ne Algjeber fusha me elemente perberes 1, 2 qe permban veprimet +, - shprehet si x = { 1, 2 | +, -} XXX: verfikio kete menyre te shprehuri.
Per me teper llogjika e fushave mund ti atribuohet disa ndryshoreve qe sherbejne per te paraqitur vlera per nje objekt te caktuar.
Shenim: mos ngaterroni objektin e permendur ketu me ate ne konceptin OO.
Psh nese nje fushe me instruksionet perkatese llogarit me shume se dy vlera njekohesisht, kthen me shume se nje nga to mbas llogaritjes, ato mund ti grupohjme nen nje fushe te vetme dhe ti kthejme si nje te tere. Kur nevojitet te merret vlera perkatese e nje ndryshore menyra e adresimit behet duke vene emrin e fushes me pas veprimi qe tregon se deshirojme te shqyrtojme nje vlere brenda fushes dhe pastaj emrin e ndryshores perkatese, ose vleren e elementit perberes. Sigurisht qe fillimi i ketyre instuksioneve behet me kompromis.
Per tja u bere me konkrete le te shprehim kete koncept me ane te nje gjuhe qe quhet pseudo-kod. Ne kete pseudo-kod fillimi eshte fusha me etiketen Fillo.
Kodi:
HAPESIRE
Strukture pike
Fillo
NumerPlote x
NumerPlote y
Fund
Fushe Fillo(Pike z, Pike w)
Fillim
z = Mblidh(z, w)
Shfaq(z)
Fund
Fushe Mblidh(Pike z, Pike w)
Fillim
temp.x = z.x + w.x
temp.y = z.y + w.y
Kthe temp
Fund
Fushe Shfaq(Pike z)
Fillim
Sfhaqneekran z
Fund
FUND_HAPESIRE
Shenim:
Percaktimi I gjuhes pseudo-kod qe perdoret ne kete leksion.
Grupimi llogjik i disa instruksioneve dhe ndryshoreve behet me ane te etiketes fushe dhe te gjitha keto fusha gjenden Brenda nje hapesire te vetme. Nese ketij grupimi do ti japim informacion ne hyrje atehere do ta bejme kete duke perdorur te njejten simbolike si ne matematike duke perfshire informacionet e ndryshme midis kllapave rrethore dhe te ndara midis tyre me presje ,.
Kontektsi i kesaj fushe, hapesira llogjike, percaktohet me ane te fjaleve Fillim dhe Fund. Ku Fillim shenon fillimin e grupimit te instruksioneve dhe ndryshoreve dhe Fund mbylljen e ketij grupimi.
Per te gurpuar disa ndryshore perdorim fjalen Strukture. Edhe ketu fusha percaktohet nga fjalet Fillim dhe Fund.
Ky eshte pak a shume dhe koncepti procedurial. Sic mund ta dalloni qarte eshte mjaft me i qarte se ai ne gjuhen Assembler dhe per me teper me i lexueshem pasi per te ndryshuar nje pjese te programit mjafton te perqendrohesh brenda nje fushe dhe ske pse te studiosh te tere programin.
Koncepti OO:
Koncepti OO eshte avancimi i radhes ne fushen e informatikes. Ai eshte nje permiresim i disa cilesive te konceptit procedurial gjithmone ne drejtim te garantimit te nje cilesie mirembajtje dhe sigurie me te larte te programeve te modeluara sipas ketij koncepti.
Baza e tij eshte marre direkte nga modeli i jetes sone se perditshme.
Keshtu eshte dhe me I thjeshte per tu kuptuar. Ne boten tone te perditshme ne rrethohemi nga sende dhe gjallesa. Ku sendet kane cilesi dhe gjallesat pervec cilesive mund te kryjne dhe veprime dhe pikerisht ne baze te ketyre cilesive dhe veprimeve na ndihmojne ti dallojme ato site vecanta nga njera tjetra. Gjithashtu ne boten tone te perditshme shume objekte kane cilesi te njejta dhe dallojne vetem ne disa prej tyre, qe do te thote qe ka shume mundesi te kene nje prejardhje te njejte.
Meqe dhe programet qe krijoheshin duhet te modelonin keto sjellje dhe veprime u mendua qe ky do te ishte modeli me frytdhenes dhe me I thjeshte per tu konceptuar shprehur ne kod nga te gjithe. Gjithe kjo doli e vertete dhe ky model eshte nga me te perdorurit ne krijimin dhe modelimin e programeve sot.
Me siper ne konceptin procedurial shpjeguam konceptin e fushave dhe hapesirave, por aty ekzistoni n shume fusha dhe nje hapesire e vetme. Ky concept u cua me tej si nje rrjedhoje logjike e konceptit procedurial duke krijuar disa hapsira te ndryshme ku seicila prej tyre te kishte fusha e veta. Pra krijimi I shume hapesirave na jep mundesine te krijojme ndarje llogjike ne kodin tone qe te ngjasoje me inspirimin e ketij modeli te ri, botes sone te perditshme.
Per te bere me konkret sqarimin e mesiperm le te vazhdojme shembujt tona ne pseudo-kod. Sigurisht me pare le te mendohemi se cfare na duhet te shtojme ne sintaksen e pare per te mundur te paraqesim dhe kete concept me te. Po te mendohemi asgje e re nuk na nevojitet ne sintakse. Pasi modeli i ri vetem bent e mundur izolimin e metejshem te kodit duke evituar edhe perplasjet ne emra por duke na dhene dhe nje shkalle te dyte izolimi qe karakterizon objektet e botes reale.
Psh nese duam te modelojme nje gjarper dhe nje lepur ne pseudo-kod kjo do te shprehej:
Kodi:
HAPESIRE gjarper
NumerPlote gjatesi_gjarper
Funskion Zvarritu(NumerPlote distance)
Fillo
Leviz(distance)
Fund
FUND_HAPESIRE gjarper
HAPESIRE lepur
NumerPlote peshanekg
Funskion Vrapo(NumerPlote distance)
Fillo
Leviz_shpejt(distance)
Fund
FUND_HAPESIRE lepur
HAPESIRE dite_normale
Gjarper.zvarritu(10m)
Lepur.vrapo(100m)
FUND_HAPESIRE dite_normale
Normalisht do te mendoni more per kaq te jene lodhur ato kokat qe e kane shpikur kete model te lakuar gjithandej?!
Sigurisht qe jo per arsyen e vetme qe bota nuk eshte kaq e thjeshte dhe per me teper qe duhej ofruar dicka me suhme programuesce .
Por kjo do te vazhdoje ne postimin e ardhshem .
Krijoni Kontakt