Как обычно решается эта ситуация? Например, объект может нуждаться в очень специфических вещах:
class Human
{
public:
void eat(Food food);
void drink(Liquid liquid);
String talkTo(Human human);
}
Скажите, что это то, что должен делать этот класс, но на самом деле это может привести к тому, что функции будут занимать более 10 000 строк. Таким образом, вы сломаете их. Проблема в том, что многие из этих вспомогательных функций не должны вызываться ничем, кроме функции, которую они обслуживают. Это делает код в некотором роде запутанным. Например, жевать (Food food); будет вызываться методом eat (), но не должен вызываться пользователем класса и, вероятно, не должен вызываться где-либо еще.
Как рассматриваются эти случаи в целом. Я смотрел некоторые классы из реальной видеоигры, которая выглядела так:
class CHeli (7 variables, 19 functions)
Variables list
CatalinaHasBeenShotDown
CatalinaHeliOn
NumScriptHelis
NumRandomHelis
TestForNewRandomHelisTimer
ScriptHeliOn
pHelis
Functions list
FindPointerToCatalinasHeli (void)
GenerateHeli (b)
CatalinaTakeOff (void)
ActivateHeli (b)
MakeCatalinaHeliFlyAway (void)
HasCatalinaBeenShotDown (void)
InitHelis (void)
UpdateHelis (void)
TestRocketCollision (P7CVector)
TestBulletCollision (P7CVectorP7CVectorP7CVector)
SpecialHeliPreRender (void)
SpawnFlyingComponent (i)
StartCatalinaFlyBy (void)
RemoveCatalinaHeli (void)
Render (void)
SetModelIndex (Ui)
PreRenderAlways (void)
ProcessControl (void)
PreRender (void)
Все они выглядят как функции довольно высокого уровня, что означает, что их исходный код должен быть довольно длинным. Что хорошо в этом, так это то, что с первого взгляда становится ясно, что может делать этот класс, и этот класс выглядит простым в использовании. Тем не менее, код для этих функций может быть довольно большим.
Что должен делать программист в этих случаях; что является правильной практикой для подобных ситуаций.