A-tit indd



Download 3,35 Mb.
Pdf ko'rish
bet185/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   181   182   183   184   185   186   187   188   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

Класс для класса
На самом высоком уровне проблема очень проста. У нас 
в игре есть множество различных монстров, и мы хотим 
разделить между ними определенные характеристики. 
Орда монстров атакует героя, а мы хотим, чтобы неко-
торые из них при этом использовали один и тот же текст 
во время атаки. Мы можем объявить о принадлежности 
монстров к одному «роду», а род уже определит строку 
атаки.
Мы решили реализовать концепцию с помощью 
наследования, поскольку оно интуитивно и отража-
ет наше понимание классов. Дракон — это монстр, 
и каждый дракон в игре — экземпляр «класса» дракон. 
Определение каждого рода монстров как подкласс ба-
зового класса 
Monster
и каждого монстра в игре как 
экземпляра производного класса идеально отражает 
наш замысел. В итоге мы получаем вот такую иерар-
хию классов (рис. 13.1).
Рис. 13.1.
Слишком много подклассов
Здесь 
обозначает 
«наследует от»


252
Объект типа (Type Object) — 
Паттерны программирования игр
Каждый экземпляр в игре будет принадлежать к од-
ному из производных типов монстров. И чем больше ро-
дов у нас будет, тем больше будет иерархия. Вот и про-
блема: добавление нового рода приводит к добавлению 
нового кода, да и каждый род должен компилироваться 
как отдельный тип.
Такое решение неплохое, но есть и другие. Мы можем 
построить архитектуру кода таким образом, что каждо-
му монстру род будет 
принадлежать
. Мы не станем каж-
дый род определять как подкласс 
Monster
, а создадим 
единственный класс 
Breed
(рис. 13.2).
Рис. 13.2.
Два класса, бесконечное количество родов
Итак, два класса. Обратите внимание: никакого насле-
дования! При такой реализации каждый монстр в игре яв-
ляется просто экземпляром класса 
Monster
. Класс 
Breed
содержит информацию, общую для всех монстров одного 
рода: начальный показатель здоровья и строка атаки.
Чтобы связать каждого монстра с определенным ро-
дом, каждому экземпляру класса 
Monster
дадим ссыл-
ку на объект 
Breed
, где будет содержаться информа-
ция для конкретного рода. Для доступа к строке атаки 
монстр просто вызывает соответствующий метод в сво-
ем роде. Класс 
Breed
, по сути, определяет «тип» мон-
стра. Каждый экземпляр рода —
объект
, представляю-
щий определенный смысловой 
тип
, отсюда и название 
паттерна: Объект типа (Type Object).
Мощь этого паттерна в том, что теперь мы можем 
определять новые 
типы
чего-либо без необходимости 
усложнять код. По сути, мы подняли часть системы типов 
из жестко закодированной иерархии классов к данным, 
которые мы можем определять во время выполнения.
Мы можем создать сотни различных родов, добавляя 
экземпляры 
Breed
с различными значениями. А если 
Здесь 
обозначает 
«ссылается на».



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   181   182   183   184   185   186   187   188   ...   313




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish