მონაცემთა სტრუქტურები
მონაცემთა სტრუქტურები კომპიუტერულ მეცნიერებაში გამოიყენება კომპიუტერში მონაცემთა შენახვისთვის და მათზე გარკვეული მოქმედებების განხორციელებისთვის. ერთი და იმავე გამოყენებითი ამოცანის გადაჭრა ხშირად შესაძლებელია რამდენიმე განსხვავებული მონაცემთა სტრუქტურის გამოყენებით. ასეთ შემთხვევაში, მონაცემთა სტრუქტურის შერჩევისთვის განმსაზღვრელი მნიშვნელობა აქვს თუ რომელი სტრუქტურის ოპერაციები უფრო სწრაფად იმუშავებს მოცემულ ამოცანაში. თანამედროვე მიდგომით, მონაცემთა სტრუქტურების დიზაინისთვის (აგებისთვის) ძირითად კონცეფციას წარმოადგენს მონაცემთა აბსტრაგირება, ანუ მონაცემთა აბსტრაქტული ტიპი (ADT). მონაცემთა აბსტრაქტული ტიპი გვთავაზობს ობიექტების სიმრავლეს და ამ ობიექტებზე განსაზღვრული ოპერაციების სიმრავლეს. ტერმინი აბსტრაქტული ნიშნავს, რომ მომხმარებლისთვის ცნობილია მხოლოდ ADT-ს ინტერფეისი (ანუ ღია წვდომის მეთოდების აღწერილობები), მაგრამ ოპერაციების იმპლემენტაცია მისთვის დახურულია), რასაც C++ ენის კლასის ცნება ადვილად უზრუნველყოფს. ასეთი მიდგომა აზღვევს პროგრამისტებს, რომ მათ მიერ შექმნილ კოდში არ გამოჩნდეს იმპლემენტაციის დეტალებზე დამოკიდებული წვრილმანები, რაც თავის მხრივ უზრუნველყოფს რომ მონაცემთა აბსტრაგირების საფუძველზე შექმნილი პროგრამული უზრუნველყოფა იქნება მოქნილი, ადვილად დაექვემდებარება მოდიფიკაციას და გათანამედროვეობას პროგრამული პროდუქტის შექმნიდან მისი მთელი არსებობის დროის განმავლობაში. დროთა განმავლობაში int ტიპის შინაგანი წარმოდგენა და იმპლემენტაცია იცვლება, მაგრამ მისი ინტერფეისი უცვლელია, რაც ძალიან კომფორტულია პროგრამისტებისთვის. მაგალითად, ადრე int ის ერთი ობიექტი (ცვლადი) იკავებდა ორ ბაიტს, ამჟამად ძირითადად გავრცელებულია 4 ბაიტიანი წრმოდგენა, უკვე ხდება გადასვლა 8 ბაიტიანზე. ცხადია, წარმოდგენის შეცვლა იწვევს იმპლემენტაციის შეცვლას. მაგრამ ეს არ იგრძნობა — მხოლოდ ინტერფეისის გამოყენებით დაწერილი პროგრამა იმუშავებს განსხვავებული წარმოდგენების მქონე კომპიუტერებზე. მონაცემთა სტრუქტურების იმპლემენტაცია დამოკიდებულია იმ ენის შესაძლებლობებზე, რომლითაც მიმდინარეობს პროგრამირება. ობიექტზე ორიენტირებულ ენებში (C++, C#, Java და სხვ.) აბსტრაგირებისთვის გამოიყენება კლასი. ამ ენებს აქვთ დამატებითი შესაძლებლობები, რაც გამოიხატება ობიექტზე ორიენტირებულ პროგრამირების სტილთან ერთად მის მიერ განზოგადებული დაპროგრამების (generic programming) სტილის მხარდაჭერაში. თანამედროვე ენები საშუალებას იძლევიან ერთდროულად (concurrent) მიმდენარე პროცესების დამუშავების შესაძლებლობას მრავალი დინების (thread) გამოყენებით. ძალიან აქტურალურია ისეთი მონაცემთა სტრუქტურების დამუშავება, ან არსებული იმპლემენტაციების გამოყენება, რომლებიც მრავალდინებიან გარემოში კორექტულად ფუნქციონირებენ და მრავალი დინების არსებობას იყენებენ შედეგის უფრო სწრაფად მისაღწევად.