A-tit indd


Объект типа необходимо отслеживать вручную



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

Объект типа необходимо отслеживать вручную
Одно из преимуществ использования системы типов, 
определенных в языке вроде С++, заключается в том, 
что компилятор следит за классами в автоматическом 
режиме. Данные, которые определяют каждый класс, 
автоматически компилируются в сегменте статической 
памяти исполняемого файла и просто работают.
При использовании паттерна Объект типа (Type 
Object) нам необходимо управлять не только монстра-
ми в памяти, но и их 
типами
— нам важно убедиться, 
что они инстанцируются и хранятся в памяти все вре-
мя, пока они нам нужны. Новый монстр всегда должен 
правильно инициироваться и ссылаться на нужный род.
Мы избавились от определенных ограничений ком-
пилятора, но теперь нам придется вручную реализовы-
вать некоторые полезные его функции.
Сложнее определить 
поведение
 для каждого типа
Если вы используете подклассы, вы можете переопреде-
лить метод и делать все, что захотите: вычислять значе-
ния с помощью процедур, вызывать другой код и так да-
лее. Никаких ограничений. Мы можем даже определить 
монстра, чья строка атаки будет изменяться в зависимо-
сти от фазы луны, если захотим. (Для оборотней отлич-
но подойдет.)
Если мы используем паттерн Объект типа (Type 
Object), мы заменяем переопределенный метод пере-
менной-членом. Вместо подклассов монстров, где ме-
тод 
расчета
строки атаки переопределен другим 
кодом

у нас есть объект рода, в котором строка атаки 
хранит-
ся
в другой 
переменной
.
Если заглянуть в реали-
зацию С++, вы увидите, 
что виртуальные методы 
реализуются с помощью 
«виртуальных таблиц 
функций», или vtable. 
Виртуальная таблица 
представляет собой 
обычный 
struct
, со-
держащий набор указа-
телей на функции, один 
для каждого виртуаль-
ного метода в классе. 
На каждый класс прихо-
дится одна виртуальная 
таблица. Каждый экзем-
пляр класса имеет ука-
затель на виртуальную 
таблицу его класса.
Когда вы вызываете 
виртуальную функцию, 
прежде всего просма-
тривается виртуальная 
таблица объекта, а затем 
вызывается функция, 
указатель на которую 
хранится в этой таблице.
Звучит знакомо? Вир-
туальная таблица — это 
наш объект рода, а ука-
затель на нее — ссылка 
монстра на род. Классы 
в С++ не что иное, как 
паттерн Объект типа 
(Type Object), приме-
ненный к С и автомати-
чески обрабатываемый 
компилятором.



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   183   184   185   186   187   188   189   190   ...   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