powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Структура классов и их взаимосвязь
39 сообщений из 39, показаны все 2 страниц
Структура классов и их взаимосвязь
    #33913818
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, написал первую программку (апплет) на жабе. Интересует, собственно, на сколько она правельная с точки зрения джавы по сабжу, и что надо изменить. Так что ругайте, как только можно.

По комментариям наверное, понятно, что к чему

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
 import  java.awt.*;
 import  java.applet.*;
 import  java.awt.event.*;
 import  java.util.*;

/*
			    Класс шаров
*/
 class  Ball  extends  TimerTask {
     protected   int  x,y;//координаты шара (левый верхний угол квадрата шара) в координатах всего апплета
     protected   int  d;//диаметр шара
     protected   int  stepX, stepY;//скрорости шара по координатам
     protected   int  aX, aY, aW, aH;//область для движений шара
     protected  Color c;//цвет шара
     private   int  movingX= 0 ;//есть ли движение в настоящий момент
     private   int  movingY= 0 ;//есть ли движение в настоящий момент
     private  Timer timer;
    
     public   int  getX() { return  x;}//возврат координат шара
     public   int  getY() { return  y;}
     public   int  getD() { return  d;}//возврат диаметра шара
     public  Color getC() { return  c;}
     public   void  setX( int  _x) {x=_x;}//установка координат шара
     public   void  setY( int  _y) {y=_y;}
     public   void  setStepX( int  _x) {stepX=_x;}//установка скорости шара
     public   void  setStepY( int  _y) {stepY=_y;}
     public   void  stepXleft() {	 if  (x-stepX>=aX) x-=stepX;       else  x=aX;     }//принудительно двинуть шар куда требуется
     public   void  stepXright() {	 if  (x+stepX+d<=aX+aW) x+=stepX;  else  x=aX+aW-d;}
     public   void  stepYup() {	 if  (y-stepY>=aY) y-=stepY;       else  y=aY;     }
     public   void  stepYdown() {	 if  (y+stepY+d<=aY+aH) y+=stepY;  else  y=aY+aH-d;}
     public   void  markMovingXRight() {movingX= 1 ;}//отметить направление текущего перемещения шара
     public   void  markMovingXLeft() {movingX=- 1 ;}
     public   void  markMovingXNull() {movingX= 0 ;}
     public   void  markMovingYDown() {movingY= 1 ;}
     public   void  markMovingYUp() {movingY=- 1 ;}
     public   void  markMovingYNull() {movingY= 0 ;}
     public   void  run() {//передвинуть шар в соответствии с направлением текущего движения шара
	 switch  (movingX) {
	     case   1 : stepXright();  break ;
	     case  - 1 : stepXleft();  break ;
	}
	 switch  (movingY) {
	     case   1 : stepYdown();  break ;
	     case  - 1 : stepYup();  break ;
	}
    }
     public   void  paint(Graphics g) {//нарисовать шар
	g.setColor(c);
	g.fillOval(x,y,d,d);
    }
    Ball ( int  _aX,  int  _aY,  int  _aW,  int  _aH,  int  _x,  int  _y,  int  _d,  int  _stepX,  int  _stepY, Color _c) {
	aX=_aX; aY=_aY; aW=_aW; aH=_aH; x=_x; y=_y; d=_d; stepX=_stepX; stepY=_stepY; c=_c;
	timer =  new  Timer();
	timer.schedule( this ,  0 ,  50 );
    }
}

/*
		    Красный шар. Шар пользователя
		    (находится под влиянение пользователя, поэтому логики не заложено, 
		     только начальные условия)
*/

//Класс шара с определенным движением
 class  RedBall  extends  Ball {
    RedBall( int  w,  int  h) {
	 super ( 0 ,  0 , w, h, ( int )((w- 20 )*Math.random()), h- 20 ,  20 ,  6 ,  6 , Color.red);
    }
}

//Класс шара с умением сталкиваться
 class  RedBallPlay  extends  RedBall {
     private  BallCollisions ballCollisions;
    RedBallPlay( int  w,  int  h, BallCollisions _ballCollisions) {
	 super (w, h);
	ballCollisions = _ballCollisions;
	ballCollisions.setRedBall( this );
    };
     public   void  run() {
	 super .run();
	ballCollisions.process();
    }
}

/*
		Черный шар. Автоматический шар.
		(не доступен пользователю, поэтому есть логика)
*/

//Класс шара с определенным движением
 class  BlackBall  extends  Ball {
     private   int  breaked= 0 ;
     private   int  newX() {	 return  ( int )((aW-d)*Math.random())+aX+ 1 ;    }//сочинить новые координаты шара
     private   int  newY() {	 return  aY+ 1 ;				    }
     private   int  newStepX() {	 return  ( int )( 5 *Math.random())+ 5 ;	    }//сочинить новую скорость шара
     private   int  newStepY() {	 return  ( int )( 5 *Math.random())+ 5 ;	    }
     private   int  newMovingX() {	 return  (( int )( 10 *Math.random()))% 3 - 1 ;	    }//сочинить новое направление шара по гор. оси
    BlackBall( int  w,  int  h) {
	 super ( 0 ,  0 , w, h, w/ 2 ,  1 ,  20 ,  2 ,  2 , Color.black);
	markMovingXRight();
	markMovingYDown();
    }
     public   int  breakBall() {
	setX(newX());
	setY(newY());
	setStepX(newStepX());
	setStepY(newStepY());
	 switch (newMovingX()) {
	     case   1 :  markMovingXRight(); break ;
	     case  - 1 : markMovingXLeft(); break ;
	     case   0 :  markMovingXNull(); break ;
	}
	 return  ++breaked;//Возвращает количество сбросов шара
    }
     public   int  getBreaked() { return  breaked;}
     public   void  run() {
	 super .run();
	
	//Расширение функциональности движения
	    //Отражение от стен
	 if  (x==aX || x+d==aX+aW) {//Здесь мы еще сделаем отражение от стен
	     if  (x==aX) {//Левая стена
		markMovingXRight();
	    }  else  {//Правая стена
		markMovingXLeft();
	    }
	}
	    //Сброс шара на начальное состояние, если он достиг нижней границы
	 if  (y+d==aY+aH) {
	    breakBall();
	}
    }
}

//Класс шара с умением сталкиваться
 class  BlackBallPlay  extends  BlackBall {
    BallCollisions ballCollisions;
    BlackBallPlay( int  w,  int  h, BallCollisions _ballCollisions) {
	 super (w, h);
	ballCollisions = _ballCollisions;
	ballCollisions.setBlackBall( this );
    };
     public   void  run() {
	 super .run();
	ballCollisions.process();
    }
}

/*
		Класс столкновений шаров
*/

 class  BallCollisions {
     private  RedBall redBall;
     private   boolean  redBallSetted=false;
     private  BlackBall blackBall;
     private   boolean  blackBallSetted=false;
     private   boolean  ready=false;
     private   int  collisions= 0 ;
     public   void  setRedBall(RedBall _redBall) {
	redBall=_redBall;
	redBallSetted=true;
	 if  (blackBallSetted) ready=true;
    }
     public   void  setBlackBall(BlackBall _blackBall) {
	blackBall=_blackBall;
	blackBallSetted=true;
	 if  (redBallSetted) ready=true;
    }
     public   boolean  process() {//было ли столкновение
	 if  (ready) {
	     if  ((( int ) (Math.sqrt((redBall.getX()-blackBall.getX())*(redBall.getX()-blackBall.getX())+
			      (redBall.getY()-blackBall.getY())*(redBall.getY()-blackBall.getY()))))<=redBall.getD()) {
		collisions++;
		blackBall.breakBall();
		 return  true;
	    }
	}
	 return  false;
    }
     public   int  getCollisions() { return  collisions;}
}

/*
		Классы системы
*/
    //Нажатия клавиш
 class  UserKeyCommands  implements  KeyListener {
     private   boolean  down_pressed=false;
     private   boolean  up_pressed=false;
     private   boolean  left_pressed=false;
     private   boolean  right_pressed=false;
     private  RedBall redBall;
    UserKeyCommands(RedBall _redBall) {
	redBall = _redBall;
    }
    
    //Установка куда пользователь направил шар
     public   void  keyPressed(KeyEvent k_e) {
	 switch  (k_e.getKeyCode()) {
	     case  KeyEvent.VK_DOWN:		redBall.markMovingYDown();	down_pressed=true;	 break ;
	     case  KeyEvent.VK_UP:		redBall.markMovingYUp();	up_pressed=true;	 break ;
	     case  KeyEvent.VK_LEFT:		redBall.markMovingXLeft();	left_pressed=true;	 break ;
	     case  KeyEvent.VK_RIGHT:		redBall.markMovingXRight();	right_pressed=true;	 break ;
	}
    }
     public   void  keyReleased(KeyEvent k_e) {
	 switch  (k_e.getKeyCode()) {
	     case  KeyEvent.VK_DOWN:
		down_pressed=false;
		 if  (up_pressed)
		    redBall.markMovingYUp();
		 else 
		    redBall.markMovingYNull();
		 break ;
	     case  KeyEvent.VK_UP:
		up_pressed=false;
		 if  (down_pressed)
		    redBall.markMovingYDown();
		 else 
		    redBall.markMovingYNull();
		 break ;
	     case  KeyEvent.VK_LEFT:
		left_pressed=false;
		 if  (right_pressed)
		    redBall.markMovingXRight();
		 else 
		    redBall.markMovingXNull();
		 break ;
	     case  KeyEvent.VK_RIGHT:
		right_pressed=false;
		 if  (left_pressed)
		    redBall.markMovingXLeft();
		 else 
		    redBall.markMovingXNull();
		 break ;
	}
    }
     public   void  keyTyped(KeyEvent k_e) {}
}

 class  Painter  extends  TimerTask {
     private  Timer timer;
     private  BlackBall blackBall;
     private  BallCollisions ballCollisions;
     private  ShootDownBalls shootDownBalls;
    Painter(ShootDownBalls _shootDownBalls, BlackBall _blackBall, BallCollisions _ballCollisions) {
	shootDownBalls=_shootDownBalls;
	blackBall = _blackBall;
	ballCollisions = _ballCollisions;
	
	//Запускаем себя
	timer =  new  Timer();
	timer.schedule( this ,  0 ,  50 );
    }
     public   void  run() {
	//Двигаем шары и рисуем
	shootDownBalls.repaint();
	//Обнавляем статус
	shootDownBalls.updateStatus(ballCollisions.getCollisions(), blackBall.getBreaked()-ballCollisions.getCollisions());
    }
}

 public   class  ShootDownBalls  extends  Applet {
     private  BallCollisions ballCollisions;
     private  RedBallPlay redBallPlay;//красный шар двигается по таймеру. направляет пользователь
     private  BlackBallPlay blackBallPlay;//черный шар двигается по таймеру. направляет собственный автомат
     private  UserKeyCommands userKeyCommands;//сам пользователь, для направления красного шара
     private  Painter painter;//перерисовка и анализ ситуации на поле
     public   void  init() {
	//Класс анализа столкновений
	ballCollisions= new  BallCollisions();
	//Создаем шары (они уже начали играть)
	redBallPlay= new  RedBallPlay(getSize().width, getSize().height, ballCollisions);
	blackBallPlay= new  BlackBallPlay(getSize().width, getSize().height, ballCollisions);
	//Создаем проприсовку (и запускаем)
	painter= new  Painter( this , blackBallPlay, ballCollisions);
	//Запускаем команды юзера
	userKeyCommands =  new  UserKeyCommands(redBallPlay);
	addKeyListener(userKeyCommands);

	//Пытаемся получить фокус, хотя это не удается
	requestFocus();
    }
    
     public   void  paint(Graphics g) {
	redBallPlay.paint(g);
	blackBallPlay.paint(g);
    }
    
     public   void  updateStatus( int  score,  int  lose) {
	 if  (score== 0 )	    showStatus("Hit it!");
	 else   if  (score== 1 )  showStatus("Great! You have hit it!");
	 else 		    showStatus("You have shot down "+score+" balls and "+lose+" lost.");
    }
}


...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913887
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторсобственно, на сколько она правельная с точки зрения джавы
код вообще нечитабелный
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913897
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
многа букф. низачет.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913904
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН авторсобственно, на сколько она правельная с точки зрения джавы
код вообще нечитабелный

Если не трудно, приведите пару строк примера
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913938
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
си чувствуется за версту :)
что бросилось в глаза: Ball extends TimerTask. нехорошо: шар это просто объект, он не должен инкапсулировать логику по перемещению; лучше выделить его как бин. Классы типа RedBall вообще лишние (цвет это только атрибут, зачем здесь класс не ясно). дальше не вникал.
по оформлению кода: тынц (хотя лично мне нравится не все что там рекомендуют)
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913945
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public   void  updateStatus( int  score,  int  lose) {
	 if  (score== 0 ){	    
             showStatus("Hit it!");
         }
	 else  {
               if  (score== 1 ){  
                 showStatus("Great! You have hit it!");
              }
	       else {
		    showStatus("You have shot down "+score+" balls and "+lose+" lost.");
                   }
 }
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
//принудительно двинуть шар куда требуется
 public   void  stepXleft() {	
 if  (x-stepX >= aX){ 
   x-=stepX;      
}
 else  {
      x=aX;
      }     
}
Советую в JBuider'e программировать какое-то время, хорошо приучает к правильному стилю.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913959
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ТимоН]
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public   void  updateStatus( int  score,  int  lose) {
	 if  (score== 0 ){	    
             showStatus("Hit it!");
         }
	 else  {
               if  (score== 1 ){  
                 showStatus("Great! You have hit it!");
              }
	       else {
		    showStatus("You have shot down "+score+" balls and "+lose+" lost.");
                   }
 }
ггы.
1. не хватает закрывающей скобки.
2. табуляцию юзать - это самый большой пипец. должны быть пробелы.
3. мне вот так больше нравится
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
     public   void  updateStatus( int  score,  int  lose)
    {
         if  (score ==  0 )
        {
            showStatus("Hit it!");
        }
         else 
        {
             if  (score ==  1 )
            {
                showStatus("Great! You have hit it!");
            }
             else 
            {
                showStatus("You have shot down " + score + " balls and " + lose + " lost.");
            }
        }
    }
имхо, канешна.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913969
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН
Советую в JBuider'e программировать какое-то время, хорошо приучает к правильному стилю.
убей себя
автор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   public   void  updateStatus( int  score,  int  lose)
    {
         if  (score ==  0 )
        {
            showStatus("Hit it!");
        }
         else 
        {
             if  (score ==  1 )
            {
                showStatus("Great! You have hit it!");
            }
             else 
            {
                showStatus("You have shot down " + score + " balls and " + lose + " lost.");
            }
        }
    }


ужоснах
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913981
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторужоснах ваши аргументы...
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913985
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН авторужоснах ваши аргументы...
про "убей себя". билдер ничему хорошему не научит. хорошему научит книжка + опыт.
про "ужоснах". это имхо. ничего личного. но вариант акх мне больше нравится.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913997
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deady но вариант акх мне больше нравится.
ошибся, ваш вариант, а не Akh
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33913999
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
про "убей себя". билдер ничему хорошему не научит. хорошему научит книжка + опыт.
про "ужоснах". это имхо. ничего личного. но вариант акх мне больше нравится.
про "убей себя"
Ниводной IDE, кроме JBuilder'a, невидел такой жеской привязке к стилю, если захочешь, то несможешь некрасиво писать. В ИДЕЕ только Jalopy, им как-то неудобно польоваться.
ужоснах
Незнаю я уже привык, мне кажется вполне читабельно, да и количество строк сокразается чуть ли не в двое.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914004
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в идее ctrl+alt+L рулит
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914016
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недобно же каждый раз рефрешить... имхо
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914017
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН автор
про "убей себя". билдер ничему хорошему не научит. хорошему научит книжка + опыт.
про "ужоснах". это имхо. ничего личного. но вариант акх мне больше нравится.
про "убей себя"
Ниводной IDE, кроме JBuilder'a, невидел такой жеской привязке к стилю, если захочешь, то несможешь некрасиво писать. В ИДЕЕ только Jalopy, им как-то неудобно польоваться.
вы просто не умеете ее готовить (ц)
ТимоН
ужоснах
Незнаю я уже привык, мне кажется вполне читабельно, да и количество строк сокразается чуть ли не в двое.
для чего? чтобы глаза ломать? к тому же код фолдинг есть.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914032
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвы просто не умеете ее готовить (ц)
Нестану спорить, недавно на ИДЕЮ пересел с Билдера, всетаки он мне больше нравится...
автордля чего? чтобы глаза ломать? к тому же код фолдинг есть.
Опять же для лучшей читабельности, меньше строк на "неважный" код... Я думаю это спорный вопрос, каждому свое, хотя некоторым людям хочется руки оторвать...
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914092
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timmси чувствуется за версту :)
что бросилось в глаза: Ball extends TimerTask. нехорошо: шар это просто объект, он не должен инкапсулировать логику по перемещению; лучше выделить его как бин. Классы типа RedBall вообще лишние (цвет это только атрибут, зачем здесь класс не ясно). дальше не вникал.
по оформлению кода: тынц (хотя лично мне нравится не все что там рекомендуют)

1. TimerTask наследуется для того, чтобы этот шар двигался по минимальной логике (т.е. направления и стенки). Сама логика заложена в его детях RedBall и BlackBall. В первом случае она никакая, во втором случае она выкидывает шар на новую позицию, когда он достиг нижнего края и отображает его от стенок. Далее дети добавляют свойство сталкиваться друг с другом по средству класса BallCollisions.

2. Что такое выделить как бин?

3. Поэтому посчитал, что классы типа RedBall не лишние.

4. К тому же наличие такой последовательной низходящей позволяет функциональность можно легко расширять.

Я прав?
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914103
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По стилю кода. Мой компактный, у Timm - разряженый, у Deady и ТимоН - стредний по разраженности.

Понятно, посмотрю, может у большинства и лучше. Надо пробовать.

Еще комментарии будут?
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914112
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhПо стилю кода. Мой компактный
Еще комментарии будут?

когда в вашем коде будет разбираться кто-либо, вы устанете икать.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914130
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deady AkhЕще комментарии будут?
когда в вашем коде будет разбираться кто-либо, вы устанете икать.

Тогда на выходных не разбирайтесь, давайте продолжим в понедельник.

Серьезно:
Для этого я его и предоставил. Мне полезно, так как это первая программа на джаве, тем кто разбирается, тоже может быть интересно, так как есть поле для рассуждений.

В понедельник, для пробы, приведу код к нормальному виду.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914159
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скобки это конечно дела вкуса (хотя такую компактность очень не люблю (лично я)), но вот читабельность методов это святое :)
Akh
Код: plaintext
 public   int  getD() { return  d;}//возврат диаметра шара
Дядька Фаулер (рекомендую почитать на досуге) когдато сказал (или спер у кого эту фразу :) не знаю) что писать код нужно так, чтобы комментарии были не нужны :). Вот как раз этот пример. Думаецца что название метода getDiameter() сказал бы все за себя.
Ну и наследование шарика от таймерТаск из ноу гуд (вери мач). И опять соглашусь с Timm 'ом, что цвет не есть причина для создания нового класса.
Все вышесказанное имхо :)
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914202
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое важное: критиковать реализацию без требований есть беспредметный треп :).
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914219
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmСамое важное: критиковать реализацию без требований есть беспредметный треп :).Требование было одно :)) AkhТак что ругайте, как только можно.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914239
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Найти толковый Coding Convension. Можно посмотреть тот который на сайте Sun. Ещё есть хорошая глава в книжке Горький Вкус Java.

2) Научится именовать классы, переменные и методы. Код должен читаться без коментариев.
Если x,y - координаты шара, то назвать их. locationX, locationY. А ещё лучше заменить классом Point.
Step это не скорость.
color понятнее чем c.
Для флагов есть boolean.

3) Следующий шаг задуматься над MVC.

4) Изучить проблемы наследования. Научится применять делегирование. Понять что из них и когда нужно использовать.

5) Прочитать GoF. Читая каждый паттерн задуматся над тем нужно ли его применить в твоем коде.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914262
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
6) Подумать почему

Код: plaintext
Ball redBall =  new  Ball( 0 ,  0 , w, h, ( int )((w- 20 )*Math.random()), h- 20 ,  20 ,  6 ,  6 , Color.red)

лучше чем

Код: plaintext
1.
2.
3.
4.
 class  RedBall  extends  Ball {
    RedBall( int  w,  int  h) {
	 super ( 0 ,  0 , w, h, ( int )((w- 20 )*Math.random()), h- 20 ,  20 ,  6 ,  6 , Color.red);
    }
}

7) Убрать все магические числа. То есть что-то типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 final   static  RED_BALL_INITIAL_LOCATION_X =  20 ;
 final   static  RED_BALL_INITIAL_LOCATION_Y =  20 ;
 final   static  RED_BALL_INITIAL_VELOCITY_X =  6 ;
 final   static  RED_BALL_INITIAL_VELOCITY_Y =  6 ;

 int  randomSize = ( int )((w -  20 ) * Math.random());

Ball redBall =  new  Ball( 0 ,  0 , 
                             w, h, 
                             randomSize,
                             h-RED_BALL_INITIAL_LOCATION_X, RED_BALL_INITIAL_LOCATION_Y, 
                             RED_BALL_INITIAL_VELOCITY_X,  RED_BALL_INITIAL_VELOCITY_Y, 
                             Color.red)

Я конечно немного напутал в логике, но надеюсь основные идеи ясны?
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33914266
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz6) Подумать почему

Код: plaintext
Ball redBall =  new  Ball( 0 ,  0 , w, h, ( int )((w- 20 )*Math.random()), h- 20 ,  20 ,  6 ,  6 , Color.red)

лучше чем

Код: plaintext
1.
2.
3.
4.
 class  RedBall  extends  Ball {
    RedBall( int  w,  int  h) {
	 super ( 0 ,  0 , w, h, ( int )((w- 20 )*Math.random()), h- 20 ,  20 ,  6 ,  6 , Color.red);
    }
}


Хотя нет. Это ещё спорный вопрос. Можно ещё фабрику прикрутить и флейм по этому поводу развести. Так что в контексте этого примера может быть и нормально.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33915808
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JozicНу и наследование шарика от таймерТаск из ноу гуд (вери мач).

Сейчас у меня получается такая ситуация. Шар имеет возможность двигаться. Его дети, эту возможность приобретают от него и добавляют некую функциональность при движении (преопределение метода и вызов super.run()).

Как тогда, лучше это реализуется?
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33915965
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz4) Изучить проблемы наследования. Научится применять делегирование. Понять что из них и когда нужно использовать.


Где можно почитать про делегирование?
Правильно ли я понимаю, что interface и implemets - это оно и есть?
TimerTask не является интрефейсом. Как, тогда, правельно его приминить?
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916446
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое делегирование разобрался.

Как решить следующую задачу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 class  class1  extends  TimerTask {
      //...
   class1 () {
      timer= new  Timer();
      timer.schedule( this , ...);
   }
    public   void  run () {
      //.. do somthing
   }
}

 class  class2  extends  class1 {
    //...
     public   void  run() {
        super .run();
       //...do somthing
   }
}

Необходимо уйти от наследования TimerTask и иметь возможность расширить метод run();
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916580
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhЧто такое делегирование разобрался.

Как решить следующую задачу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 class  class1  extends  TimerTask {
      //...
   class1 () {
      timer= new  Timer();
      timer.schedule( this , ...);
   }
    public   void  run () {
      //.. do somthing
   }
}

 class  class2  extends  class1 {
    //...
     public   void  run() {
        super .run();
       //...do somthing
   }
}

Необходимо уйти от наследования TimerTask и иметь возможность расширить метод run();

Что-то типа такого.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 class  BallsTimerTask  extends  TimerTask {
   BallsCollision ballsCollision;
      //...
   BallsTimerTask () {
      timer= new  Timer();
      timer.schedule( this , ...);
   }
    public   void  run () {
      //.. do somthing
      ballsCollision.process();
   }
}

Можно попробовать и BallsCollision extends TimerTask, по-моему нормально будет.

Для начала было бы не плохо задуматся какой класс какие цели преследует. И строго ограничить назначение классов. Это и называется инкапсуляция.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916759
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЧто-то типа такого.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 class  BallsTimerTask  extends  TimerTask {
   BallsCollision ballsCollision;
      //...
   BallsTimerTask () {
      timer= new  Timer();
      timer.schedule( this , ...);
   }
    public   void  run () {
      //.. do somthing
      ballsCollision.process();
   }
}

Можно попробовать и BallsCollision extends TimerTask, по-моему нормально будет.

Для начала было бы не плохо задуматся какой класс какие цели преследует. И строго ограничить назначение классов. Это и называется инкапсуляция.

Это не то, что я хочу.

Я хочу инкапсулировать в один класс, направление движеня и само движение. Сейчас это класс Ball. Его дети должны уметь добавлять логику в движение в соответствии с их особенностями.
Мне кажется, что такой подход более удобен и корректен.
Т.о. получается, что класс Ball должен иметь таймер, а наследники его должны уметь его дополнять.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916778
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инкапсулировать в один класс сам шар и движение - я имею ввиду, что он должен этому соответствовать, что не означает, что хочу, чтобы это решалось одним классом.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916789
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Я хочу инкапсулировать в один класс, направление движеня и само движение.

8) "Инкапсулировать" не есть "запихнуть всё". А запихнуть что-то конкретное.
Тут надо вернутся к MVC. Направление это Model, а логика движения это Controller. Конечно никто не запрещает это все в одном классе хранить. Но есть практика и убедительные доводы в пользу этого подхода.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916811
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz8) "Инкапсулировать" не есть "запихнуть всё". А запихнуть что-то конкретное.
Тут надо вернутся к MVC. Направление это Model, а логика движения это Controller. Конечно никто не запрещает это все в одном классе хранить. Но есть практика и убедительные доводы в пользу этого подхода.

Как тогда это представлять? Есть набор классов шаров и класс контроллер, который умеет их двигать?
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916834
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 class   interface  BallMotion {
    public   void  run();
}

 class  Ball implemets  BallController {
}

 class  RedBall  extends  Ball {
}

 class  BallController  extends  TimerTask {
   BallMotion ball;
    public   void  run() {
       ball.run();
   }
}

Что-то типа такого?

Надеюсь смысл понятен. Такие структуры не писал, поэтому, где-то может быть ошибка. Если смысл правельный, прошу поправить.
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916855
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается надо создавать шар:

Код: plaintext
1.
2.
3.
4.
5.
6.
 new  BallController(
    new  Ball(
       //parametres
   )
)


Это хорошее решение?
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33916864
wolf_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю насколько это правильно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
 public   class  Ball {
	BallModel _model;
	Color _color;
	 public   void  paint(){
	
	}
}

 class  BallModel{
	 protected  TimerTask _task;
	 protected   int  _x;
	 public  BallModel(){
		_task= new  TimerTask(){
			 public   void  run() {
				count();
			}
		};
	}
	
	 public   int  getX(){
		 return  _x;
	}
	 public   void  count() {//protected?
		//Do something
		_x++;
	}
}

 class  BallCollisions  extends  BallModel{
	 public   void  count() {
		//Do something
		_x+= 2 ;
	}
}
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33917165
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolf_romaНе знаю насколько это правильно.

Как начинающему жаба-программисту, кажится странным с точки зрения ООП, что, внутренний класс имеет непосредственный доступ к методам внешнего класса.

Но так работает, и программа выглядит проще, т.к. в данном случае нет повода строить по MVC
...
Рейтинг: 0 / 0
Структура классов и их взаимосвязь
    #33917847
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhНо так работает, и программа выглядит проще, т.к. в данном случае нет повода строить по MVC

Конечно, чем ближе к MVC , тем проще выглядит. А если ты про то что исходная модель хорошо работает.... Думаю ты переутомился, ИМХО всё должно быть гораздо проще. По делу:
Слишком уж много логики в бедном шарике (даже моторчик встроен) И вообще надо сокращать. Простота кода залог его расширяемости.
Я бы убрал область движений(странно каждый шар в своей области, по 4 координаты), зачем какие-то movingX да ещё интовые?? Вполне достаточно скорости по проекциям, а я бы вообще сделал 1скорость и угол(направление). Думаю другие классы тоже можно упростить.
Ну конечно правильно было бы оставить в шаре только сеттергеттеры.

Мне нравится такая модель:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 class   interface  BallMotion {
    public   void  go(); //run у меня ассоциируется с потоками
}
 class  Ball implemets  BallMotion {
}
 class  RedBall  extends  Ball {
}
 class  BallController  extends  TimerTask  implements  Runnable {
   RedBall ball;
    public   void  run() {
      ball.go();
      checkCollisions()
   }
    private   void  checkCollisions (){}
}
 class  Applet  extends  Applet{
    public   void  init(){
   BallController bc;
   bc.sleep(n);
}
    public   void  paint(){}
}
Может даже лучше по MVC GO убрать в конроллер а то какой-то странный интерфейс с 1 методом
Интересно, а что в TimerTask, помоему он и есть контроллер,нужно ли его расширять.
А в каких направлениях планируются расширения??
если будет много шариков, надо бы наладить делегирование
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Структура классов и их взаимосвязь
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]