Нужны некоторые внешние советы для разработки этой диаграммы классов! - PullRequest
1 голос
/ 14 апреля 2011

Резюме

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

Давайте посмотрим на данные за несколько секунд.

Year: 2009
Age 0: 43786.0000
Age 1: 42997.0000
Age 2: 42656.0000
...
Age 99: 2439.0000

Затем мы должны спроектировать 2010 год в соответствии с определенным коэффициентом смертности, установленным таким же образом, как это вышеупомянутое начальное население, за исключением того, что он включает показатели вместо итогов за год.

Year: 2009
Age 0: 0.000213345
Age 1: 0.000212543
Age 2: 0.000201938
...
Age 99: 0.04824421
Age 106: 0.50000000

Идея состоит в том, чтобы сгруппировать эти объекты по классам.Я уже спроектировал один, и мне интересно, можно ли его каким-то образом улучшить.

Цель

Упростить дизайн и внедрить статистические данные.вычисления в классах объектов, чтобы при необходимости их было легче тестировать и проверять.

Фактическая диаграмма классов

Click here to view my actual Class Diagram

Я чувствую, что это можно улучшить.Для вашей информации и удобства чтения приведем индекс французских терминов, используемых на диаграмме:

TauxFeconditeAnnuel -> Annual Fecondity Rate
TauxMortaliteAnnuelle -> Annual Death Rate
PopulationAnnuelle -> Annual Population
SoldeMigratoireAnnuel -> Annual Net Migration
StatistiqueAnnuelle -> Annual Statistic
StatistiqueAnnuelleParSexe -> Annuel Statistic per Sex

Я размышляю о том, включать или нет экземпляр класса Death Rate в класс PopulationAnnuelle.Существуют показатели смертности на начальный год населения и следующие 96 лет прогнозирования.Кроме того, ежегодная численность населения должна иметь свой уровень смертности, и ежегодная численность населения не обязана существовать, чтобы у меня была смертность в этом году.

Допустим, у меня есть первоначальная численность населения на 2009 год, у меня естьпока не прогнозируется численность населения на 2010, 2011, 2012 и т. д. до 2105. Тем не менее, у меня есть прогнозы смертности на все эти годы, и прирост населения основан на этих показателях смертности, чтобы определить, какое население остается живым и сколько смертеймы получили и т. д.

Я подумал о том, чтобы поместить класс PopulationAnnuelle в качестве базового класса для моей модели, хотя я чувствую, что StatistiqueAnnuelle больше подходит для этой работы, а затем заставляет PopulationAnnuelle наследовать ее.*

Вопросы

  1. Что вы думаете о моих проблемах?
  2. Какой лучший дизайн основан на том, что я хочувыполнить?
  3. Должен ли я использовать StatistiqueAnnuelle в качестве базового класса / интерфейса и сделать другие, такие как TauxMortalite, PopulationAnnuelle и т. д. происходят от этого, немного похоже на то, как это теперь разработано?

Любые приемлемые мысли будут одобрены лично мной.Самый точный и помогающий ответ будет принят в качестве ответа на мой вопрос.

Спасибо за вашу помощь и поддержку!=)

Можете ли вы определить для нас наиболее важные случаи использования / сценарии?(Адриан К)

Распространенным возможным вариантом использования / сценарием будет планирование потребностей в пенсионных планах на основе роста населения.После того, как количество людей будет «предсказано», вы можете рассчитать количество людей, которые будут вносить взносы в пенсионный план, и людей, которые выйдут на пенсию, а затем оценить потребности в финансировании, которые вкладчики должны будут заплатить, чтобы средства пенсионного плана былиу меня будет достаточно денег, чтобы выплачивать им пенсии позже, когда они выйдут на пенсию и т. д.

Другим возможным распространенным сценарием будет страховая компания.Основываясь на росте населения, статистика использования страховых услуг позволит компании прогнозировать потребности своих источников финансирования и устанавливать ежемесячный платеж для данной суммы покрытия на основе возмещений за несчастные случаи в сравнении с входными ежемесячными платежами за возраст, например, для страхования автомобилей..

Это упражнение называется оценкой.

1 Ответ

2 голосов
/ 15 апреля 2011

Некоторые первоначальные мысли:

  • Вы работаете с данными с течением времени - мне неловко использовать классы, цель и название которых связаны с концепцией года, особенно если это единственный раз, когдаоснованная на единицах измерения.
  • В зависимости от того, сколько данных вам нужно обработать, вы можете использовать пакет отчетов или использовать выбранную платформу базы данных, поскольку это будет намного эффективнее при работе с данными.
  • Имейте в виду, что данные пройдут жизненный цикл: были ли они очищены?Вам нужно вменять какие-либо данные?и т. д.

Я размышляю о том, включать ли экземпляр класса Death Rate в класс PopulationAnnuelle.

Уровень смертности мне кажетсяподкласс более широкого понятия (скорость?) - модификатор или влияние на данные;по этой причине я бы не стал явно включать его в PopulationAnnuelle.Альтернативным вариантом будет передача данных о населении в модификатор «скорости», а не встраивание их в население.

Да - просто продумывая это - я думаю, что вы хотели бы, чтобы ваши проблемы были четко разделенынасколько это возможно.Вот почему я спросил о важных сценариях, которые вам нужны, например, я вижу, что вы хотите сделать много вещей с PopulationAnnuelle, где уровень смертности не нужен или даже нежелателен.

Обновление

Если я правильно понимаю, и PopulationAnnuelle, и MortaliteAnnuelle получены, скажем, из класса StatistiqueAnnuelle

Хммм - почему?Две вещи, на которые стоит обратить внимание ... Во-первых, уверены ли вы на 100%, что в течение срока службы приложения вам придется иметь дело только в единицах лет?Встраивать концепцию года в код не является чем-то, что вы хотели бы сделать легкомысленно.

Во-вторых, я полностью понимаю, что ежегодная статистика включает в себя смертность и общую численность населения - но я 'я не уверен, что вы отразите это в структуре классов через наследование (?) (не говоря, что вы не можете - вы потратили на это гораздо больше времени, чем я).Помимо отражения определенного мышления, что на самом деле дает вам наследство (против того, что оно сделает с вами)?

Моя идея сгруппировать их состояла в том, чтобы просто попросить класс PopulationAnnuelle о росте населения в следующем году, и он вернул бы его мне как новый экземпляр PopulationAnnuelle

Это звучит сомнительно: классу предлагается создать новый экземпляр самого себя.Я, вероятно, имел бы класс / компонент «TrendPredictor» (?), Который был передан во всех необходимых ему данных (или ссылках на наборы данных) и возвратил некоторый объект.Если вы затем захотите сделать больше предсказания тренда для этого, тогда, я думаю, было бы целесообразно передавать и выводить одни и те же типы, чтобы было легко объединять операции в любую комбинацию.

Только один другой сложный I 'Я хочу сказать, что я вижу, что эти входы и выходы довольно глупы (и, следовательно, не требуют большого (если вообще)) наследования - они больше похожи на структуры данных, чем на классы, которые предлагают богатую функциональность.

...