2011-12-29 28 views
5

Disculpe si esta es una pregunta tonta, pero quiero comprender todas las ventajas de la jerarquía de clase (objeto) con raíz única en un lenguaje como .Net, Java.Ventaja de la jerarquía de clases con raíz única

Puedo pensar en una ventaja, digamos que tengo una función que quiero aceptar todo tipo de tipos de datos (de referencia). Entonces, en ese caso, en lugar de escribir la función para cada tipo de datos, puedo escribir mi función como.

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

¿Qué otras ventajas obtenemos de este tipo de jerarquía?

+0

"cordura" valdría la pena considerar seriamente; la herencia múltiple a menudo se entiende mal y se usa de manera inapropiada ... Tal vez sea una razón suficiente (usando interfaces para cualquier otra cosa) –

+1

esta pregunta es agradable ... me pregunto y no me gusta ... – Anirudha

Respuesta

6

Voy a citar algunas líneas de un buen libro - Thinking in Java por Bruce Eckel:


Todos los objetos en una jerarquía por separado arraigada tener una interfaz en común, por lo que son en última instancia, todos del mismo tipo . La alternativa (proporcionada por C++) es que usted no sabe que todo es el mismo tipo fundamental . Desde un punto de vista de compatibilidad con versiones anteriores, esto se ajusta mejor al modelo de C y puede considerarse menos restrictivo, pero cuando desea realizar una programación completa orientada a objetos, debe construir su propia jerarquía para proporcionar la misma comodidad eso está integrado en otros lenguajes OOP .Y en cualquier nueva biblioteca de clases que adquiera, se usará alguna otra interfaz incompatible . Requiere esfuerzo (y posiblemente herencia múltiple) para trabajar con la nueva interfaz en su diseño. ¿Vale la pena la "flexibilidad" extra de C++ en ? Si lo necesita, si tiene una gran inversión de en C, es bastante valioso. Si está comenzando desde cero , otras alternativas como Java a menudo pueden ser más productivas.


Todos los objetos en una jerarquía individualmente arraigada (por ejemplo, proporciona Java) puede ser garantizado para tener cierta funcionalidad. Usted sabe que puede realizar ciertas operaciones básicas en cada objeto en su sistema. Una sola jerarquía enraizada , junto con la creación de todos los objetos en el montón, en gran medida simplifica el paso de argumentos.


Una jerarquía solos arraigada hace que sea mucho más fácil de implementar un recolector de basura (que está convenientemente integrada en Java). El soporte necesario se puede instalar en la clase base, y el recolector de elementos no utilizados puede enviar los mensajes apropiados a cada objeto en el sistema. Sin una jerarquía con un único enraizamiento y un sistema para manipular un objeto a través de una referencia, es difícil implementar un recolector de basura.


Dado que la información de tipo en tiempo de ejecución se garantiza que sea en todos los objetos, que nunca va a terminar con un objeto cuyo tipo no se puede determinar. Esto es especialmente importante con operaciones de nivel de sistema, como el manejo de excepciones , y para permitir una mayor flexibilidad en la programación.


2

Una jerarquía de raíz única no se trata de pasar sus objetos a los métodos sino más bien de una interfaz común que implementan todos sus objetos.

Por ejemplo, en C# el System.Object implementa pocos miembros que se heredan en la jerarquía.

Por ejemplo, esto incluye el ToString() que se utiliza para obtener una representación literal de su objeto. Se le garantiza que para cada objeto, el ToString() tendrá éxito. En el nivel de idioma, puede usar esta función para obtener cadenas de expresiones como (4-11).ToString().

Otro ejemplo es el GetType() que devuelve el objeto del tipo System.Type que representa el tipo de objeto invocado en el método. Como este miembro se define en la parte superior de la jerarquía, el reflejo es más fácil, más uniforme que, por ejemplo, en C++.

+0

Aquí con una jerarquía con raíces únicas I significa que cada clase es heredada por clase de objeto, no me refiero a herencia múltiple. De su respuesta, ¿significa eso que la única ventaja de la clase de objetos es que todas las clases obtienen esos cuatro métodos predeterminados? –

0

La jerarquía de raíz única permite al desarrollador de la plataforma tener un conocimiento mínimo sobre todos los objetos que simplifica el desarrollo de otras bibliotecas que se pueden usar en todos los demás objetos.

Piense Colecciones sin GetHasCode, reflexión y sin GetType etc.

0

Proporciona una base para todo. Por ejemplo, en C#, la clase Object es la raíz que tiene métodos como ToString() y GetType() que son muy útiles si no estás seguro de con qué objetos específicos tratarás.

Además, no estoy seguro de si sería una buena idea pero podría crear métodos de extensión en la clase Object y luego cada instancia de cada clase podría usar el método.

Por ejemplo, puede crear un Método de extensión llamado WriteToLogFile (este Objeto o) y luego hacer que use la reflexión sobre el objeto para escribir los detalles de sus miembros de instancia en su registro. Hay, por supuesto, mejores formas de registrar cosas, pero es solo un ejemplo.

+0

Gracias por su respuesta. Aquí, con una jerarquía con un único enraizamiento, quiero decir que cada clase se hereda por clase de objeto, no me refiero a herencia múltiple. De su respuesta, ¿significa eso que la única ventaja de la clase de objetos es que todas las clases obtienen esos cuatro métodos predeterminados? –

+0

Eso es exactamente lo que significa, sí. – PeteGO

Cuestiones relacionadas