Я не могу придумать лучшего места среди SO братьев и сестер, чтобы поставить такой вопрос. Изначально я хотел спросить "Является ли python чистым языком OO?" но, учитывая проблемы и некоторый дискомфорт, которые испытывают люди, пытаясь определить термин, я решил начать с получения четкого определения самого термина.
Было бы довольно справедливо начать с переписки доктора Алана Кея, который придумал этот термин (обратите внимание на вдохновение в биологической аналогии с клетками или другими живыми объектами).
Есть следующие способы решения этой задачи:
- Проведите сравнительный анализ, перечислив языки программирования, которые могут демонстрировать (или не демонстрировать) определенные свойства, уникальные и достаточные для определения термина (хотя Smalltalk, Scala,
Javaи т. Д. - являются возможными примерами, но IMO этот способ кажется не совсем полным. ни плодотворный ) - Дайте формальное определение (или близкое к нему, например, в более академическом или математическом стиле).
- Дайте философское определение, которое бы полностью опиралось на семантический контекст конкретного языка или априорный опыт программирования (у сообщества должен быть некоторый шанс на успешное объяснение).
Моя текущая версия: «Если определенный язык программирования ( формальный ), который может ( грамматически ) различать операции и операнды, а также делать вывод о типе каждого операнда, является ли этот тип объектом (в смысле ООП) или нет, тогда мы вызываем такой язык - ОО-язык, если в этом языке есть хотя бы один тип, который является объектом. Наконец, если все типы языка также являются объектами, мы определяем такой язык как чистый (сильный) ОО-язык ».
Был бы признателен за любое возможное улучшение этого. Как видите, я только что сделал определение зависимым от термина «объект» (часто полностью упоминается как класс объектов).
[РЕДАКТИРОВАТЬ]
Кроме того, я использую (к счастью хорошо понятое) понятие типа, как в типизированных языках. Программирование типов данных или программирование на основе типов - это не только синтаксическая интерпретация (текста программы, т. Е. Как обрабатывать определенные значения литералов и переменных данных - то, что эволюционирует в безопасность типов), но ее можно отнести к грамматике языка и изучать формально. (используя математическую логику) как так называемые системы типов . Обратите внимание, что требование, чтобы конкретная система типов имела так называемый универсальный тип, является одним из способов определения чистоты языка ОО (есть способы расширить это семантически).
NB
как ответить :
- это помогает, если вы указываете книгу или справочник, которые поддерживают / объясняют ваше понимание терминологии и понятий (обычно хорошее определение охватывает или ссылается на все зависимые понятия, кроме элементарных).
- если возможно, укажите категорию вашего ответа / определения с отступом, если неясно иначе (см. выше: 1 - на примере языка, 2 - математическая логика, 3 - техническое описание и философия программирования)
- классификация важна (а также потому, что термин «чистый ОО» включен в термин «ОО») при ответе попытаться размешать элементы парадигмы ОО из других хорошо известных методологий (и ни в коем случае не путать / не перекрывать их, например, как правило, элементы модульного программирования могут быть охвачены / воплощено в ОО-программировании): попытаться отличить ООП от (включая или являться частью) функционального программирования, логического программирования (особенно сильно специализированного), типов данных Abstarct (ADT), модульного, метапрограммирования (обобщений и времени макро-расширения LISP), Контракты (например, Eiffel), Аспектно-ориентированные (AO), (разница между декларативной и функциональной классификацией, а также историческими определениями структурированной Дейкстры ясна)
при затруднении дать формальное определение : как ни удивительно, очень легко дать математическое описание ООП в форме определенной логической (формальной) системы (наиболее вероятной основанной на типах) и определяющей одно понятие за другим. Можно даже попробовать сделать чтото более практичное, применяя этот формализм для проверки безопасности типа или новых аспектов дизайна языка , чем просто абстрактное развлечения или упражнение (также поиск состав ЛСГА в интуиционистской теории типов , зависимые типы , независимо другдруга, в FOL формализме как лямбдаисчисление и просто с помощью теории категорий). Главное здесь то, что неудивительнотакие формулировки ИМО сильно предвзяты (ошибочны), скорее всего, изначально изначально не полностью понимают ООП (в компьютерной инженерии), и в конечном итоге оказываются почти недоступными (таким образом, едва ли способствуют обратному развитию мира программирования - возможно, за исключением того, что определенный процент находит приложения назад из формального мира, будучи интегрированы в популярные языки ).
Так что да, трудно дать именно «хорошее» определение, а не просто определение. Но я положительно спрашиваю об этом здесь из-за вашего опыта и прямого участия, ребята.