В нашем уроке наш Учитель нарисует диаграмму отношений классов с диаграммой UML и Венна.
Наемный работник наследует класс сотрудника
Почасовой сотрудник наследует класс сотрудника
(Я не очень помню контекст занятий)
Он рисует диаграмму Венна так:
Но я действительно не верю, что так должно быть. На мой взгляд, это что-то вроде этого:
Кстати, мы оба предполагаем, что классы являются частными частями, не включенными в представление Diagram, или это будет похоже на 3 набора с пересечениями для упрощения диаграммы.
Так что мой вопрос прост: какой из них правильный / ближайший к правильному представлению.
В каком-то смысле они оба.
Первая диаграмма точно описала отношения наследования между классами. Эта диаграмма гласит: «В наборе всех сотрудников некоторые сотрудники работают по часам, а некоторые получают зарплату. Между ними нет дублирования». Employee
это более общий набор, поэтому он содержит два более конкретных.
Вторая диаграмма гласит: «Есть работники, которые являются почасовыми и оплачиваемыми. Некоторые из них являются работниками». Это, очевидно, не имеет большого смысла в контексте наследования.
Однако вторая диаграмма является более или менее точным представлением того, какие данные распределяются между этими классами. Члены Hourly Employee
а также Salaried Employee
объекты будут иметь некоторое наложение, и это наложение — то, что содержится в Employee
объекты. Например, у вас могут быть некоторые определения классов, подобные этому:
class Employee {
int employee_id;
}
class SalariedEmployee extends Employee {
int salary;
}
class HourlyEmployee extends Employee {
int wage;
}
SalariedEmployee
а также HourlyEmployee
оба наследуют employee_id
член из их суперкласса. Если бы вы нарисовали определения классов в виде диаграммы Венна, то вторая нарисованная вами диаграмма — примерно то, что вы придумали, но в правильном дизайне Employee
класс будет весь перекресток.
Возможно, вам будет полезно подумать об отношениях наследования таким образом, особенно когда вы изучаете ОО, но в большинстве случаев вы обнаружите, что вторая диаграмма обычно подразумевается, а не указывается.
Диаграмма Венна ставит кружочки вокруг элементов множеств. Здесь каждый элемент является сотрудником. Представьте себе точки, разбросанные по странице, которые заключены или не заключены в круги. Каждая точка является сотрудником. Все точки попадут в круг сотрудников. Диаграмма вашего учителя показывает, что почасовые и наемные работники являются работниками, и что ни один работник не получает зарплату ни по часам, ни по зарплате.
Можно также использовать ту же настройку для организации абстрактных значений C ++, представляющих / соответствующих сотрудникам.
Вы должны согласовать определения этих терминов / кругов, прежде чем сможете их нарисовать. Например, в каком-то бизнесе, возможно, некоторым сотрудникам платят в обе стороны; тогда маленькие вихри пересекаются. Может быть, нет сотрудников за пределами маленьких кругов; возможно есть.
Трудно понять, что вы пытаетесь сказать о сотрудниках или что, по вашему мнению, пытается сказать ваш учитель, если вы не объясните, когда точка должна упасть в круг.
(Вы можете думать об элементах круга как о структурных значениях, причем круги включают в себя те, которые имеют определенное количество открытых членов и / или полей или меньше. Или что элементы круга являются открытыми членами структуры и / или полями классов, соответствующих различным видам из сотрудников.
Но тогда ваш круг сотрудников должен перекрывать оба типа круга сотрудников.)
Первая диаграмма верна. Как наемные, так и почасовые сотрудники наследуют от Employee. Они оба удовлетворяют отношения «работающий».
Что касается заявления, вы упомянули, что предположение в вашем случае выглядит следующим образом:
Наемные работники — наследуют —> Почасовые работники — наследуют —> Сотрудник
Если это так, то я думаю, что обе диаграммы не верны.
Это должно быть следующим:
Самый большой круг: сотрудник; В пределах этого: ежечасно; в пределах этого (наименьшего): сотрудник