Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
1

Смысл переноса метода

12.05.2015, 13:36. Показов 760. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проходил старые тесты по java, наткнулся на такое задание: Даны два класса Customer и Rental. Перенесите метод amountFor(..) в класс Rental. Дайте обьяснение этому переносу. Предложите возможные улучшения для оптимизации кода.
Классы ниже:
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
public class Customer {
    private String name;
    // Other fields, constructors, get, set, etc.
    //
    public Customer(String name) {
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name=name;
    }
    private double amountFor(Rental rental) {
        double result;
        // Another code.
        result=rental.getDays()*rental.getBasePrice();
        if (rental.getKind()==1) {
            result=result*1.5;
        }
        if (rental.getKind()==2) {
            result=result*2;
        }
        if (rental.getKind()==3) {
            result=result*2.5;
        }
        if (rental.getDays()>7) {
            result=result*3;
        }
        // Other calculation.
        return result;
    }
     //Other methods.
}
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
public class Rental {
    private int kind;
    private int days;
    // Other fields, constructors, get, set, etc.
    //
    public Rental(int kind, int days) {
        this.kind=kind;
        this.days=days;
    }
    public int getKind() {
        return kind;
    }
    public void setKind(int kind) {
 
        this.kind=kind;
    }
    public int getDays() {
        return days;
    }
    public void setDays(int days) {
        this.days=days;
    }
    public double getBasePrice() {
        // Calculation of Price.
        // . . .
        return 100;
    }
   
}
Ну я методом стрл с стрл v перенс его в класс рентал (убрал из параметров обьект типа Rental) никаких ошибок все работает хорошо) В чем тут смысл?)
Единственное на мой взгляд "улучшение" это доступ к переменным напрямую без геттеров и тд. Но это совсем же не укладывается в концепцию ООП.

Буду благодарен за любые мысли по этому поводу, советы и тд)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2015, 13:36
Ответы с готовыми решениями:

Есть ли смысл на каком пк устанавливать ОС Linux для последующего переноса на другой пк ?
Добрый день! Имеется старый ПК №1 с архитектурой i686 (x86) Имеется новый ПК №2 с...

Пояснить смысл метода Симпсона
Помогите, пожалуйста понять смысл метода Симпсона и как его реализовать на Pascal ABC.

Ошибка при обьявлении метода после переноса кода с VS в C++ Builder
Добрый день. Подскажите пожалуйста, как исправить ошибку, которая возникла после переноса кода из...

Имеет ли смысл лочить всё тело метода?
Доброго времени суток. Есть такой вопрос. Имеет ли смысл лочить в каждом методе весь код....

7
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.05.2015, 13:57 2
Цитата Сообщение от Serg22 Посмотреть сообщение
Но это совсем же не укладывается в концепцию ООП.
почему?
в этом методе ведь вообще не требуется брать что-то у Customer-а, ему не место в этом классе
0
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
12.05.2015, 19:56  [ТС] 3
Паблито, Т.е вся суть сводится к переносу в Rental и обращение к полям напрямую (без геттеров) ?
А вот чем еще можно улучшить?) Вертится что-то на языке насчет if'ов, может через case переделать стоит?
0
Автоматизируй это!
Эксперт Python
7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29
12.05.2015, 20:01 4
Цитата Сообщение от Serg22 Посмотреть сообщение
может через case переделать стоит?
да, я бы свитч поставил
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
13.05.2015, 06:09 5
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum Kind {
    DEFAULT(1), ONE(1.5), TWO(2), THREE(2.5);
 
    private final double coeff;
 
    private Kind(double coeff) {
        this.coeff = coeff;
    }
 
    public double getCoeff() {
        return this.coeff;
    }
 
}
Java
1
2
3
int days = rental.getDays();
double result = days * rental.getBasePrice() * rental.getKind().getCoeff();
return days > 7 ? result * 3 : result;
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
13.05.2015, 09:06 6
aleksandy, я бы сделал класс вместо enum. Такое использование перечисления в данном случае не оправданно как по мне.
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
13.05.2015, 23:22 7
KEKCoGEN, класс не нужен, т.к. в исходном коде были magic numbers, то енумы тут подходят очень даже отлично. Классы могут понадобиться, если эти коэффициенты могут меняться и загружаться из внешнего источника.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
14.05.2015, 08:32 8

Не по теме:

я тоже считаю, что тут энум не к месту


те же magic numbers, но в энуме + еще какой-то коэффициент появился

switch-case очень кстати
0
14.05.2015, 08:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2015, 08:32
Помогаю со студенческими работами здесь

Невозможно передать ArrayList в аргументы метода без модификатора static у этого метода или метода main
Крч, хочу передать экземпляр класса ArrayList в метод, но ide говорит, что нельзя это сделать, пока...

Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода
В базовом классе метод помечен как virtual. Насколько я понял из книги: override означает, что...

Как из метода отправить переменную в другой метод и продолжить выполнение метода?
Здравствуйте, подскажите пожалуйста, как из метода отправить переменную в другой метод и продолжить...

Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода
Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода. Ребя может кто помочь


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru