არის ურთიერთობა — მოდელირებული -ით ( ). არის ურთიერთობა — მოდელირებული -ით ( ). სწორი არჩევანი არის ძირითადი მოდელირების გადაწყვეტილება.
არის ურთიერთობა — მოდელირებული -ით ( ). არის ურთიერთობა — მოდელირებული -ით ( ). სწორი არჩევანი არის ძირითადი მოდელირების გადაწყვეტილება.
CarVehicleCarEngine// IS-A → inheritance
class Vehicle { void move() {} }
class Car extends Vehicle { } // a Car IS A Vehicle
// HAS-A → composition
class Engine { void start() {} }
class Car2 {
private Engine engine = new Engine(); // a Car HAS AN Engine
void start() { engine.start(); } // delegate to the part
}
კითხეთ: "არის X სახეობა Y-ის, თუ X აქვს/იყენებს Y-ს?"
A Dog IS-A Animal → inheritance ✅
A Car HAS-A Engine → composition ✅
A Square IS-A Shape → inheritance ✅
A Manager HAS Employees → composition (a list) ✅
A Stack HAS-A list (not IS-A) → composition (see earlier pitfall) ✅
ადამიანები მიმართავენ inheritance-ს კოდის გადამატებისთვის, თუნდაც ურთიერთობა ნამდვილად has-a იყოს. თუ მე არ შემიძლია ქვეკლასი ხელმოუწერელი გამოვიყენო ყველგან ბაზის შორის, ალბათ არ არის is-a — გამოიყენეთ composition.
ეს განსხვავება არის "favor composition over inheritance"-ის მიერ სამუშაო გადაწყვეტილების წესი: აირჩიეთ ისეთი ურთიერთობა, რომელიც სწორია, არა ის, რომელიც რამდენიმე სტრიქონს ზოგავს.
ეს სწორად გაკეთება რჩევებს შავ მდე და სტიქოსად, და ხელს უშლის Liskov დარღვევებს, სადაც "ქვეტიპი" ვერ შეუძლია მის მშობლის ადგილი ატაროს.
IT გასაუბრების კითხვების ბიბლიოთეკა დეტალური პასუხებით — Junior-დან Senior-მდე.
შემოწირულობა