პროგრამისტის ფილოსოფია. რეზიუმე: პროგრამირების ფილოსოფიური ასპექტები

ღირს პროგრამირების სწავლა?

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

საქმე ამაშია...

ისწავლო თუ არა პროგრამირება?

წიგნიერება ნებისმიერ კომპიუტერულ ენაზე, მარტივი HTML-დან რთულ C++-მდე, მოითხოვს ერთგულებას არა მხოლოდ ტექნოლოგიისადმი, არამედ მისი გაუთავებელი ცვლილებებისადმი. HTML5 მთავრდება რიცხვით მიზეზის გამო. მას შემდეგ, რაც საკმარისი ბრაუზერები დაიწყებენ HTML6-ის მხარდაჭერას, დეველოპერებს მოუწევთ ხელახლა ისწავლონ რაიმე ახალი.

შესაძლო მიზეზები, რის გამოც გსურთ ჩართოთ თქვენი თავი ახალ სასწავლო პროცესში:

  • მოიპოვე ნდობა: მე მყავდა რამდენიმე კლიენტი, რომლებიც ფიქრობდნენ, რომ თუ ისწავლიდნენ პროგრამირების ენას, მაშინ კომპიუტერი მათთვის ნაკლებად აშინებდა.
  • აუცილებლობა: ტექნიკური პრობლემები შეიძლება ნებისმიერ დროს წარმოიშვას.
  • მღელვარება: ზოგს უბრალოდ ახალი უნარების სწავლა სურს.
  • იმის გასაგებად, თუ რა არის შესაძლებელი: როდესაც დეველოპერი ამბობს: "ეს არ შეიძლება გაკეთდეს!" ნიშნავს ის, რომ ეს ნამდვილად შეუძლებელია, თუ უბრალოდ არ სურს ამ თავის ტკივილის მიღება?

იყავი ყოველთვის ცნობისმოყვარე

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

მე მაქვს სამი მიდგომა ნებისმიერი პროექტის პრობლემის გადასაჭრელად:

  • იპოვნეთ თემა, რომელიც გაღიზიანებთ

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

  • თქვენ უნდა დაჯილდოვდეთ დამატებითი ძალისხმევისთვის.

ანდაზური ქავილი რომ აღმოაჩინა, ადამიანებმა, რომლებიც სწავლობენ კოდირებას, ასევე უნდა იპოვონ შვება. არც ერთი გაკვეთილი, არც ხელსაწყო, არც ქება არ დაეხმარება ვინმეს გახდეს CODE ოსტატი. მხოლოდ სიტყვების შემდეგ "მე დავწერე ეს და... ნახეთ რა გავაკეთე!" თქვენ იგრძნობთ, რომ გადალახეთ დაბრკოლება. სულელურად ჟღერს მანამ, სანამ თვითონ არ სცადეთ. გამოცდილი კოდი, რომელიც მუშაობს, მოგცემთ ადრენალინს და გაგრძნობინებთ, რომ კომპიუტერული პროგრამირების ოსტატი გახდით.

  • თქვენი პროექტი უნდა შესრულდეს სანამ თქვენს ტვინს მადა აქვს

ივარჯიშე ტვინი. როდესაც უბიძგებს, ტრენერები მოუწოდებენ ადამიანებს, აიძულონ საკუთარი თავი ლიმიტზე ოდნავ მეტი. სწავლა შიმშილია. თქვენს ტვინს ყოველთვის აქვს ახალი ცოდნის მადა.

ივარჯიშეთ ყოველდღიურად

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

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

გიჟურად ჩანს, მაგრამ ამ ჰიპოთეზის დადასტურება ყველგან შეიძლება. მაგალითად, მალევიჩის შავი კვადრატი. ბევრი მიიჩნევს მას მხოლოდ შავ კვადრატად, მაგრამ სხვებისთვის მას ღრმა მნიშვნელობა აქვს.
სავსებით შესაძლებელია, რომ მოედანი უბრალოდ არ გაგეხსნათ, მაგრამ ვინმემ მასში ჭკუა იპოვა. და ასეთი შემთხვევები ბევრია. ბოლოს და ბოლოს, ბევრი ადამიანი ხშირად გადის რაღაცის გვერდით, შემდეგ კი ერთი ადამიანი მოულოდნელად აკეთებს აღმოჩენას/გამოგონებას ფაქტიურად მარტივი რამ, რომლებიც ჩვენს ირგვლივ იწვნენ, მაგრამ ჩვენ მათ "ვერ შევამჩნიეთ". იქნებ ის კი არა, რომ ჩვენ ვერ შევამჩნიეთ ისინი, მაგრამ რაღაცები არ გაგვიმხილეს? ამ უკიდურესად საკამათო და საინტერესო პოზიციას რეალურად არსებობის ძალიან რეალური შანსი აქვს.

მაგალითად, სამყარო რომ იყოს უზარმაზარი პროგრამა, სურდა შემქმნელს შექმნას სხვადასხვა კლასები სხვადასხვა ობიექტების აღწერისთვის? რა თქმა უნდა, არა, რადგან ყველა მიისწრაფვის მინიმალური ენერგიისკენ, ყველა ისეთი ზარმაცია, როგორც შეუძლია. ამიტომ, იმისათვის, რომ ძალიან არ შეგაწუხოთ, უნივერსალური პროგრამისტი შექმნის მხოლოდ ერთ კლასს ყველა ობიექტისთვის. და მას დასჭირდება მხოლოდ 1 ტიპის ობიექტი-ობიექტის ურთიერთქმედების მართვა. და სავსებით შესაძლებელია, რომ სწორედ ამის გამო, ობიექტს ესმის სხვა ობიექტი მხოლოდ მაშინ, როცა გადაწყვეტს მის გახსნას.

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

ფუნქცია Worldview(Values) Values ​​= ალგორითმი მნიშვნელობების გამოთვლისთვის() Return Values ​​ფუნქციის დასასრული მთავარი პროგრამის მარყუჟი (გამეორება უსასრულოდ) (მნიშვნელობები = Worldview(Values) ) პროგრამის დასასრული

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

მოგეხსენებათ, კომპიუტერს შეუძლია ჩაწეროს სიტყვები (ტექსტი) და ობიექტები (3D მოდელები, სურათები). ერთადერთი უფსკრული, რომელიც ხელს უშლის ხელოვნური ინტელექტის შექმნას, არის კონცეფცია. იმათ. რაც აკავშირებს სიტყვასა და საგანს. თუ ვინმე გაერკვევა, თუ როგორ დააყენოს ცნებების სისტემა მანქანაში, მაშინ შეიქმნება AI.

დიმიტრი იაკუშევი

"ფილოსოფია"

პროგრამირება C++ ენაზე

მეორე გამოცემა, გაფართოებული და შესწორებული

UDC 004.43 BBK 32.973.202

იაკუშევი დ.მ.

I49 პროგრამირების „ფილოსოფია“ C++-ში. / D. M. Yakushev. - მე-2 გამოცემა. - მ.: ბუკ პრესა, 2006. - 320გვ.

ISBN 5 9643 0028 6

C++ ენის ავტორია ცნობილი კომპანია AT&T-ის თანამშრომელი Bjarne Stroustrup. C++ (უფრო სწორად, მისი წინამორბედი, C კლასებით) შეიქმნა Simula ენის გავლენით (უნდა ითქვას, რომ ეს პროგრამირების ენა ჯერ კიდევ 1967 წელს გამოჩნდა). სინამდვილეში, C++-ის გამოჩენის დროისთვის C-მ უკვე მოიპოვა პოპულარობა; პროფესიონალი პროგრამისტები პატივს სცემენ მას იმის გამო, რომ ისარგებლოს კონკრეტული არქიტექტურით, პროგრამების შედარებით ენაზე წერისას. მაღალი დონე.

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

ეს წიგნი მკითხველს გააცნობს C++ პროგრამირების „ფილოსოფიას“ და საფუძვლებს. წიგნში მოცემულია ავტორის მიერ შედგენილი და გამოცდილი მრავალი მაგალითი.

UDC 004.43 BBK 32.973.202

Ნაწილი 1.

თავი 1. C++ არის ზოგადი დანიშნულების პროგრამირების ენა. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

თავი 2. ლექსიკა. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 თავი 3. სინტაქსი. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 თავი 4. ფარგლები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 თავი 5. განმარტებები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 თავი 6. განლაგება. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 თავი 7. მეხსიერების კლასები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 თავი 8. ძირითადი ტიპები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 თავი 9. წარმოებული ტიპები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 ​​თავი 10. ობიექტები და LVALUE (მისამართები). . . . . . . . . . . . . . . . . . . . . . . . .15 თავი 11. სიმბოლოები და მთელი რიცხვები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 თავი 12. გარდაქმნები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 თავი 13. გამონათქვამები და მოქმედებები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 თავი 14. აღწერილობები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 თავი 15. მეხსიერების კლასის დამახასიათებლები. . . . . . . . . . . . . . . . . . . . . .31 თავი 16. აღმწერები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 თავი 17. კლასის აღწერილობა. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 თავი 18. ინიციალიზაცია. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 თავი 19. გადატვირთული ფუნქციების სახელები. . . . . . . . . . . . . . . . . . . . .58 თავი 20. ჩამოთვლის აღწერა. . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 თავი 21. აღწერა ასმ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 თავი 22. ოპერატორები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 თავი 23. გარე განმარტებები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66

თავი 24. ბრძანების ხაზებიშემდგენელი. . . . . . . . . . . . . . . . . . . . .68 თავი 25. ტიპის მიმოხილვა. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 თავი 26. მობილობის მოსაზრებები. . . . . . . . . . . . . . . . . . . . . . . . . .75 თავი 27. თავისუფალი მეხსიერება. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76

ნაწილი 2. Turbo C++

თავი 1. ინტეგრირებული განვითარების გარემო. . . . . . . . . . . . . . . . . . . .78 თავი 2. მენიუს ზოლი და მენიუები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 თავი 3. TURBO C++ windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 თავი 4. მუშაობა ეკრანის მენიუსთან. . . . . . . . . . . . . . . . . . . . . . . . . . . . .80

თავი 5. ფაილის სტრუქტურა, მონაცემთა ტიპები და შემავალი/გამომავალი ოპერატორები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87

თავი 6. არითმეტიკული, ლოგიკური, მიმართებითი და დავალების მოქმედებები. . . . . . . . . . . . . . . . . . . . . . .91

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

თავი 8. მარტივი პროგრამის ლოგიკური ორგანიზაცია. . . . . . . . . . .95 თავი 9. მუდმივების გამოყენება სხვადასხვა სახის. . . . . . . . . . . . .96 თავი 10. საკონტროლო სტრუქტურები. . . . . . . . . . . . . . . . . . . . . . . . . . . .98

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

მასივებთან მუშაობისას. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100

ნაწილი 3. თეორიიდან პრაქტიკამდე

თავი 1. „მარჯვნიდან მარცხნივ“ წესი. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 თავი 2. STLport. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 თავი 3. პროგრამირების ენა Microsoft-ისგან: C#. . . . . . . . . . . . . .106 თავი 4. C++ Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 თავი 5. „ჭკვიანი“ მაჩვენებლების გამოყენება. . . . . . . . . . . . . . . . . . . . . .111 თავი 6. მსჯელობა თემაზე „ჭკვიანი“ პოინტერები. . . . . . . . . . . . . .116 თავი 7. ვირტუალური დესტრუქტორები. . . . . . . . . . . . . . . . . . . . . . . . . . . .122 თავი 8. მონაცემთა სტრუქტურების ჩაწერა ბინარულ ფაილებზე. . . . . . . . . . . .126

თავი 9. goto უპირობო ნახტომის ოპერატორი. . . . . . . . . . . . . . . . . .132 თავი 10. ვირტუალური კონსტრუქტორი. . . . . . . . . . . . . . . . . . . . . . . . . . .136 თავი 11. წყაროს ტექსტების კითხვა. . . . . . . . . . . . . . . . . . . . . . . . . . . .141 თავი 12. gets() ფუნქცია. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 თავი 13. თვისებები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 თავი 14. კომენტარები. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 თავი 15. ვებ პროგრამირება. . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 თავი 16. შეცდომები მეხსიერებასთან მუშაობისას. . . . . . . . . . . . . . . . . . . . . . . . . .158 თავი 17: გრაფიკების შექმნა ploticus-ით. . . . . . . . . . . . . . .161 თავი 18. განაცხადის ავტომატიზაცია და მოტორიზაცია. . . . . . . . . . .164 თავი 19. C/C++ შემდგენელების მიმოხილვა EMX და Watcom. . . . . . . . . .183 თავი 20. #იმპორტის დირექტივის გამოყენება. . . . . . . . . . . . . . . . . . .188

თავი 21: სისტემური ხაფანგების შექმნა

Windows Borland C++ Builder-ზე. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 კითხვა-პასუხი. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214

პოპულარული სამეცნიერო პუბლიკაცია

იაკუშევი დიმიტრი მიხაილოვიჩი

პროგრამირების "ფილოსოფია" C++ ენაზე

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

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

ორიგინალური განლაგება I.V. Tsarik-ის მიერ

მხატვარი O.K. ალეხინი

სამხატვრო რედაქტორი M.L. Mishin ტექნიკური რედაქტორი კ. ვ.შაპირო

კორექტორები L. S. Zimina, K. V. Tolkacheva

ხელმოწერილია გამოსაქვეყნებლად 05/07/2006 წ. ფორმატი 60x90/16. ნიუტონის შრიფტი. ოფსეტური ქაღალდი. Ოფსეტური ბეჭდვა. პეჩ. ლ. 20. ტირაჟი 3000.

C++ პროგრამირების ენის შესავალი

ნაწილი 1. შესავალი ენაში

C++ პროგრამირება

C++ - ზოგადი დანიშნულების პროგრამირების ენა

C++ ენის ავტორია ცნობილი კომპანია AT&T-ის თანამშრომელი Bjarne Stroustrup. C++ (უფრო სწორად, მისი წინამორბედი, C კლასებით) შეიქმნა Simula-ს გავლენით (უნდა ითქვას, რომ ეს პროგრამირების ენა ჯერ კიდევ 1967 წელს გამოჩნდა). სინამდვილეში, იმ დროისთვის (როდესაც C++ გამოჩნდა), C-მ უკვე მოიპოვა პოპულარობა; მას ზოგადად დიდ პატივს სცემენ კონკრეტული არქიტექტურის შესაძლებლობების გამოყენების უნარის გამო შედარებით მაღალი დონის ენის გამოყენებისას. მართალია, ჩვეულებრივ, სწორედ ამიტომ არ მოსწონთ იგი. რა თქმა უნდა, ამ შემთხვევაში დაიკარგა (ან დამახინჯდა) პროგრამების აგების ზოგიერთი დებულება; მაგალითად, C-ში პრაქტიკულად არ არსებობს მოდულური პროგრამების შექმნის შესაძლებლობა. არა, რა თქმა უნდა, ისინი იქმნება, მაგრამ გარკვეული „ყავარჯნების“ დახმარებით, წინასწარი პროცესორის დირექტივების გამოყენების სახით - არ არსებობს ისეთი მოდულურობა, როგორიც, მაგალითად, Modula 2-ში ან Ada-ში, C-ში. სხვათა შორის, ეს ჯერ კიდევ ასე არ არის C++-ში.

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

მთავარი განსხვავება C++-ს შორის, როდესაც ის პირველად გამოჩნდა, იყო პროგრამირების ობიექტზე ორიენტირებული მიდგომის აშკარა მხარდაჭერა. თქვენ უნდა გესმოდეთ, რომ პროგრამირება OOP-ის და OOA-ს გამოყენებით შეიძლება განხორციელდეს ნებისმიერ ადგილას, მაშინაც კი, თუ ინსტრუმენტთა ნაკრები მას აშკარად არ უჭერს მხარს; მაგალითად, შეგიძლიათ აიღოთ მომხმარებლის ინტერფეისის ბიბლიოთეკა

C++ პროგრამირების ენის შესავალი

GTK+ სახე, რომელიც დაწერილია „სუფთა“ C-ში და ობიექტზე ორიენტირებული „დიზაინის“ პრინციპების გამოყენებით. პროგრამირების ენაში OOP-ის მხარდაჭერის ხელსაწყოების დანერგვა ნიშნავს, რომ კომპილაციის ეტაპზე (და არა პროგრამის შესრულების ეტაპზე) შემოწმდება ტიპების თავსებადობა, მეთოდების არსებობა და ა.შ. პრინციპში, ეს საკმაოდ მოსახერხებელია.

ისევ და ისევ, ისევე როგორც C არ არის სუფთა მაღალი დონის პროგრამირების ენა (რადგან ის ძალიან ბევრი ხრიკის საშუალებას იძლევა), C++ არ არის, მკაცრად რომ ვთქვათ, ობიექტზე ორიენტირებული პროგრამირების ენა. ამას ხელს უშლის ისეთი ფუნქციები, როგორიცაა ვირტუალური ფუნქციების არსებობა (რადგან პოლიმორფიზმზე საუბრისას არავინ აწესებს, რომ ზოგიერთი მეთოდი მასში მიიღებს მონაწილეობას და ზოგი არა), main() ფუნქციის არსებობა და ა.შ. გარდა ამისა, C++-ს არ აქვს ისეთი ერთეულები, როგორიცაა, მაგალითად, მეტაკლასები (თუმცა ისინი, ალბათ, არც ისე საჭიროა) და ინტერფეისები (სანაცვლოდ გამოიყენება მრავალჯერადი მემკვიდრეობა). თუმცა, C++ ამჟამად ერთ-ერთი ყველაზე პოპულარული (თუ არა ყველაზე პოპულარული) პროგრამირების ენაა. რატომ? დიახ, რადგან ყველა ეს "მონსტრული" საბოლოო ჯამში შესაძლებელს ხდის პროგრამის დაწერა ობიექტზე ორიენტირებული მიდგომების გამოყენებით (და პროგრამები, რომლებიც ამას მოითხოვს, როგორც წესი, ძალიან დიდია) და ამავე დროს საკმაოდ "სწრაფი". ამას ხელს უწყობს ზუსტად ვირტუალური ფუნქციების არსებობა (ანუ ის, რასაც თავად პროგრამისტი ყოფს დიზაინის დროს, სად დასჭირდება პოლიმორფიზმი და სადაც საკმარისი იქნება ზოგიერთი ფუნქციის ჯგუფში გაერთიანება ზოგიერთი მახასიათებლის მიხედვით), სავალდებულო ყოფნა. ოპტიმიზატორი და ა.შ. ეს ყველაფერი საშუალებას გაძლევთ, თუ სწორად გამოიყენებთ, მაინც დაწეროთ სამუშაო პროგრამა. მართალია, საკმაოდ ხშირად არის გაუნათლებელი გამოყენების მაგალითები, რის შედეგადაც C++-ის არჩევანი პროექტის განსახორციელებლად წამებად გადაიქცევა პროგრამისტებისა და მენეჯმენტისთვის.

ამჟამად, არსებობს C++ პროგრამირების ენის სტანდარტი, რომელიც, სხვა საკითხებთან ერთად, მოიცავს სტანდარტული შაბლონის ბიბლიოთეკას. შაბლონები განსაკუთრებული თემაა; ფორმალურად, ისინი ასევე არიან "ყავარჯნები" შედგენის ეტაპზე, ასე ვთქვათ, პოლიმორფიზმის შესაქმნელად (და ამ თვალსაზრისით ისინი ძალიან სასარგებლოა), მაგრამ ბიბლიოთეკა.

უდავოდ სწორი ინოვაცია ყველა მხრიდან. დაბოლოს, სიის პორტატული (ანუ შემდგენლიდან შემდგენელამდე) დალაგების სტანდარტული გზების არსებობამ (გარდა იმისა, რომ თქვენ თვითონ დაწერთ ყველა შესაბამის ქვეპროგრამებს და მონაცემთა სტრუქტურებს) პროგრამისტის ცხოვრება ბევრად გაადვილა. მართალია, ბევრს ჯერ კიდევ ცუდად ესმის, თუ როგორ მუშაობს STL და როგორ გამოიყენოს იგი (გარდა std::cin და std::cout ).

C++ პროგრამირების ენის შესავალი

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

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

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

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

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

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

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

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

მოდით ჩამოვთვალოთ C++ ენის რამდენიმე ძირითადი მახასიათებელი:

C++ უზრუნველყოფს სტრუქტურირებული პროგრამირების ოპერატორების სრულ კომპლექტს;

C++ გთავაზობთ ოპერაციების უჩვეულოდ დიდ კომპლექტს;

C++ პროგრამირების ენის შესავალი

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

C++ მხარს უჭერს ცვლადებისა და ფუნქციების მითითებებს;

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

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

C++ მხარს უჭერს მაჩვენებლის არითმეტიკას და ამით საშუალებას აძლევს მეხსიერების მისამართების პირდაპირ წვდომას და მანიპულირებას.

თავი 2. ლექსიკა

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

გარკვეული თეთრი სივრცეა საჭირო იდენტიფიკატორების, საკვანძო სიტყვების და მუდმივების გამოსაყოფად, რომლებიც სხვაგვარად შეეხებიან ერთმანეთს. თუ შეყვანის ნაკადი ტოკენიზირებულია მოცემულ სიმბოლომდე, შემდეგი ჟეტონი უნდა შეიცავდეს სიმბოლოების ყველაზე გრძელ სტრიქონს, რომელსაც შეუძლია შექმნას ნიშანი.

კომენტარები

/* სიმბოლოები მიუთითებს კომენტარის დასაწყისს, რომელიც მთავრდება */ სიმბოლოებით. კომენტარების ჩადგმა შეუძლებელია.

// სიმბოლოები იწყებენ კომენტარს, რომელიც მთავრდება იმ ხაზის ბოლოს, რომელზეც ისინი გამოჩნდება.

იდენტიფიკატორები (სახელები)

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

იდენტიფიკატორი - თვითნებური სიგრძის ასოებისა და რიცხვების თანმიმდევრობა; პირველი სიმბოლო უნდა იყოს ასო; ხაზგასმული "_" ითვლება ასო wu; დიდი და პატარა ასოები განსხვავებულია.

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

მუდმივები

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

მთელი მუდმივები

რიცხვების მიმდევრობისგან შემდგარი მთელი მუდმივი ითვლება რვავიანად, თუ ის იწყება 0-ით (ციფრი ნული), ხოლო ათწილადი სხვაგვარად. რიცხვები 8 და 9 არ არის რვა რიცხვები.

რიცხვების თანმიმდევრობა, რომელსაც წინ უძღვის 0x ან 0X, მიიღება თექვსმეტობით რიცხვად.

თექვსმეტობითი ციფრები მოიცავს ასოებს a ან A-დან f ან F-მდე, მნიშვნელობებით 10-დან 15-მდე.

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

C++ პროგრამირების ენის შესავალი

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

აშკარა გრძელი მუდმივები

ათწილადი, რვა ან თექვსმეტობითი მუდმივი, რასაც მოჰყვება l (ლათინური ასო "el") ან L ითვლება გრძელ მუდმივად.

სიმბოლოების მუდმივები

სიმბოლოს მუდმივი შედგება სიმბოლოსგან, რომელიც გარშემორტყმულია ერთი ბრჭყალებით (აპოსტროფებით), როგორიცაა "x". სიმბოლოების მუდმივი მნიშვნელობა არის სიმბოლოს რიცხვითი მნიშვნელობა მანქანის სიმბოლოების კომპლექტში (ანბანი).

სიმბოლოების მუდმივები ითვლება int ტიპის მონაცემებად. ზოგიერთი არაგრაფიკული სიმბოლო, ერთი ციტატა" და უკანა ხაზი, შეიძლება წარმოდგენილი იყოს გაქცევის თანმიმდევრობის შემდეგი სიის მიხედვით:

ახალი ხაზის სიმბოლო NL(LF)

ჰორიზონტალური ჩანართი NT

ვერტიკალური ჩანართი VT

დაუბრუნდით BS საფეხურს

ვაგონის დაბრუნება CR

FF ფორმატის თარგმანი

უკანა ხაზი \

ერთი ციტატა (აპოსტროფი) "

ბიტის ნაკრები 0ddd

ბიტის ნაკრები 0xddd

გაქცევის თანმიმდევრობა \ddd შედგება უკანა ხაზისგან, რასაც მოჰყვება 1, 2 ან 3 რვა რიცხვი, რომელიც განსაზღვრავს სასურველი სიმბოლოს მნიშვნელობას. ამ კონსტრუქციის განსაკუთრებული შემთხვევაა \0 (არ მოჰყვება არცერთი ციფრი), რომელიც განსაზღვრავს ცარიელ სიმბოლოს NULL .

გაქცევის თანმიმდევრობა\xddd შედგება უკანა ხაზისგან, რასაც მოჰყვება 1, 2 ან 3 თექვსმეტობითი ციფრი, რომელიც განსაზღვრავს სასურველი სიმბოლოს მნიშვნელობას. თუ უკუღმა ხაზის შემდეგი სიმბოლო არ არის ჩამოთვლილთაგანი, მაშინ უკუღმა დახაზვა იგნორირებულია.

C++ პროგრამირების ენის შესავალი

მცურავი წერტილის მუდმივები

მცურავი წერტილის მუდმივი შედგება მთელი ნაწილისგან, ათობითი წერტილისგან, მანტისა, e ან E და მთელი რიცხვის მაჩვენებლისგან (შესაძლოა, მაგრამ არა აუცილებლად, ხელმოწერილი). მთელი ნაწილი და მანტისა ორივე შედგება ციფრების თანმიმდევრობისგან. მთელი ნაწილი ან მანტისა (მაგრამ არა ორივე) შეიძლება გამოტოვდეს; ან ათობითი წერტილი ან (E) მთელ მაჩვენებელთან ერთად (მაგრამ არა ორივე ნაწილი ერთდროულად) შეიძლება გამოტოვდეს. მცურავი წერტილის მუდმივი არის ორმაგი ტიპის.

რიცხობრივი მუდმივები

მრიცხველებად აღწერილი სახელები მუდმივებია

მაინტერესებს .

აღწერილი მუდმივები

ნებისმიერი ტიპის ობიექტი შეიძლება განისაზღვროს, რომ ჰქონდეს მუდმივი მნიშვნელობა მისი სახელის მასშტაბით. პოინტერების შემთხვევაში, ამის მისაღწევად გამოიყენება *const declarator; არა-მაჩვენებლის ობიექტებისთვის გამოიყენება const descriptor.

სტრიქონი არის სიმბოლოების თანმიმდევრობა, რომელიც ჩასმულია ორმაგ ბრჭყალებში: "...". სტრიქონს აქვს სიმბოლოთა მასივის ტიპი და სტატიკური შენახვის კლასი და ინიციალიზებულია მოცემული სიმბოლოებით.

შემდგენელი ათავსებს null byte \0 ყოველი სტრიქონის ბოლოს ისე, რომ პროგრამა, რომელიც სკანირებს ხაზს, იპოვის მის დასასრულს.

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

და ბოლოს, ახალი ხაზის სიმბოლო შეიძლება გამოჩნდეს მხოლოდ \ ; მაშინ ორივე -\ და ახალი ხაზის სიმბოლო იგნორირებულია.

თავი 3. სინტაქსი

ჩაწერის სინტაქსი

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

C++ პროგრამირების ენის შესავალი

ალტერნატიული კატეგორიები იწერება სხვადასხვა სტრიქონზე. არასავალდებულო ტერმინალი ან არატერმინალური სიმბოლო მითითებულია სუბსკრიპტით "opt", ასე რომ (opt) მიუთითებს იმაზე, რომ გამოხატულება ხვეული ბრეკეტებში არჩევითია.

სახელები და ტიპები

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

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

ხილვადობის ზონა

არსებობს ოთხი ტიპის სფერო: ლოკალური, ფაილი, პროგრამა და კლასი.

ადგილობრივი

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

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

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

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

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

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

C++ პროგრამირების ენის შესავალი

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

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

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

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

თავი 5. განმარტებები

დეკლარაცია არის განმარტება, გარდა იმ შემთხვევისა, როდესაც ის აღწერს ფუნქციებს ფუნქციის სხეულის მითითების გარეშე, როდესაც ის შეიცავს extern(1) სპეციფიკატორს და არ არის ინიციალატორი ან ფუნქციის სხეული, ან როდესაც ის არის კლასის დეკლარაცია.

თავი 6. განლაგება

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

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

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

C++ პროგრამირების ენის შესავალი

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

იმპლემენტაციამ შეიძლება მოითხოვოს, რომ რთული const, რომელიც გამოიყენება იქ, სადაც const-ის განმარტება არ გვხვდება, უნდა იყოს ცალსახად გამოცხადებული extern და ჰქონდეს ზუსტად ერთი განმარტება პროგრამაში. იგივე შეზღუდვა შეიძლება დაწესდეს inline ფუნქციებზე.

თავი 7. მეხსიერების კლასები

აღწერილია მეხსიერების ორი კლასი:

ავტო

სტატიკური.

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

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

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

თავი 8. ძირითადი ტიპები

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

ამჟამად არსებობს სამი მთელი ზომა, აღწერილი როგორც short int , int და long int . Long ints უზრუნველყოფს მინიმუმ იმდენ მეხსიერებას, რამდენიც მოკლე ints, მაგრამ როდესაც განხორციელდება, ან გრძელი, მოკლე ან ორივე შეიძლება გახდეს ჩვეულებრივი მთელი რიცხვის ექვივალენტი.

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

C++ პროგრამირების ენის შესავალი

თითოეული რიცხვი არის დასახელებული მუდმივების ნაკრები. enum თვისებები იდენტურია int თვისებების. უცვლელი მთელი რიცხვები, რომლებიც აღწერილია როგორც ხელმოუწერელი, ემორჩილება modulo2n არითმეტიკის წესებს, სადაც n არის ბიტების რაოდენობა მათ გამოსახულებაში.

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

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

ტიპებს char, int ყველა ზომის და enum ერთობლივად დაერქმევა მთელი რიცხვის ტიპები. მცურავი და ორმაგი ტიპები ერთობლივად დაერქმევა მცურავ ტიპებს.

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

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

თავი 9. წარმოებული ტიპები

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

ობიექტების მასივები ამ ტიპის;

ფუნქციები, რომლებიც იღებენ მოცემული ტიპის არგუმენტებს და აბრუნებენ მოცემული ტიპის ობიექტებს;

მითითებები ამ ტიპის ობიექტებზე;

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

C++ პროგრამირების ენის შესავალი

სტრუქტურები, რომლებიც წარმოადგენს კლასებს წვდომის შეზღუდვის გარეშე;

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

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

void* ტიპის ობიექტი (მაჩვენებელი void-ისკენ) შეიძლება გამოყენებულ იქნას უცნობი ტიპის ობიექტებზე მითითებისთვის.

ობიექტები და LVALUE (მისამართები)

ობიექტი მეხსიერების არეა; lvalue (მისამართი) არის გამოხატულება, რომელიც ეხება ობიექტს. მისამართის გამოხატვის აშკარა მაგალითია ობიექტის სახელი.

არის ოპერაციები, რომლებიც წარმოქმნიან მისამართების გამონათქვამებს: მაგალითად, თუ E არის მაჩვენებლის გამოხატულება, მაშინ *E არის მისამართის გამოხატულება, რომელიც მიუთითებს E-ს მიერ მითითებულ ობიექტზე.

ტერმინი "lvalue" მომდინარეობს დავალების გამოსახულებიდან E1=E2, რომელშიც მარცხენა ოპერანდი E1 უნდა იყოს მნიშვნელობის გამოხატულება.

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

თავი 11. სიმბოლოები და მთელი რიცხვები

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

მოკლე მთელი რიცხვის გრძელ რიცხვად გადაქცევა ყოველთვის გულისხმობს ხელმოწერილ გაფართოებას; მთელი რიცხვები არის ხელმოწერილი რაოდენობა. შეიცავს თუ არა სიმბოლოები ნიშნის ბიტს, ეს დამოკიდებულია მანქანაზე. უფრო აშკარა ხელმოუწერელი char ტიპი ზღუდავს მნიშვნელობას 0-დან მანქანაზე დამოკიდებულ მაქსიმუმამდე.

მანქანებზე, სადაც სიმბოლოები განიხილება როგორც ხელმოწერილი, ASCII კოდების ნაკრების სიმბოლოები დადებითია.

C++ პროგრამირების ენის შესავალი

თუმცა, სიმბოლოს მუდმივა, რომელიც მითითებულია esc რვიანი მიმდევრობით, ექვემდებარება ნიშნის გაფართოებას და შეიძლება გახდეს უარყოფითი რიცხვი; მაგალითად, "\377"-ს აქვს მნიშვნელობა 1.

როდესაც გრძელი მთელი რიცხვი გარდაიქმნება მოკლე რიცხვად ან char-ად, ის იჭრება მარცხნივ; ზედმეტი ბიტები უბრალოდ იკარგება.

მცურავი და ორმაგი

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

მცურავი და მთლიანი

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

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

მაჩვენებლები და მთელი რიცხვები

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

თქვენ შეგიძლიათ შეასრულოთ გამოკლება ორი მაჩვენებელზე იმავე ტიპის ობიექტებზე; ამ შემთხვევაში შედეგი გარდაიქმნება ტიპის int ან long, რაც დამოკიდებულია მანქანაზე.

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

მნიშვნელობა არის ყველაზე პატარა ხელმოუწერელი რიცხვი, რომელიც ტოლია ხელმოწერილი რიცხვის (mod 2** (სიტყვის ზომა)) (ანუ mod2** (სიტყვის ზომა)). კომპლემენტის ორობით წარმოდგენაში, ეს კონვერტაცია ცარიელია და ორობით წარმოდგენაში რეალური ცვლილება არ ხდება.

ჩვენი პროგრამები სამყაროს სიმულაციას ახდენს. ვინც OOP-ის პოსტულატებს გულთან ახლოს მიიღებს, სწრაფად წააწყდება იმ ფაქტს, რომ მოდელირების პროცესი ამ მეთოდის ფარგლებში ფუნდამენტურად არადეტერმინისტულია. განვიხილოთ უფრო დეტალურად.

აქ და შემდგომ განვიხილავ ზოგადი წიგნის მაგალითს საწარმოს თანამშრომლებთან; ჩვენ დავწერთ რაღაც SI-ს მსგავსს. Person კლასიდან Employee კლასის მემკვიდრეობა შესანიშნავი იდეაა, განსაკუთრებით იმ შემთხვევაში, თუ მონაცემებს ინახავთ ექსკლუზიურად მეხსიერებაში: SQL-ს აქვს გარკვეული პრობლემები ცხრილის მემკვიდრეობასთან დაკავშირებით, მაგრამ ეს არ არის მთავარი - OOP თავისი იერარქიით, აგრეგაციებით, კომპოზიციებით და მემკვიდრეობით გთავაზობთ იდეალს. მონაცემთა ორგანიზების გზა. პრობლემები მეთოდებთან.

თითოეული ბიზნეს ლოგიკის მეთოდის მიღმა დგას მსოფლიოში ფაქტი, რომელსაც ეს მეთოდი (როგორც წესი, მარტო არ) აყალიბებს. პროგრამირების ფაქტები არის ოპერაციები: ამიერიდან ჩვენ მათ ასე დავარქმევთ. მეთოდის კლასის წევრად ქცევით, OOP მოითხოვს ჩვენგან ოპერაციის მიბმას ობიექტთან, რაც შეუძლებელია, რადგან ოპერაცია არის ობიექტების (ორი ან მეტი) ურთიერთქმედება, გარდა ერთიანი ოპერაციის შემთხვევისა, სუფთა ასახვა. . PaySalary მეთოდი შეიძლება მიენიჭოს Employee, Cash და Account კლასებს - ყველა მათგანს აქვს თანაბარი საკუთრება. მეთოდების ადგილმდებარეობის შესახებ დილემა თან ახლავს განვითარების მთელ პროცესს: მისი უხერხული გადაწყვეტა შეიძლება იყოს კრიტიკული და ფატალურიც კი.

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

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


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

Backbone-ის მსგავსი ჩარჩოებით, ჩვეულებრივი იყო თავად მონაცემების სინქრონიზაცია და მონაცემების პრეზენტაცია - ამისათვის თქვენ ხელით უნდა გამოეწეროთ საჭირო dom ღონისძიებები. ეს მეთოდი იყო შეცდომის მიდრეკილება და საჭიროებდა ზედმეტ ქვაბის კოდს. Angular მოვიდა და დააფიქსირა ეს ავტომატური ორმხრივი შეკვრით.

მაგრამ ახლა ყველაფერი სხვა მიმართულებით მიდის.

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

თუ არ გჯერა, აგიხსნი...

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

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

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

Ეს კარგია.

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

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

არასწორი მონაცემები შეიძლება ჩაითვალოს გამოტოვებულად, ან შეგიძლიათ დაწეროთ ის „როგორც არის“ და დაამატოთ დამატებითი დადასტურებული ვერსია, რომელიც მხოლოდ იმ შემთხვევაში იქნება წარმოდგენილი, თუ ორიგინალი სწორია.

უნიკალურობის შეზღუდვა შეიძლება იყოს

კითხვისას გამახსენდა ედსგერ დიკსტრას ცნობილი ფრაზა: „ყოველდღიურად ვლოცულობ, რომ ჩემმა კოლეგა-პროგრამისტებმა იპოვონ საშუალება თავის დასაცავად. წყევლათავსებადობის შესახებ") წიგნიდან The Humble Programmer (1972 sic!!!). მოგვიანებით კი ერიკ რაიმონდი თავისი კათედრალითა და ბაზარით (1997). მაგრამ ვინგეს ტექსტი არ ეხება მხოლოდ თავსებადობის წყევლას; სამ გვერდზე კითხვების მთელი ფენა არის წამოჭრილი (და ზოგადად უპასუხოდ რჩება):

  1. თავსებადობის პრობლემა ფართო გაგებით;
  2. ძველი კოდის მხარდაჭერის პრობლემა;
  3. დამოკიდებულების პრობლემა ადამიანის სიცოცხლე„უემოციო რობოტებიდან“ (გ), რომელსაც ჩვენ სწრაფად ვუახლოვდებით;
  4. ზოგადად მონაცემთა მაინინგის პრობლემა და კონკრეტულად რეცეპტების უძირო კასრში მზა გადაწყვეტის პოვნა (github, stack overflow?);
  5. ძველი კოდის „გადაწერის“ პრობლემა (ცუდიც და კარგიც) - ეს მომენტი მაიძულებს ხელახლა წავიკითხო :);
  6. IT ტექნოლოგიების უზომო პრობლემა. ზოგჯერ ამბობენ, რომ ბოლო უნივერსალური ფიზიკოსი ცხოვრობდა გასული საუკუნის შუა ხანებში, რაც ნიშნავს ლევ ლანდაუს. როგორც ჩანს, დრო მოდის (ან უკვე დადგა), როდესაც უნივერსალური პროგრამისტის პოვნა აღარ არის შესაძლებელი;
  7. ტექსტი არ შეიცავს სიტყვას ჰაკერს, არც პოზიტიურ და არც უარყოფით კონოტაციაში. მაგრამ ის ასევე დაწერილია მკვლევარებზე და იმაზე, თუ რა სარგებლობა შეიძლება მიღებულ იქნეს გარკვეული უკანა კარების ცოდნით და რა სახის ძალაუფლება შეიძლება მისცეს ამას.
  8. და ეს ალბათ ყველაფერი არ არის... :)

იქმნება შთაბეჭდილება, რომ ეს დაწერილია ადამიანმა, რომელმაც სწორედ ეს პრობლემები პირველად განიცადა.
მინდა აღვნიშნო, რომ "სიღრმე ცაში" დაიწერა 1999 წელს, როდესაც ვინგეს წერის დიდი ნაწილი ჯერ კიდევ არ იყო პრობლემა, ან თუნდაც უბრალოდ გამოჩნდა ჰორიზონტზე.

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

არა პროგრამირებაზე, არამედ სტანდარტებზე

მოგვიანებით იმავე თავში შევეხებით ყველაზე საინტერესო კითხვაგალაქტიკური მაუწყებლობა საკუთარი ტექნოლოგიების გავრცელების მიზნით. Რისთვის? სტანდარტიზაცია. ჩვენივე ენისა და ჩვენი საკუთარი სტანდარტებისა და ტექნოლოგიების გავრცელება, რომელიც, ერთი მხრივ, ჩამორჩენილ ცივილიზაციებს ვაჭრობისთვის მისაღებ დონემდე მიიყვანს, მეორე მხრივ, შეამცირებს კომუნიკაციის ხარჯებს და უზრუნველყოფს თავსებადობას და, როგორც შედეგად, ვაჭრობის გაადვილება და მარჟების გაზრდა. მაინტერესებს ვინგემ წიგნის დაწერის დროს იცოდა თუ არა დიდი დაპყრობების დროს ინგლისის ფლოტში გემის აღჭურვილობის სტანდარტიზაციის შესახებ, რამაც შესაძლებელი გახადა შეკეთების და ტექნიკური ხარჯების შემცირება? და რაც შეეხება განაწილებას ინგლისურადროგორც ბიზნესი, სამეცნიერო და ა.შ. ბრიტანელები ასწავლიდნენ (აიძულებდნენ ასწავლონ?) ადგილობრივ აბორიგენებს თავიანთ ენას. იგივე გააკეთეს ესპანელებმა და ფრანგებმა. ახლა კი ინგლისური, ესპანური, ფრანგული და პორტუგალიური ძალიან გავრცელებულია. მაგრამ ჰოლანდიელებს სჯეროდათ, რომ აბორიგენებს არ სჭირდებოდათ ენის სწავლება. არის თუ არა მსოფლიოში ბევრი ადგილი, სადაც ჰოლანდიურ ენაზე საუბრობენ, გარდა თავად ჰოლანდიისა?
დღესდღეობით ინგლისური ენის სწავლება მთელ მსოფლიოში ინერგება. სტანდარტიზებული მეთოდებისა და სახელმძღვანელოების გამოყენება, სტანდარტიზებული გამოცდები და შეფასების სკალები. მარტო კერძო ბიზნესია?

ქვემოთ მოცემულია ყველაზე საინტერესო ნაწყვეტი ტექსტიდან. რომანში არის ბევრი საინტერესო რამ, რაც არ არის დაკავშირებული პროგრამირებასთან, ტყუილად არ არის მიღებული რამდენიმე ჯილდო. ამიტომ გირჩევთ წაიკითხოთ და ორიგინალშიც; თარგმანი არ არის ძალიან კარგი.
ბედნიერი კითხვა :)

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

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

ვინც კოპირება იცის, იცის როგორ გააკეთოს. ამის შესახებ ლეონარდო და ვინჩიმ თქვა. თქვენ ხედავთ, თქვენ წარმოადგენთ თქვენს იდეებს იმის შესახებ, თუ რა არის XP, Windows და ოპერაციული სისტემა. ხალხი ასე ლაპარაკობს:

ჯერ კიდევ ახალგაზრდა ვიყავი, XP მქონდა, ოქროს დღეები იყო, მაგრამ ახლა ისეთი აღარ არის, როგორც ადრე. ახალი დრო, თანამედროვე პროგრამული უზრუნველყოფა. არ მესმის, რატომ იჭრება ძველი ნივთები? თქვენ მაინც შეგეძლოთ Windows 10-ის კლონი შექმნათ, მაგრამ თქვენი სისწრაფით თქვენ მას 100 წელიწადში გააკეთებთ.

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

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

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

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

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

კომპიუტერული აზროვნება

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

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

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

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

პროგრამირების მორალური მხარე

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

ამ პროგრამებს ადამიანები წერენ, მაგრამ საკითხავია: რა უბიძგებს ამ ადამიანს?

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

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

დასკვნა.

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


ბიბლიოგრაფია

  1. ვარფოლომეევა ტ.ნ., ოვჩინნიკოვა ი.გ. სახელმძღვანელოპროგრამირებაზე. [ტექსტი]: სახელმძღვანელო. სახელმძღვანელო / Magnitogorsk: MaSU, 2005. კლასიფიცირებული, როგორც UMO. – 104 წ.
  2. ვარფოლომეევა T.N., Ovchinnikova I.G., Platonova O.I. პროგრამირების მეთოდოლოგიები. [ტექსტი]: სახელმძღვანელო. სახელმძღვანელო / Magnitogorsk: MaSU, 2007. – 204 გვ.
  3. ვარფოლომეევა, ტ.ნ. ობიექტზე ორიენტირებული პროგრამირების ლაბორატორიული სემინარი. [ტექსტი]: სახელმძღვანელო. შემწეობა / თ.ნ. ვარფოლომეევა, ი.იუ. ეფიმოვა - მოსკოვი, 2014. (მე-2 გამოცემა, სტერეოტიპული)
  4. ვარფოლომეევა, ტ.ნ. ლაბორატორიული სემინარი სტრუქტურირებული პროგრამირების შესახებ PASCAL ენის მაგალითის გამოყენებით [ტექსტი]: სახელმძღვანელო. შემწეობა / თ.ნ. ვარფოლომეევა, ს.ა. პოვიტუხინი. – მაგნიტოგორსკი: MaSU, 2013. – 123 გვ.
  5. ვარფოლომეევა, ტ.ნ. სახელმძღვანელო კომპიუტერულ მეცნიერებაში ერთიანი სახელმწიფო გამოცდისთვის და კომპიუტერული ტომოგრაფიისთვის მომზადებისთვის [ტექსტი]: სახელმძღვანელო. სახელმძღვანელო 2 ნაწილად, ტ. ნაწილი 1. ალგორითმიზაცია და პროგრამირება / ტ.ნ. ვარფოლომეევა, ი.გ. ოვჩინნიკოვა. – მაგნიტოგორსკი: MaSU, 2006. – 128გვ.
  6. ვარფოლომეევა, ტ.ნ. სახელმძღვანელო კომპიუტერულ მეცნიერებაში ცენტრალიზებული ტესტირებისთვის მოსამზადებლად [ტექსტი]: სახელმძღვანელო. შემწეობა / თ.ნ. ვარფოლომეევა, ი.გ. ოვჩინიკოვა, ნ.გ. Korneshchuk Magnitogorsk: MaSU, 2002. – 205 გვ.
  7. ვარფოლომეევა, ტ.ნ. სასწავლო და მეთოდური სახელმძღვანელოკომპიუტერულ მეცნიერებაში მისაღები გამოცდებისთვის მოსამზადებლად [ტექსტი]: სახელმძღვანელო. შემწეობა / თ.ნ. ვარფოლომეევა, ი.გ. ოვჩინიკოვა, ე.ნ. გუსევა მაგნიტოგორსკი: MaSU, 2002. – 116 გვ.
  8. ეფიმოვა, ი.იუ. კომპიუტერული მოდელირება [ტექსტი]: კოლექცია პრაქტიკული სამუშაომე-2 გამოცემა, სტერეოტიპული / I.Yu. ეფიმოვა, ტ.ნ. ვარფოლომეევა. – მოსკოვი: შპს ფლინტა, 2014. – 67 გვ. ISBN: 978-5-9765-2039-4
  9. ეფიმოვა, ი.იუ. კომპიუტერული მეცნიერების სწავლების მეთოდები და ტექნოლოგიები საგანმანათლებო ინსტიტუტები პროფესიული განათლება[ტექსტი]: საგანმანათლებლო მეთოდი. სახელმძღვანელო მე-2 გამოცემა, სტერეოტიპული / I.Yu. ეფიმოვა, ტ.ნ. ვარფოლომეევა. – მოსკოვი: შპს ფლინტა, 2014. – 41გვ. ISBN 978-5-9765-2040-0
  10. მოვჩანი ი.ნ. უნივერსიტეტებში კომპიუტერული მეცნიერების სწავლების ინოვაციური მიდგომები // თანამედროვე Სამეცნიერო გამოკვლევადა ინოვაცია. – 2014. – No5-2 (37). - გვ. 45.
  11. მოვჩანი ი.ნ. უნივერსიტეტის სტუდენტებისთვის საინფორმაციო ტრენინგის ზოგიერთი ასპექტი // კრებული სამეცნიერო ნაშრომებისამყარო. – 2008. ტ.18. – No 1. – გვ 34-36.
  12. Movchan I.N. უნივერსიტეტის სტუდენტის საინფორმაციო საქმიანობის პედაგოგიური კონტროლი პროფესიული მომზადების პროცესში: დის. ...კანდელი. პედ. მეცნიერებები/მოვჩან ირინა ნიკოლაევნა; მაგნიტოგორსკის სახელმწიფო უნივერსიტეტი. – მაგნიტოგორსკი, 2009, – 205 გვ.
  13. ოვჩინნიკოვა ი.გ. პიროვნების განათლების ეფექტურობის შეფასება [ტექსტი] / ი.გ. ოვჩინიკოვა, ვ.ა. ბელიკოვი, ლ.ვ. კურზაევა // სოციალური პარტნიორობა პროფესიულ განათლებაში რუსი სამეცნიერო და პრაქტიკული კონფერენციის მასალები. FGOU SPO "მაგნიტოგორსკის სახელმწიფო პროფესიული პედაგოგიური კოლეჯი", რუსეთის განათლების აკადემიის ურალის ფილიალის დაწყებითი და საშუალო პროფესიული განათლების ხარისხის მართვის პრობლემების კვლევის ლაბორატორია: კოლექცია. სამეცნიერო Ხელოვნება. Magnitogorsk, 2010. – P. 178-187.
  14. ოვჩინიკოვა, ი.გ. პრობლემური წიგნი-ვორქშოპი პროგრამირების შესახებ [ტექსტი]: საგანმანათლებლო მეთოდი. შემწეობა. / ი.გ. ოვჩინიკოვა, ტ.ნ. ვარფოლომეევა. – მაგნიტოგორსკი: MaSU, 2009. – 77გვ.
  15. სახნოვა ტ.ნ., ოვჩინნიკოვა ი.გ. საძიებო ალგორითმები კომპიუტერული მეცნიერების კურსებში უმაღლესი სკოლა[ტექსტი] // კომპიუტერული მეცნიერება და განათლება. – 2010 – No11 – გვ 79-83.
  16. სახნოვა ტ.ნ., ოვჩინნიკოვა ი.გ. დახარისხების ალგორითმები პროგრამირების ამოცანების ამოხსნისთვის [ტექსტი] // კომპიუტერული მეცნიერება და განათლება. – 2011. – No2 – გვ 53-57
  17. სახნოვა, თ.ნ. ალგორითმიზაციის საფუძვლები [ტექსტი]: სახელმძღვანელო. სახელმძღვანელო, მე-2 გამოცემა, შესწორებული. და დამატებითი / ტ.ნ. სახნოვა, ი.გ. ოვჩინნიკოვა. – Magnitogorsk: MaSU, 2002. UMO-ს შტამპის ქვეშ. – 131 გვ.
  18. სახნოვა, თ.ნ. უნივერსიტეტის სტუდენტების პროფესიული საინფორმაციო აზროვნების ფორმირების პედაგოგიური პირობები [ტექსტი]: დის. ...კანდელი. პედ. მეცნიერებები: 13.00.08 / თ.ნ. სახნოვა. - მაგნიტოგორსკი, 2003 წ.
  19. სახნოვა, თ.ნ. სახელმძღვანელო კომპიუტერულ მეცნიერებაში ერთიანი სახელმწიფო გამოცდისთვის და კომპიუტერული ტომოგრაფიისთვის მომზადებისთვის [ტექსტი]: სახელმძღვანელო. სახელმძღვანელო 2 ნაწილად, ტ. ნაწილი 2. საბაზო კურსი / თ.ნ. სახნოვა, ი.გ. ოვჩინნიკოვა. – მაგნიტოგორსკი: MaSU, 2006. – 128გვ.
  20. ჩუსავიტინა, გ.ნ. დისტანციური პულტის გამოყენებით წარმოქმნილი რისკების მართვის მოდელის შემუშავება საგანმანათლებლო ტექნოლოგიებიუნივერსიტეტში [ტექსტი] / გ.ნ. ჩუსავიტინა, მ.ო. ჩუსავიტინი, ტ.ნ. ვარფოლომეევა // IT სპეციალისტების ტრენინგის გაუმჯობესება ინოვაციური ეკონომიკისთვის "გამოყენებითი ინფორმატიკის" მიმართულებით: კოლექცია. სამეცნიერო ტრ. მოსკოვი, 2008. – გვ 216-218.
პუბლიკაციის ნახვების რაოდენობა: Გთხოვთ მოიცადოთ

 

შეიძლება სასარგებლო იყოს წაკითხვა: