powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Задача ООП
54 сообщений из 54, показаны все 3 страниц
Задача ООП
    #38160655
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня. Изучаю java и ООП. Вроде всё понятно но туплю при применении ООП в предметной области. Как с вашей точки зрения правильно спроектировать классы для следующей задачи. Помогите просто накидать структуру классов, какие и зачем.

Задача выдачи кредита.
1. Расчёт предварительного графика выплат по месяцам
Входными данными являются процент, сумма, срок кредита и т.д.
Выходными - график по периодам (месяцам) с указанием суммы платежа по процентам и по погашению остатка.
2. Выдача кредита
3. Приём платежей по кредиту (человек может в один период(месяц) заплатить два раза).
4. Расчёт суммы платежа в текущем периоде (с учётом задолженности)
5. При расчёте могут использоваться разные алгоритмы (бывают Аннуитетные платежи (одинаковые) и Дифференцированные платежи (платежи уменьшаются))

Спасибо!
...
Рейтинг: 0 / 0
Задача ООП
    #38160671
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
начните с сущностей (кредит, платеж, плательщик и т.д), рассмотрите их взаимосвязи, варианты использования вашей системы, и наверное уже потом можно будет говорить о классах
...
Рейтинг: 0 / 0
Задача ООП
    #38160695
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня смущает следующее:
Если выделить сущность КРЕДИТ и ПЕРИОД (в смысле период платежа - месяц). В первом пункте нужно рассчитать график платежей, т.е. КРЕДИТ должен создать массив ПЕРИОДов. Где должен находится алгоритм расчёта стоимости платежа в конкретном периоде. С одной стороны это задача ПЕРИОДа (рассчитать свою стоимость), с другой данные для расчёта берутся из КРЕДИТа. Получается сущность КРЕДИТ содержит массив сущностей ПЕРИОД, а ПЕРИОД содержит ссылку на КРЕДИТ. Композиция в обе стороны.
...
Рейтинг: 0 / 0
Задача ООП
    #38160714
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,

В сущности АЛГОРИТМ
...
Рейтинг: 0 / 0
Задача ООП
    #38160732
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лагман, спасибо за новую мысль)) сейчас накидаю диаграмму классов.
...
Рейтинг: 0 / 0
Задача ООП
    #38160733
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
UML
...
Рейтинг: 0 / 0
Задача ООП
    #38160743
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грубая структура, скорее всего, должна быть такой:
СУЩНОСТИ: кредит, период;
ИНТЕРФЕЙС (или абстрактный класс) для алгоритма генерации, ИНТЕРФЕЙС для алгоритма квитовки;
+ отдельные классы - реализации алгоритмов (EJB, если это J2ee приложение)
...
Рейтинг: 0 / 0
Задача ООП
    #38160746
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
ждем
...
Рейтинг: 0 / 0
Задача ООП
    #38160784
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,
ИНТЕРФЕЙС - это уже реализация. Рановато.
...
Рейтинг: 0 / 0
Задача ООП
    #38160788
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

да и классы рановато
...
Рейтинг: 0 / 0
Задача ООП
    #38160797
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что набросал. Курсивом абстрактные методы и класс. Подчеркнуты статические методы.
...
Рейтинг: 0 / 0
Задача ООП
    #38160813
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я очень сомневаюсь, что есть сущность Алгоритм.
Илу у математиков - Формула )) IMHO
...
Рейтинг: 0 / 0
Задача ООП
    #38160814
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
я не совсем втыкаю в связь кредита с алгоритмом расчета
...
Рейтинг: 0 / 0
Задача ООП
    #38160816
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
есть такая сущность, паттерн Strategy
...
Рейтинг: 0 / 0
Задача ООП
    #38160822
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker, КРЕДИТ для расчёта периодов и платежей по периодам, пользуется АЛГОРИТМом.
...
Рейтинг: 0 / 0
Задача ООП
    #38160826
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
так я и спрашиваю, как он им пользуется
...
Рейтинг: 0 / 0
Задача ООП
    #38160841
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker, думаю как-то так:

Код: java
1.
2.
3.
4.
5.
6.
public class Credit {
	....
	public void calculatePeriods(){
		Algortim alg= Algoritm.newInstance(this);
		this.periods=alg.CalculatePeriods();
	}
...
Рейтинг: 0 / 0
Задача ООП
    #38160853
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
то есть у вас алгоритм сам определяет как считать, в зависимости от типа кредита? Может было бы удобнее сделать поле в кредите, и инициализировать его нужным алгоритмом? вместо поля тип кредита, потому что кредиты только алгоритмами и отличаются.
...
Рейтинг: 0 / 0
Задача ООП
    #38160867
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker, можно и так. Разница только в месте создания объекта, у меня в методе по требованию, а вы предлагаете в конструкторе КРЕДИТа. Кажись это и правда паттерн "Стратегия" ))
...
Рейтинг: 0 / 0
Задача ООП
    #38160878
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerPetro123,
есть такая сущность, паттерн Strategy
ты не перепутал паттерны и Бизнес-сущности?
Часто UML строят вообще не программисты.
А у нас уже пошли код писать)
...
Рейтинг: 0 / 0
Задача ООП
    #38160886
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
а какой ваш подход к решению задачи?
...
Рейтинг: 0 / 0
Задача ООП
    #38160897
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123Petro123,
а какой ваш подход к решению задачи?
Сначала модель в терминах UML
Т.е. что сохраняется в БД - т.е. - данные.
Откуда потом растёт маппинг в ОРМ.
Что и куда вычислять на этих данных можно придумать миллион.
...
Рейтинг: 0 / 0
Задача ООП
    #38160898
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
не перепутал
...
Рейтинг: 0 / 0
Задача ООП
    #38160904
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Сейчас попробую нарисовать...
...
Рейтинг: 0 / 0
Задача ООП
    #38160909
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,

разница не в этом, а в том, что у вас алгоритм наделен полномочиями решать, как ему считать по кредиту, но мне кажется, это не его забота. Необязательно в конструкторе передавать.
...
Рейтинг: 0 / 0
Задача ООП
    #38160927
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Значит сущности две - кредит и платёж. Данные по периодам - предстоящим платежам рассчитываются динамически, и не требуют хранения в БД. Платильщика намерено не выделил в отдельную сущность дабы не усложнять задачу. Достаточно ФИО в кредите.
...
Рейтинг: 0 / 0
Задача ООП
    #38160941
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerразница не в этом, а в том, что у вас алгоритм наделен полномочиями решать, как ему считать по кредиту, но мне кажется, это не его забота. Необязательно в конструкторе передавать.
т.е. КРЕДИТ должен решать, каким алгоритмом воспользоваться. А при добавлении нового алгоритма мы вносим изменения именно у пользователя алгоритма (КРЕДИТа), он должен знать чем он пользуется. Так?
...
Рейтинг: 0 / 0
Задача ООП
    #38160954
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123, ну да. Алгоритм должен только уметь считать, ничего решать ему не надо
...
Рейтинг: 0 / 0
Задача ООП
    #38160966
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
Хранить или не хранить рассчитанные суммы по периодам тоже большой вопрос. Например, у вас много клиентов, и вы хотите получить отчет об остатках их задолженностей. А для того чтобы это сделать, нужно рассчитать сначала суммы всех кредитов, потом отнять от них платежи. Это будет очень долго. К тому же, суммы выплат по периодам можно хранить в базе, при этом не выделяя их в отдельные сущности.
...
Рейтинг: 0 / 0
Задача ООП
    #38160995
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

а если алгоритм привязать к типу кредита?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public enum CreditType {
	DIFFERENCE(DifferenceAlgoritm.class),ANNUA(AnnuaAlgortim.class);
	
	private Class algoritm;
	
	CreditType(Class algoritm){
		this.algoritm=algoritm;
	}
	
	public Class getAlgoritm(){
		return algoritm;
	}
}

public class Credit {
	....
	public void calculatePeriods(){
		Algortim alg= this.type.getAlgoritm().newInstance();
		alg.setCredit(this);
		this.periods=alg.CalculatePeriods();
	}
...
Рейтинг: 0 / 0
Задача ООП
    #38161002
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey123Значит сущности две - кредит и платёж.
Лучше периоды тоже сохранять, хоть они и вычисляются динамически
- платежный график является неотъемлемой частью кредитного договора, имеет, так сказать, юридическое значение
- в финансовых системах требуется частенько иметь план потока денежных средств. Посчитать годовой план на 10000 кредитов может оказаться непосильной задачей;

Для алгоритмов не хватает фабрики - интерфейс+реализация. Конкретная реализация фабрики делается в зависимости от используемого фреймворка: это может быть jndi, инъекция, properties+reflection, что-то еще. Помещать конкретные реализации в enum CreditType - плохая идея

Кредит, по идее, не должен себя рассчитывать, в нем только геттеры и сеттеры, если уже решили что это entity.
Связка всего вместе - в отдельном классе, CreditBean
...
Рейтинг: 0 / 0
Задача ООП
    #38161006
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerХранить или не хранить рассчитанные суммы по периодам тоже большой вопрос. Например, у вас много клиентов, и вы хотите получить отчет об остатках их задолженностей.
Это будет уже новый UseCase, пункт 6 к моей задачи. Задача разрастается))) Подумать над этим тоже интересно.

javapecker К тому же, суммы выплат по периодам можно хранить в базе, при этом не выделяя их в отдельные сущности.
Что вы имели в виду?
...
Рейтинг: 0 / 0
Задача ООП
    #38161013
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,
а не подскажите в какой литературе расписаны такие вещи, что от чего лучше отделять и как проектировать в контексте java.
...
Рейтинг: 0 / 0
Задача ООП
    #38161015
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123, у алгоритма нет состояния, поэтому alg.setCredit(this) лишнее. Это фактически функция. Если его надо куда-то передавать, то придется создать объект, но если не надо, то зачем вообще нужен getAlgoritm().newInstance()? Алгоритм в таком случае может быть статическим методом класса.
...
Рейтинг: 0 / 0
Задача ООП
    #38161030
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
Что вы имели в виду?
Что с точки зрения вашей системы все ее объекты смогут обращаться к периодам только через кредит, и никогда напрямую. Вообщем, что период это атрибут сущности, а не самостоятельная сущность.
...
Рейтинг: 0 / 0
Задача ООП
    #38161037
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123ivanra,
а не подскажите в какой литературе расписаны такие вещи, что от чего лучше отделять и как проектировать в контексте java.
соседний топик - Проектирование ИС. Там предметники.
А вот, привязывать к Java - лишнее.
...
Рейтинг: 0 / 0
Задача ООП
    #38161074
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новый вариант. Не очень понятно отделение данных Credit от методов CreditBean.
...
Рейтинг: 0 / 0
Задача ООП
    #38161139
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey123,
CreditType наверно лишнее, я бы сделал просто строковое поле, а если нужен справочник, то его должна возвращать фабрика алгоритмов;
Между бином и конкретными реализациями алгоритмов не должно быть "сильной" связи, сейчас она есть.

Как простейшую реализацию могу предложить хранение в properties карты тип_кредита=класс_расчетов, а в методе фабрики - загрузку классов с использованием reflection.
...
Рейтинг: 0 / 0
Задача ООП
    #38161172
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,
Мне кажется мы немножко по разному представляем задачу. Я исхожу из того, что тип кредита, это его атрибут. Один и тот-же банк, в одно и тоже время может выдавать кредиты двух видов. Вы наверно представляете это как разный режим работы приложения. В моём понятии тип кредита это свойство конкретного экземпляра кредита, определяющий методику его расчёта. Пользователь также должен видеть, что этот кредит аннуитетный, а этот дифференцированный.
...
Рейтинг: 0 / 0
Задача ООП
    #38161179
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
так может тогда сделать алгоритм атрибутом объекта, и пусть у него будет помимо расчетных метод getType(), который и вернет тип расчета кредита. ivanra Говорит скорее о том, как технически при создании кредита назначить ему алгоритм, поскольку в базе он не хранится.
...
Рейтинг: 0 / 0
Задача ООП
    #38161188
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кто-то говорит, что расчет хранить не надо, включая периоды, суммы, проценты и так далее - пусть он съест земли. Под страхом расстрела всю динамику убрать, потому как поменялся "алгоритм" и...ну вы поняли, все данные за прошлое неожиданно разошлись с ожиданиями клиента.
Очень внимательно надо следить за "алгоритмами" расчета, либо ни в коем случае не МЕНЯТЬ их, а просто заводить новые. либо иметь версию алгоритма(v1, v2, v3) и говорить о версионности, тогда в этом разрезе риски динамики меньше.
...
Рейтинг: 0 / 0
Задача ООП
    #38161189
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я просто предлагаю хранить в поле "тип кредита" его символьное обозначение.
В один прекрасный день банк захочет реализовать какой-нибудь третий алгоритм расчетов. Всё, что для этого понадобится - закодировать новый класс и добавить строчку в ресурс .properties - и всё благодаря слабой связанности.
...
Рейтинг: 0 / 0
Задача ООП
    #38161207
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинЕсли кто-то говорит, что расчет хранить не надо, включая периоды, суммы, проценты и так далее - пусть он съест земли. Под страхом расстрела всю динамику убрать, потому как поменялся "алгоритм" и...ну вы поняли, все данные за прошлое неожиданно разошлись с ожиданиями клиента.
Очень внимательно надо следить за "алгоритмами" расчета, либо ни в коем случае не МЕНЯТЬ их, а просто заводить новые. либо иметь версию алгоритма(v1, v2, v3) и говорить о версионности, тогда в этом разрезе риски динамики меньше.
+1
даже больше:
ФизЛицо --> КредитнаяКарта ---> Кредит
+
Транзакция --> ТипОранзакции.
...
А мы выбросили кредитку, Физ-Лицо, Банк и ФинансовыеТранзакции.
...
Рейтинг: 0 / 0
Задача ООП
    #38161213
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати табла Транзакции с 2-ой записю:
Поле15 - счёт корреспондирующий
Поле16 - счёт дебетовый
...
Рейтинг: 0 / 0
Задача ООП
    #38161214
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
опять понесло)
...
Рейтинг: 0 / 0
Задача ООП
    #38161223
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerPetro123,
опять понесло)
угу. Тебе же кОдить не терпится.
Алгоритм, это Договор с клиентом. Вот его в БД и надо хранить. Там все процентные ставки и методы расчёта.
...
Рейтинг: 0 / 0
Задача ООП
    #38161244
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
не надо раздувать простую полуучебную задачу до промышленных масштабов.
...
Рейтинг: 0 / 0
Задача ООП
    #38161258
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerPetro123,
не надо раздувать простую полуучебную задачу до промышленных масштабов.
верно.
И механизм рефлекции, фабрики чего бы то ни было) тут тоже не нужен.
Но это IMHO )
...
Рейтинг: 0 / 0
Задача ООП
    #38161265
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, вопрос про ООП, поэтому насчет рефлекта согласен, а фабрики можно оставить.
...
Рейтинг: 0 / 0
Задача ООП
    #38161272
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,
я думаю так:
вот это самая сложная часть:
автор4. Расчёт суммы платежа в текущем периоде (с учётом задолженности)
т.к. текущий долг может увеличиться от чего угодно (сняли оплату помесячную за СМСки)
Значит лучше табла именно финансовые транзакции.
Например часть взять отсюда:
http://www.databaseanswers.org/data_models/customers_and_credit_cards/customers_and_credit_cards_with_attributes.htm
...
Рейтинг: 0 / 0
Задача ООП
    #38161277
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавить таблу-класс МетодикиРасчёта-Договор где все ставки, формулы и текст договра.
У Договора есть периодДействия. Текущий договор подымается из БД и пересчитываетЗаново если нужно.
imho
...
Рейтинг: 0 / 0
Задача ООП
    #38161284
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается, что сущность "Алгоритм" вроде бы есть, но мне название не нравится.)))
Програмистсткий термин.
У меня Это называется Договор(расчёта). Но я тоже не спец по предметке.
...
Рейтинг: 0 / 0
Задача ООП
    #38161290
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
ну вроде несложно. Есть черный ящик, алгоритм. На вход даешь сумму и ставку, на выходе получаешь разбивку выплат по периодам. Можно реализовать его как функцию, в этом случае сущностью он не будет, а можно сделать объект, который будет реализоывать этот алгоритм, и передавать его всем другим объектам, которые знают его интерфейс, просто потому что в Java нельзя передать ссылку на метод. В Договоре исходные данные для алгоритма, и указания какой алгоритм применить, если в таких терминах. Но Договор не есть алгоритм.
...
Рейтинг: 0 / 0
Задача ООП
    #38161451
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerAlexey123,
Хранить или не хранить рассчитанные суммы по периодам тоже большой вопрос. Например, у вас много клиентов, и вы хотите получить отчет об остатках их задолженностей. А для того чтобы это сделать, нужно рассчитать сначала суммы всех кредитов, потом отнять от них платежи. Это будет очень долго. К тому же, суммы выплат по периодам можно хранить в базе, при этом не выделяя их в отдельные сущности.
ну да. Графики погашений хранятся, чтобы генерировать списания, по алгоритму списаний, с учетом задолженности. А в остальном - пример не слишком удачный. Тут объекты только под ногами путаются. Попробуйте нарисовать юз-кейсы просрочек, и досрочных погашений и станет веселее. опять таки и прогноз будущего денежного потока без хранимого графика погашений.... но там по жизни тоже не очень объектно....
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Задача ООП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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