„Здравей, Амиго! Най-накрая стигнахме до нещо наистина интересно. Днес ще ви разкажа за множественото наследяване . Множественото наследяване наистина е много завладяващ и мощен инструмент. И ако не бяха няколко проблема, тогава Java ще поддържа множествено наследяване на класове. Но не го прави, така че трябва да се задоволим с множествено наследяване на интерфейси . Което също е доста страхотно."

Представете си, че пишете компютърна игра. И неговите герои (вашите обекти) трябва да се държат по много сложни начини: да се разхождате по картата, да събирате предмети, да изпълнявате мисии, да общувате с други герои, да убиете някого, да спасите някой друг. Да приемем, че сте успели да разделите всички обекти в 20 категории. Това означава, че ако имате късмет, ще можете да се справите само с 20 класа, за да дефинирате вашите обекти. Но тук е уловката: колко уникални форми на взаимодействие ще имат тези обекти? Всеки тип обект може да има уникални взаимодействия с 20 други типа обекти (ние също така броим взаимодействията с обекти от същия тип). С други думи, ще трябва да напишете code за 20 x 20 = 400 взаимодействия! И ако броят на уникалните типове обекти не е 20, а 100, тогава броят на взаимодействията може да бъде 10 000!
„Уау! Сега разбирам защо програмирането е толкова трудна работа.“
„Просто е. Благодарение на многото абстракции. И не малко благодарение на множеството наследяване на интерфейси.“
Често можем да опростим взаимодействието на обектите, ако си взаимодействат роли и/or способности, а не самите обекти. И Howто вече знаем, способностите могат лесно да бъдат добавени към клас, когато имплементира няHowъв интерфейс.
Когато пишат голяма програма, разработчиците обикновено правят това от самото начало:
1) Идентифицирайте всички способности/роли.
2) Определете взаимодействието между тези роли.
3) След това просто задайте роли на всички класове.
— Може би пример?
"Разбира се. Нека да разгледаме ролите в анимационния филм "Том и Джери"."
Java code | Описание |
---|---|
|
— Роля/способност за движение. |
|
— Роля/способност да бъде изяден. |
|
— Роля/способност да изядеш някого. |
|
Том е котка, която има три роли: 1) Може да се движи 2) Може да изяде някого 3) Може да бъде изяден от някого (куче) |
|
Джери е мишка, която има две роли: 1) Може да се движи 2) Може да бъде изяден от някого |
|
Убиецът е куче с две роли: 1) Може да се движи 2) Може да изяде някого |
Познавайки само тези три роли (интерфейси), можете да напишете програма и да опишете правилното взаимодействие между тези роли. Например, обект ще преследва (чрез интерфейса Moveable) след «този, който можеш да изядеш» и ще избяга от «този, който може да те изяде». И всичко това без да знае за конкретни обекти. Ако добавите повече обекти (класове) към програмата и запазите тези роли, тя все още ще работи прекрасно, контролирайки поведението на вашите обекти.
GO TO FULL VERSION