Насколько важен полиморфизм для написания текстового редактора? - PullRequest
11 голосов
/ 24 августа 2010

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

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

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

Ответы [ 8 ]

12 голосов
/ 24 августа 2010

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

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

9 голосов
/ 24 августа 2010

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

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

5 голосов
/ 24 августа 2010

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

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

3 голосов
/ 24 августа 2010

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

2 голосов
/ 24 августа 2010

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

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

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

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

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

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

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

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

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

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

2 голосов
/ 24 августа 2010

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

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

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

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

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

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

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

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

2 голосов
/ 24 августа 2010

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

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

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

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

1 голос
/ 24 августа 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...