a c# programozási nyelv a felsıoktatásban
DESCRIPTION
C# CsharpTRANSCRIPT
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
1/312
1/312
A C# programozsi nyelv a felsoktatsbanProgramozs tanknyv
Dr. Kovcs EmdHernyk ZoltnRadvnyi TiborKirly Roland
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
2/312
2/312
Tartalom
Tartalom .....................................................................................................................................2
Trtneti ttekint ...................................................................................................................... 7Els genercis programozsi nyelvek: GPI KD........................................................... 8Msodik genercis programozsi nyelvek: ASSEMBLY................................................. 9Vltozk az assembly nyelvben ........................................................................................... 10Vezrlsi szerkezetek az assembly nyelvben....................................................................... 13Eljrshvs az assembly nyelvben ......................................................................................14Tbb modulbl ll programok az assembly nyelvben ....................................................... 14Harmadik genercis programozsi nyelvek: PROCEDURLIS NYELVEK ................ 15
Az els nagyon fontos vltozs az eljrs fogalmnak bevezetse............................... 15A msik fontos vltozs a vltoz fogalmnak finomodsa: ...........................................15A harmadik fontos vltozs a tpusrendszer bvthetsge...........................................16
A negyedik fontos vltozs a vezrlsi szerkezetek bevezetse ................................... 17Az tdik fontos vltozs a hardware fggetlensg...................................................... 17
Hrom-s-fl genercis programozsi nyelvek: OBJEKTUM ORIENTLT NYELVEK 18
Negyedik genercis programozsi nyelvek: SPECIALIZLT NYELVEK ..................18tdik genercis programozsi nyelvek: MESTERSGES INTELLIGENCIA
NYELVEK 18A programozsi nyelvek csoportostsa ............................................................................... 18A programozsi nyelveket ms szempontbl vizsglva egy msik csoportosts fedezhetfel:......................................................................................................................................... 18
Imperatv (procedurlis) nyelvek: .................................................................................... 18
Applikatv (funkcionlis) nyelvek:...................................................................................19Logikai nyelvek:............................................................................................................... 19Objektum-orientlt nyelvek: ............................................................................................ 19
Futtat rendszerek ................................................................................................................19Bevezets A Microsoft.NET ................................................................................................. 22Hell Vilg! .......................................................................................................................... 28
Feladatok: ............................................................................................................................. 36Alap I/O ................................................................................................................................ 37
Az alapvet Input/Output ..................................................................................................... 38Programozsi feladatok ........................................................................................................ 53
Szelekci alapszint................................................................................................................ 54A logikai tpus vltoz ....................................................................................................... 55A feltteles utasts...............................................................................................................56Az elgazs........................................................................................................................... 57
Nhny egyszer pldt a szelekci alkalmazsra. ............................................................ 58Dntsk el egy szmrl, hogy pros-e!............................................................................ 58Oldjuk meg az egytthatival adott msodfok egyenletet! ............................................ 59
Megoldsra ajnlott feladatok .............................................................................................. 60Elrt lpsszm ciklusok....................................................................................................... 61
Feladatok: ............................................................................................................................. 69Vektorok!.............................................................................................................................. 71
Vektorok kezelse ................................................................................................................72Tmb deklarlsa .............................................................................................................72
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
3/312
3/312
A tmb elemeinek elrse ................................................................................................ 73A tmb elemeinek rendezse, keress a tmbben ............................................................ 74Vektor feltltse billentyzetrl .......................................................................................78Vektor feltltse vletlenszm-genertorral..................................................................... 80
N elem vektorok kezelse................................................................................................... 81
sszegzs ......................................................................................................................... 81Maximum s minimum kivlasztsa................................................................................ 82Eldnts............................................................................................................................ 83Kivlogats....................................................................................................................... 84
Dinamikus mret vektorok ................................................................................................. 86Az ArrayList fbb jellemzi: ........................................................................................... 86Az ArrayList fbb metdusai:.......................................................................................... 86Feladatok dinamikus tmbre ............................................................................................ 87
Tbbdimenzis tmbk........................................................................................................ 92Tovbbi megoldsra ajnlott feladatok ................................................................................ 96
Logikai ciklusok ................................................................................................................... 99
A ciklusok .......................................................................................................................... 100A while ciklus.................................................................................................................100A break ........................................................................................................................... 104A continue ...................................................................................................................... 105A do while ciklus............................................................................................................105A foreach ........................................................................................................................ 106
Programozsi feladatok ...................................................................................................... 108Szelekci emelt szint! ......................................................................................................... 109
Szelekci haladknak.........................................................................................................110Tovbbi megoldsra ajnlott feladatok .............................................................................. 116
Stringek kezelse.................................................................................................................... 117A string tpus vltoz ....................................................................................................... 118A string-ek mint vektorok .................................................................................................. 123Programozsi feladatok ...................................................................................................... 126
Eljrsok alapfokon................................................................................................................ 127Feladatok: ........................................................................................................................... 133
Fggvnyek rsa....................................................................................................................136Feladatok: ........................................................................................................................... 141
Eljrsok s fggvnyek kzpfokon..................................................................................... 142Feladatok: ........................................................................................................................... 147
Eljrsok s fggvnyek felsfokon ......................................................................................148
WinForm.............................................................................................................................156A Windows Formok ........................................................................................................... 157Hibakezels ........................................................................................................................ 157
A try s a catch ...............................................................................................................157A finally blokk ...............................................................................................................160Kivtelek feldobsa ........................................................................................................ 161Checked s unchecked ................................................................................................... 162
Programozsi feladatok ...................................................................................................... 163j Projekt ksztse ............................................................................................................164Feladatok ............................................................................................................................ 170A lthat komponensek, a kontrollok ................................................................................ 171
Button (Gomb) ................................................................................................................... 171Label, Linklabel .................................................................................................................172
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
4/312
4/312
Textbox...............................................................................................................................173CheckBox........................................................................................................................... 174GroupBox........................................................................................................................... 175MainMenu .......................................................................................................................... 176RadioButton ....................................................................................................................... 178
ComboBox ......................................................................................................................... 179ListView............................................................................................................................. 183TreeView............................................................................................................................ 186TabControl ......................................................................................................................... 189DateTimePicker komponens .............................................................................................. 191MonthCalendar komponens ............................................................................................... 194HorizontalScrollBar s VerticalScrollBar komponensek................................................... 197Listbox................................................................................................................................ 199Panel ...................................................................................................................................200PictureBox.......................................................................................................................... 201Timer komponens...............................................................................................................202
NumericUpDown ...............................................................................................................203ProgressBar ........................................................................................................................ 205TrackBar ellenrzs............................................................................................................206HelpProvider ...................................................................................................................... 207ImageList............................................................................................................................ 211RichTextBox ...................................................................................................................... 215ToolTip...............................................................................................................................218ContextMenu...................................................................................................................... 220
NotifyIcon .......................................................................................................................... 222StatusBar ............................................................................................................................ 223ToolBar............................................................................................................................... 225Formok hasznlata, formok tpusai ....................................................................................228
A rendszer ltal biztostott zenetablakok hasznlata.................................................... 228Modlis s nem modlis formok....................................................................................231
Dialgusok ......................................................................................................................... 234A fontDialog................................................................................................................... 234ColorDialog.................................................................................................................... 236PrintPreviewDialog ........................................................................................................ 237Fjl megnyitsa s mentse ............................................................................................ 238MessageBox ................................................................................................................... 238
Feladatok ............................................................................................................................ 239
Tbbszl programozs......................................................................................................240Feladatok ............................................................................................................................ 243Grafikai alapok! ..................................................................................................................244
A grafikus szoftver .............................................................................................................245GDI+................................................................................................................................... 247GDI+ osztly s interfsz a .NET-ben ............................................................................... 247
Nvterek, namespaces .................................................................................................... 247A System.Drawing nvtr osztlyai s struktri .......................................................... 248A Graphics osztly ......................................................................................................... 248
A GDI+ jdonsgai ............................................................................................................250Gazdagabb sznkezels s szntmenetek lehetsge..................................................... 250
Antialising tmogats..................................................................................................... 250Cardinal Spline-ok..........................................................................................................251
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
5/312
5/312
Mtrix transzformcik.................................................................................................. 252Sklzhat rgik (Scalable Regions)............................................................................ 252Alpha Blending ..............................................................................................................252Sokkfle grafikus fjl formtum tmogatsa (Support for Multiple-Image Formats): .. 253
Nhny vltozs a GDI+ porgramozsban......................................................................... 254
Vonal rajzols GDI+ hasznlatval................................................................................ 254Metdusok fellbrlsa (Method Overloading)............................................................ 255Tbb nincs a grafikus kurzornak aktulis pozicija (Current Position) ....................... 255Sztvlasztott metdus a rajzolsra (Draw) s a kitltsre (Fill) ................................... 256Regik ltrehozsa ......................................................................................................... 257
Interpolci s approximci ............................................................................................. 261Hermit-grbe ...................................................................................................................... 261Bzier-grbe....................................................................................................................... 262
de Casteljau-algoritmus..................................................................................................262A Bzier-grbe ellltsa Bernstein-polinommal......................................................... 263Bzier-grbe nhny tulajdonsgai ................................................................................ 263
Harmadfo Bzier-grbk.............................................................................................. 264Kapcsold Bzier-grbk ............................................................................................. 265Cardinal spline................................................................................................................267
Pontranszformcik............................................................................................................271Homogn koordintk ........................................................................................................ 271
ttrs hagyomnyos Descartes koordintkrl homogn koordintkra:....................271Visszatrs homogn koordintkrl Descartes koordintkra: .................................... 271
Ponttranszformcik........................................................................................................... 271Els plda: ...................................................................................................................... 272Msodik plda: ...............................................................................................................273
GDI+ transzformcis metdusai....................................................................................... 274Eltols:............................................................................................................................275Elforgats az orig krl alfa szggel pozitv irnyba:..................................................275Tkrzs:........................................................................................................................ 275Sklzs:.........................................................................................................................276
Nyrs: ............................................................................................................................ 276A koordinta rendszer transzformlsa s a Path hasznlata .............................................278Grafikus kontnerek ...........................................................................................................279
Adatok kezelse!.................................................................................................................281Az ADO.NET Adatkezels C#-ban ................................................................................... 282SQL Server Enterprise Manager Az SQL Server s az MMC...........................................282
j elemek ltrehozsa .................................................................................................... 283MS SQL szerver elrse C#-bl .........................................................................................288Bevezets az ADO.NET kapcsoldsi eszkzeihez....................................................... 288Connection String........................................................................................................... 288Kapcsolat ltrehozsa s megszntetse ........................................................................ 288sszetett kapcsolatok (Pooling Connections) ................................................................289Tranzakcik.................................................................................................................... 289Bellthat kapcsolat tulajdonsgok............................................................................... 289Kapcsolatok tervezskor a Server Explorer-ben ............................................................ 290Kapcsolat tervezsi eszkzk Visual Studio-ban........................................................... 290Kapcsolat ltrehozsa SQL Server-hez ADO.NET hasznlatval ................................. 290
Kapcsolat bontsa........................................................................................................... 291ADO.NET kapcsolat objektumok ltrehozsa ...............................................................291
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
6/312
6/312
Kapcsolat ltrehozsa..................................................................................................... 291Kapcsolat ltrehozsa SQL Server-hez .......................................................................... 292SQL Server kapcsolat Server Explorer-ben ...................................................................292
Kapcsolds SQL Server-hez az alkalmazsunkbl .......................................................... 292Kapcsolds ltrehozsa vizulis eszkzkkel ..............................................................292
Server Explorer-bl ........................................................................................................ 292A DataTable osztly ...........................................................................................................293Szrs s rendezs az ADO.NET-ben............................................................................293Szrs s rendezs a DataView objektum segtsgvel ................................................. 295Az alaprtelmezett nzet ................................................................................................ 296A RowFilter tulajdonsg ................................................................................................ 296Rendezs a DataViewban............................................................................................... 296
Trolt eljrsok...................................................................................................................302Mi is az a Transact-SQL?............................................................................................... 302Alapvet programozsi szerkezetek:.............................................................................. 302Vltozk ......................................................................................................................... 302
Feltteles szerkezetek hasznlata ...................................................................................303CASE utastsok.............................................................................................................304While ciklusok................................................................................................................ 304A CONTINUE utasts................................................................................................... 305A BREAK utasts ......................................................................................................... 305RETURN utastsok hasznlata .....................................................................................305WAITFOR utastsok hasznlata................................................................................... 305RAISERROR utastsok hasznlata............................................................................... 305KURZOROK hasznlata ................................................................................................ 306
Mint a pldaprogramban is lthat, a vltozk tpusa meg kell, hogy egyezzen a kinyertsorok oszlopainak tpusval. .............................................................................................. 307
Fggvnyek hasznlata .................................................................................................. 307Felhasznli fggvnyek ltrehozsa............................................................................. 308Helyben kifejtett tblartk fggvnyek ...................................................................... 309Tbbutastsos tblartk fggvnyek ......................................................................... 309Trolt eljrsok ltrehozsa:........................................................................................... 310Trolt eljrsok vgrehajtsa:......................................................................................... 311Kioldk........................................................................................................................... 311
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
7/312
7/312
Programozs tanknyv
I. Fejezet
Trtneti ttekint
Hernyk Zoltn
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
8/312
8/312
A szmtstechnika trtnetnek egyik fontos fejezete a programozsi nyelvekkialakulsa, trtnete, fejldse. A fejlds sorn a programozsi nyelvekszintaktikja vltozott meg, elsegtve a programozsi hibk minl korbban(lehetleg fordtsi idben) trtn felfedezst. Egy igazn j programozsi nyelvennagyon sok hibafajta eleve el sem kvethet, msok knnyen elkerlhetek.
Egy j programozsi nyelv sokfle jellemzvel rendelkezik. Emeljnk ki nhnyatezek kzl:- knnyen elsajtthat alapelvekkel rendelkezik,- knnyen ttekinthet forrskd,- knnyen mdosthat, bvthet a forrskd,- nehz hibt elkvetni kdols kzben,- knnyen dokumentlhat a kd.
A programozsi nyelveket genercikba lehet sorolni a fejlds bizonyos szakaszaitfigyelembe vve:
Els genercis programozsi nyelvek: GPI KD
A szmtgpek a NEUMANN elveknek megfelelen a vgrehajtand program-utastsokat a memriban troljk. A memria ma mr alapveten byte szervezs,egyetlen nagy mret byte-sorozatnak tekinthet. Minden byte egy egsz szmotjellhet, 0..255 rtktartomnybl. Ebbl az kvetkezik, hogy a mikroprocesszoralapveten az utastsokat is szmoknak tekinti.
A gpi kd programozsi nyelvben az utastsokat szmkdok jellik. Amennyibenaz utastsnak vannak paramterei, gy azokat is szmknt kell megadni. A gpikdban ltez fogalom a regiszter, amely a mikroprocesszoron belli trlrekesztjell. Egy ilyen rekesz tartalma egy egsz szm lehet. A regisztereknek kttt nevkvan, pl. AX, BX, CX, DX. A 32 bites processzorokon a regiszterek nevei felvettk azE eltagot (Extended AX regiszter EAX). Arnylag kevs regiszter llrendelkezsre (kevesebb mint 20 darab), s tbbnek specilis feladat volt, ezrt nemlehetett akrmilyen clra felhasznlni. Kt szm sszeadst az albbi mdon kellvgrehajtani:
1. Olvassuk be az els szmot az EAX regiszterbe a memribl.
2. Az EAX regiszterhez adjuk hozz a msodik szmot.3. Az eredmnyt (az EAX regiszter j rtkt) troljuk a memria egy msik pontjn.
1. bra
Az utastsokat szmkdok jellik. Ezek a szmok 0..255 kztti egsz szmok. Aszmkdokat leggyakrabban hexadecimlis formban adjk meg. A bal oldalioszlopban a memriacmeket adjuk meg (0044F02B,) ahol az adott gpi kd
utastst troljuk. A gpi kd utastsok a msodik oszlopban vannak (a 8B45F4
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
9/312
9/312
szmsorozat egyetlen gpi kd utastst (8B), valamint a paramtereit jelli: honnankell beolvasni az rtket az EAX regiszterbe (45,F4)).
A fentieken is ltszik, hogy a gpi kd programozsi nyelv nehzkes, nehezentanulhat. A ksz program nehezen megrthet, nem ttekinthet.
Sok ms htrnya mellett kln kiemelend, hogy a gpi kd programokat alkotutastsok csak az adott mikroprocesszor szmra rthetek. Vagyis ms processzoresetn az utastskdok is msok. Nemcsak szmkdjukban klnbznek, hanemesetleg kevesebb vagy tbb utasts van, illetve ms-ms a paramterezse ahasonl feladat utastsoknak. Ha egy gpi kdban programoz szmra egy msikprocesszorra kellett programot rni, elszr mg el kellett sajttania a klnbsgeket.Nyilvn az alapelvek maradtak, de az utastsok klnbzsge sok nehzsgetokozott.
A programoz szemszgbl a gpi kdban trtn programozs nagyon lass
folyamat. Aprlkosan lehet csak a programot felpteni. Az utastsok nagyonalacsony szintek voltak, egy egyszer sszeads mvelet is - mint lttuk a fentipldn hrom utastsbl llt. Egy nagyobb rendszer elksztse olyan idignyesfeladat lenne, hogy inkbb csak rvidebb, egyszer programokat ksztettek benne aprogramozk.
Elnyei persze akadnak ennek a nyelvnek is: a gpi kd utastsok segtsgvelmaximalizlhatjuk a programunk futsi sebessgt, vagy memria-kihasznltsgt(vagy mindkettt egyszerre), hiszen megktsek nlkl felhasznlhatjuk amikroprocesszor minden lehetsgt, s szabadon hasznlhatjuk a memrit is.
Msodik genercis programozsi nyelvek: ASSEMBLY
A gpi kd programozsi nyelv htrnyai miatt j nyelvet kellett kifejleszteni.
Az ASSEMBLY nyelv els kzeltsben a megrthet gpi kd nyelve. Azutastsok szmkdjait nhny bets (2-3-4 bets) n. mnemonikokkalhelyettestettk. Egy ilyen mnemonik (emlkeztet szcska) a gpi kd utastsjelentstartalmra utalt. Pldul a memria-tartalom beolvassa egy regiszterbe
(bemozgats) az angol MOVE=mozgatni sz alapjn a MOV mnemonikot kapta. Akt szm sszeadsa az angol ADD=sszeadni mnemonikot kapta. Az 1. brn aharmadik oszlopban szerepelnek a gpi kd utastsok assembly nyelv megfeleli.
A MOV utasts nnmagban nem lefordthat gpi kdra, hiszen azt is meg kelladni, hogy melyik memria-cm tartalmt kell betlteni melyik regiszterbe. Az utastsegyik lehetsges formja MOV EAX,. Ennek mr egyrtelmen megfelelegy gpi kd utastskd (mov eax = 8B), a memriacmet pedig a tovbbiszmkdok rjk le.
Ennek megfelelen az assembly nyelv egy adott mikroprocesszor adott gpi
kdjhoz kszlt el. Ezrt az assembly nyelv is processzor-fgg, de ezen a szintenjabb fogalmak jelentek meg:
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
10/312
10/312
Forrskd: az assembly nyelv programot a CPU nem kpes kzvetlenl megrtenis vgrehajtani. Az assembly nyelv programot egy szveges file-ban kell megrni(forrskd), majd le kell fordtani gpi kd, n. trgyprogramra (object code).
Fordts: az a folyamat, amely kzben a forrskdot egy fordtprogram(compiler)gpi kd utastsok sorozatra transzformlja.
Az assembly nyelv esetn ezt a fordtprogramot ASSEMBLER-nek neveztk. Azassembler vgigolvasta a forrskdot sorrl-sorra, e kzben generlta a gpi kdutastssorozatot - a mnemonikok alapjn ellltotta a megfelel gpi kd utastsszmkdjt. Az assembler nem bonyolult program, hiszen a fordts egyszerszablyok szerint mkdik.
Az ASSEMBLER a forrskd feldolgozsa kzben egyszer ellenrzseket iselvgez. Amennyiben valamely mnemonikot nem ismeri fel (pl. a programoz
elgpelte), akkor a fordtsi folyamat lell, az assembler hibazenettel jelzi a hibaokt s helyt a forrskdban. A forrskdban az olyan jelleg hibkat, melyekslyossga folytn a fordts nem fejezhet be fordtsi idben trtn hibnaknevezzk. Ennek oka ltalban a nyelv szablyai (szintaktikja) elleni vtsg, ezrtezt szintaktikai hibnakis nevezzk.
Az assembly nyelv programok forrskdja olvashatbb, mint a gpi kd, illetveknnyebben mdosthat. Az assembler a program szintaktikai helyessgt ellenrzile, emiatt az els eszkznek is tekinthetjk, amelyet a programozk munkjnaksegtsre (is) alkottak.
A fordts ellenkez mvelete a de-compiling. Ennek sorn a gpi kd program-vltozatbl a programoz megprblta visszalltani annak assembly nyelveredetijt. Erre sokszor azrt volt szksg, mert az eredeti forrskd elveszett, de aprogramon mgis mdostani kellett. A gpi kd programok mdosthatsgnaknehzsgt jelzi, hogy az assembly-programozk mr nem voltak hajlandkkzvetlenl a gpi kdot mdostani, inkbb helyrelltottk az assembly forrskdot,abban elvgeztk a mdostsokat, majd jra lefordtottk (generltk) a gpi kdprogramot.
Ez a mvelet persze nmi vesztesggel jrt hiszen a tnyleges eredeti assembly
forrskdban tbbek kztt megjegyzsek is lehettek. Ezek a megjegyzsek a gpikd vltozatba nem kerltek bele, ezrt visszalltani sem lehet ket.
Ami viszont nagyon fontos lps a fordtprogramokmegjelensvel megjelentaz igny ezek intelligencijnak fejldsre!
Vltozk az assembly nyelvben
Az assembly programokban a memria-cmekre azok sorszmval lehetett
hivatkozni. Egy 128Mb memrival szerelt szmtgpben 128*1024*1024 db
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
11/312
11/312
sorszmot lehet hasznlni, mivel a memria ennyi db byte-ot tartalmaz. A pldbanezek a sorszmok a [0 .. 134.217.727] intervallumbl kerlnek ki1.
Az assembly programok sokszor tnyleges memriacmeket (sorszmokat)tartalmaztak szmkonstansok formjban. Ez sok szempontbl nem volt elg
rugalmas:- A szmok nem hordozzk a jelentsket, nehezen volt kiolvashat aprogrambl, hogy a 1034-es memriacmen milyen adat van, mi az ott lvrtk jelentse.
- A programban e memriacmek sokszor elfordultak. Ezrt a memriacmeknem voltak knnyen mdosthatak.
- A memriacm alapjn nem dnthet el, hogy az ott trolt adat hny byte-otfoglal el, ugyanis a memriacm csak a memriabeli kezdcmet jelli.
A helyzet javtsa rdekben a programozk elkezdtek konstansokat hasznlni aprogramjaikban. Ezeket a programok elejre sszefoglal jelleggel, tblzat-szer
mdon rtk le:
FIZETES = 1034ELETKOR = 1038NYUGDIJAS = 1040
Ezek utn az assembly programokban az ADD EAX,[1034] helyett (ami azt jelentette,hogy add hozz az [1034] memriacmen tallhat rtket az EAX regiszterbenppen benne lev rtkhez) azt rhattk, hogy ADD EAX,[FIZETES]. Ez sokkalolvashatbb forma, msrszt amennyiben a fizets rtkt mgsem az 1034-es
memriacmen kellett trolni (vltozs), akkor egyetlen helyen kellett csak trni aprogram eleji tblzatban.
Ez az egyszer s logikus meggondols indtotta el a vltoz fogalmnak fejldst.A fenti esetben a FIZETES volt az azonost, melyhez a programoz konstansformjban rendelt hozz memriacmet helyet a memriban.
Mg fejlettebb assembler fordtk esetn a fenti tblzat az albbi formban isfelrhat volt:
FIZETES = 1034
ELETKOR = FIZETES+4NYUGDIJAS = ELETKOR+2
Ebben az esetben mr kiolvashat volt a tblzatbl, hogy a FIZETES nvvel jelltmemriaterlet 4 byte-os trol hely volt, hiszen ekkora memria-szakaszfenntartsa utn a kvetkez memriaterlet (ELETKOR elnevezssel) 4 byte-taltvolabbi ponton kezddik.
Ez a vltozat azrt is jobb, mert segti, hogy elkerljk kt trolterlet tfedst amemriban (tlapols). Megakadlyozni nem tudja, hiszen amennyiben a fizetstrolsi ignye 8 byte lenne, akkor a fenti esetben az letkor mg tlgna a fizets
1128*1024*1024-1
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
12/312
12/312
trlhelynek utols 4 byte-jra. Ennek persze a programoz az oka, aki rosszul rtafel a tblzatot. Ha azonban a fizets trolsra 2 byte is elg lenne, akkor 2 byte-nyifelhasznlatlan terlet keletkezne a memriban (ami szintn nem szerencss).
A fenti problmkon tl az assembler azt sem tudta ellenrizni, hogy a trlrekeszt
megfelelen kezeli-e a programoz a ksbbiekben:
MOV EAX, [FIZETES] // EAX 32 bites regiszter, 4 byteMOV AX, [FIZETES] // AX 16 bites regiszter, 2 byteMOV AL, [FIZETES] // AL 8 bites regiszter, 1 byte
A fenti utastsok mindegyike elfogadhat az assembly nyelv szintaktikai szablyaiszerint. Az els esetben a megadott memriacmrl 4 byte-nyi adat kerl be az EAXnev regiszterbe. Msodik esetben csak 2 byte, harmadik esetben csak 1 byte. Amemria-beolvasst ugyanis a fogad regiszter mrete befolysolja. Amennyiben afizets 4 byte-on kerl trolsra, gy a msodik s harmadik utasts nagy
valsznsggel hibs, hiszen mirt olvasnnk be a fizetst tartalmaz szmsorozat-nak csak az egyik felt?
Az ilyen jelleg hibkra azonban az assembler nem tudott figyelmeztetni, mivelszmra a FIZETES csak egy memriacm volt. A helyes kezelsre aprogramoznak kellett gyelnie. Az assembler nem is tudta volna ellenrizni a kdotebbl a szempontbl, hiszen nem volt informcija arrl, hogy mit is rt aprogramoz fizetsalatt.
Ezt a plusz informcit hvjk a programozsi nyelvben tpusnak.
A tpus sok mindent meghatroz. Tbbek kztt meghatrozza az adott rtk trolsimrett a memriban. A tpus ismeretben a fenti tblzat felrhat az albbiformban:
DWORD FIZETESWORD ELETKORBYTE NYUGDIJAS
A fenti tblzat szerint a FIZETES egy dupla-sz (DWORD), aminek helyignye 4byte. Az ELETKOR egy szimpla sz (WORD), 2 byte helyigny. A NYUGDIJAS egy
byte, aminek helyignye (mint a neve is mutatja) 1 byte.Amikor az ASSEMBLER-ek mr a fenti tblzatot is kezeltk, akkor mr kpesekvoltak a trterlet-cmeket automatikusan kiosztani. Az els azonost cmhezkpest a primitv tpusnevek (dword, word, byte, ) trolsi ignyt ismervnautomatikusan nveltk a memriacmeket, s adtak rtket az azonostknak. Ezekaz rtkek tovbbra is memriacmek voltak, de az automatikus kioszts miatt amemriaterletek tlapolsnak eslye mg kisebbre zsugorodott.
A fenti primitv tpusnevek mg nem jelltk az azonostk tnyleges tpust. Afordt mindssze a trigny-szksglet kiszmtsra hasznlta fel. A hibs kezels
lehetsgt mg mindig megengedte, vagyis egy 4 byte-os helyigny rtknek mgmindig szabad volt az egyik felt beolvasni, s dolgozni vele.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
13/312
13/312
Nem voltak finom tpusnevek. Nem volt char, bool, short int, unsigned short inttpusok. Ezek mindegyike 1 byte trolsi igny, csak ezen 1 byte-on hordozottinformci jelentsben trnek el. Mivel a jelentst a fordt mg nem kezelte, csakegy olyan tpusnv volt, amelynek 1 byte volt a trolsi ignye.
Ennek megfelelen ezt mg nem tekinthetjk tnyleges tpusnvnek, mindsszetrolsi-igny nvnek.
A vltoz ms komponenseinek (lettartam, hatskr) kezelse is hinyzott azassembly nyelvbl, s az assembler programokbl.
Vezrlsi szerkezetek az assembly nyelvben
Az assembly nyelv msik szegnyes tulajdonsga a vezrlsi szerkezetek hinya.Lnyegben csak az albbi vezrlsi szerkezetek tallhatak meg:
- Szekvencia: a program utastsainak vgrehajtsa a memriabeli sorrendalapjn trtnik.
- Felttlen vezrlstads (ugr utasts): a program folytatsa egy msikmemriabeli pontra tevdik t, majd attl a ponttl kezdve a vgrehajts jraszekvencilis.
- Feltteles vezrlstads (feltteles ugr utasts): mint az egyszer ugrutasts, de az ugrst csak akkor kell vgrehajtani, ha az elrt felttel teljesl.
- Visszatrs az ugr utastst kvet utastsra (azon helyre, ahonnan azugrs trtnt).
Ezekbl kellett sszerakni a programot. Egy egyszer elgazst ennek megfelelenaz albbi mdon kellett kdolni:
HA felttel AKKOR felttelkirtkelse
Ut1UGRS_HA felttel HAMIS CIMKE1-reUt2UT1
KLNBEN UT2Ut3UGRS CIMKE2-reUt4@CIMKE1:
HVGE UT3folytats UT4
@CIMKE2:
folytats
A fentibl taln sejthet, hogy az assembly nyelv programbl kibogozni, hogy ittvaljban feltteles elgazs trtnt nem egyszer. Hasonl problmkkal jr a
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
14/312
14/312
ciklusok megtervezse s kdolsa is klnsen az egymsba gyazott ciklusokesete.
Eljrshvs az assembly nyelvben
Az assembly nyelv elvileg ad lehetsget eljrshvsra is az albbi formban:
ELJARASHIVAS kiiras
@kiiras:VISSZATRS_A_HVST_K VET_UTASTSRA
A kiiras itt valjban cmke (programsort jell nv), de megfelel az eljrsnv
primitv fogalmnak. A nevestett cmkk egy j nvvlasztssal, nagyon sokatknnytenek a programkd olvashatsgn.
A problma nem is itt rejtzik, hanem hogy az eljrsnak hogyan adunk tparamtereket? Illetve, ha ez nem eljrs, hanem fggvny, akkor hol kapjuk meg avisszatrsi rtket? Illetve honnan tudjuk, milyen tpus adattal, rtkkel tr visszaaz adott fggvny?
A fenti krdsekre a vlaszokat maga az assembly nyelv nem tartalmazza.Paramterek tadsra pldul tbb md is van csakgy mint a fggvnyekvisszatrsi rtknek visszaadsra. Ezeket a lehetsgeket maga a gpi kd
tartalmazza, s az assembly nyelv rtelemszeren tvette.
A programozk szvesen fejlesztettek ltalnos, jra felhasznlhat eljrsokat sfggvnyeket, melyek segtsgvel a programok fejlesztsi ideje, s a tesztelsi idejeis alaposan lervidlt. De ezek egymssal val megosztsa a fenti akadlyok miattnehzkes volt. Egy msik programoz ltal fejlesztett, nem megfelelen dokumentlteljrs felhasznlsa a kdban nha tbb energia felemsztsvel jrt, mint jramegrni a szban forg eljrst.
Tbb modulbl ll programok az assembly nyelvben
A tbb modulra tagols azrt volt fontos, mert az assembly programok ltalbannagyon hosszak voltak, msrszt az akkori szmtgpek mg nagyon lassakvoltak. Egy hossz forrskd fordtsa nagyon sok idbe kerlt. Ugyanakkor aprogram jelents rsze a fejleszts kzben mr elkszlt, azt a programoz nemmdostotta mivel a program mr msik pontjn jrt a fejleszts. Ezt a szakasztjra s jra lefordtani az assemblerrel felesleges id s energiapocskols volt.
Ezrt bevezettk a tbb modulbl trtn fordtst. Ekkor az assembler a fordtshozegy listt kapott, hogy mely forrskd-fileokbl tevdik ssze a project. Az assembler
a forrskd-modulokat egyenknt fordtotta le egy-egy trgykd (object) llomnyba.Amennyiben a forrskdon nem trtnt mdosts, gy azt az assembler egy gyorsellenrzssel szrevette, s nem generlta jra a hozz tartoz object kdot. gy
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
15/312
15/312
csak azon forrskdok fordtsa trtnt meg, melyek vltoztak az utols fordts ta.Miutn az assembler vgzett a forrskdok fordtsval, egy msik, specilisfeladatot vgz program kvetkezett, a szerkesztprogram (linker). A linker a sokapr kis trgykd alapjn ksztette el a mkdkpes programot .
Ez jelentsen meggyorstotta a fordtst egyb htrnyok nlkl. St, a programozkgy az jra felhasznlhat, ltalnos eljrsaikat kln kis kd-gyjtemnybentroltk, s jabb project kezdse esetn eleve hozzcsatoltk a project forrskd-listjhoz.
Ez tovbb erstette a vgyat az ltalnos cl eljrsok rsra, s egyms kzttimegosztsra. De az assembly nyelv ez irny kpessgeinek hinya ebben tovbbrais komoly gtat jelentett.
A fentiek bizonytjk, hogy az assembly nyelv sok olyan lehetsget rejtett magban,
amely miatt megrdemli a kln genercis sorszmot. Ugyanakkor a nyelvi korltokgtoltk a programozsi stlus fejldst.
Harmadik genercis programozsi nyelvek: PROCEDURLISNYELVEK
Az assembly nyelv hinyossgainak kikszblsre szlettek a harmadikgenercis nyelvek.
Az eljrsorientlt (procedurlis) nyelvek sok szempontbl elvi, szemlletbeli vltstkveteltek meg az assembly programozktl. A frissen felnvekv programoznemzedk, akik nem hordoztak magukban rossz szoksokat s hibsbeidegzdseket azonnal s gyorsan tvettk ezeket a szemlletbeli elrsokat.
Az els nagyon fontos vltozs az eljrs fogalmnak bevezetse.
Az eljrs (s fggvny) nyelvi elemm vlt. Az eljrsoknak neve volt, s rgztettparamterezse (formlis paramterlista). Ez lerta, hogy az eljrs meghvsasorn milyen adatokat, rtkeket kell az eljrs szmra tadni. Ezen tl a nyelvrgztette az tads mdjt is. Ezzel elhrult az ltalnos cl eljrsok rsnaklegjelentsebb akadlya. Ugyanakkor, hasonl jelents lpsknt a fordtprogramaz eljrs hvsakor ellenrizte, hogy a megadott sszes adatot tadjuk-e azeljrsnak (aktulis paramterlista). Ez jabb fontos mrfldk a fordtprogramintelligencijnak fejldsben.
A msik fontos vltozs a vltoz fogalmnak finomodsa:
A vltoznak van:- Neve (azonostja), ezzel lehet a kdban hivatkozni r.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
16/312
16/312
- Tpusa (mely meghatrozza a memriabeli helyignyt, s trolsi (kdolsi)mdjt).- A tpus ezen tl meghatrozza az adott nev vltozval elvgezhet mveletekkrt is (numerikus tpus vltozval vgezhet az oszts, szorzs, kivons,sszeads, ), mg logikai tpusval a logikai mveletek (s, vagy, xor, )).
- A kifejezsekben szerepl adatok s vltozk tpusait a fordtprogram elemzi,sszeveti, s ellenrzi a kifejezs tpushelyessgt.- A programban lehetetlenn vlt a vltoz trhelynek rszleges kezelse (a vltozrtkt reprezentl byte-ok csak egy rsznek kiolvassa, mdostsa). Ezzel isnagyon sok tipikus programoz hiba kiszrhetv vlt.- A vltozkat ltalban ktelezen deklarlni kellett. Ennek sorn a programozbejelentette a fordtprogram szmra rthet formban, hogy az adott azonost(vltoznv) alatt mit rt (milyen tpust). A deklarci helye tovbbi informcikatjelent a fordtprogram szmra meghatrozza a vltoz lettartamt s hatskrtis.
A vltoz lettartama:- statikus: a vltoz a program indulsnak pillanattl a futs vgig a vltozfolyamatosan ltezik, s vltozatlan helyen lesz a memriban.- dinamikus: a vltoz a program futsa kzben jn ltre s sznik meg (akrtbbszr is).
A statikus vltozk fontosak az adatok megrzse szempontjbl. A fontos, sokigszksges adatokat statikus vltozkban troljuk. A dinamikus vltozk amemriaterlet gazdasgos felhasznlsa szempontjbl fontosak a vltoz csakaddig legyen a memriban, amg fontos. Amint feleslegess vlt megsznik, s ahelyre ksbb ms vltoz kerlhet.
A vltoz hatskre:- globlis: a program szvegben tbb helyen (tbb eljrsban is) elrhet,felhasznlhat.- loklis: a program szvegben a vltoz felhasznlsa helyhez kttt, csak egymeghatrozott programrszben (krlhatrolt szegmensben) hasznlhat fel.
A globlis vltozk minden esetben statikusak is. A dinamikus vltozk pedigltalban loklisak. A dinamikus vltoz ltrehozsa s megsznse ezen loklis
terlethez ktdik amikor a program vgrehajtsa elri ezt a pontot, belp erre aterletre, akkor a vltoz automatikusan ltrejn. Amikor a program vgrehajtsaelhagyja ezt a terletet, akkor a vltoz automatikusan megsznik, helye felszabadula memriban.
A harmadik fontos vltozs a tpusrendszer bvthetsge
A magas szint programozsi nyelvek eleve adott tpusokkal kszltek. A nyelvialaptpusokbl tovbbi (felhasznl ltal definilt) tpusokat lehet kszteni. Ezentpusok a meglv tpusok szktsei (felsorols tpus, rsztartomny-tpus), vagy
sszetett algebrai adatszerkezetek is lehetnek (pl. struktrk, vektorok, listk, ).
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
17/312
17/312
A negyedik fontos vltozs a vezrlsi szerkezetek bevezetse
Az assembly nyelv ugrutastsaibl megszervezhet vezrlsi szerkezetek krtcskkentettk, s rgztettk azokat:
- szekvencia: az utastsokat a forrskdban rgztett sorrendben kell
vgrehajtani.- szelekci: feltteles elgazs (pl. a ha akkor klnben szerkezetek).- iterci: adott programrsz ismtlse (elrt lpsszm ciklus, logikai
felttelhez kttt ciklusok, halmaz alap ciklusok, ).
A vezrlsi szerkezetek e formja ttekinthet, egyszer, knnyen olvashat kdoteredmnyez. Mills bizonytotta, hogy minden algoritmus kdolhat a fenti hromvezrlsi szerkezet hasznlatval, gy az ugr utastsok szksgtelenn vltak.
Termszetesen, amikor a fordtprogram a gpi kd vltozatot generlja, akkor afenti szerkezeteket ugr utastsok formjban valstja meg hiszen a gpi kdbancsak ezek szerepelnek.
Az tdik fontos vltozs a hardware fggetlensg.
A procedurlis nyelvek mr nem processzor fggek. A fordtprogram ismeri azadott szmtgp processzornak gpi kdjt s a procedurlis nyelven megrtmagas szint kdot az adott gpi kdra fordtja. Amennyiben a programot msplatformon is szeretnnk futtatni, gy a magas szint forrskdot az adott
szmtgpre rt fordtprogrammal jra kell fordtani a forrskd brmilyenvltoztatsa nlkl.
A memriaterlet kiosztst a fordtprogam vgzi a vltoz-deklarcik alapjn. Aprogram egy adott pontjn mindig egyrtelmen megadhat a vltoz hatskrkfigyelembevtelvel, hogy mely vltozk rhetk el, s melyek nem. A dinamikusvltozk ltrehozst s megszntetst a fordtprogram ltal generlt kdautomatikusan vgzi. A tpusokhoz tartoz trhely-ignyt a fordtprogram kezeli,kizrt a memria-tlapols s nem keletkeznek fel nem hasznlt memriaterletek.
Emiatt nagyon sok lehetsges programozsi hiba egyszeren megsznt ltezni.
Fennmaradt azonban egy nagyon fontos problma: a felhasznl ltal definilttpusokhoz nem lehet opertorokat definilni, emiatt kifejezsekben nem lehet az jtpusokat felhasznlni. Vagyis a felhasznli adattpus kevesebbetr, mint a gyri,eleve ltez elemi tpus. Ezen a szinten a nyelv fejldse nem haladhatja meg ezt apontot.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
18/312
18/312
Hrom-s-fl genercis programozsi nyelvek: OBJEKTUMORIENTLT NYELVEK
Az objektum orientlt programozsi nyelvek (OOP nyelv) ezen a ponton jelentenekfejldst. A felhasznl sokkal egyszerbben s szabadabban ksztheti el a sajttpusait. Meglv tpusok tovbbfejlesztsvel (rklds) kevs munkval kszthetj tpusokat. A sajt tpusaihoz (ltalban) kszthet opertorokat is (melyeknekjelentst termszetesen le kell programozni). Ezek utn a sajt tpus szinte mindenszempontbl egyenragv vlik a nyelvi alaptpusokkal. A sajt tpusokhoz nem csakopertorokat rendelhet, hanem megadhat fggvnyeket s eljrsokat is, amelyek azadott tpus adatokkal vgeznek valamilyen mveletet. Mivel ezen fggvnyek sopertorok az adott tpushoz tartoznak, a tpus rszeinek tekintendk. Az egy tpusbasorolt adattrol vltozk (mezk), a hozzjuk tartoz mveletek s opertorok
csoportjt (halmazt) osztlynak nevezzk.Egy OOP nyelvben teht szintn megtallhatak az eljrsok s fggvnyek, illetve aparamterek, vltozk. A vezrlsi szerkezetek is a megszokott hrom formraplnek (szekvencia, szelekci, iterci). Ezrt az OOP nyelvek inkbb csakszemlletmdban msok (melyik eljrst s fggvnyt hova rjuk meg), mint kdolsitechnikkban. Ezrt az OOP nyelveket nem tekintik kln genercinak.
Negyedik genercis programozsi nyelvek:SPECIALIZLT NYELVEK
A negyedik genercis nyelvek specilis feladatkrre kszlt nyelvek. Ezen nyelvekjellemzje, hogy nagyon kevs nyelvi elemmel dolgoznak, s nagyon egyszer,szinte mondatszeren olvashat utastsok fogalmazhatk meg. Erre j plda azSQL nyelv, amely elssorban adatbzis-kezelsre van felksztve.
tdik genercis programozsi nyelvek:MESTERSGES INTELLIGENCIA NYELVEK
A mestersges intelligencia programozsi nyelvekkel elvileg az emberi gondolkodslersa trtnne meg, gyakorlatilag e nyelvek kutatsa, fejlesztse mg folyamatbanvan.
A programozsi nyelvek csoportostsa
A programozsi nyelveket ms szempontbl vizsglva egy msik csoportostsfedezhet fel:
Imperatv (procedurlis) nyelvek:
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
19/312
19/312
Ezen nyelvek kzs jellemzje, hogy a program fejlesztse rtkad utastsokmegfelel sorrendben trtn kiadsra koncentrldik. Az rtkad utastsbaloldaln egy vltoz ll, a jobb oldaln pedig egy megfelel tpus kifejezs. Aszelekci (elgazs) csak azt a clt szolglja, hogy bizonyos rtkad utastsokatcsak adott esetben kell vgrehajtani. A ciklusok pedig azrt vannak, hogy az
rtkad utastsokat tbbszr is vgrehajthassunk. Az rtkad utastsok sornrszeredmnyeket szmolunk ki vgl megkapjuk a keresett vgeredmnyt.
Applikatv (funkcionlis) nyelvek:
A funkcionlis nyelveken a kiszmoland kifejezst adjuk meg, megfelelmennyisg bemen adattal. A programoz munkja a kifejezs kiszmtsnaklersra szolgl. A program futsa kzben egyszeren kiszmtja a szban forgkifejezst.
Egy funkcionlis nyelvben nincs vltoz, ltalban nincs ciklus (helyette rekurzivan). rtkad utasts sincs, csak fggvny visszatrsi rtknek megadsaltezik. A funkcionlis nyelvek tipikus felhasznlsi terletnek atermszettudomnyos alkalmazsok tekinthetek.
Logikai nyelvek:
Az ilyen jelleg nyelveken tnyeket fogalmazunk meg, s logikai lltsokat runk le.
A program ezen kvl egyetlen logikai kifejezst is tartalmaz, melynek rtkt aprogramozsi nyelv a beptett kirtkel algoritmusa segtsgvel, a tnyek sszablyok figyelembevtelvel meghatroz.
A logikai nyelvek tipikus felhasznlsi terlete a szakrti rendszerek ltrehozshozkapcsoldik.
Objektum-orientlt nyelvek:
Az OOP nyelveken a program mkdse egymssal klcsnhatsban llobjektumok mkdst jelenti. Az objektumok egyms mveleteit aktivljk,melyeket interface-ek rnak le. Ha egy mvelet nem vgrehajthat, akkor az adottobjektum a hv flnek szabvnyos mdon (kivtelkezels) jelzi a problma pontosokt.
Futtat rendszerek
A fordt programok ltal generlt trgykdokat a szerkeszt program nti vglegesformba. Az elkszlt futtathat programot ezen idpont utn az opercis rendszer
kezeli, s futtatja.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
20/312
20/312
A futtats hromflekppen trtnhet:
Direkt futtats: a generlt kd az adott mikroprocesszor gpi kd utastsaittartalmazza. Ennek megfelelen az utastssorozatot az opercis rendszeregyszeren tadja a mikroprocesszornak s megadja a program kezd pontjt. A
processzor e pillanattl kezdve nllan vgrehajtja a kvetkez utastst, kveti azugrsi pontokat, rja s olvassa a memria hivatkozott terleteit anlkl, hogy tudnvaljban mit csinl a program az adott ponton. A processzor felttlenl megbzik aprogramkdban, vita nlkl engedelmeskedik s vgrehajtja a soron kvetkezutastst.
Ezen mdszer elnye a maximlis vgrehajtsi sebessg. Ugyanakkor jegyezzkmeg, hogy a gpi kd szintjn nincs tpusfogalom, s szinte lehetetlen eldnteni,hogy az adott utasts a program feladata szempontjbl helyes-e, szksges-e,hibs-e.
Mivel a memriban (a nagy byte-halmazban) az adatok terletn is byte-oktallhatak, ezrt elvileg elkpzelhet, hogy a program vezrlse egy hibs ugrutastsnak ksznheten ttr egy ilyen terletre, s az adatokat gpi kdutastsokknt prblja rtelmezni. Ez persze valsznleg nem fog menni. Vagyvalamely utasts paramterezse lesz rtelmezhetetlen, vagy egy olyan kdot fogtallni a processzor, amely nem rtelmezhet utastskdnak. Ekkor a processzorhibs mkds llapotra tr t, amely a szmtgp lellshoz (lefagys) isvezethet. A mai processzorok mr vdekeznek ez ellen, s ilyen esemnydetektlsakor specilis hibakezel rutinok futtatsra trnek t.
A hiba bekvetkezse ellen vdelmet jelent, hogy a mai programok elszeparltterleteken troljk a programkdot, s az adatokat. A hibs ugrutasts emiattfelfedezhet, hiszen egy adatterlet belsejbe irnyul. A processzor mr ekkorlelltja a program futst, s ttr a hibakezel llapotra.
Msik vdelmi mechanizmus szerint a kd-terlet nem rhat, csak olvashat. gy aprocesszor kpes felfedezni a hibs rtkad utastsokat, melyek egy mveleteredmnyekppen kapott rtket egy olyan memriaterletre rn be, aholutastskdok vannak. Ez meggtolja a programkd futs kzbeni mdostst(nmdost kd) amely egy idben igen elterjedt volt. Ma mr e mdszert inkbbcsak a vrusok s egyb krtkony programok hasznljk.
Interpreterrel futtats: a fordtprogram ekkor nem generl kzvetlenlvgrehajthat gpi kd utastsokat, hanem egy kztes kdot, ahol az eredetiprogramozsi nyelv utastsai vannak szmkdokk tfordtva, a paramterei is mrfeldolgozott, egyszerstett formban kdoltak. Ezt a trgykdot egy futtat rendszer(az interpreter) futs kzben utastsonknt elemzi, s hajtja vgre az elrtszablyok szerint.
Az interpreteres rendszerekben a futtat rendszer a lefordtott kdot mg vgrehajtseltt elemzi, szksg esetn az utols pillanatban korriglja, pontostja azt (pl.
vltozhivatkozsok). Ilyen rendszerekben az is megoldhat, hogy a vltozkat nemkell deklarlni explicit mdon a program szvegben. A futtat rendszer kitallja az
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
21/312
21/312
adott programsorhoz rve, hogy milyen vltozkra van szksge, s pontosan epillanatban hozza csak ltre. Ezen kvl az is megoldhat, hogy a vltoz tpusa futskzben derljn csak ki, vagy akr menet kzben tbbszr meg is vltozzon. Afuttat rendszer az adott utastshoz rve ellenrzi hogy ott ppen milyen vltozkszksgesek, ellenrzi hogy azok pillanatnyi tpusa megfelel-e. Ha nem megfelel,
akkor vagy lell hibazenettel, vagy trli a nem megfelel tpus vltozt s ltrehozegy megfelel tpust helyette.
Az interpreteres rendszerek sokkal rugalmasabbak. Egy adott utasts vgrehajtsaeltt ellenrizheti a szksges felttelek teljeslst, st, akr korriglhatja is afeltteleket, hogy megfeleljenek az utastsnak. Ezen rendszerek futtatsa sokkalbiztonsgosabb. A felgyel interpreter idben lellthatja a fut programot,amennyiben azt nem tallja megfelelnek.
Az interpreteres rendszerek vitathatatlan htrnya, hogy egyrszt lass a futtats,msrszt a generlt trgykd az adott programozsi nyelv szintaktikai lenyomatt
hordozza, nem univerzlis. Egy ilyen trgykd-bl az eredeti forrskd ltalbanszinte vesztesg nlkl helyrellthat, mg a vltoznevek s az eljrsnevek isvisszallthatak. Egy adott nyelv interpretere (pl. a BASIC interpreter) nem kpesfuttatni ms interpreteres nyelv fordtprogramja ltal generlt trgykdot.
Virtulis futtats: ez az interpreteres elv mdostst jelenti. A fordt nem direktbenfuttathat gpi kd programot generl, hanem egy nem ltez (virtulis) processzorvirtulis gpi kdjra generl programot. Ezen gpi kd eltrhet a jelenlegi gpikdtl, sokkal magasabb szint utastsokat tartalmaz, s sokkal tbb tpust ismer.
Ezen nyelv interpreteres futtat rendszere (processzor-szimultor, virtulis gp)sokkal egyszerbb, hiszen a generlt kd alacsonyabb szint utastsokat tartalmaz,mint ltalban az interpreteres rendszerekben. A generlt kd mr nem felttlenlhasonlt, nem felttlenl hordozza az eredeti programozsi nyelv szintaktikailenyomatt, belle az eredeti forrskd csak vesztesgesen llthat helyre (brsokkal kevesebb vesztesg rn, mint a gpi kdbl).
A virtulis futtats elnye, hogy amennyiben egy programozsi nyelvfordtprogramja kpes e virtulis gpi kd program generlsra, gy a futtatshozmr felhasznlhat a ksz futtat rendszer. Valamint ezen a virtulis nyelven
generlt kd ms-ms processzoron is futtathat lesz, amennyiben az adottprocesszora is ltezik a futtat rendszer.
A legismertebb ilyen nyelv a JAVA, ahol a futtat rendszert Java Virtual Machine-nak(JVM-nek) hvjk.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
22/312
22/312
Programozs tanknyv
II. Fejezet
BevezetsA Microsoft.NET
Hernyk Zoltn
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
23/312
23/312
A Microsoft.NET-et (tovbbiakban dotNet) sokflekppen lehet definilni. A Microsofthonlapjn pldul az albbi meghatrozs szerepel: ez egy software technolgikhalmaza, amely informcikat, embereket, rendszereket s eszkzket kapcsolssze. Ez az j genercis technolgia a Web szolgltatsokon alapul kisalkalmazsokon, amelyek kpesek kapcsolatba lpni egymssal csakgy, mint
nagyobb mret alkalmazsokkal az Internet-en keresztl.2
Msik lehetsges meghatrozs szerint a dotNet egy programfejlesztsi krnyezet,mely szmtalan hasznos szolgltatssal segti a programozk mindennapi munkjt.
Amikor egy programoz egy alkalmazs fejlesztsbe kezd, sok ms dolog mellettismernie kell, s figyelembe kell vennie azt a krnyezetet, amelyben az alkalmazsafutni fog. A krnyezet egyik legfontosabb jellemzje az opercis rendszer. A dotNetegyfle szemszgbl nzve az opercis rendszert helyettesti elrejtvn, eltakarvn a
tnyleges opercis rendszert a fejleszt ell.
Az opercis rendszert egy programoz teljesen ms szempontbl nzi, mint egyfelhasznl. A felhasznl szmra az opercis rendszer az, amibe be kelljelentkezni, alknyvtrakat s file-okat kezel, parancsokat lehet rajta keresztl kiadniakr karakteres felleten, akr egr segtsgvel. Ezzel szemben a programoz azopercis rendszert elssorban az API szempontjbl nzi: melyek azok a funkcik,feladatok, amelyeket az opercis rendszer elvgez a program feladatai kzl, smelyek azok, amelyeket nem.
Az API Application Programming Interface rja le egy adott opercis rendszeresetn, hogy melyek azok a szolgltatsok, amelyeket az opercis rendszer elevetartalmaz, s amelyeket a programoz a fejleszti munka sorn felhasznlhat. Ezenszolgltatsokat pl. a Windows a rendszer-knyvtraiban megtallhat DLL(Dynamic Link Library) file-okban trolja. Minden DLL tbb fggvnyt s eljrsttartalmaz, melyekre hivatkozhatunk a programjainkban is. E fggvnyek s eljrsoksszessgt nevezzk API-nak.
Egy opercis rendszer API lersban szerepelnek a kvetkez informcik:- a fggvny melyik DLL-ben van benne,
- mi a fggvny neve,- mik a paramterei,- a fggvnynek mi a feladata (mit csinl),- mik a lehetsges visszatrsi rtkek,- milyen mdon jelzi a fggvny a hibkat,stb
A Microsoft-os vilgban az els ilyen API-t az els, ltaluk ellltott opercisrendszer tartalmazta. Ez volt a DOS. Ez nem tartalmazott tl sok elrhetszolgltatst lvn a DOS egy egyfelhasznls, egyfeladatos opercis rendszer.
2http://www.microsoft.com/net/basics/whatis.asp
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
24/312
24/312
DOS-API Win16-API Win32-API dotNet-API
A Win16-API sokkal tbb szolgltatst tartalmazott, lvn hogy az mr grafikusopercis rendszerrel, a Windows 3.1-el kerlt be a kztudatba. Ez mr nem csak agrafikus fellet miatt tartalmazott tbb felhasznlhat szolgltatst, hanem mivel ezegy tbbfeladatos opercis rendszer teljesen j terleteket is megclzott.
A Win32-API a fejlettebb Windows opercis rendszerekben jelent meg, mint pl. aWindows 95. Ebben javtottak a tbbszl programok kezelsn, s bevezettekbizonyos jogosultsgi mdszerek kezelst is (s mg szmtalan mst is).
A dotNet ezen szempontbl egy j API-nak tekinthet. Ez olyannyira igaz, hogy egydotNet krnyezetben a programoznak semmilyen ms API-t (elvileg) nem kellismernie. A dotNet(elvileg) ma mr tbb klnbz opercis rendszeren is kpesmkdni de a programoznak ezt nem kell felttlenl tudnia hiszen mr nemhasznlja az adott opercis rendszer API-jt, csak a dotNet-et ltal definiltfggvnyeket s eljrsokat.
Tekintsk t a Microsoft.NET felptst:
Legals szinten az opercis rendszer tallhat. Mivel egy jl megrt, biztonsgosopercis rendszer nem engedi meg, hogy a felgyelete alatt fut programoknllan kezeljk a szmtgp hardware elemeit, ezrt a programok csakis azopercis rendszeren keresztl kommuniklhatnak egymssal, hasznlhatjk fel azerforrsokat (hlzat, file-rendszer, memria, ) vagyis az opercis rendszerAPI-n keresztl. Ez a rteg egy jl megrt opercis rendszer esetn nem kerlhetmeg.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
25/312
25/312
A kvetkez szinten van a Common Language Runtime a kzs nyelvi futtatrendszer. Ez az egyik legrdekesebb rteg. A CLR lnyegben egy processzor-emultor, ugyanis a dotNet-es programok egy virtulis mikroprocesszor virtulis gpikd utastskszletre van fordtva. Ennek futtatst vgzi a CLR. A futtats magainterpreter mdban trtnik, ugyanakkor a dotNet fejlett futtat rendszere a virtulisgpi kd utastsokat futs kzben az aktulis szmtgp aktulismikroprocesszornak utastskszletre fordtja le, s hajtja vgre.
Az els ilyen elny, hogy a szban forg virtulis gpi kd nyelv tpusos, ezrt aprogramkd futtatsa kzben a memria-hozzfrseket ellenrizni lehet gymeggtolhat a helytelen, hibs viselkeds. Msrszt az utastsok vgrehajtsaeltt ellenrizni lehet a jogosultsgot is vagyis hogy az adott felhasznl s adottprogram esetn szabad-e vgrehajtani az adott utastst pl. hlzati kapcsolatotltesteni, vagy file-ba rni. Ugyanakkor meg kell jegyezni, hogy egy JIT Compiler(JIT=Just In Time) gondoskodik arrl, hogy a vgrehajts megfelel hatkonysggaltrtnjen. Ezrt egy dotNet-es program hatkonysga, futsi sebessgeelhanyagolhatan kisebb, mint a natv kd programok.
A msodik rteg tartalmazza a dotNet API nagyobb rszt. A Base Class Librarytartalmazza azokat a szolgltatsokat, amelyeket egy dotNet-es programozfelhasznlhat a fejleszts kzben. Lnyeges klnbsg a megelz API-kalszemben, hogy ez mr nem csak eljrsok s fggvnyek halmaza, hanemstruktrlt, nvterekbe s osztlyokba szervezett a sok ezer hvhat szolgltats. Eznem csak ttekinthetbb, de hatkonyabb felhasznlhatsgot jelent egy, az
objektum orientlt programozsban jrtas programoz szmra.
A kvetkez rteg, az ADO.NET s XML a 21. szzadi adatelrsi technolgikattartalmazza. Ezen technikk ma mr egyre hangslyosabbak, mivel a maialkalmazsok egyre gyakrabban hasznljk fel e professzionlis s szabvnyostechnikkat adatok trolsra, elrsre, mdostsra. A rtegek segtsgvel aprogramok a httrtrolkon kpesek adatokat trolni, onnan indulskor azokatvisszaolvasni.
A kvetkez rteg ktfel vlik aszerint hogy az alkalmazs felhasznli fellett
web-es, vagy hagyomnyos interaktv grafikus felleten valstjuk meg. A WindowsForms tartalmazza azon API kszletet, melyek segtsgvel grafikus fellet ablakos,interaktv alkalmazsokat kszthetnk. A msik lehetsges vlaszts a WEB-esfellet, valamilyen browser-ban fut nem kifejezetten interaktv program rsa. Ezekfuttatshoz szksges valamilyen web szerver, a kliens oldalon pedig valamilyeninternetes tallz program, pl. Internet Explorer vagy Mozilla.
A kvetkez rteg a Common Language Specification definilja azokat ajellemzket, melyeket a klnbz programozsi nyelvek a fejldsk sorntrtnelmi okokbl klnbz mdon rtelmeztek. Ez a rteg rja le az alaptpusok
mrett, trolsi mdjt - belertve a string-eket - a tmbket. Fontos eltrs pldul,hogy a C alap nyelvekben a vektorok indexelse mindig 0-val kezddik, mg ms
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
26/312
26/312
nyelvekben ez nem ennyire kttt. A rteg nem kevs vita utn elsimtotta ezeket, aklnbsgeket.
A CLS rteg fltt helyezkednek el a klnbz programozsi nyelvek s afordtprogramjaik. A dotNet igazbl nem kttt egyetlen programozsi nyelvhezsem. A dotNet nem pl egyetlen nyelvre sem r, gy nyelvfggetlen. Elvilegbrmilyen programozsi nyelven lehet dotNet-es programokat fejleszteni,amelyekhez ltezik olyan fordtprogram, amely ismeri a CLS kvetelmnyeit, skpes a CLRvirtulis gpi kdjra fordtani a forrskdot.
A fenti kt kvetelmny betartsnak van egy nagyon rdekes kvetkezmnye:elvileg lehetsg van arra, hogy egy nagyobb projekt esetn a projekt egyik feltegyik programozsi nyelven rjuk meg, a msik felt pedig egy msikon. Mivelmindkt nyelv fordtprogramja a kzs rendszerre fordtja le a sajt forrskdjt gy a fordts sorn az eredeti forrskd nyelvi klnbsgei eltnnek, s a klnbznyelven megrt rszek zkkenmentesen tudnak egymssal kommuniklni.
A Microsoft a C++, illetve a Basic nyelvekhez ksztette el a dotNet-esfordtprogramot, valamint tervezett egy j nyelvet is, melyet C#-nak (ejtsd sz-sharp)nevezett el. Az j nyelv sok ms nyelv j tulajdonsgait tvzi, s nem hordozzamagval a kompatibilits megrzsnek terht. Tiszta szintaktikjval nagyon jlhasznlhat eszkz azok szmra, akik most ismerkedek a dotNetvilgval.
Ugyanakkor nem csak a Microsoft kszt fordtprogramokat erre a krnyezetre.
Egyik legismertebb, nemrgiben csatlakozott nyelv a Delphi.
A fentieken tl van mg egy olyan szolgltatsa a dotNet rendszernek, melynekjelentsgt nem lehet elgg hangslyozni: automatikus szemtgyjts. Ez aszolgltats a memria-kezelssel kapcsolatos, s a program ltal lefoglalt, de mrnem hasznlt memria felszabadtst vgzi. Ezt egy Garbage Collector nevprogramrsz vgzi, amely folyamatosan felgyeli a fut programokat. Ennektudatban a programoznak csak arra kell gyelni, hogy memrit ignyeljen, ha arraszksge van. A memria felszabadtsrl nem kell intzkednie, az automatikusanbekvetkezik.
Ha megprblnnk sszegezni, hogy mirt j dotNet-ben programozni, az albbifbb szempontokat hozhatjuk fel:
- az alkalmazs opercis rendszertl fggetlen lesz- fggetlen lesz az adott szmtgp hardware-tl is, gondolvn itt elssorban a
mikroprocesszorra- nem kell j programozsi nyelvet megtanulnunk ha mr ismernk valamilyen
nyelvet (valsznleg olyan nyelven is lehet .NET-ben programozni)- kihasznlhatjuk az automatikus memria-menedzsels szolgltatsait
(Garbage Collector)
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
27/312
27/312
- felhasznlhatjuk a programfejlesztshez az eleve adott Base Class Libraryrendkvl szles szolgltats-rendszert, ami radiklisan cskkenti afejlesztsi idt
A dotNet keretrendszer (Microsoft.NET Framework) jelenleg ingyenesen letlthet aMicrosoft honlapjrl. A keretrendszer rszt kpezi a BCL, s a CLR rteg, valamintegy parancssori C# fordt. Ennek megfelelen a dotNet programozsi krnyezetingyenesen hozzfrhet minden programozst tanulni vgy szmra. Ami nemingyenes, az a programozsi fellet (IDE = Integrated Development Environment Integrlt Fejleszti Krnyezet). A dotNet-ben a Microsoft ltal fejlesztett ilyenkrnyezetet Microsoft Visual Studio.NET-nek nevezik. Ez nem csak egy sznesszvegszerkeszt. Rszt kpezi egy 3 CD-t megtlt sg, mely tartalmazza a BCLlerst, pldkkal illusztrlva. Az IDE nem csak a forrskd gyors ttekintsbensegt a sznekkel trtn kiemelssel (syntax highlight), hanem a program rskzben mr folyamatosan elemzi a forrskdot, s azonnal megjelli a hibs sorokatbenne. Krnyezetrzkeny mdon reagl a billentyk letsre, s kiegszti ill.javtja az ppen begpels alatt ll kulcsszt. Ezen tl a felletbl kilps nlkllehet a forrskdot lefordtani, s a generlt programot elindtani. A Studio knyelmesmdon kezeli a tbb file-bl ll programokat (project), illetve a tbb project-bl llprogramokat is (solution).
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
28/312
28/312
Programozs tanknyv
III. Fejezet
Hell Vilg!
Hernyk Zoltn
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
29/312
29/312
Majd minden programoz ezzel a kedves kis programmal kezdi a programozs-tanulst: rjunk olyan szmtgpes programot, amely kirja a kpernyre, hogy hellvilg (angolul: Hello World). Ezen program elhreslt pldaprogram ezzel kezdjkht mi is ismerkedsnket ezzel a klns, nha kiss misztikus vilggal.
classSajat{
staticvoidMain(){
System.Console.WriteLine("Hello Vilg");}
}
A fenti pldaprogramot ksztsk el egy tetszleges editor programmal (akr ajegyzettmb is megfelel) HelloVilag.CS nven, majd command prompt-bl fordtsukle a kis programunkat: csc HelloVilag.cs parancs kiadsa segtsgvel.
A csc.exe a C-Sharp compiler - a merevlemezen a Windows rendszerknyv-trban, a C:\WINDOWS\Microsoft.NET\Framework\ alknyvtrban tall-hat, ahol a helyben a dotNET Framework verziszmt kellbehelyettesteni (pldul: v1.1.4322). Amennyiben a szmtgp nem ismeri fel a cscprogramnevet, gy vagy rjuk ki a teljes nevet, vagy vegyk fel a PATH-ba a fentialknyvtrat.
A fenti parancs kiadsa utn ugyanazon alknyvtrban, ahova a program szvegt islementettk, elkszl egy HelloVilag.exe futtathat program is. Elindtva e kis
programot, az kirja a kpernyre a kvnt dvzl szveget.
Nos, ezen mdja a programksztsnek nagyon kkorszaki. Nzzk, milyen mdonkell ezt csinlni a 21. szzadban
Els lpsknt indtsuk el a Microsoft Visual Studio.NET fejleszti krnyezetet, majda File/New/Projectmenpontot vlasszuk ki:
1. bra
A felbukkan prbeszdablak arra kvncsi, milyen tpus program rst kvnjukelkezdeni:
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
30/312
30/312
2. bra
A fenti prbeszdablak minden pontja roppant fontos! Els lpsknt a bal felsrszen hatrozzuk meg, milyen nyelven kvnunk programozni (ez C#).
Msodik lpsknt adjuk meg, milyen tpus programot akarunk fejleszteni ezen anyelven. Itt a sok lehetsg kzl egyelre a Console Application-t, a legegyszerbbmkdsi rendszer programtpust vlasztjuk ki.
Harmadik lpsknt a Locationrszben adjuk meg egy (mr ltez) alknyvtr nevt.
Negyedik lpsben vlasszuk ki a kszl program nevt a Name rszben. Mivel eprogram tbb forrsszvegbl fog majd llni, ezrt a Studio kln alknyvtrat fogneki kszteni. Ezen alknyvtr neve a Locations a Name rszbl tevdik ssze, sa Project will be created rszben ki is van rva, jelen pldban ez aC:\Programjaim\HelloVilag alknyvtr lesz!
Az OK nyomgombra kattintva rvid idn bell nagyon sok minden trtnik ahttrben. Ezt egy Windows Intz indtsval azonnal tapasztalhatjuk, hamegtekintjk a fenti alknyvtr tartalmt. Tbb file is generldott ebben azalknyvtrban. De trjnk vissza a Studio-hoz!
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
31/312
31/312
usingSystem;
namespaceHelloVilag{
///
///Summary description for Class1.///classClass1{
//////The main entry point for the/// application.///[STAThread]staticvoidMain(string[] args){
//// TODO: Add code to start
// application here//
}}
}
A generlt program nagyon sok sort kitrlhetnnk, s akit zavarnak a programbanlv felesleges programsorok azok tegyk is meg btran (csak ne vgezzenekflmunkt!).
Mire figyeljnk? A programunk utastsokbl ll. Egyelre jegyezzk meg a
kvetkez fontos szablyt: minden programutastst a Main fggvny belsejbekell rni! Sehova mshova!A Main fggvny belsejt a Main utni kezd kapcsoszrjel s a zr kapcsos zrjel jelzi!
usingSystem;namespaceHelloVilag{
classClass1{
staticvoidMain(string[] args)
{ // ...// ide kell rnunk a program sorait// ...
}}
}
Koncentrljunk most a valdi problmra: a programnak ki kell rnia a kpernyre aHell Vilg szveget! Vigyk a kurzort a Main fggvny belsejbe, s a hinyz sort(System.Console.WriteLine("Hello Vilg");) gpeljk be.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
32/312
32/312
usingSystem;namespaceHelloVilag{
classClass1{
staticvoidMain(string[] args){
System.Console.WriteLine("Hello Vilg");}
}}
A kir utasts neve WriteLine, mely az angol Write=rni, Line=sor szavakbl tevdikssze. A szveget a konzolra kell rni (Console=karakteres kperny). Ez egy, arendszer (angol: System=rendszer) ltal eleve tartalmazott utasts, ezrt a parancsteljes neve System.Console.WriteLine. A kirand szveget a parancs utn gmbly
zrjelbe kell rni, s dupla idzjelek kz kell tenni. Az utasts vgtpontosvesszvel kell lezrni (mint a pont a mondat vgn).Az elkszlt programot a File/Save All menponttal mentsk le, majd indtsuk el.Ennek tbb mdja is van. Az els: Debug/Startmenpont. Msodik: ssk le az F5billentyt. A harmadik: kattintsunk az indts gombra, amelyet egy kis hromszgszimbolizl:
3. bra
Mivel a programindts igen fontos, s srn hasznlt funkci, ezrt javasoljuk, hogyjegyezzk meg az F5 billentyt!
Mris van egy problmnk: a program elindul, rvid idre felvillan egy fekete sznkis ablak, esetleg elolvashatjuk a kirst, de csak ha elg gyorsak vagyunk, mert azablak azonnal be is csukdik! Mirt? A vlasz: a program egyetlen utaststtartalmaz: a szveg kirst. Mivel a program ezt mr megtette, ms dolga nincsen,ezrt gy a futsa be is fejezdik. s ha a program mr nem fut, akkor bezrdik azablak!
A megolds is erre fog plni: adjunk mg dolgot a programnak, hogy ne fejezdjnbe azonnal! Els mdszer: utastsuk arra, hogy vrjon valamennyi id elteltre. Aszban forg utasts:
System.Threading.Thread.Sleep(1000);
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
33/312
33/312
Ezen utastsnak zrjelben (paramterknt) ezredmsodpercben kell megadni avrakozs idejt. A megadott rtk (1000) ppen 1 msodpercnyi vrakozst jelent.A Sleep=aludni jelentse konkrtan annyi, hogy a program jelen esetben 1msodpercre elalszik, e kzben nem trtnik semmi (mg csak nem is lmodik), dea kvetkez utastst majd csak egy msodperc letelte utn fogja vgrehajtani aszmtgp!
Lnyeges, hogy hova rjuk ezt a sort! A szably rtelmben a Main fggvnybelsejbe kell rni. De milyen sorrendben?
A programozs tanuls legjobb mdszere a prblkozs! Prbljuk meg a kirs elberni!
staticvoidMain(string[] args){
System.Threading.Thread.Sleep(1000);System.Console.WriteLine("Hello Vilg");
}
Indtsuk el a programot, s gondolkozzunk el a ltottakon: a kis ablak elbukkan, kisideig nem trtnik semmi, majd felvillan a kirs, s azonnal bezrdik az ablak.
Prbljuk meg fordtott sorrendben:
staticvoidMain(string[] args){
System.Console.WriteLine("Hello Vilg");System.Threading.Thread.Sleep(1000);
}
A kirt szveg megjelenik, eltelik egy kis id (1 msodperc), majd bezrdik az ablak.Mirt?
A szmtgp a program sorait nem akrmilyen sorrendben hajtja vgre. Van egynagyon fontos szably: az utastsokat ugyanabban a sorrendben kell vgrehajtani,amilyen sorrendben a programoz lerta azokat. Ezt azt elvet ksbb pontostjuk, s
elnevezzk szekvencia-elvnek. Program elindul(ablak megnylik)
WriteLine vgrehajtsa
(a szveg kirdik a kpernyre)
Sleep vgrehajtsa(a program vr 1 msodpercet)
Program befejezdik(az ablak bezrdik)
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
34/312
34/312
Persze felmerl a krds, hogy 1 mp elg-e? Nvelhetjk az idt persze az rtktlltsval. De mennyire? Ez a megolds nem elg rugalmas. Nha tbb idtkellene vrni, nha kevesebbet. Keressnk ms megoldst:
System.Console.ReadLine();
A Sleep-es sort cserljk le a fenti sorra. Prbljuk elindtani a programot. Mittapasztalunk? Hogy az ablak nem akar bezrdni! ssk le az Enter billentyt sekkor az ablak bezrdik.
Mi trtnt? Az ablak akkor zrdik be, amikor a program futsa befejezdik. Ezekszerint a program mg futott, azrt nem zrdott be! Mivel most sszesen ktutastsunk van (a WriteLine, s a ReadLine), melyik utasts miatt nem fejezdttbe a program? Az nem lehet a WriteLine, mert a szveg mr kirdott a kpernyre,ez az utasts vgrehajtsa teht mr befejezdtt! Ekkor csak a ReadLineutastsmaradt. Nos, a ReadLine utastst alapveten akkor hasznljuk majd, ha adatotkrnk be a billentyzetrl. Az adatbevitelt az Enter letsvel jelezzk, ezrt aReadLinemindaddig nem fejezdik be, amg le nem tjk az Enter-t.
Megjegyzs: a megolds azrt nem tkletes, mert br a ReadLine elltja afeladatt, de sajnos az Enter letse eltt lehetsgnk van brmilyen szvegetbegpelni, s ez elrontja a dolog szpsgt. De egyelre ez a mdszer lesz az, amithasznlni fogunk.
Kerljnk kzelebbi kapcsolatba a programmal, s a programozssal! Figyeljk meglpsrl lpsre a mkdst! Ehhez ne az F5 billentyvel indtsuk el a programot,hanem az F11 billentyvel (vagy a Debug/Step intomenponttal):
4. bra
A srga (szrke) kiemels a kvetkez vgrehajtand utastst jelli. Kzbenlthatjuk, hogy a program ablaka ltrejtt, de mg egyelre res. ssk le jra azF11 billentyt! A srga kiemel csk tlpett a Sleepsorra. Ezt azt jelenti, hogy aWriteLine vgrehajtsra kerlt? Ellenrizzk! A programablakra kattintva lthatjuk,hogy kirdott a szveg a kpernyre. ssk le jra az F11 billentyt. Egymsodpercig nem trtnik semmi (a program elalszik), majd jra felbukkan a srgakiemels a Main fggvny blokkjnak zr kapcsos zrjeln. Ez az utols pillanat,amikor mg ellenrizhetjk a program kirsait a fekete htter ablakban. jabb F11letsre a program vgkpp befejezdik, az ablak bezrdik.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
35/312
35/312
Nagyon gyeljnk, hogy ha mr elkezdtk a programot futtatni lpsenknt, akkor nemdostsuk a program szvegt (ez fknt akkor fordul el, ha vletlenl letnkvalamilyen billentyt). Ha ez mgis elfordulna, a Studio nem fogja tudni, mit isakarunk tle:
5. bra
A szveg fordtsa: A forrskd megvltozsa nem fog jelentkezni a programfutsban, amg azt jra nem indtja. Ha folytatja a futtatst, a forrskd s a futprogram nem fog megegyezni.Ez azt jelenti, hogy ha pl. trjuk a szveget HellVilg!-rl Hell Mindenki-re, s folytatjuk a program futtatst, akkor is mg azeredeti Hell Vilg fog kirdni. Ennek oka az, hogy amikor elkezdtk a programotfuttatni (az els F11 letsvel), a Studio rgztette az llapotot (a forrskd akkoritartamt), s a kzben bekvetkezett vltozsokat nem fogja figyelembe venni. Ezazrt nagy gond, mert mi a forrskdban a mr megvltozott szveget ltjuk, sesetleg nem rtjk, hogy mirt nem az trtnik, amit ltunk, ha vgrehajtjuk akvetkez lpst!
A Restart lenyomsval lellthatjuk a program futtatst, vagy a Continuelenyomsval dnthetnk gy is, hogy a vltozs ellenre folytatjuk az eredetiprogram futtatst.
A program futtatst egybknt brmikor megszakthatjuk a Debug/Stop debuggingmenponttal, vagy a Shift-F5 letsvel.
A fenti mdszert fknt akkor hasznljuk, ha a program nem gy mkdik, ahogyanazt szeretnnk, vagy csak nem rtjk annak mkdst teljes mrtkben. Emdszert nyomkvetsnek hvjuk (angolul debugging), jelen esetben lpsenkntiprogramvgrehajtst vgznk. Ksbb jabb mdszerekkel s technikkkalbvthetjk ez irny tudsunkat.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
36/312
36/312
Feladatok:
1. Programozsi feladat: rassuk ki a kpernyre a csaldfnk egy rszt, pl. azalbbi formban:
Kis Pl (felesge: Nagy Borbla)Kis JzsefKis Aladr (felesge: Piros va)
Kis IstvnKis Pl
2. Programozsi feladat: rassuk ki a kpernyre az eddig megismert C#parancsokat, s rvid lersukat, pl. az albbi formban:
*** WriteLine ***
Kir egy szveget a kpernyre.*** ReadLine ***Vr egy ENTER letsre.
*** Sleep ***Vrakozik a megadott idig.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
37/312
37/312
Programozs tanknyv
IV. Fejezet
Alap I/O
Kirly Roland
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
38/312
38/312
Az alapvet Input/Output
Az alapvet input- output, vagyis a Konzol alkalmazsok ki- s bemenetnek trgyalshozelsknt meg kell ismernnk nhny C#-ban hasznlatos vltoz tpust. A vltozk, a
vltoz tpusok ismerete nagyon fontos, brmely programozsi nyelvet szeretnnk
elsajttani, mivel a programban hasznlt adatokat vltozkban s konstansokban tudjuk
trolni. A program ezekkel szmol, s segtsgkkel kommunikl a felhasznlval. A
kommunikci a programozsi nyelvek esetben krlbell azt jelenti, hogy adatokat
olvasunk be a billentyzetrl, s a munka vgeztvel a kapott eredmnyt kirjuk a kpernyre.
Minden vltoznak van neve, vagy ms nven azonostja, tpusa, s tartalma, vagyis
aktulis rtke. Ezeken kvl rendelkezik lettartammal s hatskrrel. Az lettartam azt
jelenti, hogy az adott vltoz a program futsa sorn mikor s meddig, a hatkr azt adja,
hogy a program mely rszeiben hasznlhat. A vltozk nvnek kivlasztsa sorn
gyelnnk kell a nyelv szintaktikai szablyainak betartsra.
Az albbiakban megvizsglunk nhny pldt a helyes s helytelen nvadsokra:
Valtozo
valtozo
Valtoznv
szemely_2_neve
int
alma#fa
10szemely
Az els ngy nvads helyes. Vegyk szre, hogy avaltozos a Valtozoazonostk kt kln
vltozt jellnek, mivel a C# nyelv rzkeny a kis-nagybetk klnbsgre. Az angolterminolgia ezt Case- sensitive nyelvnek nevezi.
A negyedik elnevezs helytelen, mivel az int foglalt kulcssz. Az tdik nvben a # karakter
szerepel, ami nem hasznlhat. Az utols elnevezs szmmal kezddik, mely szintn hibs.
A vltozkat a programban bevezetjk, vagyis kzljk a fordt rendszerrel, hogy milyen
nvel milyen tpus vltozt kvnunk hasznlni a programban. Ezt a folyamatot
deklarcinak nevezzk.
valtozo_nev tipus;
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
39/312
39/312
A tpus hatrozza meg a vltoz lehetsges rtkeit, rtktartomnyait, illetve azt, hogy,
milyen mveleteket lehet rtelmezni rajta, s milyen ms tpusokkal kompatibilis, a nvvel
pedig a vltozra hivatkozhatunk. A kompatibilits akkor fontos, mikor az egyik vltozt
rtkl akarjuk adni egy msiknak. Inkompatibilits esetn a .NET fordt hibt jelez.Ms nyelvektl eltren a C#-ban az kezetes betket is hasznlhatjuk nvadsra.
char kezetes_bet;int egsz;
A vltozk a memriban troldnak, vagyis minden azonosthoz hozzrendeljk a
memria egy szelett, melyet a rendszer lefoglalva tart a vltoz teljes letciklusa alatt.
(Nhny vltoz tpus esetn, mint a pointerek, valamivel bonyolultabb a helyzet, de a .NET
rendszerben nem kell trdnnk a memria kezelsvel, mivel a .NET felgyeli, lefoglalja s
felszabadtja a memrit.) Vizsgljunk meg nhny, a C# nyelvben hasznlatos, egyszer
tpust!
tpus Mret rtktartomny A tpusban trolhat adatok
byte 1 byte 0 tl 255 ig Eljel nlkli egsz szmok
int 4 byte -2,147,483,648 tl
2,147,483,647 ig
eljeles egsz szmok
float 4 byte1.5 10
45
tl3.4 10
38ig
Vals(lebegpontos) szmok
double 8 byte 5.0 10324 tl
1.7 10308
ig
Vals(lebegpontos) szmok
decimal 16 byte 1.0 1028 tl
7.9 1028ig
Vals(lebegpontos) szmok
bool 1 byte true/false True, false rtkek
char 2 byte U+0000 tl U+ffff ig Unicode karakterek
string - Karakterlncok
A tblzatban felsorolt tpusokkal deklarlhatunk vltozkat. Az albbi plda bemutatja a
deklarci pontos szintaktikjt.
int i;char c;string s;
A vltozinkat kezdrtkkel is ellthatjuk. A kezdrtk adsa azrt is fontos, mert az rtknlkl hasznlt vltozk kifejezsekben val szerepeltetse esetn a fordt hibt jelez.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
40/312
40/312
int k=0;char c=a;string z=alma;
A kvetkez program bemutatja, hogyan lehet a vltozkat deklarlni, s kezdrtkkelelltni. A kpernyn nem jelenik meg semmi, mivel kir s beolvas utastsokat nem
hasznlunk. Ezeket a fejezet ksbbi rszeiben trgyaljuk.
namespace deklaracio{
class valtozok_{
[STAThread]static void Main(string[] args){
int r=0;float h,l;int a=0,b=1,c=0;int d=a+b;int k=a+10;
float f;
char ch;char cr='a';
bool bo=true;bool ba;
string s1;string s2="Hello!";
}}
}
Gyakran elfordul hiba, hogy a deklarci sorn nem adunk nevet vagy tpust a vltoznak,
vagy egyltaln nem deklarljuk, de a programban prblunk hivatkozni r. Ekkor a .NET
fordt a futtatskor hibt jelez. Elfordul, hogy nem megfelel tpus kezd rtkkel ltjuk el
a vltozkat. Ebben az esetben a kvetkez hibazenetek jelenhetnek meg a kpernyn:
- Cannot implicitly convert type 'string' to 'int'
- Cannot implicitly convert type 'int' to 'string'
Azonos vltoznevek esetn is hibazenetet kapunk. Gyakori hiba az is, hogy az osztly,
vagyis a class neve megegyezik valamely vltoz nevvel, esetleg lefoglalt kulcsszt
akarunk alkalmazni a nvadsnl.
Bizonyos esetekben, amikor nem Error, hanem Warning tpus hibazenetet kapunk, a
fordt olyan hibt tall a programunkban, amitl az mg mkdkpes, de hatkonysgt
cskkenti. Ilyen hiba lehet, ha egy vltozt deklarlunk, de nem hasznlunk fel.
-
5/25/2018 A C# Programoz si Nyelv a Fels oktat sban
4