Middle
Obyekt yönümlü proqramlaşdırmada irsiyyət hansı vəziyyətlərdə faydalıdır və hansı hallarda ondan imtina etmək lazımdır?
sobes.tech Süni İntellekt
AI-dan cavab
Miras, kodun təkrarlanması və irsiyyət üçün hierarxiyalar üçün faydalıdır:
- Kodun təkrarlanmasının qarşısını almaq: Ümumi funksionallıq əsas sinfə yerləşdirilir.
- Növ hiyerarşilərinin yaradılması (is-a əlaqəsi): Uşaqlıq sinfi bir növ əsas sinifdir.
- Polimorfizm: Müxtəlif tiplərdəki obyektləri ümumi əsas sinif interfeysi vasitəsilə işləmək imkanı.
- Funksionallığın genişləndirilməsi: Mövcud sinfə yeni metodlar və ya sahələr əlavə etmək.
İrsiyyətdən qaçınmaq lazım olan hallar:
- Liskov yerinə qoyma prinsipi pozulur: Uşaqlıq sinfi, proqramın düzgünlüyünü dəyişmədən, əsas sinfi tam əvəz edə bilməz.
- Sinflər arasında sərt əlaqə yaranır: Əsas sinifdəki dəyişikliklər, istənməyən təsirlərlə bütün uşaqlara təsir edə bilər.
- Fərqli və əlaqəsiz mənbələrdən funksionallıq birləşdirilməlidir (has-a əlaqəsi): Kompozisiyadan istifadə etmək daha yaxşıdır.
- Hierarxiya çox mürəkkəb olur: Dərin irs zəncirləri, dəstəkləmək və anlamaq çətinləşdirir.
- Kodun təkrarlanmasını qarşısını almaq üçün irsiyyət, əgər funksionallıq ümumi "növ" deyilsə: Yardımçı sinflər və ya delegasiya istifadə etmək daha yaxşıdır.
// Nümunə, irsiyyət faydalıdırsa
open class Animal {
open fun makeSound() {
println("Ümumi heyvan səsi")
}
}
class Dog : Animal() { // Dog, Animal
override fun makeSound() {
println("Hav hav")
}
}
class Cat : Animal() { // Cat, Animal
override fun makeSound() {
println("Miyav")
}
}
// "has-a" əlaqəsi üçün irsiyyət yerinə kompozisiya üstünlük təşkil edir
class Engine {
fun start() { println("Mühərrik işə düşdü") }
}
// Car üçün Engine-dən irsiyyət yerinə
// class Car : Engine() // Pis dizayn, Car, Engine deyil
class Car {
private val engine = Engine() // Car, Engine-ə sahib
fun drive() {
engine.start()
println("Maşın hərəkətdə")
}
}