Autor Wątek: Co myslicie o Java jako platformie do pisania gier?  (Przeczytany 11541 razy)

bies

  • Gość
# Listopad 08, 2006, 18:27:57
1. Jakos java w aplikacjach enterprisowych dziala glownie na bazach danych roznych typow (lokalnych, sieciowych, rozproszonych) i nie ma problemu z polaczeniem czy rozlaczeniem sie z baza. Jesli chodzi o sockety to java ma dosc przyjemne api i jakos nigdy nie mialem problemow z zamknieciem gniazdka.. Masz racje w przypadku gdyby ktos umieszczal kod zamykajacy socket w "destruktorze", ale tak naprawde te problemy ktore teraz wymieniles sa czysto filozoficzno/akademickie. W paktyce jak chcesz sie rozlaczyc z baza danych czy tez zamknac gniazdko to poprostu wywolujesz odpowiednia funkcje close i tyle..
W praktyce to wygląda tak: wiem, że muszę zamknąć połączenie w Javie. Jeśli tego nie zrobię przy dużym obciążeniu aplikacja zacznie padać. Ponieważ język jest nieudolny w zapewnieniu, że pewniej kod wykona się zawsze (trzeba go ręcznie napisać w sekcji final) w metodach interfejsu dostępu do bazy robię logowanie par połączenie/odłączenie. Następnie robie testy pokrycia i sprawdzam osobnym narzędziem, czy są wszystkie pary. I nie ma znaczenia, że edytor lub IDE ma specjalny przycisk do wygenerowania ,,dispose pattern'' - erre humanum.

2. Elipse potrafi przed kompilacja (parsowanie wewnetrzne) powiedziec ci ze : a) nigdy nie uzywasz pewnych zmiennych, nigdy nie wyolujesz funkcji prywatnych danej klasy, masz partie kodu do ktorego program nigdy nie wejdzie.
 Sama java potrafi w momecie kompilacji powiedziec ze probujesz odczytac wartosc ze zmiennej, ktora wczesniej nie byla zainicjalizowana jakas wartoscia.
I choćby zwołał tysiąc atletów
i każdy zjadłby tysiąc kotletów.
I choćby nie wiem jak się natężał,
to nie zagwarantuje, że parametr funkcji nie jest null.
I albo wierzysz zapewnieniom dokumentacji (i szukasz NullPointerException w logach) albo piszesz tysiące sprawdzeń (asercji).

3. poszukaj slowa kluczowego "final"
A Ty książek nt. Javy i C++. Thinking in ... wystarczy. Albo poczytaj sobie w [1] lub poszukaj tematów na plclc.

[1] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4211070

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kamil

  • Użytkownik
    • Homepage

# Listopad 08, 2006, 18:57:13
Czyli widzisz, const w javie jest, tylko jego funkcjonalnosc w pewnych przypadkach jest inna.

Co do zwracania nulla, czy moglbys w takim razie zademonstrowac mi jak to sie sprawdza na poziomie kompilacji w c? tak z ciekawosci, przynajmniej sie czegos naucze.

OK co do pierwszego to tak z ciekawosci pytam, nie by atakowac czy cos. Jesli jestes w sytuacji jak mowisz ze wiesz ze musisz zamknac polaczenie, to nie mozna poprostu wywolac funkcje ktora to polaczenie zamknie? Z tego co rozumiem to rozwiazanie o ktorym mowisz bazuje na pomysle zamykania polaczenia w momecie usuwania obiektu polaczenia z pamieci. Czemu nie mozna wywolac funkcji zamykajacej przed samym zniszczeniem obiektu?  Edit : Przyjrzalem sie dispose pattern i juz rozumiem o co Ci chodzi. Faktycznie masz racje, java w tych sytuacjach wymaga wiecej pisania. Jednakze nadal nie rozumiem czemu stosowac manewr z porownywaniem logow zamiast poprostu zamykac konkretne polaczenie recznie.
« Ostatnia zmiana: Listopad 08, 2006, 19:10:59 wysłana przez Kamil »

Offline Esidar

  • Użytkownik

# Listopad 08, 2006, 19:18:02
Wiem, ze lubie jave i dlatego w moich postach ja bronie. Ale tak prawde mowiac moim zdaniem jezyk c++ za kilka/kilkanascie lat przestanie byc wiadacym w grach.

Dokładnie. I nawet nie chodzi tutaj o zmianę języka programowania np. z c++ na javę. Dużo większy wpływ będzie widoczny od strony platformy .NET. Platforma .NET ma tą przewagę nad konkurencją (Java i Native C++), że można w niej pisać w C++, C#, J#, IronPython, VB i praktycznie w dowolnym innym języku. I to co się będzie liczyć to support narzędzi (.NET przewyższa native c++ pod tym względem) oraz łatwość i szybkość pisania kodu.

bies

  • Gość
# Listopad 08, 2006, 19:23:06
Const w Javie jest jako słowo zarezerwowane, a final odpowiada tylko stałemu wskaźnikowi z C++.

 Co do zagwarantowania że nie zwrócimy NULL w C++: SomeClass foo() {...}
Zawsze musi zwrócić obiekt typu SomeClass (pomijam tu sztuczki z rzutowaniem bo rzutowanie można wyłączyć na etapie kompilacji, i jest to zazwyczaj dobry pomysł).

Nie zrozumiałeś, kod zamykający piszę ręcznie (myDatabaseConnection.close()) ale sprawdzanie logów służy mi do upewnienia się (na etapie testów) czy nigdzie nie zapomniałem wywołać zamknięcia (albo bardziej nietrywialny przypadek, że na pewno nie przeleci mi przez funkcję jakiś wyjątek i close() nie zostanie wykonane). W C++ nie muszę pamiętać - kompilator to za mnie zrobi. W C# do pewnego stopnia również (patrz using) - i to mnie cieszy ponieważ C# mocno stymuluje Suna do rozwoju Javy.

Offline unodgs

  • Użytkownik

# Listopad 09, 2006, 10:08:50
Co by nie mowic o Javie i C#, ze latwiej sie programuje, sa nowoczesniejsze, to ja osobiscie nie lubie aplikacji napisanych w tych jezykach - jakichkolwiek, czy to gier czy programow uzytkowych, bo niezaleznie od wersji wirtualnej maszyny (a przeciez kazda nastepna jest super szybsza niz poprzednia ;) ) odpalaja sie niemilosiernie dlugo (jak dla mnie) i wloka (w inerakcji uzytkownik/interfejs prawie zawsze odczuwalne jest opoznienie).
Ktos tu pisal tez ze w duzych projektach przy uzyciu tych jezykow robi sie mniej bugow. Nieprawda. Ilosc bugow zalezy wlasnie od stopnia skomplikowania projektu a nie uzytego jezyka. Oczywiscie nie mam na mysli porownania kodu C++ z czystm winapi i np kodu c# z winformsami. W takich projektach ludzie uzywaja sprawdzone biblioteki takie jak qt, boost, etc.

Offline ronin

  • Użytkownik

# Listopad 18, 2006, 19:41:20
Języki takie jak Java czy C#, albo może lepiej powiedzieć platformy JVM czy .NET wyprą np. C++ w zastosowaniach biznesowych (gry się chyba do tego zaliczają). Dzisiaj projekty stają się coraz bardziej skomplikowana, mają bardziej wymyślne interfejsy itd. przez co potrzeba znacznie więcej czasu i pieniędzy na ich wytworzenie. Wydaje mi się, że producentom bardziej się opłaca zainwestować w nową platformę, w której masę rzeczy robią za nas narzędzia niż pisać w C++. Java jest na lepszej pozycji bo niej bardzo dobre narzędzia są za darmo, a teraz jeszcze została otwarta, więc zacznie się prężniej rozwijać.

A inna sprawa, ma być chyba nowy standard C++, ciekawe jak to wpłynie na sytuację na rynku oprogramowania?