A C# Programozási Nyelv a Felsıoktatásban

Embed Size (px)

DESCRIPTION

C# Csharp

Citation preview

  • 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