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

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

теперь, после многих лет разработки программного обеспечения (в основном c++), я много раз использовал полиморфизм для решения различных проблем при разработке программного обеспечения. Но я никогда не создавал текстовые редакторы. Так Что Я ... все еще не могу оценить идею этого парня.

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

8 ответов


другие моменты о полиморфизме, как просто инструмент, находятся на месте.

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

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

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

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

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

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

еще раз, хотя, есть много способов построить программу манипуляции текстом, полиморфизм определенно не требуются построить один.


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

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


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

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


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

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


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


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

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

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

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


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

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

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

попробовать его. :-)

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

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

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

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

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

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


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

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

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

шаблоны проектирования: элементы объектно-ориентированного проектирования использует текстовый редактор для примеров (например, "case study") дизайна Применение шаблона. Возможно, вы захотите проверить книгу.