Статус:
Offline
Реєстрація: 26.07.2010
Повідом.: 52
Реєстрація: 26.07.2010
Повідом.: 52
Абстракция и интерфейсы - Java
Приветствую друзья.
Перешёл к новому разделу. Если раньше я понимал мысли автора и код программы то, с абстракциями и интерфейсами у меня полный завал. Не понимаю, зачем автор перестал вести обсуждение программ.
Результат программы я разобрал. Но если начать с чистого листа, я не могу повторить код, т.к. плохо представляю, что происходит в данной программе. Я не понимаю, зачем эти строчки:
автор не описывает смысл этих строк. Абстракция, но для чего создаётся такая абстракция?
Далее, понятно, что пояляются два класса использующие интерфейсы для шашек и для шахмат, в одном идёт подсчёт ходов, в другом создание экземпляра (начало игры что ли).
Мне не понятно, как можно дойти поэтапно до этого с чистого листа, прийти к такому результату. Я смотрю на эту программу и, мне кажется это полный бессмысленный бред.
Можете объяснить, что в ней происходит?
P.S> Я плохо понимаю интерфейсы вообще. Почему автор утверждает, что они очень простые? Бред... бред... бред...
Взять к примеру программу с наследованием
Apply.java
и её же только с использованием интефейса
Apply.java
StringProcessor.java
Первый вариант значительно понятнее, короче и, проще, чем через интерфейс.
Приветствую друзья.
Перешёл к новому разделу. Если раньше я понимал мысли автора и код программы то, с абстракциями и интерфейсами у меня полный завал. Не понимаю, зачем автор перестал вести обсуждение программ.
Код:
interface Game { boolean move(); }
interface GameFactory { Game getGame(); }
class Checkers implements Game {
private int moves = 0;
private static final int MOVES = 3;
public boolean move() {
System.out.println("Checkers move " + moves);
return ++moves !=MOVES;
}
}
class CheckersFactory implements GameFactory {
public Game getGame() { return new Checkers(); }
}
class Chess implements Game {
private int moves = 0;
private static final int MOVES = 4;
public boolean move() {
System.out.println("Chess move " + moves);
return ++moves !=MOVES;
}
}
class ChessFactory implements GameFactory {
public Game getGame() { return new Chess(); }
}
public class Games {
public static void playGame(GameFactory factory) {
Game s = factory.getGame();
while(s.move());
}
public static void main(String[] args) {
playGame(new CheckersFactory());
playGame(new ChessFactory());
}
}
Результат программы я разобрал. Но если начать с чистого листа, я не могу повторить код, т.к. плохо представляю, что происходит в данной программе. Я не понимаю, зачем эти строчки:
Код:
interface Game { boolean move(); }
interface GameFactory { Game getGame(); }
Далее, понятно, что пояляются два класса использующие интерфейсы для шашек и для шахмат, в одном идёт подсчёт ходов, в другом создание экземпляра (начало игры что ли).
Мне не понятно, как можно дойти поэтапно до этого с чистого листа, прийти к такому результату. Я смотрю на эту программу и, мне кажется это полный бессмысленный бред.
Можете объяснить, что в ней происходит?
P.S> Я плохо понимаю интерфейсы вообще. Почему автор утверждает, что они очень простые? Бред... бред... бред...
Взять к примеру программу с наследованием
Apply.java
Код:
class Processor {
public String name() { return getClass().getSimpleName(); }
public Object process(Object input) { return input; }
}
class UpperCase extends Processor {
public String process(Object input) { return ((String)input).toUpperCase(); }
}
class LowerCase extends Processor {
public String process(Object input) { return ((String)input).toLowerCase(); }
}
class Splitter extends Processor {
public String process(Object input) { return Arrays.toString(((String) input).split(" ")); }
}
public class Apply {
public static String s = "Disagreement with beliefs is by definition incorrect";
public static void process(Processor p, Object s) {
System.out.println("Using Processor " + p.name());
System.out.println(p.process(s));
}
public static void main(String[] args) {
process(new UpperCase(), s);
process(new LowerCase(), s);
process(new Splitter(), s);
}
}
и её же только с использованием интефейса
Apply.java
Код:
interface Processor {
String name();
Object process(Object input);
}
public class Apply {
public static void process(Processor p, Object s) {
System.out.println("Using processor " + p.name());
System.out.println(p.process(s));
}
}
Код:
import java.util.Arrays;
public abstract class StringProcessor implements Processor {
public static String s = "Disagreement with beliefs is by definition incorrect";
public String name() { return getClass().getSimpleName(); }
public abstract String process(Object input);
public static void main(String[] args) {
Apply.process(new UpperCase(), s);
Apply.process(new LowerCase(), s);
Apply.process(new Splitter(), s);
}
}
class UpperCase extends StringProcessor {
public String process(Object input) { return ((String)input).toUpperCase(); }
}
class LowerCase extends StringProcessor {
public String process(Object input) { return ((String)input).toLowerCase(); }
}
class Splitter extends StringProcessor {
public String process(Object input) { return Arrays.toString(((String)input).split(" ")); }
}
Первый вариант значительно понятнее, короче и, проще, чем через интерфейс.
Останнє редагування: