Насколько важен полиморфизм для написания текстового редактора?

Много лет назад, когда я мало знал об объектно-ориентированном дизайне, я слышал, как один парень сказал что-то вроде: «Как вы можете написать текстовый редактор без полиморфизма?» Я мало что знал об ООП, и поэтому я не мог судить, насколько это было разумно, или задавать какие-то конкретные вопросы в то время.

Теперь, после многих лет разработки программного обеспечения (в основном C ++), я « Мы много раз использовали полиморфизм для решения различных задач при разработке программного обеспечения. Все же я никогда не создавал текстовые редакторы. Поэтому я все еще не могу оценить идею этого парня.

Является ли использование полиморфизма настолько важным для реализации текстового редактора в объектно-ориентированных языках и почему?

11
задан sharptooth 24 August 2010 в 09:14
поделиться

8 ответов

Другие аспекты полиморфизма просто инструмент на месте.

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

По сути, это просто дерево объектов, которые представляют структуру вашего документа, включая такие детали, как форматирование (жирный, курсив и т. д.), цвет и т. д.

(Большинство веб-браузеров реализуют что-то подобное в форме объектной модели документа (DOM) браузера, хотя, конечно, не требуется, чтобы они использовали полиморфизм.)

Каждый из этих объектов наследуется от общего базового класса (часто abstract), который определяет такой метод, как Compose().

Затем, когда приходит время отобразить или обновить структуру документа, код просто проходит по дереву, вызывая конкретный Compose() для каждого объекта. Затем каждый объект отвечает за композицию и рендеринг самого себя в соответствующем месте документа.

Это классическое использование полиморфизма, поскольку оно позволяет добавлять (или изменять) новые «компоненты» документа без каких-либо (или минимальных) изменений в основном коде приложения.

Еще раз повторим, что существует множество способов создания программы для работы с текстом, полиморфизм определенно не требуется для ее создания.

2
ответ дан 3 December 2019 в 01:51
поделиться

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

Полиморфизм - отличный метод решения проблем, которые он решает, но это ни в коем случае не золотой молоток для всего, что беспокоит разработчика программного обеспечения.

9
ответ дан 3 December 2019 в 01:51
поделиться

Этот термин часто использовался, когда объектно-ориентированное программирование было в моде. Этот парень, вероятно, пытался запугать вас громкими словами, я сомневаюсь, что он полностью понимал то, что он говорил, хотя это простая концепция, когда ее объясняют.

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

5
ответ дан 3 December 2019 в 01:51
поделиться

В то время как простой текстовый редактор (ниже edit.com из MS-DOS) может быть проще реализовать в статическом только класса (потому что функциональность очень ограничена), как только вы попадете в меню и диалоги, вы окажетесь в острой потребности в функциях объектно-ориентированного языка.

Лично я все равно не одобряю процедурный код - я предпочитаю смесь ООП (структура программы, разделение функций и т. Д.) И функционального программирования (реализация).

Это может звучать как какой-то религиозный аргумент, но я считаю мой личный стиль весьма рекомендуемым. Обычно мне нужно гораздо меньше строк кода (который намного легче понять), чем большинству разработчиков, с которыми я работаю, и мой код кажется гораздо более «гибким» и «гибким».

Попробуйте. : -)

Да, и полиморфность понять несложно. Просто представьте, что с вами (как с человеком) можно обращаться как с:

а) мужчиной или женщиной. б) европейские, азиатские, американские, африканские, океанические (надеюсь, это правильно) и т. д. в) По вашему имени г) По роду занятий

Но все же вы человек - и живое существо, и часть вселенной ... и ВЫ.

Так что для того, кто задает вам несколько вопросов по статистическим причинам, вас могут рассматривать как, скажем, женщину из Океании (я не знаю, откуда вы, но давайте просто предположим), которой, хм, 42 лет и прожил в Швейцарии 23 года (хахаха).

Что касается вашего работодателя, вы можете уметь программировать и разговаривать с коллегами.

Однако КАК вы выполняете эти роли, зависит от вашей реализации. Это ты.

2
ответ дан 3 December 2019 в 01:51
поделиться

Однажды я написал текстовый редактор на Basic. Это ни в коем случае не был сложным текстовым редактором, его большой изюминкой было то, что он работал в текстовом режиме с окном, используемым для некоторых меню и диалогов, но в то время он все еще выполнял свою работу - т.е. он доказал, что я могу написать текстовый редактор на Basic. Я даже иногда им пользовался. Я не буду показывать источник публично - это слишком неловко!

Когда ваш текстовый редактор в основном просто вставляет/удаляет символы в большом массиве строк и отображает их, абстракции практически не требуются, кроме стандартных абстракций массивов и строк.

С другой стороны, объем текста, с которым должен работать текстовый редактор на ПК, значительно увеличился за последние 20 лет, иногда до такой степени, что даже современный ПК с несколькими гигабайтами может не справиться. чтобы сохранить весь файл в ОЗУ. Кроме того, есть проблемы с набором символов и кодировкой. Ожидается, что хороший текстовый редактор будет запоминать (потенциально большое) количество закладок в нескольких файлах и поддерживать их так, чтобы они ссылались на одну и ту же точку, несмотря на правки. А еще есть подсветка синтаксиса, возможность записи/воспроизведения макросов и многое другое.

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

2
ответ дан 3 December 2019 в 01:51
поделиться

Является ли использование полиморфизма столь важным для реализации текстового редактора на объектно-ориентированных языках и почему?

Зависит от того, о каком текстовом редакторе вы говорите.

Вы можете написать блокнот без ООП. Но вам, скорее всего, понадобится ООП для чего-то вроде MS Word или OpenOffice.

Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения использует текстовый редактор для примеров (т. е. «кейса») приложения Design Pattern. Вы можете проверить книгу.

1
ответ дан 3 December 2019 в 01:51
поделиться

Полиморфизм для написания текстового редактора вовсе не обязателен. На самом деле полиморфизм для решения любой задачи программирования не обязателен. Это всего лишь один из способов сделать это. Иногда это облегчает решение определенных проблем, а иногда просто мешает.

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

12
ответ дан 3 December 2019 в 01:51
поделиться

Многие шаблоны проектирования, такие как Memento, Flyweight и т. д., которые могут использоваться для разработки/реализации текстового редактора, требуют наследования и полиморфизма.

3
ответ дан 3 December 2019 в 01:51
поделиться
Другие вопросы по тегам:

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