Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 1
Регистрация: 21.12.2015
Сообщений: 188

Полиморфизм

07.05.2019, 16:47. Показов 1422. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задача -
Эта задача о построении функциональных цепочек. Функциональные цепочки - это функции, которые содержат упорядоченный набор математических функций, которые выполняются по порядку для вычисленных значений предшествующей функции, начиная с заданного значения.
Функции, которые рассматриваются в этой задаче, - это любые функции, которые отображают двойное значение на другое двойное значение. Порядок выполнения функций должен быть произвольным. Функциональная цепочка должна быть в принципе иметь любую длину.

Пример: даны функции f, g, h и p. Функциональная цепочка k1 состоит из трех функций в порядке f, g и h, т.е. k1 = f◦g◦h.
Тогда: k1 (x) = f (g (h (x))). Функциональная цепочка k2 состоит из четырех функций в порядке g, f, g и p, т.е. k2 = g◦f ◦g◦p. Тогда: k2 (x) = g (f (g (p (x)))).
В этой задаче вы должны подумать о том, как такие последовательности функций могут быть реализованы. В конце концов, должна быть возможность писать программы с классами, которые вы разрабатываете:

Java
1
2
3
 Function chain = new CosineFunction(new SquareRootFunction(new SineFunction())) ;
 double x = IO.readDouble(”Value: ”);
 System.out.println(chain.calculate(x));

В этом примере цепочка функций устанавливается (при определении соответствующих классов Function, CosineFunction, SquareRootFuction и SineFunction) и активируется путем вызова chain.calculate. Значение cos (корень из (sin (x)) рассчитывается для введенного пользователем значения x.

Другие возможные функции (для соответствующих классов):

Java
1
2
Function chain1 = new SquareRootFunction(new SquareRootFunction(new TangentFunction()));
  Function chain2 = new SineFunction(new SquareFunction(new IdentityFunction()));
Задача: Основываясь на понятиях полиморфизма и динамического связывания, рассмотрите концепцию реализации вышеуказанных функциональных цепей. В дополнение к необходимому классу Function, реализуйте два конкретных класса SquareFunction и SineFunction.



Вот,что я накалякал

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
45
46
47
48
49
50
51
public   class Funktion {
 
    public  double  calculate(double x){
        return x;
 
    }
 
}
public class CosineFunction extends Funktion {
 
    public  double calculate(double x) {
 
        return Math.cos(x);
    }
}
public class SineFunction extends SquareRootFunction{
 
    public double calculate(double x) {
 
        return Math.sin(x);
    }
}
public class  SquareFunction extends SquareRootFunction{
 
    public double calculate(double x) {
 
        return Math.sin(x);
    }
}
 
public class SquareRootFunction extends Funktion {
 
 
 
    public  double calculate(double x) {
 
        return Math.sqrt(x);
    }
}
 
public class Main3 {
    public static void main(String[] args) {
        Function chain = new SquareFunction(new SquareRootFunction(new SineFunction()));
        Function chain1 = new CosineFunction(new SquareRootFunction(new SineFunction()))
        Function chain2 = new SquareRootFunction(new SquareRootFunction(new SquareFunction()));
        //Funktion chain = new SineFunction(new CosineFunction());
        while (true) {
            double x = 10;
            System.out.println(chain.calculate(x));
        }
    }
почему (new SineFunction() в chain и new SineFunction() в chain1 и т д не создаются?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2019, 16:47
Ответы с готовыми решениями:

Полиморфизм
Здравствуйте! Если я хочу создать полиморфический массив, допустим: Animal dogs = new Dog Какие методы я смогу вызвать через этот...

Полиморфизм
дана программа class X { int i; public X() { i = 5; this.print(); }

Полиморфизм
public class Shape { public void draw() { //ничего не делаем } } public class Square extends Shape { public void...

10
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.05.2019, 17:30
Цитата Сообщение от Djoni Посмотреть сообщение
Function chain = new SquareFunction(new SquareRootFunction(new SineFunction()));
трындец
0
2 / 2 / 1
Регистрация: 21.12.2015
Сообщений: 188
07.05.2019, 17:35  [ТС]
iSmokeJC,
почему?
такое задание,я ничего не выдумал))
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.05.2019, 17:42
Djoni, дело не в задании.
Цитата Сообщение от Djoni Посмотреть сообщение
последовательности функций могут быть реализованы
Внимание! ПОСЛЕДОВАТЕЛЬНОСТИ.
А ты пытаешься создать объекты, передавая им в конструктор (которого кстати нету, точнее только дефолтный) другие объекты.
Вобщем у тебя в корне неверный подход к задаче.

Добавлено через 2 минуты
Хотя, если тебе препод дал эти вот примеры как основу, тогда для каждого класса нужно создавать конструктор, принимающий на вход объект типа Function

Добавлено через 31 секунду
Извращение какое-то имхо...
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
07.05.2019, 17:43
Цитата Сообщение от iSmokeJC Посмотреть сообщение
дело не в задании.
Да нет, в задании. У придумавшего задание, похоже, нет никаких познаний в FP.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.05.2019, 17:44
korvin_, вот я и говорю
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Извращение какое-то
0
2 / 2 / 1
Регистрация: 21.12.2015
Сообщений: 188
07.05.2019, 17:51  [ТС]
Function chain = new SquareFunction(new SquareRootFunction(new SineFunction()));
Как я это понимаю -
сhain имеет все свойства от Funktion(т е все методы),но ведет себя(т е выполняет) все как описанно в SquareFunction,
т е я создаю метод calculate(double x) в Function,и переписываю его в SquareFunction
Далее SquareFunction это общий класс, от него должны extense классы которые стоят в скобках??? и т д?
и в этих подклассах я переписываю метод calculate(x) так,как он должен работать только в них?

Добавлено через 4 минуты
iSmokeJC,

Хотя, если тебе препод дал эти вот примеры как основу, тогда для каждого класса нужно создавать конструктор, принимающий на вход объект типа Function


т е так?
Java
1
2
3
4
5
6
7
8
9
10
public class CosineFunction extends Funktion {
 
    public CosineFunction(Funktion funktion) {
    }
 
    public  double calculate(double x) {
 
        return Math.cos(x);
    }
}

или нужно вызвать в контрукторе сеперкласс?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
07.05.2019, 17:54
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.concurrent.ThreadLocalRandom;
 
final class Composition {
 
    public static void main(String[] args) {
        final Fun chain0 = Math.cos.compose(Math.sqrt).compose(Math.sin);
        final Fun chain1 = Math.sqrt.compose(Math.sqrt).compose(Math.tan);
        final Fun chain2 = Math.sin.compose(Math.sqrt).compose(Math.id);
        final double x = ThreadLocalRandom.current().nextDouble();
        System.out.printf("x  = %f%nc0 = %f%nc1 = %f%nc2 = %f%n", x,
                chain0.apply(x),
                chain1.apply(x),
                chain2.apply(x)
        );
    }
}
Code
1
2
3
4
x  = 0.986212
c0 = 0.611213
c1 = 1.108736
c2 = 0.837713
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
@FunctionalInterface
public interface Fun {
 
    double apply(double x);
 
    default Fun compose(Fun g) {
        return x -> this.apply(g.apply(x));
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
final class Math {
 
    static final Fun sin = java.lang.Math::sin;
 
    static final Fun cos = java.lang.Math::cos;
 
    static final Fun sqrt = java.lang.Math::sqrt;
 
    static final Fun tan = java.lang.Math::tan;
 
    static final Fun id = x -> x;
}
2
2 / 2 / 1
Регистрация: 21.12.2015
Сообщений: 188
07.05.2019, 17:58  [ТС]
korvin_,
твой код крут,спасибо,но нужно,вызывать именно
Function chain1 = new SquareRootFunction(new SquareRootFunction(new TangentFunction()));
Function chain2 = new SineFunction(new SquareFunction(new IdentityFunction()));
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
07.05.2019, 18:41
Лучший ответ Сообщение было отмечено Djoni как решение

Решение

Djoni, пример, далее по аналогии, все классы наследники функции, за точность расчетов не ручаюсь, писал на коленке, но для тестов менял все эти косинусы на +2, *2 и т.п. - работало верно и в ожидаемой последовательности. но мог что-то проглядеть
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
class Function {
    private Function function;
 
    public Function(Function function) {
        this.function = function;
    }
 
    public Function() {
 
    }
 
    public double calculate(double value) {
        return function == null ? value : function.calculate(value);
    }
}
 
class CosineFunction extends Function {
    public CosineFunction() {
    }
 
    public CosineFunction(Function function) {
        super(function);
    }
 
    @Override
    public double calculate(double x) {
        return Math.cos(super.calculate(x));
    }
}
 
 
class SquareRootFunction extends Function {
    public SquareRootFunction(Function function) {
        super(function);
    }
 
    public SquareRootFunction() {
    }
 
    @Override
    public double calculate(double x) {
        return Math.sqrt(super.calculate(x));
    }
}
1
2 / 2 / 1
Регистрация: 21.12.2015
Сообщений: 188
07.05.2019, 20:43  [ТС]
Welemir1, спасибо,сейчас потестю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2019, 20:43
Помогаю со студенческими работами здесь

Полиморфизм
привет, подскажите, везде в книгах пишут: - дочерний класс может вызывать методы свои и своего родителя. - родитель может вызывать...

Полиморфизм
дана программа class X { int i; public X() { i = 5; this.print(); } public void print() { ...

Полиморфизм в Java
Добрый вечер. Изучая полиморфизм в Java натолкнулся на такой пример: class A { void m1(A a) { ...

Наследование/Полиморфизм
Есть туристическая фирма, которая была основана в Y году, и организует путешествия в N стран. Про каждую страну сохраняется информация: -...

Полиморфизм и ArrayList
Всем привет, пишу небольшую карточную игру и слегка запутался. У нас есть абстрактный класс Player и реальные классы- наследники: bot,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru