Является ли Ruby чистым объектно-ориентированным языком программирования, даже если он не поддерживает множественное наследование? Пожалуйста, объясни

Является ли Ruby чистым объектно-ориентированным языком программирования, даже если он не поддерживает множественное наследование? Если да, то как? Пожалуйста, объясните.

Я знаю, что это до некоторой степени заменяет отсутствие множественного наследования, позволяя включать несколько модулей в класс.

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

класс Ruby может иметь только один метод с заданным именем (если вы определяете метод с тем же именем дважды, последнее определение метода имеет преимущественную силу.

Значит ли это, что Ruby не поддерживает методы перегрузки. Если да, то его все еще можно квалифицировать как чистый язык ООП? Если да, то также любезно объясните причину этого.

Спасибо.


person boddhisattva    schedule 16.07.2013    source источник
comment
Пожалуйста, дайте ссылку на определение чистого ООП, которое требует, чтобы язык поддерживал множественное наследование.   -  person Daniel Hilgarth    schedule 16.07.2013
comment
Перегрузка практически не имеет ничего общего с ООП.   -  person nicooga    schedule 16.07.2013
comment
@DanielHilgarth Возможно, я не знал всех предпосылок чистого ООП (поэтому я даже упомянул об этом в своем вопросе). Я думал, что множественное наследование было одним из них. Я просто вижу, что это не так.   -  person boddhisattva    schedule 16.07.2013


Ответы (3)


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

Ruby заботится не о типах объектов, а о методах, на которые они способны реагировать. Это называется утиным вводом, и это то, что разделяет Smalltalk - вдохновленные языки, такие как Ruby, из более формального Simula или ALGOL повлияли на такие языки, как C ++.

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

Перегрузка методов в Ruby в основном неактуальна из-за утиной типизации. В C ++ у вас могут быть различные методы для обработки типов string, int или float, но в Ruby у вас будет метод, который вызывает to_f для всего, что входит, и соответственно манипулирует им. В этом смысле методы Ruby больше похожи на шаблоны C ++.

person tadman    schedule 16.07.2013
comment
Вы совершенно правы, исходя из опыта работы с C ++. +1 за ваше определение утиного набора текста и его отношение к Ruby. Я просто хотел упомянуть одну вещь, то, что я ищу в контексте моего вышеупомянутого вопроса, что это за вещи (по крайней мере, одна из них), которые могут заставить вас с уверенностью сказать: да, Ruby - это чисто объектно-ориентированный язык программирования. Надеюсь, это не слишком большой вопрос. - person boddhisattva; 17.07.2013
comment
Определение объектно-ориентированного довольно расплывчатое, но оно вращается вокруг идеи объектов, имеющих методы и свойства. Компонент наследования является второстепенным и при необходимости может быть эмулирован. Все, даже числа в Ruby, являются объектами, поэтому они настолько чисты, насколько это возможно, но вы все равно можете использовать их в процедурном или функциональном стиле. - person tadman; 17.07.2013

Если бы множественное наследование было единственным «признаком» языка ООП, то ни Java, C #, ни Python, ни многие другие не были бы языками ООП.

Объектно-ориентированным язык делает в первую очередь естественные объекты. Все объекты в рубине. Весь язык построен на концепции объектов и данных. Различные объекты могут «общаться» между собой, вы можете инкапсулировать данные и т. Д.

Взгляните на этот ресурс: Определения для ObjectOriented.

person sk4l    schedule 16.07.2013
comment
+1 за ссылку, даже если это ящик Пандоры на этот вопрос. - person Neil Slater; 16.07.2013
comment
Итак, могу ли я сказать, что одна из причин, по которой Ruby квалифицируется как чистый объектно-ориентированный язык программирования, заключается в том, что все в ruby ​​является объектом, чем-то, что может иметь отношение к реальному миру? - person boddhisattva; 17.07.2013
comment
@ sk4l +1 за то, что был первым, кто восстановил эту одну из причин, почему Ruby является чистым языком ООП, состоит в том, что все в Ruby является объектами, и да, особая благодарность и за ссылку, она открывает мир возможностей как к тому, как разные люди воспринимают термин "объектно-ориентированный". - person boddhisattva; 18.07.2013

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

person sawa    schedule 16.07.2013
comment
Я не сомневаюсь, что Ruby - объектно-ориентированный язык. Я просто пытаюсь лучше понять, что делает Ruby чисто объектно-ориентированным, учитывая, что он не поддерживает множественное наследование и перегрузку методов. Спасибо за Ваш ответ. - person boddhisattva; 17.07.2013