რომან - wordpress.com...ყველა უფლება დაცულია. ამ...

456

Upload: others

Post on 31-Aug-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

  • 2

    საქართველოს ტექნიკური უნივერსიტეტი

    რომან სამხარაძე

    V i s u a l C#.N E T

    დამტკიცებულია

    სახელმძღვანელოდ სტუ-ს

    სარედაქციო-საგამომცემლო

    საბჭოს მიერ

    თბილისი

    2009

  • 3

    სახელმძღვანელო წარმოადგენს მესამე, გადამუშავებულ გამოცემას. მასში

    გადმოცემულია Microsoft Visual Studio .NET გარემოში პროგრამების შემუშავების საკითხები.

    დაწვრილებითაა განხილული C# ენის საფუძვლები, ობიექტზე ორიენტირებული

    პროგრამირების პრინციპები: ინკაფსულაცია, პოლიმორფიზმი და მემკვიდრეობითობა.

    სახელმძღვანელოში დამატებულია ინტერფეისების მემკვიდრეობითობის, რთულ და ჩადგმულ

    კლასებთან, შესრულების ნაკადებთან და სერიულ პორტებთან მუშაობის საკითხები, აგრეთვე,

    მონაცემთა ბაზებთან მუშაობის ხერხები. წიგნში უხვადაა მაგალითები და სავარჯიშოები

    თავიანთი ამოხსნებით.

    განკუთვნილია კომპიუტერული სისტემებისა და ქსელების სპეციალობის

    ბაკალავრებისა და მაგისტრებისათვის, აგრეთვე, პროგრამირების შესწავლის მსურველთათვის.

    რეცენზენტი: ტექნიკის მეცნიერებათა დოქტორი, სრული პროფესორი გ. ჩაჩანიძე

    საგამომცემლო სახლი "ტექნიკური უნივერსიტეტი", 2009

    ISBN 978-9941-14-593-3

    http://www.gtu.ge/publishinghouse/

    ყველა უფლება დაცულია. ამ წიგნის არც ერთი ნაწილი (იქნება ეს ტექსტი, ფოტო, ილუსტრაცია

    და სხვა) არანაირი ფორმით და საშუალებით (იქნება ეს ელექტრინული თუ მექანიკური) არ

    შეიძლება გამოყენებულ იქნას გამომცემლის წერილობითი ნებართვის გარეშე.

    საავტორო უფლებების დარღვევა კანონით ისჯება.

  • 4

    წიგნს ვუძღვნი

    ჩემს შვილებს ანას და საბას

    მადლიერება

    მადლობას ვუხდი ჯეონეთის დირექტორს ალექსანდრე ქევხიშვილს და დირექტორის

    მოადგილეს ია ლასურაშვილს გაწეული ტექნიკური დახმარებისათვის.

    მადლობას ვუხდი პროგრამისტ ზურაბ ნონიაშვილს ფასდაუდებელი რჩევებისა და

    თანადგომისათვის.

  • 5

    სარჩევი

    წინასიტყვაობა .............................................................................................................................................. 10

    I ნაწილი. C# ენა............................................................................................................................................ 11

    თავი 1. შესავალი .......................................................................................................................................... 11

    პროგრამირების ისტორიის მოკლე მიმოხილვა ..............................................................................11

    C# ენის კავშირი .NET Framework გარემოსთან ................................................................................12

    ობიექტზე ორიენტირებული პროგრამირება ..................................................................................13

    ინკაფსულაცია ..................................................................................................................................... 13

    პოლიმორფიზმი .................................................................................................................................. 14

    მემკვიდრეობითობა ........................................................................................................................... 14

    თავი 2. C# ენის საფუძვლები .................................................................................................................... 15

    პირველი პროგრამა .............................................................................................................................15

    კომენტარები ........................................................................................................................................ 21

    C# ენის საბაზო ტიპები ......................................................................................................................21

    მონაცემთა ჩვეულებრივი ტიპები .................................................................................................... 21

    მთელრიცხვა ტიპები .......................................................................................................................... 21

    მცურავწერტილიანი ტიპები............................................................................................................. 22

    decimal ტიპი ......................................................................................................................................... 23

    char ტიპი (სიმბოლო) ......................................................................................................................... 23

    bool ტიპი ............................................................................................................................................... 25

    ლიტერალები ....................................................................................................................................... 26

    ცვლადები და მათი ინიციალიზება .................................................................................................26

    ცვლადის ინიციალიზება ................................................................................................................... 27

    ცვლადების დინამიური ინიციალიზება ........................................................................................ 27

    ოპერატორები ......................................................................................................................................27

    არითმეტიკის ოპერატორები ............................................................................................................ 28

    ინკრემენტისა და დეკრემენტის ოპერატორები ............................................................................ 29

    შედარებისა და ლოგიკის ოპერატორები ........................................................................................ 30

    მინიჭების ოპერატორი .......................................................................................................................32

    ოპერატორების პრიორიტეტები ........................................................................................................33

    გამოსახულებები. მათემატიკის მეთოდები ....................................................................................33

    ტიპების გარდაქმნა .............................................................................................................................36

    ტიპების დაყვანის ოპერატორი (cast operator) ............................................................................... 37

    ტიპების გარდაქმნა გამოსახულებებში ........................................................................................... 38

    თავი 3. მმართველი ოპერატორები .......................................................................................................... 41

    ამორჩევის ოპერატორები ...................................................................................................................41

    if ოპერატორი ....................................................................................................................................... 41

    ჩადგმული if ოპერატორი .................................................................................................................. 41

    პროგრამული კოდის ბლოკები. ხილვადობის უბანი .................................................................. 42

    switch ოპერატორი .............................................................................................................................. 44

    იტერაციის ოპერატორები ..................................................................................................................47

    for ოპერატორი ..................................................................................................................................... 47

    მაგალითები ......................................................................................................................................... 50

    while ციკლი ......................................................................................................................................... 51

    do-while ციკლი .................................................................................................................................... 52

    გადასვლის ოპერატორები .................................................................................................................52

    break ოპერატორი ................................................................................................................................ 52

    continue ოპერატორი ........................................................................................................................... 53

  • 6

    goto ოპერატორი .................................................................................................................................. 54

    ტერნარული ოპერატორი ...................................................................................................................54

    თავი 4. მასივები, ბიტობრივი ოპერაციები და ჩამოთვლები ........................................................ 56

    მასივები ...............................................................................................................................................56

    ერთგანზომილებიანი მასივები ........................................................................................................ 56

    ორგანზომილებიანი მასივები .......................................................................................................... 58

    გაუსწორებელი ("დაკბილული") მასივები ......................................................................................60

    Length თვისება ....................................................................................................................................61

    foreach ციკლი ......................................................................................................................................62

    ბიტობრივი ოპერატორები .................................................................................................................64

    &, |, ^ და ~ ბიტობრივი ოპერატორები ............................................................................................ 65

    ძვრის ოპერატორები ........................................................................................................................... 68

    ჩამოთვლები ........................................................................................................................................69

    თავი 5. კლასები, ინკაფსულაცია, მეთოდები ......................................................................................... 71

    კლასის გამოცხადება ..........................................................................................................................71

    ინკაფსულაცია .....................................................................................................................................72

    ობიექტების შექმნა ..............................................................................................................................74

    მიმართვითი ტიპის მნიშვნელობის მინიჭება .................................................................................75

    მეთოდები ............................................................................................................................................75

    მეთოდიდან მართვის დაბრუნება ....................................................................................................78

    პარამეტრების გამოყენება ..................................................................................................................79

    კონსტრუქტორები ..............................................................................................................................81

    დესტრუქტორები და "ნაგვის შეგროვება" .......................................................................................83

    this საკვანძო სიტყვა ...........................................................................................................................83

    რთული კლასები ................................................................................................................................85

    ჩადგმული კლასები ............................................................................................................................86

    სტრუქტურები ....................................................................................................................................87

    შემთხვევითი რიცხვების გენერატორი ............................................................................................88

    თავი 6. მეთოდები უფრო დაწვრილებით. პოლიმორფიზმი ............................................................. 90

    მეთოდისათვის ობიექტის გადაცემა ................................................................................................90

    მეთოდისათვის არგუმენტების გადაცემის ხერხები ......................................................................91

    ref და out მოდიფიკატორები .............................................................................................................93

    ref მოდიფიკატორი ............................................................................................................................. 93

    out მოდიფიკატორი ............................................................................................................................ 94

    params მოდიფიკატორი ......................................................................................................................95

    მეთოდის მიერ ობიექტის დაბრუნება ..............................................................................................97

    მეთოდის გადატვირთვა. პოლიმორფიზმი .....................................................................................98

    კონსტრუქტორების გადატვირთვა ................................................................................................. 101

    გადატვირთვადი კონსტრუქტორის გამოძახება this სიტყვის გამოყენებით ............................. 103

    რეკურსია ........................................................................................................................................... 104

    სტატიკური კომპონენტები .............................................................................................................. 105

    static მოდიფიკატორი ....................................................................................................................... 105

    მუდმივები .......................................................................................................................................... 107

    მხოლოდწაკითხვადი ველები ......................................................................................................... 107

    თავი 7. მემკვიდრეობითობა. ვირტუალური მეთოდები ................................................................... 109

    მემკვიდრეობითობის საფუძვლები ................................................................................................ 109

    protected მოდიფიკატორი ................................................................................................................ 111

    კონსტრუქტორები და მემკვიდრეობითობა. base საკვანძო სიტყვა ............................................ 112

    ცვლადების დამალვა მემკვიდრეობითობის დროს ...................................................................... 114

  • 7

    კლასების მრავალდონიანი იერარქიის შექმნა .............................................................................. 116

    მიმართვები წინაპარი და მემკვიდრე კლასების ობიექტებზე ..................................................... 119

    ვირტუალური მეთოდები ................................................................................................................ 120

    აბსტრაქტული კლასები ................................................................................................................... 126

    მემკვიდრეობითობის აკრძალვა ..................................................................................................... 130

    პოლიმორფიზმის აკრძალვა ............................................................................................................ 130

    ობიექტების ტიპების დაყვანა ......................................................................................................... 131

    object კლასი ....................................................................................................................................... 132

    თავი 8. თვისებები, ინდექსატორები და ოპერატორების გადატვირთვა ........................................ 133

    თვისებები .......................................................................................................................................... 133

    ინდექსატორები ................................................................................................................................ 135

    ერთგანზომილებიანი ინდექსატორები ........................................................................................ 135

    მრავალგანზომილებიანი ინდექსატორები .................................................................................. 138

    ოპერატორების გადატვირთვა ........................................................................................................ 140

    ოპერატორის მეთოდი ...................................................................................................................... 141

    ბინარული ოპერატორების გადატვირთვა ................................................................................... 141

    უნარული ოპერატორების გადატვირთვა .................................................................................... 143

    შედარების ოპერატორების გადატვირთვა ................................................................................... 144

    ოპერატორების გადატვირთვისას არსებული შეზღუდვები .................................................... 145

    თავი 9. დელეგატები, მოვლენები, ინტერფეისები და სახელების სივრცე ..................................... 146

    დელეგატები ...................................................................................................................................... 146

    დელეგატების მრავალმისამართიანობა ....................................................................................... 149

    მოვლენები ......................................................................................................................................... 151

    ფართოსამაუწყებლო მოვლენა ....................................................................................................... 152

    ინტერფეისები ................................................................................................................................... 155

    ინტერფეისების რეალიზება............................................................................................................ 155

    კლასების მემკვიდრეობითობა და ინტერფეისის რეალიზება ................................................. 157

    წარმოებული ინტერფეისები .......................................................................................................... 159

    ინტერფეისული მიმართვები .......................................................................................................... 161

    ინტერფეისის თვისებები ................................................................................................................. 163

    ცხადი რეალიზება ............................................................................................................................. 164

    ინტერფეისის წევრების დამალვა .................................................................................................. 165

    სახელების სივრცე ............................................................................................................................ 166

    სახელების სივრცის გამოცხადება.................................................................................................. 166

    using დირექტივა................................................................................................................................ 167

    ჩადგმული სახელების სივრცე ....................................................................................................... 168

    ავტომატურად განსაზღვრული სახელების სივრცე ................................................................... 170

    თავი 10. ინფორმაციის შეტანა-გამოტანა .............................................................................................. 171

    შეტანა-გამოტანის ნაკადების კლასები .......................................................................................... 171

    ბაიტების ნაკადები ........................................................................................................................... 171

    სიმბოლოების ნაკადები ................................................................................................................... 174

    ორობითი ნაკადები .......................................................................................................................... 174

    FileStream კლასი................................................................................................................................ 174

    ფაილის გახსნა და დახურვა ........................................................................................................... 174

    ფაილიდან ბაიტების წაკითხვა ....................................................................................................... 175

    ფაილში ბაიტების ჩაწერა ................................................................................................................ 176

    ფაილში სიმბოლოების შეტანა-გამოტანა ...................................................................................... 178

    StreamWriter კლასი ........................................................................................................................... 178

    StreamReader კლასი .......................................................................................................................... 179

  • 8

    ორობითი მონაცემების წაკითხვა და ჩაწერა ................................................................................. 179

    BinaryWriter კლასი ........................................................................................................................... 179

    BinaryReader ნაკადი .......................................................................................................................... 180

    ფაილებთან პირდაპირი მიმართვა ................................................................................................. 182

    ფაილის შესახებ ინფორმაციის მიღება ........................................................................................... 183

    კატალოგებთან მუშაობა .................................................................................................................. 186

    ფაილების არჩევა .............................................................................................................................. 189

    NetworkStream კლასი ....................................................................................................................... 191

    MemoryStream და BufferedStream კლასები .................................................................................... 193

    მონაცემების ასინქრონული შეტანა-გამოტანა .............................................................................. 194

    თავი 11. განსაკუთრებული სიტუაციები .............................................................................................. 197

    განსაკუთრებული სიტუაციების დამუშავების საფუძვლები ..................................................... 197

    try და catch ბლოკები ........................................................................................................................ 198

    try და catch ბლოკების გამოყენების მაგალითები ........................................................................ 201

    რამდენიმე catch ბლოკის გამოყენება ............................................................................................. 205

    ყველა განსაკუთრებული სიტუაციის დაჭერა .............................................................................. 205

    ჩადგმული try ბლოკები ................................................................................................................... 206

    განსაკუთრებული სიტუაციის იძულებით გენერირება .............................................................. 207

    finally ბლოკი ..................................................................................................................................... 208

    საკუთარი განსაკუთრებული სიტუაციის შექმნა .......................................................................... 210

    checked და unchecked ოპერატორები .............................................................................................. 211

    გამართვა ............................................................................................................................................ 213

    წყვეტის წერტილების შექმნა .......................................................................................................... 213

    ცვლადების მნიშვნელობების ნახვა ............................................................................................... 213

    პროგრამის კოდის შესრულება ბიჯობრივ რეჟიმში ................................................................... 217

    თავი12. სტრიქონები ................................................................................................................................. 219

    სტრიქონები ....................................................................................................................................... 219

    სტრიქონებთან სამუშაო მეთოდები .............................................................................................. 219

    სტრიქონების მასივები ..................................................................................................................... 228

    სტრიქონების უცვლელობა ............................................................................................................. 228

    დინამიური სტრიქონები ................................................................................................................. 229

    დინამიური სტრიქონის შექმნა ....................................................................................................... 229

    StringBuilder კლასის თვისებები და მეთოდები .......................................................................... 231

    II ნაწილი. C# ენის სხვა შესაძლებლობები ............................................................................................ 233

    თავი 13. თარიღი, დრო და დროის ინტერვალები ............................................................................. 233

    თარიღი და დრო ............................................................................................................................... 233

    დროის ინტერვალები ....................................................................................................................... 241

    თავი 14. კოლექციები ............................................................................................................................... 246

    დინამიური მასივები ........................................................................................................................ 246

    ჰეშ-ცხრილები ................................................................................................................................... 255

    დახარისხებული სიები .................................................................................................................... 258

    რიგები ................................................................................................................................................ 263

    სტეკები .............................................................................................................................................. 264

    ბიტების მასივები .............................................................................................................................. 266

    თავი 15. შესრულების ნაკადები ............................................................................................................ 269

    შესრულების ნაკადის განსაზღვრა ................................................................................................. 269

    შესრულების ნაკადის შექმნა ........................................................................................................... 271

    შესრულების ნაკადის პრიორიტეტები .......................................................................................... 274

    შესრულების ნაკადის მდგომარეობები .......................................................................................... 275

  • 9

    შესრულების ნაკადის ლოკალური მონაცემები ............................................................................ 277

    შესრულების ნაკადების მართვა ..................................................................................................... 279

    Timer კლასი ........................................................................................................................................ 279

    Join() მეთოდი .................................................................................................................................... 281

    lock საკვანძო სიტყვა ......................................................................................................................... 282

    Interlocked კლასი .............................................................................................................................. 286

    Monitor კლასი .................................................................................................................................... 288

    Mutex კლასი ....................................................................................................................................... 289

    თავი 16. საბაზო ბიბლიოთეკის სხვა კლასები .................................................................................... 292

    გლობალიზება ................................................................................................................................... 292

    გრაფიკა .............................................................................................................................................. 296

    გეომეტრიული ფიგურების ხატვა ................................................................................................. 300

    ფიგურების შევსება ფერით ............................................................................................................. 303

    სტრიქონების ხატვა .......................................................................................................................... 304

    გამოსახულებასთან მუშაობა .......................................................................................................... 305

    მონაცემების დაშიფვრა და გაშიფვრა ............................................................................................. 308

    სიმეტრიული კრიპტოგრაფია ........................................................................................................ 309

    ასიმეტრიული კრიპტოგრაფია ....................................................................................................... 311

    სერიულ პორტებთან მუშაობა ......................................................................................................... 311

    III ნაწილი. მონაცემთა ბაზები ................................................................................................................ 316

    თავი 17. ADO.NET ბიბლიოთეკა ............................................................................................................. 316

    შესავალი ............................................................................................................................................ 316

    მონაცემთა ბაზასთან მიმართვა Visual Studio .NET-ის საშუალებებით ...................................... 317

    ADO.NET კლასები ............................................................................................................................ 321

    მონაცემებთან სამუშაო კლასები და ობიექტები ......................................................................... 321

    მართვადი კლასები და ობიექტები ................................................................................................ 322

    მონაცემთა ბაზასთან მუშაობა ვიზუალური და არავიზუალური კომპონენტებით................. 323

    მონაცემების გაფილტვრა................................................................................................................. 334

    მონაცემების ძებნა ............................................................................................................................. 335

    ნავიგაცია ............................................................................................................................................ 336

    გამოთვლები....................................................................................................................................... 336

    კავშირის შეცვლა პროგრამულად .................................................................................................. 338

    მოთხოვნების შესრულება ADO.NET კლასების გამოყენებით .................................................... 339

    SELECT მოთხოვნის შესრულება .................................................................................................... 339

    INSERT მოთხოვნების შესრულება ................................................................................................. 341

    DELETE მოთხოვნის შესრულება .................................................................................................... 343

    UPDATE მოთხოვნის შესრულება .................................................................................................. 346

    ტრანზაქციებთან მუშაობა ADO.NET საშუალებებით ................................................................ 350

    სტრიქონების გაფილტვრა ............................................................................................................... 352

    სტრიქონების დახარისხება ............................................................................................................. 353

    მონაცემების ძებნა ............................................................................................................................. 354

    შენახული პროცედურებისა და ფუნქციების შესრულება ........................................................ 356

    გამოთვლების შესრულება .............................................................................................................. 357

    Access სისტემასთან კავშირი ........................................................................................................... 358

    დანართი 1. სავარჯიშოები თავების მიხედვით ................................................................................... 362

    დანართი 2. სავარჯიშოების ამოხსნები ................................................................................................. 390

    ლიტერატურა ............................................................................................................................................. 455

  • 10

    წინასიტყვაობა

    Visual Studio .NET წარმოადგენს დაპროგრამების თანამედროვე ტექნოლოგიას. მისი

    საშუალებით შესაძლებელია სხვადასხვა ტიპის პროგრამა-დანართების შემუშავება, როგორიცაა,

    Windows და ვებ-პროგრამები, ქსელური პროგრამები, მონაცემთა ბაზები და ა.შ. ის

    განკუთვნილია ქსელში ჩართულ კომპიუტერებთან და მოწყობილობებთან სამუშაოდ.

    წიგნის მიზანია მკითხველს შეასწავლოს C# ენა, ობიექტზე ორიენტირებული

    პროგრამირების საფუძვლები და განკუთვნილია დამწყები პროგრამისტებისათვის. თუმცა,

    გადმოცემულმა მასალამ შეიძლება პროფესიონალებიც დააინტერესოს.

    წიგნში აღწერილია Microsoft Visual Studio .NET 2008 სისტემა.

    აუცილებელი პროგრამული უზრუნველყოფაა - Windows XP - SP/2-SP/3, Vista, Visual

    Studio.NET.

    წიგნი არის ზემოთ აღნიშნული საკითხების ქართულ ენაზე გადმოცემის ერთ-ერთი

    პირველი მცდელობა, ამიტომ ის არ არის დაზღვეული ხარვეზებისაგან. ავტორი მადლიერებით

    მიიღებს წიგნში გადმოცემული მასალის დახვეწისა და სრულყოფის მიზნით გამოთქმულ

    შენიშვნებსა და მოსაზრებებს. ისინი შეგიძლიათ მომაწოდოთ მისამართებზე:

    [email protected], [email protected], [email protected].

    საქართველოს ტექნიკური უნივერსიტეტის

    ინფორმატიკისა და მართვის სისტემების ფაკულტეტის

    კომპიუტერული ინჟინერიის დეპარტამენტის

    სრული პროფესორი, ტექნიკის მეცნიერებათა დოქტორი

    რომან სამხარაძე

    mailto:[email protected]:[email protected]

  • 11

    I ნაწილი. C# ენა

    თავი 1. შესავალი

    პროგრამირების ისტორიის მოკლე მიმოხილვა

    დაპროგრამების ენები გამოიყენება ისეთი მრავალფეროვანი ამოცანების გადასაწყვეტად,

    როგორიცაა მონაცემთა საინფორმაციო სისტემების მართვა, რთული მათემატიკური და

    ეკონომიკური ამოცანების გადაწყვეტა, მედიცინა და ა.შ. C# ენა, რომელიც შეიმუშავა Microsoft

    კომპანიამ, მთლიანად პასუხობს პროგრამირების თანამედროვე სტანდარტებს და

    განკუთვნილია .NET Framework ტექნოლოგიის განვითარების უზრუნველყოფისათვის. ის არის

    დაპროგრამების მძლავრი ენა განკუთვნილი Windows გარემოში მომუშავე თანამედროვე

    კომპიუტერული სისტემებისთვის, რომლებიც იყენებენ ინტერნეტ-ტექნოლოგიებს.

    დაპროგრამების ენებს შორის არსებობს კავშირი. ყოველი ახალი ენა ადრე შექმნილი

    ენებისაგან მემკვიდრეობით იღებს გარკვეულ თვისებებს. კერძოდ, C# ენამ ბევრი სასარგებლო

    თვისება C, C++ და Java ენებისაგან მემკვიდრეობით მიიღო.

    C ენა შეიქმნა ნიუ-ჯერსის შტატის ქალაქ მიურეი-ჰილის Bell Laboratories კომპანიის

    სისტემური პროგრამისტის დენის რიჩის მიერ 1972 წელს. თითქმის მთლიანად ამ ენაზე

    დაიწერა Unix ოპერაციული სისტემის ბირთვი. შემდგომში პროგრამების ზომისა და სირთულის

    ზრდამ საკმაოდ გააძნელა მათთან მუშაობა. გამოსავალი იყო სტრუქტურულ პროგრამირებაზე

    გადასვლა. სწორედ C გახდა 1980 წლებიდან ყველაზე ხშირად გამოყენებადი სტრუქტურული

    პროგრამირების ენა.

    პროგრამირების განვითარებასთან ერთად კვლავ დადგა დიდი ზომის პროგრამებთან

    მუშაობის პრობლემა. აუცილებელი გახდა ახალი მიდგომების შემუშავება. ერთ-ერთი მათგანია

    ობიექტზე ორიენტირებული პროგრამირება (ოოპ). ის იძლევა დიდი ზომის პროგრამებთან

    ეფექტური მუშაობის შესაძლებლობას. შესაბამისად, შეიქმნა C ენის ობიექტზე ორიენტირებული

    ვერსია, რომელსაც 1983 წლიდან C++ დაერქვა. ის შემუშავებულ იქნა იმავე Bell Laboratories

    კომპანიაში ბიარნ სტრაუსტრაპის მიერ. C++ მთლიანად მოიცავს C ენას და შეიცავს ობიექტზე

    ორიენტირებული პროგრამირების შესაძლებლობებს. 1990 წლიდან იწყება C++ ენის მასობრივი

    გამოყენება და ის ხდება ყველაზე პოპულარული დაპროგრამების ენებს შორის.

    დაპროგრამების ენების განვითარების საქმეში მნიშვნელოვანი მიღწევა იყო Java ენის

    შემუშავება Sun Microsystem კომპანიაში. მისი ავტორები იყვნენ ჯეიმს გოსლინგი, პატრიკ

    ნოტონი, კრის ვორტი, ედ ფრანკი და მაიკ შერიდანი. მასზე მუშაობა დაიწყო 1993 წლიდან. Java

    არის სტრუქტურული ობიექტზე ორიენტირებული ენა, რომელმაც C++ ენიდან აიღო სინტაქსი

    და სტრატეგია. ინტერნეტის ფართო გავრცელებამდე პროგრამების უმრავლესობის

    კომპილირება ხდებოდა კონკრეტული პროცესორისა და ოპერაციული სისტემისათვის.

    ინტერნეტის განვითარებასთან ერთად გაჩნდა სხვადასხვა პროცესორებისა და ოპერაციული

    სისტემის მქონე კომპიუტერების დაკავშირების შესაძლებლობა. ამან წინა პლანზე წამოსწია

    ერთი პლატფორმიდან მეორეზე პროგრამების ადვილად გადატანის პრობლემა. მის

    გადასაწყვეტად საჭირო გახდა ახალი ენის შემუშავება. სწორედ ასეთი ენა გახდა Java.

    Java თავიდანვე შეიქმნა როგორც პლატფორმაზე დამოუკიდებელი ენა. მას შეეძლო

    პლატფორმათაშორისი გადატანადი კოდის შექმნა, რაც გახდა მისი სწრაფი გავრცელების

    მიზეზი. გადატანადობა მიიღწევა პროგრამის საწყისი კოდის შუალედურ ენაში ტრანსლირების

    გზით, რომელსაც ბაიტ-კოდი ეწოდება. შემდეგ ეს შუალედური ენა სრულდება Java

    ვირტუალური მანქანის მიერ (Java Virtual Machine, JVM). შედეგად, Java-პროგრამა შეიძლება

    შესრულდეს ნებისმიერ პლატფორმაზე, რომელსაც Java ვირტუალური მანქანა აქვს.

  • 12

    Java ენისაგან განსხვავებით C და C++ ენებში პროგრამის საწყისი კოდის კომპილაცია

    ხორციელდება შესრულებად კოდში, რომელიც დაკავშირებულია კონკრეტულ პროცესორთან

    და ოპერაციულ სისტემასთან. ასეთი პროგრამის გასაშვებად სხვადასხვა პლატფორმაზე

    აუცილებელია პროგრამის საწყისი კოდის კომპილირება თითოეული პლატფორმისათვის. ეს კი

    შრომატევადი და ძვირადღირებული პროცესია. ამიტომაც, C# ენაში გადმოტანილი იქნა Java

    ენაში გამოყენებული მიდგომა - შუალედური ენის გამოყენება.

    მართალია, Java ენამ გადაჭრა ერთი პლატფორმიდან მეორეზე პროგრამების

    გადატანასთან დაკავშირებული ბევრი პრობლემა, მაგრამ, მას აქვს რამდენიმე ნაკლი.

    მაგალითად, ის ვერ უზრუნველყოფს რამდენიმე დაპროგრამების ენის ურთიერთქმედებას, ე.ი.

    არ უზრუნველყოფს მრავალენობრივ პროგრამირებას. მრავალენობრივი პროგრამირების ქვეშ

    იგულისხმება დაპროგრამების სხვადასხვა ენაზე დაწერილი კოდის ერთად მუშაობის უნარი. ეს

    შესაძლებლობა მეტად მნიშვნელოვანია დიდი პროგრამების შემუშავებისას, აგრეთვე,

    ცალკეული კომპონენტების შექმნისას, რომელთა გამოყენება შესაძლებელი იქნება მრავალ

    დაპროგრამების ენასა და სხვადასხვა ოპერაციულ სისტემაში.

    Java ენის ერთ-ერთი სერიოზული ნაკლია, აგრეთვე, Windows პლატფორმის პირდაპირი

    უზრუნველყოფის არქონა, რომელიც ამჟამად მსოფლიოში ყველაზე გავრცელებული

    ოპერაციული სისტემაა. Java-პროგრამების შესრულება Windows გარემოში შესაძლებელია იმ

    შემთხვევაში თუ დაყენებულია (დაინსტალირებულია) Java ვირტუალური მანქანა.

    ამ პრობლემის გადასაწყვეტად Microsoft კომპანიამ 1990 წლების ბოლოს შეიმუშავა C#

    ენა. მისი ავტორია ანდერს ჰელსბერგი. C# ენა მჭიდროდაა დაკავშირებული C, C++ და Java

    ენებთან. ის აგებულია C++ ენაში განსაზღვრულ ობიექტურ მოდელზე, C ენიდან აღებულია

    სინტაქსი, ოპერატორები და საკვანძო სიტყვები, Java ენიდან კი - შუალედური ენის გამოყენება.

    C# ენის ერთ-ერთი მნიშვნელოვანი სიახლეა პროგრამული უზრუნველყოფის კომპონენტების

    ჩადგმული უზრუნველყოფა. ფაქტობრივად C# ენა შექმნილია, როგორც კომპონენტებზე

    ორიენტირებული ენა, რომელიც მოიცავს ისეთ ელემენტებს, როგორიცაა თვისებები, მეთოდები

    და მოვლენები. მაგრამ, ყველაზე მნიშვნელოვანი სიახლე C# ენაში არის მრავალენობრივ

    გარემოში მისი მუშაობის უნარი.

    C# ენის კავშირი .NET Framework გარემოსთან

    .NET Framework განსაზღვრავს გარემოს, რომელიც უზრუნველყოფს პლატფორმაზე

    დამოუკიდებელი პროგრამა-დანართების (Application) შემუშავებასა და შესრულებას. ის,

    აგრეთვე, უზრუნველყოფს პროგრამების გადატანადობას. შედეგად, Windows-პროგრამები

    შეგვიძლია სხვა პლატფორმებზე ვამუშავოთ.

    C# ენა იყენებს .NET Framework გარემოს ორ მთავარ ნაწილს. პირველია ენაზე

    დამოუკიდებელი შესრულების გარემო (Common Language Runtime, CLR). ის მართავს ჩვენი

    პროგრამის შესრულებას და წარმოადგენს .NET Framework ტექნოლოგიის ნაწილს, რომელიც

    უზრუნველყოფს პროგრამების გადატანადობასა და პროგრამირებას რამდენიმე ენის

    გამოყენებით. მეორეა - კლასების ბიბლიოთეკა .NET Framework, რომელიც პროგრამას

    საშუალებას აძლევს მიმართოს შესრულების გარემოს, მაგალითად, მონაცემების შეტანა-

    გამოტანისათვის.

    მოკლედ განვიხილოთ CLR სისტემის მუშაობა. ფაილს, რომელიც შეიცავს C#-პროგრამის

    საწყის კოდს .cs გაფართოება აქვს. ამ ფაილის კომპილირებას მანქანურ კოდებში ასრულებს

    პროგრამა, რომელსაც კომპილატორი ეწოდება. C#-პროგრამების კომპილირების შედეგად

    მიიღება ფაილი, რომელიც შეიცავს შუალედურ ენას - MSIL (Microsoft Intermediate Language,

    MSIL). ის შედგება გადასატანი ინსტრუქციების ნაკრებისაგან, რომელიც არაა დამოკიდებული

  • 13

    კონკრეტული პროცესორის ინსტრუქციების ნაკრებზე. CLR სისტემა ახდენს შუალედური

    კოდის ტრანსლირებას შესრულებად კოდში პროგრამის გაშვების დროს. MSIL ენაში

    კომპილირებული პროგრამა შეიძლება ნებისმიერ ოპერაციულ სისტემაში შესრულდეს.

    MSIL ენა შესრულებად კოდში გარდაიქმნება JIT კომპილატორის მიერ (just in time -

    საჭირო მომენტში). C#-პროგრამის გაშვებისას CLR სისტემა ააქტიურებს JIT კომპილატორს,

    რომელიც MSIL ენას გარდაქმნის მოცემული პროცესორის შიდა კოდად. ამასთან, პროგრამის

    ნაწილების გარდაქმნა საჭიროებისდა მიხედვით სრულდება.

    .NET Framework გარემოში მუშაობის დროს ჩვენ ვქმნით მართვად კოდს (managed code),

    რომელიც სრულდება CLR სისტემის მართვის ქვეშ. მართვად კოდს შემდეგი უპირატესობები

    აქვს: მეხსიერების მართვა, სხვადასხვა ენების შეთავსების შესაძლებლობა, მონაცემების

    გადაცემის უსაფრთხოების მაღალი დონე, ვერსიის კონტროლის უზრუნველყოფა და

    პროგრამული უზრუნველყოფის კომპონენტების ადვილი ურთიერთქმედების საშუალება.

    არსებობს, აგრეთვე, არამართვადი კოდი (unmanaged code), რომელსაც CLR სისტემა არ

    ასრულებს. .NET Framework გარემოს შექმნამდე ყველა კოდი იყო არამართვადი. ამჟამად, ორივე

    სახის კოდს შეუძლია ერთად მუშაობა. მაგალითად, C++ ქმნის მართვად კოდს, რომელსაც

    შეუძლია არამართვად კოდთან ურთიერთქმედება.

    თუ ჩვენს მიერ შექმნილ კოდს გამოიყენებენ სხვა ენებზე დაწერილი პროგრამები, მაშინ

    მათი მაქსიმალური თავსებადობისათვის უნდა დავიცვათ საერთოენობრივი სპეციფიკაცია

    (Common Language Specification, CLS). ის აღწერს სხვადასხვა ენებისათვის საერთო

    მახასიათებლებს.

    ობიექტზე ორიენტირებული პროგრამირება

    ჩვენს გარშემო ბევრი ობიექტია. მაგალითად, ავტომობილი, თვითმფრინავი,

    მატარებელი, მაღაზია, ავადმყოფი, ექიმი, სტუდენტი, გეომეტრიული ფიგურა და ა.შ. მსგავსი

    ობიექტები შეგვიძლია დავაჯგუფოთ კლასებში. მაგალითად, სხვადასხვა ავტომობილს ბევრი

    საერთო თვისება აქვს, ამიტომ ისინი შეგვიძლია ავტომობილის საერთო კლასში გავაერთიანოთ.

    ასევე სხვადასხვა ტიპის თვითმფრინავს ბევრი საერთო თვისება აქვს, ამიტომ ისინი შეგვიძლია

    თვითმფრინავის საერთო კლასში გავაერთიანოთ და ა.შ.

    ობიექტზე ორიენტირებულ ენებში პროგრამები ორგანიზებულია მონაცემების გარშემო,

    ანუ ჩვენ განვსაზღვრავთ მონაცემებს და იმ პროგრამებს, რომლებიც ამ მონაცემებთან მუშაობენ.

    C# ენა ეფუძნება ობიექტზე ორიენტირებული პროგრამირების (ოოპ) სამ პრინციპს პრინციპს:

    ინკაფსულაცია, პოლომორფიზმი და მემკვიდრეობითობა. მოკლედ განვიხილოთ თითოეული

    მათგანი.

    ინკაფსულაცია

    ინკაფსულაცია (encapsulation) არის დაპროგრამების მექანიზმი, რომელიც აერთიანებს

    პროგრამის კოდსა და იმ მონაცემებს, რომლებთანაც ეს კოდი მუშაობს, აგრეთვე, გამიჯნავს მათ

    (კოდსა და მონაცემებს) სხვა პროგრამების მხრიდან მიმართვებისაგან. ამით ხდება მათი დაცვა

    არასწორი გამოყენებისაგან. ობიექტზე ორიენტირებულ ენაში პროგრამის კოდი და მონაცემები

    ერთმანეთს ისე უკავშირდება, რომ ქმნიან ერთ ავტონომიურ სტრუქტურას, რომელსაც ობიექტი

    ეწოდება.

    ობიექტის შიგნით პროგრამის კოდი და მონაცემები სხვა ობიექტებისათვის შეიძლება

    იყოს დახურული (private) ან ღია (public). დახურულ (პრივატულ) კოდთან და მონაცემებთან

    მიმართვა შეუძლიათ მხოლოდ ამავე ობიექტში აღწერილ კოდებს. ეს იმას ნიშნავს, რომ

    დახურულ კოდსა და მონაცემებს ვერ მივმართავთ პროგრამის სხვა ნაწილიდან, რომელიც

  • 14

    ობიექტის გარეთაა მოთავსებული. ღია (საერთოწვდომის) კოდთან და მონაცემებთან მიმრთვა

    შესაძლებელია პროგრამის ნებისმიერი ნაწილიდან.

    კლასი არის სტრუქტურა, რომელიც იყენებს რა ინკაფსულაციის პრინციპს, განსაზღვრავს

    კოდს და იმ მონაცემებს, რომლებთანაც ის მუშაობს. კლასი გამოიყენება ობიექტების აღსაწერად

    და შესაქმნელად. ობიექტები კლასის ეგზემპლარებს წარმოადგენენ. კლასის შემადგენელ კოდსა

    და მონაცემებს კლასის წევრები ეწოდებათ, კლასის მიერ განსაზღვრულ მონაცემებს კი -

    ეგზემპლარის ცვლადები. კლასში განსაზღვრულ პროგრამის კოდებს მეთოდები ეწოდებათ.

    პოლიმორფიზმი

    პოლიმორფიზმი (polymorphism) არის დაპროგრამების მექანიზმი, რომელიც მსგავს

    ობიექტებს საშუალებას აძლევს ერთი ინტერფეისის გამოყენებით მიმართონ სხვადასხვა

    მეთოდებს. სხვა სიტყვებით, რომ ვთქვათ, ერთი და იგივე სახელი შეიძლება რამდენიმე

    მეთოდს ჰქონდეს, რომლებიც ერთსა და იმავე მოქმედებებს სხვადასხვა ტიპის მონაცემებზე

    ასრულებენ. ამ შემთხვევაში არგუმენტის ტიპის მიხედვით სრულდება შესაბამისი მეთოდის

    გამოძახება. კონკრეტულ მეთოდს არგუმენტის ტიპის მიხედვით ირჩევს კომპილატორი.

    ამრიგად, პოლიმორფიზმი საშუალებას გვაძლევს რამდენიმე სახელის ნაცვლად გამოვიყენოთ

    ერთი. პოლიმორფიზმის უზრუნველყოფა ხდება მეთოდების გადატვირთვის საშუალებით.

    მემკვიდრეობითობა

    მემკვიდრეობითობა (inheritance) არის დაპროგრამების მექანიზმი, რომლის

    საშუალებითაც ერთ ობიექტს მემკვიდრეობით გადაეცემა მეორე ობიექტის ელემენტები. ამავე

    დროს დაცულია იერარქიული სტრუქტურა მიმართული ზევიდან ქვევით. მაგალითად, კლასი

    ლომი არის კატისებრთა კლასის ნაწილი, რომელიც თავის მხრივ ეკუთვნის მტაცებლები კლასს.

    ეს უკანასკნელი კი არის ცხოველები კლასის ნაწილი. ცხოველები კლასს აქვს ისეთი

    მახასიათებლები, როგორიცაა ტყეში ცხოვრება და ა.შ. იგივე მახასიათებლები შეგვიძლია

    გამოვიყენოთ მტაცებლები კლასის მიმართ, რომელსაც დამატებით აქვს თავისი სპეციფიკური

    მახასიათებლები, როგორიცაა ნადირობის უნარი და ა.შ., რომელიც მას სხვა ცხოველებისაგან

    განასხვავებს. აღნიშნული მახასიათებლების მატარებელია კატისებრთა კლასი. ის დამატებით

    შეიცავს მისთვის დამახასიათებელ მახასიათებლებს, რომლებიც მას სხვა მტაცებლებისაგან

    განასხვავებს. დაბოლოს, ლომი კლასი ყველა ზემოთ აღნიშნული მახასიათებლების მატა-

    რებელია და დამატებით შეიცავს მხოლოდ მისთვის დამახასიათებელ სპეციფიკურ მახასია-

    თებლებს.

    მემკვიდრეობითობის გამოყენება ობიექტს საშუალებას აძლევს განსაზღვროს ის

    ელემენტები, რომლებიც მხოლოდ მისთვისაა დამახასიათებელი. ობიექტი მშობელი (წინაპარი)

    კლასისაგან მემკვიდრეობით იღებს საერთო ელემენტებს. ამიტომ, მემკვიდრე კლასის აღწერ-

    ისას აღარ ხდება საჭირო მისი ყველა ელემენტის აღწერა.

  • 15

    თავი 2. C# ენის საფუძვლები

    პირველი პროგრამა

    C# ენაზე შევადგინოთ უმარტივესი პროგრამა, რომელიც შეასრულებს ორი მთელი

    რიცხვის შეკრებას.

    {

    // პროგრამა 2.1

    // ეს არის ჩვენი პირველი პროგრამა

    int ricxvi1, ricxvi2, jami;

    ricxvi1 = 2;

    ricxvi2 = 3;

    jami = ricxvi1 + ricxvi2;

    }

    როგორც ვხედავთ C# ენაზე შედგენილი პროგრამა იწყება გამხსნელი ფიგურული

    ფრჩხილით { და მთავრდება დამხურავი ფიგურული ფრჩხილით }. პროგრამის მეორე და მესამე

    სტრიქონებში მოთავსებულია კომენტარები, რომელებიც // სიმბოლოებით იწყება (კომენტარებს

    მოგვიანებით განვიხილავთ). მომდევნო სტრიქონში ხდება ცვლადების გამოცხადება. int სიტყვა

    (integer - მთელი) იწყებს ცვლადების გამოცხადებას და მიუთითებს, რომ ისინი მთელ რიცხვებს

    წარმოადგენენ. მას მოსდევს ცვლადების სახელები ანუ იდენტიფიკატორები, რომლებიც

    ერთმანეთისაგან მძიმეებით გამოიყოფა. წერტილ-მძიმე ამთავრებს ცვლადების გამოცხადებას,

    აგრეთვე, ერთმანეთისაგან გამოყოფს ოპერატორებსა და მეთოდებს (მეთოდი არის მცირე ზომის

    პროგრამა, რომელიც გარკვეულ მოქმედებებს ასრულებს). ცვლადების სახელები აუცილებლად

    უნდა იწყებოდეს სიმბოლოთი და უმჯობესია შევარჩიოთ შინაარსიდან გამომდინარე. C# ენაში

    ნებისმიერი ცვლადი გამოცხადებული უნდა იყოს მის გამოყენებამდე.

    ცვლადების გამოცხადების შემდეგ ricxvi1 ცვლადს ენიჭება მთელი რიცხვი - 2. "="

    სიმბოლო წარმოადგენს მინიჭების ოპერატორს. ის ახდენს მის მარჯვნივ მოთავსებული

    მნიშვნელობის გადაწერას მის მარცხნივ მოთავსებულ ცვლადში. იგივე ეხება პროგრამის

    მომდევნო სტრიქონს. უკანასკნელ სტრიქონში jami ცვლადს ენიჭება ricxvi1 და ricxvi2

    ცვლადების მნიშვნელობების ჯამი.

    თვალსაჩინოების მიზნით პროგრამის თითოეულ სტრიქონში მოთავსებულია თითო

    ოპერატორი. თუმცა ერთ სტრიქონში შეიძლება რამდენიმე ოპერატორის მოთავსება. მთავარია,

    რომ ისინი ერთმანეთისაგან წერტილ-მძიმეებით იყოს გამოყოფილი.

    ერთ-ერთი ნაკლი, რომელიც ამ პროგრამას აქვს ის არის, რომ სხვადასხვა რიცხვების

    შესაკრებად მოგვიწევს პროგრამის საწყისი კოდის შეცვლა, რაც არასწორია. გარდა ამისა,

    პროგრამას შედეგი ეკრანზე არ გამოაქვს. ამ ნაკლის აღმოსაფხვრელად გამოვიყენებთ

    ვიზუალურ კომპონენტებს, კერძოდ, მონაცემების შესატანად გა