No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Constructor y datos iniciales en una clase

8/19
Recursos

¿Qué es un constructor en programación orientada a objetos?

El término "constructor" es fundamental en la programación orientada a objetos, pues nos permite inicializar valores en un objeto que se crea a partir de una clase. Los constructores son funciones especiales que asignan datos predeterminados al momento de crear un nuevo objeto, minimizando la necesidad de establecer valores tras su creación.

¿Cómo se crea un constructor en C#?

Crear un constructor en C# es sorprendentemente simple. A diferencia de otras funciones, un constructor no devuelve ningún valor ni siquiera se debe indicar un tipo de retorno como void. En C#, simplemente utilizamos el mismo nombre de la clase para denominar al constructor. Así, al definir esta función, podemos inicializar variables y ejecutar rutinas que necesitemos para cada objeto creado.

Código para crear un constructor

En Visual Studio, podemos implementar un constructor en nuestra aplicación de superhéroes desde la clase superhéroe:

public class SuperHeroe {
    public string Nombre { get; set; }
    public List<string> Superpoderes { get; set; }
    public int ID { get; set; }
    public bool PuedeVolar { get; set; }
    
    // Constructor de la clase SuperHeroe
    public SuperHeroe() {
        Superpoderes = new List<string>(); // Inicializa con una lista vacía
        PuedeVolar = false; // Valor por defecto
        ID = 1; // ID por defecto
    }
}

Initialización de otras clases

De igual forma, se puede definir un constructor en la clase superpoder:

public class SuperPoder {
    public int Nivel { get; set; }
    
    // Constructor de la clase SuperPoder
    public SuperPoder() {
        Nivel = 1; // Nivel por defecto
    }
}

Estos pasos inicializan automáticamente las propiedades cuando se crea un nuevo objeto.

¿Existen otras maneras de inicializar valores en C#?

En C#, se pueden asignar valores por defecto directamente a las propiedades de una clase. Esta práctica simplifica la inicialización sin seguir estrictamente el paradigma de programación orientada a objetos. Aquí algunos ejemplos:

public class SuperHeroe {
    public string Nombre { get; set; }
    public List<string> Superpoderes { get; set; } = new List<string>(); // Inicializa lista vacía
    public int ID { get; set; } = 1; // ID por defecto
    public bool PuedeVolar { get; set; } = false; // Valor por defecto
}

¿Cuál es la importancia de los constructores?

El uso de constructores proporciona vital consistencia en la programación orientada a objetos, asegurando que los objetos creados llevan un conjunto de valores inicializados previamente. Mantener esta práctica mejora la legibilidad del código y reduce la probabilidad de errores.

Explorar nuevas formas de utilizar constructores en tus proyectos te permitirá ganar una mayor seguridad y eficacia en tus desarrollos. Continúa aprendiendo y experimentando con diferentes métodos para crear objetos robustos y funcionales. ¡Y recuerda! La programación es una habilidad invaluable, así que sigue adelante y no dejes de enriquecer tus conocimientos.

Aportes 16

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Un constructor es una función que va dentro de una clase y que lleva exactamente el mismo nombre de la clase. Esta función no debe retornar nada.

El constructor se ejecuta automaticamente cuando se instancia la clase.

En este constructor podemos establecer valores por defecto en nuestras propiedades y, por lo tanto, nos ayuda a minimizar el código ya que no tenemos que inicializar los valores de manera manual cada vez que creemos una instancia nueva.

En C#, el nombre del constructor es el mismo que el nombre de la clase.
![](https://static.platzi.com/media/user_upload/Objeto%20Persona-10c0b1de-6119-4523-aedd-c98258046923.jpg)

este video si se escucha bien 😃

Existen constructores con parametros tambien, es decir podemos pasar valores específicos para inicializar las propiedades del objeto cuando se crea. **Ejemplo**: `public SuperHero(int id, string nombre, int edad, string identidadSecreta, string ciudad, string fechaNacimiento, bool puedeVolar) {` ` Id = id;` ` Nombre = nombre;` ` Edad = edad;` ` EstaEnfermo = false; // Valor predeterminado` ` IdentidadSecreta = identidadSecreta;` ` Ciudad = ciudad;` ` FechaNacimiento = fechaNacimiento;` ` SuperPoderes = new List<SuperPoder>(); // Inicializado vacío` ` PuedeVolar = puedeVolar;` `}` Asi es como entonces podemos usar estos constructores con parametros: **Creación de Instancias con Constructores Personalizados**: `// Usando constructor con parámetros para crear una instancia` `SuperHero Spiderman = new SuperHero(1, "SpiderMan", 16, "Peter Parker", "Nueva York", "10/08/2001", false);` `SuperHero Batman = new SuperHero(2, "Batman", 35, "Bruce Wayne", "Gotham City", "19/02/1988", false);`

Instanciar un objeto en C# se refiere al proceso de crear una instancia específica de una clase, es decir, un objeto concreto basado en la estructura y comportamiento definidos por esa clase. La sintaxis para instanciar un objeto implica el uso del operador new, seguido del nombre de la clase y un par de paréntesis. Los paréntesis pueden incluir argumentos para pasar al constructor de la clase, si es que la clase define uno o más constructores que requieren parámetros. Aquí te muestro la estructura básica y algunos ejemplos:

<code> 
TipoDeClase nombreDelObjeto = new TipoDeClase(argumentos);

TipoDeClase: El nombre de la clase de la cual quieres crear un objeto.
nombreDelObjeto: El nombre de la variable que usas para referenciar al objeto.
argumentos: Los valores pasados al constructor de la clase. Estos son opcionales y dependen de cómo esté definido el constructor en la clase.

Ejemplos

Sin Argumentos
Si la clase no define un constructor explícito, o tiene un constructor que no requiere parámetros, puedes instanciar un objeto sin pasar argumentos:

<code> 
public class Persona
{
    public string nombre;
    public int edad;
}

// Instanciar un objeto de la clase Persona
Persona persona1 = new Persona();

Con Argumentos
Si la clase tiene un constructor que acepta parámetros, debes pasar argumentos correspondientes al instanciar un objeto:

<code> 
public class Persona
{
    public string nombre;
    public int edad;

    // Constructor que acepta dos argumentos
    public Persona(string nombreInicial, int edadInicial)
    {
        nombre = nombreInicial;
        edad = edadInicial;
    }
}

// Instanciar un objeto de la clase Persona con argumentos
Persona persona2 = new Persona("Ana", 30);

Detalles Importantes

Constructores: Son métodos especiales que se llaman en el momento de la instanciación del objeto. Sirven para inicializar el objeto, estableciendo valores iniciales para sus campos o realizando cualquier configuración necesaria.
Sobrecarga de Constructores: Una clase puede tener múltiples constructores, cada uno con diferentes listas de parámetros. Esto permite instanciar objetos de la clase en diferentes estados iniciales, según lo requiera el programa.
La instanciación de objetos es fundamental en la programación orientada a objetos, ya que es el mecanismo mediante el cual se crean las instancias que contienen los datos y comportamientos definidos en las clases.

//CLASES Y OBEJTOS PARA SUPER HEROES SuperHeroes Batman = new SuperHeroes(); Batman.id = 1; Batman.Nombre = "Bruce Wayne"; Batman.IdentidadSecreta = "Bruce Wayne"; Batman.Ciudad = "Gotham City"; Batman.PuedeVolar = false; Batman.Esinmoltal = false; Batman.Edad = 34; Batman.Escasado = false; SuperPoder Agilidad = new SuperPoder(); Agilidad.id = 1; Agilidad.Nombre = "Agilidad"; Agilidad.Descripcion = "Poder Moverse Rapido"; Agilidad.Nivel = NivelesUtilidad.Nivel7; List\<SuperPoder> PoderesBatman = new List\<SuperPoder>(); PoderesBatman.Add(Agilidad); class SuperHeroes { public int id; public string Nombre; public string IdentidadSecreta; public string Ciudad; public bool PuedeVolar; public bool Esinmoltal; public int Edad; public bool Escasado; public List\<SuperHeroes> SuperPoderes; //UNA LISTA CON EL TIPO QUE PODEMSO AGREGAR SUPER PODERES //CONTRUTOR PARA INICIAR UNA VALORES EN LA CLASE NO RETORNA NADA public SuperHeroes() { id = 1; SuperPoderes = new List\<SuperHeroes>(); Escasado = false; } } class SuperPoder { public int id; public string Nombre; public string Habilidad; public string Descripcion; public NivelesUtilidad Nivel; public SuperPoder() { Nivel = NivelesUtilidad.Nivel1; } //CONTRUTORO PARA PODER INICILIZA R Y PODER HACER COSAS } //ESTO ES PARA CREAR UN TIPO DE DATO ESPESIFICO PARA QUE SE USE EN LA CLASE enum NivelesUtilidad{ Nivel1, Nivel2, Nivel3, Nivel4, Nivel5, Nivel6, Nivel7, Nivel8, Nivel9 }
![](https://static.platzi.com/media/user_upload/Snap%20%281%29-c8445aa4-361d-489e-ace0-bbcb23a4b196.jpg)
  • Constructor inicia los valores o especifica los datos por defecto de una clase.

  • Podemos ejecutar rutinas por defecto

  • Es recomendable inicializar las listas con datos vacíos para evitar error en la ejecución.

También puede hacerse de esta manera, me parece mejor por que usualmente mediante el constructor vamos a darle valores a ese objeto que estamos construyendo public class MiClase { // Propiedades con valores predeterminados public int Valor1 { get; set; } public string Valor2 { get; set; } // Constructor public MiClase(int valor1 = 5, string valor2 = "Mundo") { Valor1 = valor1; Valor2 = valor2; } } // Uso MiClase instancia1 = new MiClase(); // Utiliza los valores predeterminados MiClase instancia2 = new MiClase(10, "Hola"); // Proporciona valores personalizados

Apuntes del profesor:
Constructor inicia los valores o especifica los datos por defecto de una clase.

public class Persona 
{
	private string apellido;
	private string nombre;
	
	public Persona()
	{
		apellido = "";
		nombre = "";
	}
}
y qué sucedería si creo el constructor con el keywork private?
```js // See https://aka.ms/new-console-template for more information Console.WriteLine("Actors"); var theDarkKnight = new Film(); theDarkKnight.NameFilm = "The Dark Knight"; theDarkKnight.YearFilm = 2008; theDarkKnight.Stars = NumStars.Star4; var tearsOfTheSun = new Film(); tearsOfTheSun.NameFilm = "Tears of the Sun"; tearsOfTheSun.YearFilm = 2003; tearsOfTheSun.Stars = NumStars.Star3; var multiple = new Film(); multiple.NameFilm = "Multiple"; multiple.YearFilm = 2016; multiple.Stars = NumStars.Star3; var americanPsycho = new Film(); americanPsycho.NameFilm = "American Psycho"; americanPsycho.YearFilm = 2000; americanPsycho.Stars = NumStars.Star3; var person1 = new Actor(); var person2 = new Actor(); person1.Id = 1; person1.Name = "Christian Bale"; person1.Oscar = true; List<Film> filmsPerson1 = new List<Film>(); filmsPerson1.Add(theDarkKnight); filmsPerson1.Add(americanPsycho); person1.Films = filmsPerson1; person2.Id = 2; person2.Name = "Bruce Willis"; person2.Oscar = false; List<Film> filmsPerson2 = new List<Film>(); filmsPerson2.Add(tearsOfTheSun); filmsPerson2.Add(multiple); person2.Films = filmsPerson2; class Actor { public int Id; public string Name; public bool Oscar; public List<Film> Films; public Actor() { Id = 1; Name = "Name Actor"; Films = new List<Film>(); Oscar = false; } } class Film { public string NameFilm; public int YearFilm; public NumStars Stars; public Film() { NameFilm = "Name"; YearFilm = 9999; Stars = NumStars.Star0; } } enum NumStars { Star0, Star1, Star2, Star3, Star4, Star5 } ```// See <https://aka.ms/new-console-template> for more informationConsole.WriteLine("Actors"); var theDarkKnight = new Film();theDarkKnight.NameFilm = "The Dark Knight";theDarkKnight.YearFilm = 2008;theDarkKnight.Stars = NumStars.Star4; var tearsOfTheSun = new Film();tearsOfTheSun.NameFilm = "Tears of the Sun";tearsOfTheSun.YearFilm = 2003;tearsOfTheSun.Stars = NumStars.Star3; var multiple = new Film();multiple.NameFilm = "Multiple";multiple.YearFilm = 2016;multiple.Stars = NumStars.Star3; var americanPsycho = new Film();americanPsycho.NameFilm = "American Psycho";americanPsycho.YearFilm = 2000;americanPsycho.Stars = NumStars.Star3; var person1 = new Actor();var person2 = new Actor(); person1.Id = 1;person1.Name = "Christian Bale";person1.Oscar = true; List\<Film> filmsPerson1 = new List\<Film>();filmsPerson1.Add(theDarkKnight);filmsPerson1.Add(americanPsycho); person1.Films = filmsPerson1; person2.Id = 2;person2.Name = "Bruce Willis";person2.Oscar = false; List\<Film> filmsPerson2 = new List\<Film>();filmsPerson2.Add(tearsOfTheSun);filmsPerson2.Add(multiple); person2.Films = filmsPerson2; class Actor{ public int Id; public string Name; public bool Oscar; public List\<Film> Films; public Actor() { Id = 1; Name = "Name Actor"; Films = new List\<Film>(); Oscar = false; }} class Film{ public string NameFilm; public int YearFilm; public NumStars Stars; public Film() { NameFilm = "Name"; YearFilm = 9999; Stars = NumStars.Star0; }} enum NumStars{ Star0, Star1, Star2, Star3, Star4, Star5}
```c# // SuperPowers. var strengthPower = new SuperPower { Name = "Super strength", Description = "The strength that a superhero with this power can have is not human", Element = ElementTypeEnum.Normal, PowerQuality = PowerQualityEnum.Great }; var speedPower = new SuperPower { Name = "Super speed", Description = "With this power, the hero can have a super speed in seconds", Element = ElementTypeEnum.Normal, PowerQuality = PowerQualityEnum.Good }; var windPower = new SuperPower { Name = "Weather control", Description = "Hero can control the weather with this power", Element = ElementTypeEnum.Wind, PowerQuality = PowerQualityEnum.Regular }; var electricPower = new SuperPower { Name = "Thunder generation", Description = "Hero can control thunders with this power", Element = ElementTypeEnum.Electric, PowerQuality = PowerQualityEnum.Great }; // Heroes var firstHero = new Hero(); var secondHero = new Hero(); var thirdHero = new Hero(); // Hero #1 firstHero.ID = 1; firstHero.RealName = "Bob Parr"; firstHero.HeroName = "Mr Incredible"; firstHero.CanFly = false; firstHero.ColorsCostume = ["Red", "Black", "Yellow"]; firstHero.IsHuman = true; List<SuperPower> incrediblePower = new List<SuperPower>(); incrediblePower.Add(strengthPower); firstHero.Powers = incrediblePower; // Hero #2 secondHero.ID = 2; secondHero.RealName = "Barry Allen"; secondHero.HeroName = "Flash"; secondHero.CanFly = false; secondHero.ColorsCostume = ["Red", "Yellow"]; secondHero.IsHuman = true; List<SuperPower> flashPower = new List<SuperPower>(); flashPower.Add(speedPower); secondHero.Powers = flashPower; // Hero #3 thirdHero.ID = 3; thirdHero.RealName = "Ororo Munroe"; thirdHero.HeroName = "Storm"; thirdHero.CanFly = true; thirdHero.ColorsCostume = ["White", "Yellow", "Red", "Black"]; thirdHero.IsHuman = false; List<SuperPower> stormPower = new List<SuperPower>(); stormPower.Add(windPower); stormPower.Add(electricPower); thirdHero.Powers = stormPower; class Hero { public int ID { get; set; } public string RealName { get; set; } public string HeroName { get; set; } public bool CanFly { get; set; } public List<string> ColorsCostume { get; set; } public bool IsHuman { get; set; } public List<SuperPower> Powers { get; set; } public Hero() { ID = 0; RealName = string.Empty; HeroName = string.Empty; CanFly = false; ColorsCostume = new List<string>(); IsHuman = false; Powers = new List<SuperPower>(); } } class SuperPower { public string Name { get; set; } public string Description { get; set; } public ElementTypeEnum Element { get; set; } public PowerQualityEnum PowerQuality { get; set; } public SuperPower() { Name = string.Empty; Description = string.Empty; Element = ElementTypeEnum.Normal; PowerQuality = PowerQualityEnum.Regular; } } enum ElementTypeEnum { Normal = 10, Electric = 20, Wind = 30 } enum PowerQualityEnum { Regular = 10, Good = 20, Great = 30 } ```
Volviendo a ver este curso, me di cuenta que crear un objeto apartir de la clase "SuperHeroe" esta mandado a recoger, o a mi me parece que no me gusta. Hice todo, pero en vez de superheroe, puse Heroe, del tipo de personajes de juegos como Warcraft: //... OOP - Again { 02 - 05 - 2024 } //... Reforzar encapsulamiento, herencia y abstraccion. //... Instanciamos nuestro primer super heroe: Heroe Minrith = new Heroe(); Minrith.id = 1; Minrith.nombre = "Minrith"; //... Nombre Minrith tomado del universo de Tolkien. Minrith.genero = Genero.Hombre; Minrith.nivel = 99; Minrith.vida = 9000; //... Se instancia la descripcion de cada item del heroe: //... Instanciamos los items = Baston antiguo: Item bastonAntiguo = new Item(); //... 1. bastonAntiguo.Nombre = "Baston antiguo."; bastonAntiguo.Descripcion = "Baston que incrementa un 50% el ataque del heroe."; bastonAntiguo.durabilidad = Durabilidad.Indestructible; //... Indestructible el baston. //... Instanciamos los items = Amuleto: Item amuletoElemental = new Item(); //... 2. amuletoElemental.Nombre = "Amuleto elemental."; amuletoElemental.Descripcion = "Amuleto que incrementa las habilidades elementales."; amuletoElemental.durabilidad = Durabilidad.debil; //... Debil el amuleto. //... Instanciamos los items = Espada devoradora: Item espadaDevoradora = new Item(); //... 3. espadaDevoradora.Nombre = "Espada devoradora."; espadaDevoradora.Descripcion = "Espada unica, esta incrementa la defensa del heroe en un 100%."; espadaDevoradora.durabilidad = Durabilidad.Resistente; //... Resistente la espada. //... Instanciamos los items = Escudo de obsidiana: Item escudoObsidiana = new Item(); //... 4. escudoObsidiana.Nombre = "Escudo de obsidiana."; escudoObsidiana.Descripcion = "Escudo que protege el 50% de los ataque de un enemigo."; escudoObsidiana.durabilidad = Durabilidad.vulnerable; //... Vulnerable el escudo. //... Declaramos los poderes y su forma de iteracion: Minrith.superPoderes = new\[] { "Rayo de hielo.", "Tormenta de fuego.", "Hidras de rayo.", "Esfera de luz.", "Meteoritos de fuego." }; //... Declaramos los objetos y su forma de iteracion: Minrith.listaItems = new\[] { "Baston antiguo.", "Amuleto elemental.", "Espada deboradora de fuego.", "Escudo de obsidiana" }; //... Asi iteramos sobre el array: Console.WriteLine(Minrith.listaItems\[4]); //... Creamos la clase: //... Descartamos las propiedades que no son innecesarias. class Heroe //... Es Heroe pero tiene poderes sobrenaturales. { public int id; public string nombre; public Genero genero; public int nivel; //... Esto representa el nivel del heroe. public int vida; //... Esto representa el nivel de vida del heroe. public string\[] superPoderes; public string\[] listaItems; //... Lista de items fisicos que el heroe posee. } //... Agregamos una clase para la descripcion y nombre de los items: class Item { public string Nombre; public string Descripcion; public Durabilidad durabilidad; } public enum Durabilidad { Indestructible = 200, Resistente = 150, vulnerable = 100, debil = 50 } public enum Genero { Hombre = 1, Mujer = 2, }
**Código del objeto Superman, utilizando constructores:** // Clase SuperPoder con constructor class SuperPoder { public string Nombre; public string Descripcion; public NivelPoder Nivel; // Constructor de SuperPoder que asigna nivel1 por defecto public SuperPoder() {      Nivel = NivelPoder.Nivel1; } } // Enumeración para los niveles de poder enum NivelPoder { Nivel1, Nivel2, Nivel3 } // Clase SuperHeroe con constructor class SuperHeroe { public int ID; public string Nombre; public string IdentidadSecreta; public string Ciudad; public List\<SuperPoder> SuperPoderes; public bool PuedeVolar; // Constructor de SuperHeroe que asigna valores por defecto public SuperHeroe() {      ID = 1;      PuedeVolar = false;      SuperPoderes = new List\<SuperPoder>(); } } // Creación del objeto Superman utilizando el constructor SuperHeroe superman = new SuperHeroe(); // Asignación de valores a las propiedades de Superman superman.Nombre = "Superman"; superman.IdentidadSecreta = "Clark Kent"; superman.Ciudad = "Metrópolis"; superman.PuedeVolar = true; // Creación y asignación de superpoderes utilizando el constructor de SuperPoder SuperPoder poderVolar = new SuperPoder(); poderVolar.Nombre = "Volar"; poderVolar.Descripcion = "Capacidad para volar y planear en el aire"; superman.SuperPoderes.Add(poderVolar); SuperPoder superFuerza = new SuperPoder(); superFuerza.Nombre = "Súper Fuerza"; superFuerza.Descripcion = "Capacidad para ejercer fuerza sobrehumana"; superman.SuperPoderes.Add(superFuerza);