Преимущество однокорневой иерархии классов - PullRequest
4 голосов
/ 29 декабря 2011

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

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

public void MyFun(object obj)
{
// Some code
}

Какие еще преимущества мы получаем от такого типа иерархии?

Ответы [ 4 ]

6 голосов
/ 20 февраля 2012

Я процитирую несколько строк из хорошей книги - Мышление на Java от Брюс Экель :


Все объекты в одиночкукорневая иерархия имеет общий интерфейс, поэтому в конечном итоге все они одного типа.Альтернатива (предоставляемая C ++) заключается в том, что вы не знаете, что все имеют один и тот же фундаментальный тип.С точки зрения обратной совместимости это лучше подходит для модели C и может рассматриваться как менее ограничивающее, но когда вы хотите выполнять полное объектно-ориентированное программирование, вы должны затем построить свою собственную иерархию, чтобы обеспечить то же удобство, которое встроено вдругие языки ООП.И в любой новой библиотеке классов вы будете использовать другой несовместимый интерфейс.Требуется усилие (и, возможно, множественное наследование), чтобы добавить новый интерфейс в ваш дизайн.Стоит ли дополнительная «гибкость» C ++?Если вам это нужно - если у вас большие инвестиции в C - это очень ценно.Если вы начинаете с нуля, другие альтернативы, такие как Java, часто могут быть более продуктивными.


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


Одноуровневая иерархия значительно упрощает реализацию сборщика мусора (который являетсяудобно встроен в Java).Необходимая поддержка может быть установлена ​​в базовом классе, и сборщик мусора может отправлять соответствующие сообщения каждому объекту в системе.Без одноуровневой иерархии и системы управления объектом с помощью ссылки трудно реализовать сборщик мусора.


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


2 голосов
/ 29 декабря 2011

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

Например, в C # System.Object реализует несколько членов, которые наследуются виерархия.

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

Другим примером является GetType(), который возвращает объект типа System.Type, представляющий тип объекта, к которому относится методвызывается на.Поскольку этот элемент определен в верхней части иерархии, отражение проще, более равномерно, чем, например, в C ++.

0 голосов
/ 29 декабря 2011

Это база для всего.Например, в C # класс Object это корень, в котором есть такие методы, как ToString () и GetType (), которые очень полезны, если вы не уверены, с какими конкретными объектами вы будете иметь дело.

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

Например, вы можете создать метод расширения с именем WriteToLogFile.(этот объект o) и затем заставьте его использовать отражение на объекте, чтобы записать детали его экземпляров в ваш журнал.Конечно, есть и лучшие способы записи, но это всего лишь пример.

0 голосов
/ 29 декабря 2011

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

Подумайте о коллекциях без GetHasCode, Reflection без GetType и т. Д.

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