Tablica indeksów innej tablicy, zamiast tablicy obiektów 346 4

O temacie

Autor A.K.

Zaczęty 4.06.2018 roku

Wyświetleń 346

Odpowiedzi 4

A.K.

A.K.

Użytkownicy
posty106
Propsy121
Profesjabrak
  • Użytkownicy
Takie pytanko, odnośnie dobrych praktyk. No więc mam sobie program, w którym bardzo ważna jest wydajność w trakcie działania. Obiekty, których będę potrzebował, tworzę sobie zaraz po uruchomieniu. I teraz: Czy jeśli jeden obiekt(X) powinien zawierać tablicę informacji, przechowywanych w innych obiektach(Y) (niektóre obiekty X mogą korzystać z tych samych Y), to czy mogę stworzyć sobie w głównej klasie tablice z tymi obiektami, a w samych obiektach X zawrzeć tylko tablicę indeksów, wskazujących na lokalizację w tablicach klasy głównej, jak poniżej:


co zwalnia mnie z konieczności przeszukiwania tablic po ID, bo mam od razu dostęp bezpośredni, czy też taka praktyka jest niedopuszczalna i mimo spadku wydajności powinienem to zrobić klasycznie? A może jest jakiś inny sposób, żeby to zrobić bez niepotrzebnych przeszukiwań tablic?

Dodam, że całość ma być dość elastyczna, czyli to, jakich i ilu obiektów będę potrzebował będzie wiadome dopiero po tym, jak program w początkowej fazie pobierze i przemieli sobie dane z zewnątrz. Nie ma więc za bardzo jak zrobić coś na sztywno.

Piszę w Javie, ale w sumie pytanie ogólne.
 

inż. Avallach

inż. Avallach

Administrator
posty7620
Propsy5110
Nagrody
ProfesjaProgramista
  • Administrator
Nie widzę w tym żadnego problemu. To co opisujesz przypomina mi statyczną alokację albo pooling obiektów. Przechowywanie ich id w kolejnej kolekcji nie jest niczym złym. Najlepiej tylko pomyśl o enkapsulacji - np nie eksponuj całej tablicy między klasami, a jedynie zwróć metodę zwracającą obiekt o danym id. Wtedy potencjalnie będziesz mógł np zrezygnować z tablicy i zastąpić ją czym innym.

Kelten

Kelten

Gry (themodders@telegram)
posty616
Propsy494
ProfesjaKompozytor
  • Gry (themodders@telegram)
Tych obiektów nie można sobie tworzyć w locie w razie potrzeby? Muszą siedzieć w tablicy? Jak się obiekt powtórzy i on już istnieje to zwracasz referencje do niego.
 

inż. Avallach

inż. Avallach

Administrator
posty7620
Propsy5110
Nagrody
ProfesjaProgramista
  • Administrator
Siedzą w tablicy zamiast być tworzone w locie ze względu na wydajność. To by sugerowało że mają kosztowną inicjalizację. Mam tylko nadzieję że wykazał to benchmark, a nie jest to czyste zgadywanie. Bo jeśli chodzi tylko o kwestię alokacji pamięci, to w przypadku języka z pamięcią zarządzaną ten koszt może być dużo niższy niż np przy programowaniu w C++.

A.K.

A.K.

Użytkownicy
posty106
Propsy121
Profesjabrak
  • Użytkownicy
Akurat da się ocenić na oko, bo chodzi na przykład o tekstury dla okna OpenGL, więc generowanie w locie jest bez sesu.
Pytanie wyszło ambitne, a ja sobie tylko prostą gierkę 2D w Javie klepię :P
Spoiler
Oczywiście kiedy ja się biorę za "prostą grę", to zaczynam od aplikacji bazowej ("biedo-silnika") na LWJGL, żeby można było na nim zrobić dowolną grę na podstawie danych z plików zewnętrznych, bez ingerencji w kod. :facepalm: Szkoda słów, projekt na lata, bez szans powodzenia. Ale pobawić się można.
No i potrzebowałem wymyślić sposób na załadowanie elementów sceny na początku tak, aby dostęp do nich wymagał jak najmniej dodatkowych operacji. Zminimalizowałoby to ryzyko spadku wydajności gry. Jednocześnie chciałem, żeby można było łatwo sprawdzić, czy obiekty potrzebne w kolejnej scenie zostały już wygenerowane - skróciło by to czas ładowania kolejnej sceny.
No i wpadłem na coś takiego. nie wiedziałem tylko, czy mój pomysł nie kłóci się z obecnie przyjętymi praktykami. W sumie, nie jest to jedyne dziwaczne rozwiązanie, jakie wymyśliłem dla tego projektu.

nie eksponuj całej tablicy między klasami, a jedynie zwróć metodę zwracającą obiekt o danym id

W tej chwili rysuje się to tak: poszczególne obiekty dostają te tablice indeksów i... nie wiedzą, co mają i na co im to, bo mają tylko numerki :F. Za powiązanie tych informacji z obiektami odpowiadać ma klasa główna (a raczej kilka klas - taka część aplikacyjna). Gdyby rozrysować uproszczony schemat projektu, to powstałaby taka śnieżynka. Znaczy śnieżynka, na której usiadł pająk, bo jest jescze narzędzie do raportowania.
Spoiler
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry