Лучший дизайн для классов, которые рисуют объекты, но не наследуют от JPanel

Я делаю упражнение 10.1, стр. 476 из книги Java: как программировать, ранние объекты от Paul and Harvey Deitel (10-е издание).

  

Измените классы графического интерфейса MyLine, MyOval и MyRectangle для создания иерархии классов, как показано на рисунке ниже. Классы иерархии MyShape должны быть «умными» классами формы, которые умеют рисовать себя (если они снабжены графическим объектом, который сообщает им, где рисовать). Как только программа создаст объект из этой иерархии, он может обрабатывать его полиморфно для остальной части его жизни как MyShape.

     

 введите описание изображения здесь>> </a> </p>
</blockquote>

<p> Оригинальный <code>---- +: = 0 =: + ----</code>, <code>---- +: = 1 =: + ----</code> и <code>---- +: = 2 =: + ----</code>, который мы должны изменить, все наследуются от <code>---- +: = 3 =: + - -</code> и, следовательно, легко нарисовать себя с помощью <code>---- +: = 4 =: + ----</code>. </p>

<p> Однако в упражнении <code>---- +: = 5 =: + ----</code>, <code>---- +: = 6 =: + ----</code> и <code>---- +: = 7 =: + ----</code> должны наследовать от класса, отличного от <code>---- +: = 8 =: + ----</code> (либо <code>---- +: = 9 =: + ----</code> или <code>---- +: = 10 =: + ---- </code >). </p>

<p> Я думаю, как подойти к этому. Одним из решений будет создание другого класса, например <code>---- +: = 11 =: + ----</code>, который наследует от <code>---- +: = 12 =: + - ---</code>. Тогда конструктор в <code>---- +: = 13 =: + ----</code> получит код <code>---- +: = 14 =: + ---- </code > object (<code>---- +: = 15 =: + ----</code>, <code>---- +: = 16 =: + ----</code> или < код> ---- +: = 17 =: + ----</code>), и нарисуйте его с помощью <code>---- +: = 18 =: + ----</code>. В этом случае <code>---- +: = 19 =: + ----</code> также должен знать, какой именно объект <code>---- +: = 20 =: + - ---</code>, поэтому мне пришлось бы выполнить несколько проверок с помощью <code>---- +: = 21 =: + ----</code> или передать параметр <code>- - +: = 22 =: + ----</code>, указывая точно, какая форма меня интересует, поэтому <code>---- +: = 23 =: + ----</code> знает что рисовать. </p>

<p> Я действительно не уверен, что лучше всего в этом случае. </p></body></html>

3 голоса | спросил Yos 13 12017vEurope/Moscow11bEurope/MoscowMon, 13 Nov 2017 17:45:44 +0300 2017, 17:45:44

1 ответ


3

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

  

MyPanel также должен был бы знать, какой объект является MyShape

Ну нет. MyPanel должен знать только, что он содержит несколько MyShape, на который он может вызвать paintComponent(). Вызываемый объект знает, что делать, чтобы вызывающий объект не нуждался.

Вот что круто о полиморфизме. Точно, что делать, это проблема другого.

Представьте, что тренер по животным ставит шоу. Когда каждое животное выходит, она должна отвернуться от аудитории, чтобы посмотреть, что вышло. Она рассказывает собаке «кору», и она лает. Она рассказывает утку «шарлатан», и она блуждает. Она рассказывает кошке «мяуканье», и она игнорирует ее, потому что это кошка.

Если бы она научила их полиморфизму, ей не пришлось бы поворачиваться. Утка выйдет, она скажет «поговорить», и это будет странно. Собака выйдет, она скажет «говорить», и она лает. Кошка выйдет, она скажет «говорить», и кошка лижет ее.

Сделано так, что тренеру даже не нужно знать, с каким животным она разговаривает.

ответил candied_orange 13 12017vEurope/Moscow11bEurope/MoscowMon, 13 Nov 2017 20:26:03 +0300 2017, 20:26:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132