2010-06-25 8 views
7

estoy leyendo acerca de constructores,Uso de Constructores - Par Duda

Cuando un objeto se crea una instancia de una clase, c'tors (si está escrito de forma explícita o uno por defecto) son los puntos de partida para su ejecución. Mis dudas son

  • es una c'tor más como el main() en C
  • Sí entiendo el punto de que pueden establecer todos los valores predeterminados mediante c'tor. También puedo emular el comportamiento escribiendo un método personalizado. Entonces, ¿por qué un c'tor?

Ejemplo: el aprendizaje

//The code below is written in C#. 
public class Manipulate 
    { 
     public static int Main(string[] args) { 
      Provide provide = new Provide(); 
      provide.Number(8); 
      provide.Square(); 
      Console.ReadKey(); 
      return 0; 
     } 
    } 

public class Provide { 
     uint num; 
     public void Number(uint number) 
     { 
      num = number; 
     } 
     public void Square() 
     { 
      num *= num; 
      Console.WriteLine("{0}", num); 
     } 
    } 

Am programar de forma independiente, por lo que estoy dependiendo de las comunidades de programación, puede también me sugieren los recursos de una buena programación orientada a objetos para obtener una mejor comprensión. Si estoy fuera del tema, discúlpeme.

+1

Es solo un atajo, por lo que no necesita escribir innecesariamente 5 líneas adicionales de código que no son más que setters. –

Respuesta

3

Head First OOA & D será un buen comienzo.

No se siente que llamar a una función para configurar cada una de las variables miembro de su clase es un poco sobrecarga.

Con un constructor puede inicializar todas sus variables miembro de una vez. No es esta razón suficiente para que tengas constructores.

+0

Mi punto es qué otro uso tienes aparte de la inicialización de las variables miembro. ¿O es más como que, en lugar de tener una declaración de método separada para inicializar, lo haces usando el constructor? – Chaitanya

+0

Bueno, esto es de lo que se trata OOP. – ckv

1

En general, debe hacer toda su inicialización en el constructor. El constructor es lo primero que se llama cuando se crea una instancia de su clase, por lo que debe configurar los valores predeterminados aquí.

2

La funcionalidad de constructor y destructor se puede emular utilizando métodos regulares. Sin embargo, lo que hace que esos dos tipos de métodos sean únicos es que el lenguaje los trata de una manera especial.

Se llaman automáticamente cuando se crea o se destruye un objeto. Esto presenta un medio uniforme para manejar las operaciones más delicadas que deben tener lugar durante esos dos períodos críticos de la vida de un objeto. Elimina la posibilidad de que un usuario final de una clase se olvide de llamar a esos en los momentos apropiados.

Además, las funciones avanzadas de OO, como la herencia, requieren que la uniformidad incluso funcione.

2

En primer lugar, la mayoría de las respuestas dependerán al menos un poco del idioma que está utilizando. Las razones que tienen mucho sentido en un idioma no necesariamente tienen análogos directos en otros idiomas. Solo por ejemplo, en C++ hay bastantes situaciones donde los objetos temporales se crean automáticamente. El ctor se invoca como parte de ese proceso, pero para la mayoría de los propósitos prácticos es imposible invocar explícitamente otras funciones miembro en el proceso. Sin embargo, eso no se aplica necesariamente a otros lenguajes OO: algunos no crearán objetos temporales implícitamente.

1

Creo que una buena forma de aprender es comparar OOP entre idiomas, es como ver la misma imagen desde diferentes ángulos.

googlear un rato:

Por qué los constructores? La principal diferencia entre una función simple (que también podría tener funciones dentro) y un Objeto, es la forma en que un Objeto puede ser alojado dentro de una "variable", con todas sus funciones dentro, y que también puede reaccionar completamente diferente a un otra "variable" con el mismo tipo de "objeto" dentro. La forma de hacer que tengan la misma estructura con diferentes comportamientos depende de los argumentos que le hayas dado a la clase. Así que aquí hay un ejemplo perezoso:

car() ahora es una clase.

c1 = coche()

c2 = coche()

¿c1 c2 es exactamente? Sí.

c1 = coche (Volkswagen)

c2 = coche (lamborghini)

C1 tiene las mismas funcionalidades que C2, pero son completamente diferentes clases de coche() Variables Volkswagen y lamborghini se pasan directamente al constructor ¿Por qué un -constructor-? ¿por qué no otra función? La respuesta es: orden.

Esa es mi mejor oportunidad, amigo, para esta hora tan avanzada. Espero haber ayudado de alguna manera.

1

No puede emular el constructor en un método personalizado ya que no se llama al método personalizado cuando se crea el objeto. Solo se llama al constructor. Bueno, por supuesto, puede llamar a su método personalizado después de crear el objeto, pero esto no es convencional y otras personas que usen su objeto no sabrán hacerlo.

Un constructor es solo una convención que se acuerda como una forma de configurar su objeto una vez que se ha creado.

0

Una de las razones por las que necesitamos constructor es 'encapsulación', el código de inicialización debe hacer algo invisible

0

Tampoco se puede forzar el paso de variables sin utilizar un constructor. Si solo quiere crear una instancia de un objeto si tiene que decir un int para pasarlo, puede establecer el constructor predeterminado como privado y hacer que su constructor tome un int. De esta forma, es imposible crear un objeto de esa clase sin tener que tomar un int.

0

Los sub-objetos se inicializarán en el constructor. En lenguajes como C++, donde existen subobjetos dentro del objeto contenedor (en lugar de como objetos separados conectados a través de punteros o controladores), el constructor es su única oportunidad de pasar parámetros a constructores de subobjetos. Incluso en Java y C#, cualquier clase base está contenida directamente, por lo que el constructor debe proporcionar los parámetros a su constructor.

Por último, cualquier variable de miembro constante (o en C#, readonly) solo se puede establecer desde el constructor. Incluso las funciones auxiliares llamadas desde el constructor no pueden cambiarlas.