2016-09-26 1 views
0

У нас есть курс UML. Учитель сказал:В UML мы должны объявлять классы абстрактными, если они служат базовым классом?

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

На следующем рисунке предположим, что мы хотим получить class german shepherd и class labrador из class chien (Dog woof woof). Обязательно ли для class chien стать аннотация класс или нет?

enter image description here

+1

Если ваш базовый класс не задает четко определенного поведения, вместо абстрактного класса может использоваться интерфейс. Я полагаю, что предложение, упомянутое вашим учителем, является слишком строгим. – acornagl

ответ

5

Не обязательно.

Это утверждение не обязательно верно. Более правильным утверждением будет:

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

В вашем примере, это имеет смысл, что Dog и Animal бы абстрактно, потому что у вас есть более конкретные классы, которые, вероятно, заполнить детали, что базовые классы не делают.

Однако, безусловно, возможно иметь класс, который является конкретным и может быть создан, (и, следовательно, не абстрактный), но все же служит базой для другого класса.

+0

Спасибо, @Jonathon Reinhart за ваш четкий ответ. –

+0

Кроме того, создание набора обобщений {complete} еще сильнее. Это означает, что не может быть экземпляра суперкласса без этого экземпляра, также являющегося экземпляром хотя бы одного из подклассов. –

+0

@ JimL., Ваше предложение имеет смысл только в том случае, если в одном суперклассе есть несколько (явно названных) наборов обобщений, что является редким случаем. Создание абстрактного суперкласса столь же сильно, как наличие одного (полного) набора обобщений, содержащего все подклассы (если суперкласс является абстрактным, не может быть экземпляра суперкласса, если этот экземпляр также не является экземпляром хотя бы одного из подклассов). –

1

Он должен быть абстрактным, если это обобщение и не может существовать на его собственном. Посмотрите на эту ситуацию: enter image description here

На изображении выше Отношение абстрактно. Он не может существовать по своему усмотрению. Клиент и Сотрудник - обычные классы, которые расширяют отношения. Но Стажер - Сотрудник. Вы можете создать Работника, а также стажера, который также является Работником.

Смежные вопросы