Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
06.12.2007 18:00

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Непонятки с наследованием

Разве noun не наследуется? Кажется, я это уже применял - и все работало.
Но вот сейчас, когда я писал код для goraph, появился тупой глюк.

Итак, код простейший:

Код:

#include <advr.t>
#include <stdr.t>
#include <errorru.t>

startroom: room
    sdesc = "Спальная комната"
    ldesc = "Единственная комната моей квартиры."
;

vial: item
    location = nil
    sdesc = "пузырёк"
    rdesc = "пузырька"
    ddesc = "пузырьку"
    vdesc = "пузырёк"
    tdesc = "пузырьком"
    pdesc = "пузырьке"
    noun = 'пузырек' 'пузырька' 'пузырьку' 'пузырьком' 'пузырьке' 'пузырьку#d' 'пузырьком#t'
    ldesc = "На свету небольшой пузырёк длиной с палец поблескивает гранями."
    isHim = true
;

vial1: vial
    location = startroom
;

Получаем:

>смотреть
Спальная комната
    Единственная комната моей квартиры.
    Ты видишь здесь пузырёк.

>взять пузырёк
Я не вижу здесь объект "пузырек".

>взять пузырек
Я не вижу здесь объект "пузырек".

>

Это что? roll
Пробовал с разными версиями русских библиотек.

Самое интересное, что если в наследнике явно прописать noun:

Код:

vial1: vial
    location = startroom
    noun = 'пузырек' 'пузырька' 'пузырьку' 'пузырьком' 'пузырьке' 'пузырьку#d' 'пузырьком#t'
;

то все прекрасно...

Неактивен

0    0    #2
06.12.2007 18:36

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Непонятки с наследованием

Надо написать

Код:

class vial: item

тогда все будет нормально. Тебе нужно понять разницу между классом объектов и экземпляром класса. Ты создал экземпляр класса item. А тебе надо создать класс-наследник от item.

Неактивен

0    0    #3
06.12.2007 21:35

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Непонятки с наследованием

Спасибо )
Я понимаю разницу между классом и экземпляром класса - просто не знал, что в TADS существуют классы как таковые. Меня ввела в заблуждение фраза, которую я где-то прочел, что в TADS нет разницы между классами и объектами. Этого человека надо найти и покарать smile

Неактивен

0    0    #4
06.12.2007 23:55

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Непонятки с наследованием

Меня больше удивило, что TADS позволяет наследование от экземпляра класса... Бред полный с точки зрения ООП.

Неактивен

0    0    #5
07.12.2007 01:25

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Непонятки с наследованием

Hind написал:

Спасибо )
Я понимаю разницу между классом и экземпляром класса - просто не знал, что в TADS существуют классы как таковые. Меня ввела в заблуждение фраза, которую я где-то прочел, что в TADS нет разницы между классами и объектами. Этого человека надо найти и покарать smile

Чего его искать? Это я (правда, вместе с Майклом Робертсом;). Вот как это описано в оригинальном мануале:

In TADS, there is no distinction between classes and instances of classes, in that a class is also an object. Hence, data values as well as methods can be inherited from a parent object. In TADS, the only distinction between a class and a normal object is that a class object is ignored by the player command parser.

И перевод:

В TADS нет такого различия между классами и объектами, т. е. класс также представляет собой объект. Поэтому от родительского объекта/класса можно унаследовать как структуру данных, так и конкретные значения. Единственное различие между классом и обычным объектом в TADS заключается в том, что классы игнорируются синтаксическим анализатором команд игрока.

Еще одно различие, которое автор как-то упустил - это то, что лексические свойства наследуются только от классов (что, если задуматься, в целом логично). Я, правда, вообще наследованием лексики почти не пользуюсь - переписываю ее заново для каждого объекта.

Отредактировано uux (07.12.2007 01:26)

Неактивен

0    0    #6
07.12.2007 10:43

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Непонятки с наследованием

uux написал:

Чего его искать? Это я (правда, вместе с Майклом Робертсом;).

Ну, ты же только переводил в этом предложении, так что вина целиком на Робертсе ) Но он непогрешим по определению - как создатель TADS smile

fireton написал:

Меня больше удивило, что TADS позволяет наследование от экземпляра класса... Бред полный с точки зрения ООП.

Ну уж не больший бред, чем отсутствие инкапсуляции. Но авторы игр все же не программисты...

Неактивен

0    0    #7
07.01.2008 18:57

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Непонятки с наследованием

Ну уж не больший бред, чем отсутствие инкапсуляции. Но авторы игр все же не программисты...

Хм. Ты про то, что нельзя скрывать методы и свойства?

Неактивен

0    0    #8
09.01.2008 17:37

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Непонятки с наследованием

fireton написал:

Меня больше удивило, что TADS позволяет наследование от экземпляра класса... Бред полный с точки зрения ООП.

ООП бывают разные:) наследование можно расширенно трактовать как подобие. В этом случае наследование от экземпляра вполне допустимо.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru