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

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

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

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

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

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

спасибо.

3 ответов


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

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

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

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


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


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

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

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