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