|
|
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Доброго дня. Изучаю java и ООП. Вроде всё понятно но туплю при применении ООП в предметной области. Как с вашей точки зрения правильно спроектировать классы для следующей задачи. Помогите просто накидать структуру классов, какие и зачем. Задача выдачи кредита. 1. Расчёт предварительного графика выплат по месяцам Входными данными являются процент, сумма, срок кредита и т.д. Выходными - график по периодам (месяцам) с указанием суммы платежа по процентам и по погашению остатка. 2. Выдача кредита 3. Приём платежей по кредиту (человек может в один период(месяц) заплатить два раза). 4. Расчёт суммы платежа в текущем периоде (с учётом задолженности) 5. При расчёте могут использоваться разные алгоритмы (бывают Аннуитетные платежи (одинаковые) и Дифференцированные платежи (платежи уменьшаются)) Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 13:49:07 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, начните с сущностей (кредит, платеж, плательщик и т.д), рассмотрите их взаимосвязи, варианты использования вашей системы, и наверное уже потом можно будет говорить о классах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 13:56:24 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Меня смущает следующее: Если выделить сущность КРЕДИТ и ПЕРИОД (в смысле период платежа - месяц). В первом пункте нужно рассчитать график платежей, т.е. КРЕДИТ должен создать массив ПЕРИОДов. Где должен находится алгоритм расчёта стоимости платежа в конкретном периоде. С одной стороны это задача ПЕРИОДа (рассчитать свою стоимость), с другой данные для расчёта берутся из КРЕДИТа. Получается сущность КРЕДИТ содержит массив сущностей ПЕРИОД, а ПЕРИОД содержит ссылку на КРЕДИТ. Композиция в обе стороны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:06:49 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, В сущности АЛГОРИТМ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:15:53 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Лагман, спасибо за новую мысль)) сейчас накидаю диаграмму классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:21:54 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Грубая структура, скорее всего, должна быть такой: СУЩНОСТИ: кредит, период; ИНТЕРФЕЙС (или абстрактный класс) для алгоритма генерации, ИНТЕРФЕЙС для алгоритма квитовки; + отдельные классы - реализации алгоритмов (EJB, если это J2ee приложение) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:25:35 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
ivanra, ИНТЕРФЕЙС - это уже реализация. Рановато. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:39:09 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, да и классы рановато ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:40:09 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Вот что набросал. Курсивом абстрактные методы и класс. Подчеркнуты статические методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:44:02 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
я очень сомневаюсь, что есть сущность Алгоритм. Илу у математиков - Формула )) IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:52:02 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, я не совсем втыкаю в связь кредита с алгоритмом расчета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:52:34 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, есть такая сущность, паттерн Strategy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:53:00 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapecker, КРЕДИТ для расчёта периодов и платежей по периодам, пользуется АЛГОРИТМом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:56:15 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, так я и спрашиваю, как он им пользуется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:57:21 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapecker, думаю как-то так: Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:02:37 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, то есть у вас алгоритм сам определяет как считать, в зависимости от типа кредита? Может было бы удобнее сделать поле в кредите, и инициализировать его нужным алгоритмом? вместо поля тип кредита, потому что кредиты только алгоритмами и отличаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:06:02 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapecker, можно и так. Разница только в месте создания объекта, у меня в методе по требованию, а вы предлагаете в конструкторе КРЕДИТа. Кажись это и правда паттерн "Стратегия" )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:13:44 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, есть такая сущность, паттерн Strategy ты не перепутал паттерны и Бизнес-сущности? Часто UML строят вообще не программисты. А у нас уже пошли код писать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:19:33 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, а какой ваш подход к решению задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:23:25 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123Petro123, а какой ваш подход к решению задачи? Сначала модель в терминах UML Т.е. что сохраняется в БД - т.е. - данные. Откуда потом растёт маппинг в ОРМ. Что и куда вычислять на этих данных можно придумать миллион. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:27:14 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, не перепутал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:27:29 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, Сейчас попробую нарисовать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:31:14 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, разница не в этом, а в том, что у вас алгоритм наделен полномочиями решать, как ему считать по кредиту, но мне кажется, это не его забота. Необязательно в конструкторе передавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:32:50 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, Значит сущности две - кредит и платёж. Данные по периодам - предстоящим платежам рассчитываются динамически, и не требуют хранения в БД. Платильщика намерено не выделил в отдельную сущность дабы не усложнять задачу. Достаточно ФИО в кредите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:40:06 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapeckerразница не в этом, а в том, что у вас алгоритм наделен полномочиями решать, как ему считать по кредиту, но мне кажется, это не его забота. Необязательно в конструкторе передавать. т.е. КРЕДИТ должен решать, каким алгоритмом воспользоваться. А при добавлении нового алгоритма мы вносим изменения именно у пользователя алгоритма (КРЕДИТа), он должен знать чем он пользуется. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:45:09 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, ну да. Алгоритм должен только уметь считать, ничего решать ему не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:51:57 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, Хранить или не хранить рассчитанные суммы по периодам тоже большой вопрос. Например, у вас много клиентов, и вы хотите получить отчет об остатках их задолженностей. А для того чтобы это сделать, нужно рассчитать сначала суммы всех кредитов, потом отнять от них платежи. Это будет очень долго. К тому же, суммы выплат по периодам можно хранить в базе, при этом не выделяя их в отдельные сущности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 15:58:32 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapecker, а если алгоритм привязать к типу кредита? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 16:08:36 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123Значит сущности две - кредит и платёж. Лучше периоды тоже сохранять, хоть они и вычисляются динамически - платежный график является неотъемлемой частью кредитного договора, имеет, так сказать, юридическое значение - в финансовых системах требуется частенько иметь план потока денежных средств. Посчитать годовой план на 10000 кредитов может оказаться непосильной задачей; Для алгоритмов не хватает фабрики - интерфейс+реализация. Конкретная реализация фабрики делается в зависимости от используемого фреймворка: это может быть jndi, инъекция, properties+reflection, что-то еще. Помещать конкретные реализации в enum CreditType - плохая идея Кредит, по идее, не должен себя рассчитывать, в нем только геттеры и сеттеры, если уже решили что это entity. Связка всего вместе - в отдельном классе, CreditBean ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 16:13:01 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapeckerХранить или не хранить рассчитанные суммы по периодам тоже большой вопрос. Например, у вас много клиентов, и вы хотите получить отчет об остатках их задолженностей. Это будет уже новый UseCase, пункт 6 к моей задачи. Задача разрастается))) Подумать над этим тоже интересно. javapecker К тому же, суммы выплат по периодам можно хранить в базе, при этом не выделяя их в отдельные сущности. Что вы имели в виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 16:14:02 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
ivanra, а не подскажите в какой литературе расписаны такие вещи, что от чего лучше отделять и как проектировать в контексте java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 16:19:23 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, у алгоритма нет состояния, поэтому alg.setCredit(this) лишнее. Это фактически функция. Если его надо куда-то передавать, то придется создать объект, но если не надо, то зачем вообще нужен getAlgoritm().newInstance()? Алгоритм в таком случае может быть статическим методом класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 16:19:51 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, Что вы имели в виду? Что с точки зрения вашей системы все ее объекты смогут обращаться к периодам только через кредит, и никогда напрямую. Вообщем, что период это атрибут сущности, а не самостоятельная сущность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 16:23:14 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123ivanra, а не подскажите в какой литературе расписаны такие вещи, что от чего лучше отделять и как проектировать в контексте java. соседний топик - Проектирование ИС. Там предметники. А вот, привязывать к Java - лишнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 16:26:45 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Новый вариант. Не очень понятно отделение данных Credit от методов CreditBean. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 16:42:02 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, CreditType наверно лишнее, я бы сделал просто строковое поле, а если нужен справочник, то его должна возвращать фабрика алгоритмов; Между бином и конкретными реализациями алгоритмов не должно быть "сильной" связи, сейчас она есть. Как простейшую реализацию могу предложить хранение в properties карты тип_кредита=класс_расчетов, а в методе фабрики - загрузку классов с использованием reflection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:12:43 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
ivanra, Мне кажется мы немножко по разному представляем задачу. Я исхожу из того, что тип кредита, это его атрибут. Один и тот-же банк, в одно и тоже время может выдавать кредиты двух видов. Вы наверно представляете это как разный режим работы приложения. В моём понятии тип кредита это свойство конкретного экземпляра кредита, определяющий методику его расчёта. Пользователь также должен видеть, что этот кредит аннуитетный, а этот дифференцированный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:27:38 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Alexey123, так может тогда сделать алгоритм атрибутом объекта, и пусть у него будет помимо расчетных метод getType(), который и вернет тип расчета кредита. ivanra Говорит скорее о том, как технически при создании кредита назначить ему алгоритм, поскольку в базе он не хранится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:31:36 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Если кто-то говорит, что расчет хранить не надо, включая периоды, суммы, проценты и так далее - пусть он съест земли. Под страхом расстрела всю динамику убрать, потому как поменялся "алгоритм" и...ну вы поняли, все данные за прошлое неожиданно разошлись с ожиданиями клиента. Очень внимательно надо следить за "алгоритмами" расчета, либо ни в коем случае не МЕНЯТЬ их, а просто заводить новые. либо иметь версию алгоритма(v1, v2, v3) и говорить о версионности, тогда в этом разрезе риски динамики меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:37:23 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Я просто предлагаю хранить в поле "тип кредита" его символьное обозначение. В один прекрасный день банк захочет реализовать какой-нибудь третий алгоритм расчетов. Всё, что для этого понадобится - закодировать новый класс и добавить строчку в ресурс .properties - и всё благодаря слабой связанности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:38:39 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
ОзверинЕсли кто-то говорит, что расчет хранить не надо, включая периоды, суммы, проценты и так далее - пусть он съест земли. Под страхом расстрела всю динамику убрать, потому как поменялся "алгоритм" и...ну вы поняли, все данные за прошлое неожиданно разошлись с ожиданиями клиента. Очень внимательно надо следить за "алгоритмами" расчета, либо ни в коем случае не МЕНЯТЬ их, а просто заводить новые. либо иметь версию алгоритма(v1, v2, v3) и говорить о версионности, тогда в этом разрезе риски динамики меньше. +1 даже больше: ФизЛицо --> КредитнаяКарта ---> Кредит + Транзакция --> ТипОранзакции. ... А мы выбросили кредитку, Физ-Лицо, Банк и ФинансовыеТранзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:47:55 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
кстати табла Транзакции с 2-ой записю: Поле15 - счёт корреспондирующий Поле16 - счёт дебетовый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:51:09 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, опять понесло) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:52:14 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, опять понесло) угу. Тебе же кОдить не терпится. Алгоритм, это Договор с клиентом. Вот его в БД и надо хранить. Там все процентные ставки и методы расчёта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 17:55:29 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, не надо раздувать простую полуучебную задачу до промышленных масштабов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 18:06:26 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, не надо раздувать простую полуучебную задачу до промышленных масштабов. верно. И механизм рефлекции, фабрики чего бы то ни было) тут тоже не нужен. Но это IMHO ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 18:11:53 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, вопрос про ООП, поэтому насчет рефлекта согласен, а фабрики можно оставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 18:18:25 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapecker, я думаю так: вот это самая сложная часть: автор4. Расчёт суммы платежа в текущем периоде (с учётом задолженности) т.к. текущий долг может увеличиться от чего угодно (сняли оплату помесячную за СМСки) Значит лучше табла именно финансовые транзакции. Например часть взять отсюда: http://www.databaseanswers.org/data_models/customers_and_credit_cards/customers_and_credit_cards_with_attributes.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 18:22:34 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Добавить таблу-класс МетодикиРасчёта-Договор где все ставки, формулы и текст договра. У Договора есть периодДействия. Текущий договор подымается из БД и пересчитываетЗаново если нужно. imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 18:26:34 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Получается, что сущность "Алгоритм" вроде бы есть, но мне название не нравится.))) Програмистсткий термин. У меня Это называется Договор(расчёта). Но я тоже не спец по предметке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 18:32:42 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
Petro123, ну вроде несложно. Есть черный ящик, алгоритм. На вход даешь сумму и ставку, на выходе получаешь разбивку выплат по периодам. Можно реализовать его как функцию, в этом случае сущностью он не будет, а можно сделать объект, который будет реализоывать этот алгоритм, и передавать его всем другим объектам, которые знают его интерфейс, просто потому что в Java нельзя передать ссылку на метод. В Договоре исходные данные для алгоритма, и указания какой алгоритм применить, если в таких терминах. Но Договор не есть алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 18:38:58 |
|
||
|
Задача ООП
|
|||
|---|---|---|---|
|
#18+
javapeckerAlexey123, Хранить или не хранить рассчитанные суммы по периодам тоже большой вопрос. Например, у вас много клиентов, и вы хотите получить отчет об остатках их задолженностей. А для того чтобы это сделать, нужно рассчитать сначала суммы всех кредитов, потом отнять от них платежи. Это будет очень долго. К тому же, суммы выплат по периодам можно хранить в базе, при этом не выделяя их в отдельные сущности. ну да. Графики погашений хранятся, чтобы генерировать списания, по алгоритму списаний, с учетом задолженности. А в остальном - пример не слишком удачный. Тут объекты только под ногами путаются. Попробуйте нарисовать юз-кейсы просрочек, и досрочных погашений и станет веселее. опять таки и прогноз будущего денежного потока без хранимого графика погашений.... но там по жизни тоже не очень объектно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 21:19:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2129931]: |
0ms |
get settings: |
15ms |
get forum list: |
23ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
42ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
97ms |
get tp. blocked users: |
2ms |
| others: | 317ms |
| total: | 531ms |

| 0 / 0 |
