სხვაობა ვირტუალურსა და აბსტრაქტს შორის

სხვაობა ვირტუალურსა და აბსტრაქტს შორის
სხვაობა ვირტუალურსა და აბსტრაქტს შორის

ვიდეო: სხვაობა ვირტუალურსა და აბსტრაქტს შორის

ვიდეო: სხვაობა ვირტუალურსა და აბსტრაქტს შორის
ვიდეო: Apple iPhone 4 vs Samsung I9000 Galaxy S browser test 2024, ივლისი
Anonim

ვირტუალური vs აბსტრაქტული

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

რეზიუმე

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

ვირტუალური

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

სხვაობა ვირტუალურსა და აბსტრაქტს შორის

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

გირჩევთ: