Друзья!
Я продолжил свои изыскания в проектировании классов будущей игры и возник новый вопрос. Появился он при переходе от базовых свойств персонажа к специфическим: которые выделяются для пола, профессии и т.п. Пусть условно для мужчин учитывается длина бороды, а для женщин - объём талии. У меня получилось следующее. Я создал новый класс Gender с единственным свойством genderID, которое может принимать значения 0 для женского пола и 1 для мужского, и унаследовал от него два класса GenderMale и GenderFemale. В первом соответственно свойство beardLength, во втором - waistVolume, плюс set- и get-методы для каждого.
Тогда в классе персонажа Character добавился такой set-метод:

Код AS3:
public function set gender(newGenderID:uint):void //Пол
{
switch (newGenderID)
{
case 1:
_gender = new GenderMale(newGenderID);
break;
case 0:
_gender = new GenderFemale(newGenderID);
break;
default:
throw new Error ("Пол персонажа может иметь значение 0-female или 1-male");
}
}
Экземпляр класса Character теперь имеет экземпляр класса-потомка Gender в приватной переменной _gender.
Вопрос такой. Чтобы задать либо получить значения свойства, связанного с полом, приходится писать такой код. Например, для нашей бороды:
В классе Character:

Код AS3:
public function set beardLength(bewBeardLength:Number):void {_gender.beardLength = bewBeardLength; }
Теперь в Gender:

Код AS3:
public function set beardLength(bewBeardLength:Number):void {}
Наконец, в GenderMale:

Код AS3:
override public function set beardLength(bewBeardLength:Number):void {_beardLength = bewBeardLength}
Аналогично с get-методом. В принципе работает, но как-то чересчур громоздко выглядит. И этим активно не нравится. Если на каждое подобное свойство писать методы в трёх местах, то это получится мясо и фарш, а не код. Обращаться напрямую character._gender.beardLength тоже не выходит, т.к. переменная _gender объявлена как private и менять её статус не вижу никакого резона. в общем, need help. Заранее спасибо.