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

რედაქტირება

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

არტურ კ. კლარკი

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

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

რედაქტირება

კომპიუტერი
კომპიუტერი არის ელექტრონული მოწყობილობა, რომელიც შედგება რამოდენიმე მთავარი კვანძისგან. ერთ-ერთი მათგანი არის მახსოვრობა, რომელიც იმახსოვრებს ერთიანებისა და ნოლიანების კომბინაციებს. შესაძლებელია ამ ერთიანების და ნოლიანების პატარა ელექტრონულ მოწყობილობებში, მიკროსკოპულ მაგნიტურ ველებში, კომპაქტ დისკში მოძრავი ლითონის ფენებში არეკვლის შესაძლებლობის მქონე მინიატურულ ჩაღრმავებებში, ან სხვადასხვა მდგომარეობის ნებისმიერ ფიზიკურ ობიექტში, ფიზიკური რეალიზაცია.
კომპიუტერი შეიცავს სხვდასხვა სახის მახსოვრობის ბლოკებს, რომლებიც მუშაობენ სხვადასხვანაირად და დანიშნულნი არიან სხვდასხვა სამუშაობის შესასრულებლად. საბედნიეროდ, კომპიუტერის მახსოვრობის მუშაობის დეტალები არ ეხება პროგრამისტს. პროგრამა მანიპულირებას აკეთებს ერთიანებისა და ნოლიანების კომბინაციასთან, მათ ფიზიკურ რეალიზაციაზე შეუხებლად. პროგრამა ამ კომბინაციებს იყენებს ორობითი სისტემის რიცხვების, ანბანის ასოების, ან ნებისმიერი სხვა ინფორმაციის ამოსაცნობად. რა თქმა უნდა ის ამათ ამოიცნობს ჩვენ სქემასთან შეთანხმებულად.
კომოპიუტერის სხვა სტანდარტულ კომპონენტად ითვლება ცენტრალური პროცესორი(Central Processor Unit, CPU), ან უბრალოდ პროცესორი. პროცესორს კომპიუტერის მახსოვრობაში შეუძლია შეასრულოს ელემენტარული ქმედება ერთიანებისა და ნოლიანების კომბინაციაზე. მაგალითად, კომპიუტერს შეუძლია ჩაიხედოს კომპიუტერული მახსოვრობის ორ უჯრედში, ამოიღოს მათგან კომბინაციები, რომლებიც შეიცავენ ორ რიცხვს, დაალაგოს ისინი და მახსოვრობის სხვა უჯრედში დაიმახსოვროს რეზულტატი, როგორც ახალი ერთიანებისა და ნოლიანების კომბინაცია.
კომპიუტერის ფუნქციონალურობის არაჩვეულებრივი შესაძლებლობები, გამომდინარეობს პროცესორის მართვის შესაძლებლობიდან. პროცესორს უნდა შევატყობინოთ, თუ მახსოვრობის რომელი უჯრედიდან უნდა აიღოს რიცხვები, უნდა მივუთითოთ რიცხვების დალაგება და ბოლოს პროცესორმა უნდა იცოდეს, თუ მახსოვრობის რომელ უჯრედზე გააგზავნოს რეზულტატი. მას შემდეგ, რაც პროცესორი შეასრულებს მითითებულ ოპერაციას, ჩვენ მას უნდა მივუთითოთ, თუ რა უნდა გააკეთოს შემდეგ. ქმედების თანმიმდევრობა, რომლის მიღებაც გვსურს პროცესორიდან, კომპიუტერის მახსოვრობაში განისაზღვრება ერთიანებისა და ნოლიანების თანმიმდევრობის სიგრძით.
ქვემოთ მოწოდებულია ერთიანებისა და ნოლიანების კომბინაცია, რომელიც Intel Pentium პროცესორის მქონე კომპიუტერს აიძულებს კომპიუტერის მახსოვრობის კონკრეტული უჯრედებიდან აიღოს ორი რიცხვი, შეკრიბოს ეს რიცხვები და დაალაგოს მათი ჯამი მესამე უჯრედში. წარმოდეგენილი კომბინაცია ადამიანისთვის არც თუ ისე გასაგებია, მაგრამ სწორედ ეს ესმის კომპიუტერს. ქვემოთ მოყვანილ მაგალითში კომბინაცია გამოსახულია სამი სტრიქონის სახით, რადგან მათში აღწერილია სამი სხვადასხვა ბრძანება, რომლებიც ერთმანეთის თანმიმდევრობით ეუბნებიან პროცესორს, თუ რა უნდა გააკეთოს მან.


       10100001     01101000     10111100     01000001     00000000
       00000011     00000101     01101100     10111100     01000001     00000000
       10100011     01110000     10111100     01000001     00000000

რვა-რვა ერთიანებისა და ნოლიანების კომბინაციებს შორის გამოტოვებულები შეესაბამებიან კომპიუტერში მახსოვრობის ორგანიზებას - Intel Pentium პროცესორის მქონე კომპიუტერებში(ისევე, როგორც თითქმის დანარჩენი ყველა), მახსოვრობა დაყოფილია ისეთი რვიანებით, რომლებსაც ეწოდებათ ბაიტები. ინდივიდუალურ ერთიანებსა და ნოლიანებს ეწოდებათ ბიტები. ეს ტერმინი(Bit) არის სიტყვების - Binary Digits(ბინარული რიცხვები)-ის შემოკლება.
მონაცემთა წარმოდგენა
კომპიუტერის მახსოვრობა ორგანიზებულია ბიტების ჯგუფების სახით. დღეს-დღეობით გამოყენებად თითქმის ყველა კომპიუტერში ეს ჯგუფები შედგებიან 8, 16, 32, ხშირად 64 და ზოგჯერ 128 ბიტისაგან. ორობითი სისტემის დახმარებით შესაძლებელია ბიტების ჯგუფების გამოყენება მთელი რიცხვების წარმოსადგენად. მაგალითად, 8 ბიტიანი ჯგუფი 01101011 წარმოადგენს მთელ რიცხვს,


0x27 + 1x26 + 1x25 + 0x24 + 1x23 + 0x22 + 1x21 + 1x20



რომელიც უდრის 0 + 64 + 32 + 0 + 8 + 0 + 2 + 1, ან 107. კომპიუტერის პროცესორს ადვილად შეუძლია ორობით სისტემაში ჩაწერილი რიცხვების მანიპულირება. თუმცა სინამდვილეში ეს საკითხი არც თუ ისე მარტივია, მაშინ როცა კომპიუტერმა უნდა გამოთვალოს უარყოფითი რიცხვები. ამას გარდა, წარმოდგენის სპეციალური სისტემის დახმარებით, ეგრეთ წოდებული სათაო წერტილით, კომპიუტერს შეუძლია გამოთვალოს დიდი ზომის რიცხვები რიცხვები, როგორიცაა 6,023x1023.
სინტაქსისი და სემანტიკა
პროგრამები უნდა იცავდნენ პროგრამირების ენის სიტაქსურ წესებს.

ციკლი while
while(პირობები) {

ციკლის ტანი

}

პირობების შეფასება...

თუ ის აკმაყოფილებს ყველა მოთხოვნას(შეფასების რეზულტატი დააბრუნებს ჭეშმარიტს - true), შესრულდეს ციკლის ტანი...
შემდეგ კვლავ შეფასდეს პირობები...
თუ ის აკმაყოფილებს ყველა მოთხოვნას კვლავ გაეშვას ციკლის ტანი...
გაგრძელდეს ეს ოპერაცია, მანამ სანამ ყველა კმაყოფილდება ყველა მოთხოვნა(შეფასების რეზულტატი დააბრუნებს მცდარს - false)












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