C#

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 ვირტუალური მანქანა აქვს.

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# ენაზე პროგრამა-დანართების შემუშავება უფრო ადვილია, ვიდრე C++ ენაზე, რადგან მისი სინტაქსი უფრო მარტივია. არის საკითხების ძალიან მცირე წრე, რომელთა გადაწყვეტა შეიძლება მხოლოდ C++ ენაზე, მაგალითად მის კოდში ასენბლერ ენაზე შედგენილი კოდის ჩართვა და ა.შ. მიუხედავად ამისა, C# არის მძლავრი ენა, რომლის საშუალებითაც შესაძ- ლებელია Windows-დანართების, Web-დანართების, Web-სამსახურებისა და პრაქტიკულად ნებისმიერი ტიპის პროგრამა-დანართის შემუშავება. C++ ენის ზოგიერთი ფუნქცია, მაგალითად სისტემურ მეხსიერებასთან პირდაპირი მიმართვა, C# ენაში შეიძლება რეალიზებული იყოს როგორც unsafe კოდი. ზოგჯერ, C# ენაზე შედგენილი კოდი უფრო დიდია, ვიდრე C++ ენაზე შედგენილი. ეს აიხსნება იმით, რომ C# ენა C++ ენისგან განსხვავებით არის უფრო უსაფრთხო ტიპების მიმართ (typesafe). ეს იმას ნიშნავს, რომ თუ ტიპს მივანიჭებთ რაიმე მნიშვნელობას, ის შემდეგ ვეღარ გარდაიქმნება სხვა ტიპად. C# ენის ერთ-ერთი უპირატესობაა ის, რომ იგი თავიდანვე შეიქმნა სპეციალურად .NET Framework-თვის, ამიტომ ის დიდი წარმატებით გამოიყენება .NET დანართების შესაქმნელად, ვიდრე სხვა ენები

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). ის შედგება გადასატანი ინსტრუქციების ნაკრებისაგან, რომელიც არაა დამოკიდებული კონკრეტული პროცესორის ინსტრუქციების ნაკრებზე. 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). ის აღწერს სხვადასხვა ენებისათვის საერთო მახასიათებლებს.

Visual Studio 2010

Visual Studio-ის (VS) ინსტალირების შემდეგ, მისი პირველი გაშვებისას, ეკრანზე გაიხსნება ფანჯარა, რომელშიც უნდა მოვნიშნოთ Visual C# Development Settings ოპცია (რეჟიმი). თუ შეცდომით სხვა ოპცია მოვნიშნეთ, მაშინ Visual C# Development Settings პარამეტრების ასარჩევად უნდა შევასრულოთ მათი იმპორტი. ამისათვის, ვასრულებთ ToolsImport and Export Settings … ბრძანებას. გახსნილ ფანჯარაში ჩავრთოთ Reset all settings გადამრთველი და დავაჭიროთ Next კლავიშს. მომდევნო ფანჯარაში არსებული პარამეტრების შესანახად უნდა ჩავრთოთ Yes, save my current settings გადამრთველი და დავაჭიროთ Next კლავიშს. უკანასკნელ ფანჯარაში მოვნიშნოთ Visual C# Development Settings ოპცია და დავაჭიროთ Finish კლავიშს.

Visual Studio-ის გაშვების დროს გაიხსნება Start Page ფანჯარა, რომელშიც შემდეგი ფანჯრები აისახება:

1. Toolbox (ინსტრუმენტების პანელი) ფანჯარაში მოთავსებულია ვიზუალური და არავიზუალური კომპონენტები, რომლებიც გამოიყენება Windows-დანართებისთვის მომხმარებლის ინტერფეისის შესაქმნელად.

2. Server Explorer (სერვერის გზამკვლევი) ფანჯარა გამოიყენება მონაცემების წყაროსთან კავშირის დასამყარებლად, მაგალითად, როგორიცაა SQL სერვერი და ა.შ.

3. Solution Explorer (გადაწყვეტების გზამკვლევი) ფანჯარაში აისახება ინფორმაცია მოცემულ მომენტში ჩატვირთული გადაწყვეტის (solution, решение) შესახებ. გადაწყვეტა არის ერთი ან მეტი პროექტი თავიანთ საკონფიგურაციო პარამეტრებთან ერთად. ამ ფანჯარაში აისახება ინფორმაცია გადაწყვეტის შემადგენლობაში არსებული პროექტების შესახებ, კერძოდ თუ რომელ ფაილებს მოიცავენ ისინი და ამ ფაილებში რა ინფორმაციაა მოთავსებული.

4. Properties (თვისებები) ფანჯარა იძლევა უფრო დაწვრილებით ინფორმაციას პროექტის ელემენტების შესახებ და საშუალებას გვაძლევს განვახორციელოთ მათი დამატებითი გაწყობები.

5. Error List (შეცდომების სია) ფანჯარაში აისახება შეცდომები, გაფრთხილებები და

შეტყობინებები. მასში შეცდომები აისახება კოდის შეტანისა და კომპილირების დროს. მაგალითად, თუ ჩვენს მიერ შეტანილი კოდის რომელიმე სტრიქონში წავშლით ‘;’ სიმბოლოს, თითქმის მაშინვე Error ფანჯარაში გამოჩნდება შესაბამისი შეტყობინება და შეცდომის შემცველი სტრიქონის ნომერი. თუ ამ შეტყობინებაზე ორჯერ სწრაფად დავაწკაპუნებთ, მაშინ შეცდომის შემცველ სტრიქონში მოინიშნება შესაბამისი ადგილი. თუმცა, ეს ადგილი, ორჯერ დაწკაპუნების გარეშეც მოინიშნება წითელი კლაკნილით. კოდის სტრიქონების დასანიმრად შეგვიძლია ჩავრთოთ Tools->Options->Text Editor->C#->General->Line numbers გადამრთველი. გადამრთველი.

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

ჩვენს გარშემო ბევრი ობიექტია. მაგალითად, ავტომობილი, თვითმფრინავი, მატარებელი, მაღაზია, ავადმყოფი, ექიმი, სტუდენტი, გეომეტრიული ფიგურა და ა.შ. მსგავსი ობიექტები შეგვიძლია დავაჯგუფოთ კლასებში. მაგალითად, სხვადასხვა ავტომობილს ბევრი საერთო თვისება აქვს, ამიტომ ისინი შეგვიძლია „ავტომობილი“ საერთო კლასში გავაერთიანოთ. ასევე სხვადასხვა ტიპის თვითმფრინავს ბევრი საერთო თვისება აქვს, ამიტომ ისინი შეგვიძლია „თვითმფრინავის“ საერთო კლასში გავაერთიანოთ და ა.შ.

ობიექტზე ორიენტირებულ ენებში პროგრამები ორგანიზებულია მონაცემების გარშემო, ანუ ჩვენ განვსაზღვრავთ მონაცემებს და იმ პროგრამებს, რომლებიც ამ მონაცემებთან მუშაობენ. C# ენა ეფუძნება ობიექტზე ორიენტირებული დაპროგრამების (ოოდ) სამ პრინციპს პრინციპს: ინკაფსულაცია, პოლომორფიზმი და მემკვიდრეობითობა. მოკლედ განვიხილოთ თითოეული მათგანი.