მემკვიდრეობა კონტეინერის წინააღმდეგ
მემკვიდრეობა და კონტეინერინგი არის ორი მნიშვნელოვანი კონცეფცია, რომელიც გვხვდება OOP-ში (ობიექტზე ორიენტირებული პროგრამირების მაგალითი: C++). მარტივი სიტყვებით, Containership და Inheritance ეხება კლასს დამატებითი თვისებების ან ქცევის მიწოდებას. მემკვიდრეობა არის კლასის უნარი, მემკვიდრეობით მიიღოს თვისებები და ქცევა მშობელი კლასისგან მისი გაფართოებით. მეორე მხრივ, Containership არის კლასის უნარი, შეიცავდეს სხვადასხვა კლასის ობიექტებს, როგორც წევრების მონაცემებს.
რა არის მემკვიდრეობა?
როგორც ზემოთ აღინიშნა, მემკვიდრეობა არის უნარი, რომ კლასის მემკვიდრეობით მიიღოს თვისებები და ქცევა მშობელი კლასისგან მისი გაფართოებით.მემკვიდრეობა არსებითად უზრუნველყოფს კოდის ხელახლა გამოყენებას, რაც საშუალებას აძლევს არსებული კლასის თვისებების და ქცევის გაფართოებას ახლად განსაზღვრული კლასის მიერ. თუ კლასი A აფართოებს B, მაშინ B კლასს ეწოდება მშობელი კლასი (ან სუპერკლასი) და A კლასს ეწოდება ბავშვის კლასი (ან მიღებული კლასი/ქვეკლასი). ამ მაგალითის სცენარში, კლასი A მემკვიდრეობით მიიღებს სუპერ კლასის (B) ყველა საჯარო და დაცულ ატრიბუტსა და მეთოდს. ქვეკლასს შეუძლია სურვილისამებრ გადალახოს (მიაწოდოს მეთოდებს ახალი ან გაფართოებული ფუნქციონირება) მშობელი კლასიდან მემკვიდრეობით მიღებული ქცევა. მემკვიდრეობა წარმოადგენს "is-a" ურთიერთობას OOP-ში. ეს არსებითად ნიშნავს, რომ A ასევე არის B. სხვა სიტყვებით რომ ვთქვათ, B შეიძლება იყოს კლასი გარკვეული რეალური სამყაროს ერთეულის ზოგადი აღწერით, მაგრამ A განსაზღვრავს გარკვეულ სპეციალობას. რეალურ სამყაროში პროგრამირების პრობლემაში, Person კლასი შეიძლება გაფართოვდეს Employee კლასის შესაქმნელად. ამას ჰქვია სპეციალობა. მაგრამ თქვენ ასევე შეგიძლიათ ჯერ შექმნათ Employee კლასი და შემდეგ განაზოგადოთ იგი პიროვნების კლასში (ე.ი.ე. განზოგადება). ამ მაგალითში, თანამშრომელს ექნება პირის ყველა თვისება და ქცევა (ანუ თანამშრომელი ასევე არის პიროვნება) და შეიძლება შეიცავდეს დამატებით ფუნქციებს (ასე რომ, ადამიანი არ არის თანამშრომელი).
რა არის კონტეინერი?
Containership არის კლასის უნარი შეიცავდეს სხვადასხვა კლასის ობიექტებს, როგორც წევრ მონაცემებს. მაგალითად, კლასი A შეიძლება შეიცავდეს B კლასის ობიექტს წევრად. აქ B-ში განსაზღვრული ყველა საჯარო მეთოდი (ან ფუნქცია) შეიძლება შესრულდეს A კლასში. კლასი A ხდება კონტეინერი, ხოლო კლასი B ხდება შემავალი კლასი. კონტეინერს ასევე უწოდებენ კომპოზიციას. ამ მაგალითში შეიძლება ითქვას, რომ A კლასი შედგება B კლასისგან. OOP-ში Containership წარმოადგენს "has-a" ურთიერთობას. მნიშვნელოვანია აღინიშნოს, რომ, მიუხედავად იმისა, რომ კონტეინერს აქვს წვდომა შემავალი კლასის ყველა საჯარო მეთოდის შესასრულებლად, მას არ შეუძლია შეცვალოს ან უზრუნველყოს დამატებითი ფუნქციები. როდესაც საქმე ეხება რეალურ სამყაროში პროგრამირების პრობლემას, TextBox კლასის ობიექტი შეიძლება შეიცავდეს კლასს Form-ში და, ამრიგად, შეიძლება ითქვას, რომ ფორმა შეიცავს TextBox-ს (ან ალტერნატიულად, ფორმა შედგება TextBox-ისგან).
სხვაობა მემკვიდრეობასა და კონტეინერს შორის
მიუხედავად იმისა, რომ მემკვიდრეობა და კონტეინერინგი არის ორი OOP კონცეფცია, ისინი საკმაოდ განსხვავდებიან იმით, რისი მიღწევის საშუალებას აძლევს პროგრამისტს. მემკვიდრეობა არის კლასის უნარი, მემკვიდრეობით მიიღოს თვისებები და ქცევა მშობელი კლასისგან მისი გაფართოებით, ხოლო Containership არის კლასის უნარი შეიცავდეს სხვადასხვა კლასის ობიექტებს, როგორც წევრ მონაცემებს. თუ კლასი გაფართოებულია, ის მემკვიდრეობით იღებს ყველა საჯარო და დაცულ თვისებას/ქცევას და ეს ქცევები შეიძლება გადალახოს ქვეკლასმა. მაგრამ თუ კლასი შეიცავს სხვას, კონტეინერს არ აქვს უნარი შეცვალოს ან დაამატოს ქცევა შეიცავს. მემკვიდრეობა წარმოადგენს "is-a" ურთიერთობას OOP-ში, ხოლო Containership წარმოადგენს "has-a" ურთიერთობას.