Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Объектно-ориентированные мысли. Совсем новичок / 19 сообщений из 19, страница 1 из 1
04.12.2013, 18:50:44
    #38489423
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
Добрый день.
Подскажите как лучше и правильнее поступить в данном случае.

Код: java
1.
2.
3.
4.
public class MyClass {

abstract int getRank ();
}



и потом в наследнике

Код: java
1.
2.
3.
4.
5.
class myChild extends MyClass {
   int getRank(){
     return 10;
   }
}



или лучше так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class MyClass {
  protected int myRank;
  MyClass () {
    myRank = 0;
  }
  int getRank (){
    return myRank;
  }
}



и потом в наследнике

Код: java
1.
2.
3.
4.
5.
class myChild extends MyClass {
  myChild (){
    myRank = 9;
  }
}
...
Рейтинг: 0 / 0
04.12.2013, 18:58:06
    #38489433
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
Если у вас только данными отличаются объекты - то нет смысла создавать иерархию наследования. Наследуются если надо переопределить поведение.
...
Рейтинг: 0 / 0
04.12.2013, 18:59:52
    #38489437
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
забыл ник,
у объектов разное поведение. Наследование будет применяться.
...
Рейтинг: 0 / 0
04.12.2013, 19:02:28
    #38489440
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
DFilushin, это зависит от того чего вы хотите добиться. В первом примере у вас MyClass должен быть абстрактным, то есть непосредственно с ним вы работать все равно не сможете, только с наследником. Во втором примере - MyClass возможно реализует некоторую дефолтную самодостаточную функциональность, но ее можно изменить в наследниках. Делать myRank полем класса или нет зависит от того, понадобится ли он еще где-то за пределами метода/отражает ли он состояние вашего класса и т.д., то есть лучше это обсуждать в контексте конкретной ситуации.
...
Рейтинг: 0 / 0
04.12.2013, 19:03:17
    #38489444
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
javapecker,у объектов разное поведение. Наследование будет применяться.Разное поведение не обязательно означает наследование
...
Рейтинг: 0 / 0
04.12.2013, 19:06:26
    #38489450
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
javapecker,

Класс описывает фигуру в игре. Ранг - это её вес. При ходе, при атаке будет учитываться, естественно.
...
Рейтинг: 0 / 0
04.12.2013, 19:07:23
    #38489454
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
наследников будет 10. Каждый наследник реализует разные ходы.
...
Рейтинг: 0 / 0
04.12.2013, 19:09:06
    #38489457
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
то есть, если мне понадобиться знать только ранг без использования в других методах, можно использовать абстрактный метод. Если же где-то внутри других методов, то лучше в них обращаться к локальному полю?
...
Рейтинг: 0 / 0
04.12.2013, 19:11:59
    #38489463
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
DFilushin, Класс описывает фигуру в игре. Ранг - это её вес. При ходе, при атаке будет учитываться, естественно. Самое простое - сделать фигуру абстрактным классом, свойства общие для всех фигур описать в нем.
...
Рейтинг: 0 / 0
04.12.2013, 19:16:04
    #38489470
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
javapecker,то есть, если мне понадобиться знать только ранг без использования в других методах, можно использовать абстрактный методНет, я такого не писал. Метод getRank() делайте в абстрактном классе MyClass, но сам метод абстрактным делать не нужно, и переопределять в наследниках тоже. Пусть просто возвращает значение свойства. Абстрактными делайте те методы, которые должны вести себя по разному в наследниках.
...
Рейтинг: 0 / 0
04.12.2013, 19:20:09
    #38489482
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
javapeckerDFilushin, Класс описывает фигуру в игре. Ранг - это её вес. При ходе, при атаке будет учитываться, естественно. Самое простое - сделать фигуру абстрактным классом, свойства общие для всех фигур описать в нем.

Как-то так?

Код: java
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.
public class MyClass {
  abstract int getRank ();
  abstract Coord getPosition();
  abstract void Attack();
  abstract Boolean isVisible();
}


class Piece1 extends MyClass {
  final private int Rank = 10;
  private visible;
  private Coord xy;


  int getRank () {
    return Rank;
  }
  
  Coord getPosition () {
    return xy;
}

  Boolean isVisible(){
    return visible;
  }
}
...
Рейтинг: 0 / 0
04.12.2013, 19:38:11
    #38489514
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
DFilushin,Как-то так?Нет, не так. MyClass сделайте абстрактным, общие для всех фигур свойства (rank,coord) описывайте в нем, абстрактными делайте только те методы, у которых в наследниках изменится поведение. То есть getRank, isVisible,getPosition не надо делать абстрактными.
...
Рейтинг: 0 / 0
04.12.2013, 19:51:29
    #38489530
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
javapecker,

тогда не понятно с установкой начальных значений полей потомков. Будутт protected поле visible, rank, и в конструкторе потомков назначать их инит-значения. Так?
...
Рейтинг: 0 / 0
04.12.2013, 20:32:27
    #38489558
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
DFilushin,

Ты весь пример про фигуры показывай, тогда будет толк.
...
Рейтинг: 0 / 0
04.12.2013, 20:37:57
    #38489560
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
MasterZiv,

да весь класс ещё рано показывать. Я новичок, только начал писать. Читаю книжку "Философия явы", пытаюсь сразу на примере и что-нибудь делать. Пока есть фигуры, которые ходят по полю.
...
Рейтинг: 0 / 0
04.12.2013, 20:55:46
    #38489573
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
DFilushinjavapecker,

тогда не понятно с установкой начальных значений полей потомков. Будутт protected поле visible, rank, и в конструкторе потомков назначать их инит-значения. Так?

Попробую обьяснить свою мысль еще раз, вот смотри. Тебе правильно подсказывают, что надо вынести общее поведение в супер класс а в подклассе имплементить только то что реально отличается. Какой ранк у фигуры абсолютно неважно для подкласса, ты все это можешь обрабатывать в супер классе. А вот метод ход(), надо сделать абстрактным и реалиовывать в потомках.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
p

ublic class MyClass {
private int Rank = 10;
  private visible;
  private Coord xy;
  int getRank (){
return Rank;
};

public MyClass(int Rank....) {
this.Rank = Rank;
}
//same for coord and visible
  abstract void action();
}


class Piece1 extends MyClass {
  void action() {
//some logic here
}
}
...
Рейтинг: 0 / 0
04.12.2013, 21:06:45
    #38489578
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
Код: java
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.
package game;


enum FigureColor {RED, BLUE}

abstract class Figure {

	int rank;
	String name;
	Boolean isDead; //срублена
	Boolean isStatic;//неподвижная фигура (мина)
	Boolean isOpenFigure;//закрыта/открыта для неприятеля
	FigureColor color;//за кого играем КРАСНЫЕ/СИНИЕ
	
	public abstract void moveTo(int row, int Col);
	public abstract void attackTo(int row, int col);
	

	
	public Figure(){
		isDead = false;
		isOpenFigure = false;
	}
	
	public int getRank(){
		/*Ранг фигуры*/
		return rank;
	}
	
	public String getName(){
		/*Имя фигуры*/
		return name;
	}
	
	public Boolean canMove(){
		return this.isStatic;
	}
	
	public Boolean IsDead (){
		return isDead;
	}
	
		
}
...
Рейтинг: 0 / 0
04.12.2013, 21:16:33
    #38489589
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
DFilushin,

да, как-то так. Но точнее можно сказать только зная все условия. Но в целом начало хорошее, думаю
...
Рейтинг: 0 / 0
04.12.2013, 21:18:15
    #38489593
DFilushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объектно-ориентированные мысли. Совсем новичок
Спасибо за помощь и идеи.
Не всегда всё сразу понятно в книжках
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Объектно-ориентированные мысли. Совсем новичок / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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