Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

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

Ответ 7

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

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

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

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

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

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

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

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

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

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

Ответ 8

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

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

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

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