Как смоделировать домен, если у вас есть базовый класс и 2 класса, расширяющие этот базовый класс, и только один из производного класса имеет отношение к другому объекту.OO Design Modeling
Пример:
public abstract class Base
{
public abstract void method();
}
public class1 extends Base
{
public void method()
{
do some stuff
}
}
public class2 extends Base
{
private Class3 class3;
public void method()
{
do other stuff
}
public Class3 getClass3(){...}
public void setClass3(Class3 class3){...}
}
Является ли эта модель нарушение принципа Лисков? Я так думаю из-за этого отношения с классом 3, поэтому нам нужно выяснить, как моделировать без этого отношения или переместить это отношение в Base. Если у меня есть часть программы, которая имеет дело с Class2 для обработки отношения с классом 3, я не могу работать с базовым классом без приведения в класс2.
Правильно ли эта мысль?
Разъяснение ...
Давайте подумаем в учебной модели. У нас есть курсы и курсы. Мы также можем проводить онлайн-курсы и курсы подготовки. В предварительных курсах мы можем столкнуться со стоимостью этого обучения. Таким образом, затраты имеют смысл только для окружающей среды. В классах курсов могут быть даты дат или датированные даты.
Сегодня у меня есть эта модель:
Course
{
...
}
public abstract class CourseClass
{
private Course course;
// getter and setter to course
public abstract Enrollment enroll(Person student);
}
public class QuantitativeCourseClass
{
public Enrollment enroll(Person student)
{
// enroll for quantitative
}
}
public class RangeCourseClass
{
public Enrollment enroll(Person student)
{
// enroll for range
}
}
Теперь мне приходится иметь дело с затратами и до этого момента presencial, конечно, не важно для меня, но сейчас, стоит только иметь смысл presencial окружающей среды.
Моя проблема: мне нужно иметь дело с объектом CourseClass в модуле затрат, потому что мне нужно кое-что из courseClass, но соотношение затрат связано с RangeCourseClass, потому что QuantitativeCourseClass не имеет смысла для сумасшедшей среды.
Вопрос о liskov заключается в том, как заставить мою команду внести некоторые изменения в эту модель.
Вы могли бы предоставить более конкретный пример? Насколько я вижу, вы не нарушаете LSP. Обратите внимание, что вы можете иметь дело с Class3, но это не имеет ничего общего с «базой». Он по-прежнему является базовым объектом и другими его методами. Это просто зависит от того, нужен ли классу клиента объект «Base» или «Class2» – DPM
, кажется, вы забыли ключевое слово extends. Кроме того, я до сих пор не уверен, что означает «Количественный и диапазон» и их связь со стоимостью и «преданностью». Вы также можете включить стоимость кода. – DPM
Ваше разъяснение, похоже, не помогло, так как вы забыли много вещей, которые иллюстрируют вашу проблему. Ваши объекты не наследуют ни от чего другого, и вы не определили, что означает «presencial». –