aurel Opublikowano 26 Kwietnia 2008 Zgłoś Opublikowano 26 Kwietnia 2008 muszę napisać piłeczkę do arkanoida no i mam problem z rozgryzieniem jednej rzeczy mianowicie obsługi ArrayList moja piłeczka musi sprawdzic ze kolizję ze wszystkimi obiektami po kolei (poza innymi piłeczkami) inne obiekty są zapisane jako private List<SimpleObject> objects; aby się do nich odwołać używam: public List<SimpleObject> getobjectlist() { return objects; } SimpleObject wygląda tak: public class SimpleObject { static int OBJECT_NONE = 0; protected drect position; protected int speed; protected int tickcount; public SimpleObject (drect pos, int objectspeed) { position = pos; speed = objectspeed < 1 ? 1 : objectspeed; tickcount = 0; } public int identifyobject() { return OBJECT_NONE; } public drect GetPosition() { return position; } public void SetSpeed(int newspeed) { speed = newspeed; } public int IncSpeed(int steep) { if ((speed -= steep) < 1) speed = 1; return (speed); } public int DecSpeed(int steep) { return (speed += steep); } public void TimerTick() { if (++tickcount < speed) { return; } tickcount = tickcount % speed; this.Action(); } protected void Action() { System.out.println("Object "+position.GetX()+" action"); }} i zastanawiam się jak się własciwie z tego korzysta... potrzebuje od kazdego obiektu wziac identifyobject i GetPosition i w mojej glowie wygladalo by to mniej wiecej tak: getobjectList()for (i=0; i<ilosc obiektow; i++){ nazwa=objects[i].identifyobject; x=objects[i].getposition.position.x; y=objects[i].getposition.position.y;} tyle ze jak widać, więcej w tym pseudokodu niż czegokolwiek innego, bo ja po prostu kompletnie nie znam javy... jak to poprawnie zapisać tak żeby uzyskac to o co mi chodzi...? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 26 Kwietnia 2008 Zgłoś Opublikowano 26 Kwietnia 2008 hmm, po pierwsze.. po co robić prywatny member objects, a potem udostępniać go w całości publicznie poprzez getObjectList(). Prywatność tego membera jest.. żadna :) a druga sprawa... RTFM, że tak powiem. Zawsze mówię/nakłaniam świeżych programistów do trzech rzeczy... 1. Zanim użyjesz klasy/funkcji - przeczytaj manual 2. Debuger to Twój największy przyjaciel 3. Czytaj i zrozum błędy wyświetlane przez kompilator/debuger te trzy zasady sprawią, że programowanie będzie przyjemnością a nie katorgą. Proszę, nawet znalazłem dokładny opis interfejsu List http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html - czy tak trudno przeczytać jak się dobrać do elementów w liście? Sory, że odpowiadam naokoło, ale javą gardzę i pisałem w niej tylko kiedy musiałem :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
aurel Opublikowano 27 Kwietnia 2008 Zgłoś Opublikowano 27 Kwietnia 2008 czemu akurat prywatny member objects to ja nie mam pojęcia, bo kto inny jest głową projektu i tak sobie zazyczył, ja się nie kłócę javy nie lubię i nie rozumiem manuala widziałam, fakt że się nie wczytywałam, ale tak najchętniej to bym zobaczyła przykład bo to do mnie najbardziej przemawia ale i tak dzięki za rady i linka, postaram się zastosować i zobaczymy co z tego wyjdzie ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
thuGG Opublikowano 30 Kwietnia 2008 Zgłoś Opublikowano 30 Kwietnia 2008 hmm, po pierwsze.. po co robić prywatny member objects, a potem udostępniać go w całości publicznie poprzez getObjectList(). Prywatność tego membera jest.. żadna :) Slyszales o enkapsulacji/hermetyzacji? Jesli tak, to zadales glupie pytanie, jesli nie to zapraszam do google. W kazdym razie w Javie uzywa się tego szeroko i dobrą praktyką jest tworzenie pól jako prywatnych i udsotępnianie getterów i setterów do dostępu do pola. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 30 Kwietnia 2008 Zgłoś Opublikowano 30 Kwietnia 2008 jakkolwiek nadal uważam, że jest to bezcelowe i po prostu głupie w tym przypadku. getery i settery mają umożliwiać nadzorowany dostęp do hermetycznych danych. A tutaj, co z tego, że member jest prywatny, skoro mam do niego pełny dostęp bez ograniczeń tylko zamiast dostępu publicznego wprost, mam dostępu publiczny przez dodatkową furtkę. Niektórzy mówią, że dobrą praktyką jest nieudostępnianie w ogóle geterów i setterów, gdyż godzi to w podstawowe doktryny obiektowości - hermetyzacji. Teoria ta mówi iż nie powinno się pytać obiektu o jego dane prywatne - bo przecież w końcu po to są prywatne, żeby nikt z zewnątrz nie miał do nich dostępu... tylko obiekt powinno się prosić aby wykonał dla nas jakieś zadanie. Więc zgodnie z tą wizją, sory, ale udostępnianie całych memberów prywatnych nie jest zgodne z programowaniem obiektowym. W javie jest to nadużywane, już nie wnikam z jakich względów. Z resztą, może pomożesz koleżance jako fanatyk javy, a nie szukasz zaczepki :) Nie wiem czy w javie, ale w .NETcie są konstrukcje zwane property, które są niby atrybutami ale tworzą getery i settery, które by default dodają do klasy membery prywatne powiązane z nimi, aczkolwiek można i nawet powinno się rozpisywać getera i setera tak aby wszelki dostęp do prywatnych danych obiektu był nadzorowany. Są oczywiście przypadki, że jest to bezcelowe, lub po prostu wynika to z wygody programisty, ale na pewno udostępnianie memberów prywatnych w całości nie jest dobrą praktyką. A robienie geterów i seterów jest tylko zabiegiem na przyszłość i próbą wpojenia programistom dobrych manier - do których w końcu trzeba dorosnąć i wiedzieć, po co właściwie jest geter i seter... Tak, że zapraszam na google :wink: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
thuGG Opublikowano 1 Maja 2008 Zgłoś Opublikowano 1 Maja 2008 (edytowane) Bardziej chodzi mi o to, że jak ktoś się już uczy Javy to niech uczy się też pewnych standardów. Gettery i settery bardzo często wykorzystywane przez różne frameworki, które uzyskują przez nie dostęp do pól (za pomocą mechanizmu refleksji), np. Spring Framework (dużo trzeba by się rozpisywać w tej kwestii, więc zostawiam to tak ogólnikowo). Tak czy siak, w każdej branży/środowisku są jakieś konwencje, których powinno się przestrzegać, w Javie dobrą praktyką jest tworzenie getterów i setterów, jest to zaaprobowane przec cały światek Javy i jesli ktoś, kiedyś zechce poszukać pracy jako programista Java, to niech lepiej zna te konwencje. Nie miałem zamiaru się z tobą kłócic, po prostu dałeś raczej niedobrą radę przyszłemu (?) programiście Javy. Fanatykiem Javy nie jestem, owszem zajmuję się nią zawodowo, ale nie toczę jakis bojów na temat wyższości jednego języka nad drugim. A rozwiązanie np. takie: for(SimpleObject so : getobjectlist()) { int posX = so.GetPosition().x; int posY = so.GetPosition().y; String name = so.identifyobject();} Tyle że zakładam, że klasa drect rzeczywicie ma takie pola jak x i y. Poza tym, nazwy metod piszemy z małej litery, a nazwy klas z dużej. Edytowane 1 Maja 2008 przez thuGG Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 4 Maja 2008 Zgłoś Opublikowano 4 Maja 2008 no być może, w javie są jakieś wskazania żeby tak robić, skoro pracujesz w tym to wiesz lepiej ode mnie. Więc jeśli nie IDE (JCreator, temat obok) :wink: to to jest właśnie jeden z powodów dla których java mi nie podchodzi :) pzdr; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...