Mało znaczące, związane z programowaniem obiektowym

0

Witam

Jakie macie sposoby na takiego rodzaju mankamenty ?

Przykładowo jest klasa Monster, do klasy Monster powinien należeć jako pole klasy obiekt o nazwie Body, ciało należy do potwora

istnieje powiedzmy w danym projekcie z 50 klas
klasa Body powinna tylko należeć do klasy Monster

Jednak nazwa Body jest trochę myląca bo to może być cokolwiek, trochę niefajne jakby się tak nazywała globalnie jeśli tylko powinna należeć jako obiekt do Monster

Rozwiązaniem mogłaby być nazwa MonsterBody, wtedy MonsterBody należało by do Monster
Jednak taka nazwa wydaje mi się "brzydka"

może użyć przestrzeni nazw? Jednak jak to miałoby wyglądać ...

namespace Monster
{
class Monster;
class Body;
};

Monster::Monster i Monster::Body

Trochę niefajnie

Chciałbym, żeby na ten temat wypowiedział się ktoś z dobrym doświadczeniem w projektowaniu klas i ich nazw

Pozdrawiam

1

Zakładając,że owo Body ma sens jako oddzielna klasa,to jeśli ma być używana wyłącznie w klasie Monster (i poza nią nie ma sensu za bardzo) to należy zdefiniować ją jako klasę zagnieżdżoną:

class Monster
{
   class Body
   {
   }

   Body body;
}
1

Jeżeli ten przykład jest dość konkretny(rzeczywisty) to imho hierarchia klas powinna wyglądać inaczej:

class Model
{
    class Body
    {
         ...
    }

    Body body;
    ...
    Head head; //czy co tam jeszcze będzie używane (np. do obliczania hitbox'ów)
}

class Monster
{
    ...
    Model *model;
    ...
}

Nie jestem wyrocznią i nie jestem pro, ale widzę to tak: może być wiele potworów wyglądających tak samo -> ładowanie do pamięci modelu dla każdego jednego potwora = olbrzymia strata pamięci. Dlatego właśnie potwór powinien mieć tylko wskaźnik, albo ID modelu, który definiuje jego wygląd. Sam model powinien być tylko raz załadowany do pamięci i trzymany w jakiejś kolekcji wykorzystywanych modeli.

Piszę to z własnego doświadczenia, bo kiedyś pisałem silnik 3D (rendering + fizyka) -> wynik był tragiczny, ale jednak pewne spostrzeżenia poczyniłem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1