Creación de Clases y Objetos en Visual Studio: Superhéroes App
Resumen
En el mundo del desarrollo de software, la creación de un proyecto desde cero es siempre un desafío emocionante y una oportunidad para aplicar conocimientos de programación. Nos centraremos en un proyecto particularmente atractivo: la creación de una aplicación de superhéroes utilizando Visual Studio. Este proyecto no solo nos permitirá poner en práctica los conceptos fundamentales de la programación orientada a objetos, sino también explorar cómo se construye la estructura básica de una aplicación en .NET. Esta es una oportunidad excelente para sumergirse en los entresijos de la creación de clases y propiedades, elementos esenciales en la arquitectura de cualquier software.
¿Cómo se inicia un nuevo proyecto en Visual Studio?
El primer paso para comenzar nuestro proyecto de superhéroes es abrir Visual Studio y crear un nuevo proyecto. Optamos por un proyecto de consola por su simplicidad y efectividad. Al momento de crear el proyecto en Visual Studio, se procede de la siguiente manera:
Seleccionamos la opción "Crear un nuevo proyecto".
Elegimos "Proyecto de consola".
Nombramos nuestro proyecto "superhéroes app".
Durante este proceso, es esencial seleccionar el framework adecuado, optando por la versión más reciente disponible en el momento de la creación. Si hay una versión más reciente disponible, como la 8 o 9, también se puede elegir esa.
¿Cómo se crea una clase en .NET?
Después de configurar nuestro proyecto, el siguiente paso es la creación de la clase principal, que en este caso será Superhéroe. En .NET, la creación de una clase se realiza mediante la palabra clave class, seguida del nombre de la clase, que debe estar en singular para representar un objeto en particular. Por ejemplo:
classSuperhéroe
{// Propiedades de la clase aquí}
¿Qué propiedades son esenciales para un superhéroe?
Un superhéroe, en el contexto de nuestra aplicación, requiere de ciertas propiedades que le otorgan características y habilidades únicas. Algunas de estas propiedades fundamentales incluyen:
Un identificador único ID, que puede ser un entero o un tipo Guid.
El nombre del superhéroe.
Una identidad secreta, que es opcional pero común en muchos superhéroes.
La ciudad de origen o área de acción, aunque algunos héroes protegen dimensiones más amplias.
Un array que alberga los superpoderes, definidos de la siguiente forma en .NET: Tipo[] nombreArray.
Además, para simplificar la identificación de habilidades específicas, como la capacidad de volar, se puede incluir una propiedad booleana PuedeVolar. La definición de estas propiedades refleja las decisiones de diseño tomadas durante la fase de análisis y estructuración del proyecto, todas orientadas a satisfacer las necesidades específicas del software que estamos desarrollando.
¿Cómo instanciamos un objeto de la clase superhéroe?
Crear un objeto es tan esencial como definir la clase en sí. Para instanciar un superhéroe, utilizamos la siguiente sintaxis:
var superman =new Superhéroe
{// Asignación de valores a las propiedades};
Por ejemplo, al asignar valores a las propiedades de nuestra instancia superman, establecemos su ID, nombre, identidad secreta, entre otros. Definir estas propiedades es crucial para la manipulación de instancias dentro de nuestra aplicación.
Ahora que tenemos una comprensión básica de cómo iniciar un proyecto y crear una clase en Visual Studio, te animo a continuar aprendiendo y experimentando con más ejemplos. Cada superhéroe que crees será un paso más en tu camino hacia el dominio de la programación orientada a objetos. Continúa en tu aventura de aprendizaje y descubre cómo podemos construir clases más complejas y específicas para nuestras necesidades. Mantén siempre la mente abierta y la curiosidad activa, ¡y verás que el código que puedas escribir será tan poderoso como los superhéroes que estás creando!
El tema de los arrays lo tengo claro por investigaciones que hice por fuera, pero deben de organizar el plan de estudio ya que en el curso anterior no tocaron ese tema en fundamento con c#, y se supone que las rutas son exactamente para ir viendo todos los temas uno a uno de manera creciente y no saltanos nada.
Triste que no contesten pero tienes toda la razon y no es el unico curso que esta asi. si sigo una ruta de aprendizaje es porque espero que tenga todo lo que necesito para seguir la ruta y no en un curso pidan algo que no he visto crei que solo era EdTeam quien lo hacia pero ya vi que no.
Para comentar los de los array o el stream.
Es una estructura de datos donde todo se guarda como una lista, por ejemplo la lista de compras:
- Leche
- Pollo
- Lechuga
podría ser algo asi:
//en una variable
string[] compra = {"Leche", "Pollo", "Lechuga"};
y en el caso de una propiedad
mercado.compra = new[] {"Leche", "Pollo", "Lechuga"};
y se puede acceder a cada item indicando su posición comenzando desde 0 ej:
compra[0] //el resultado es Leche
mercado.compra[1] //el resultado es Pollo
Espero que ayude si no preguntan a chatgpt igual me equivoco en algo
para que se instancia? por que pone var superman? seria de gran ayuda hacer cursos con ejemplos reales.
En la ruta de backend con C# puedes encontrar todos los cursos de miguel y te pueden apoyar, incluso el primer curso de introduccion de C# lo imparte Selis es muy importante porque ahi te comenta los tipos de variables
La instanciación es necesaria porque una clase define la estructura y el comportamiento de los objetos, pero no crea objetos reales en la memoria hasta que se instancia. Cada objeto instanciado es una copia independiente de la clase y tiene su propia área de memoria asignada para almacenar sus datos.
Console.WriteLine("Actores");var person1 = new Actor();var person2 = new Actor();person1.Id =1;person1.Name ="Christian Bale";person1.Oscar = true;person1.Films = new[]{"The Dark Night","Mowgli","Equilibrium","El imperio del Sol"};person2.Id =2;person2.Name ="Bruce Willis";person2.Oscar = false;person2.Films = new[]{"Alpha Dog","Jungla de cristal","Múlriple","Lagrimas al sol"};
class Actor
{ public int Id; public string Name; public bool Oscar; public string[] Films;}
aquí va mi aporte
Console.WriteLine("SUPER HEROES INFO");SuperHeroSpiderman=newSuperHero();SuperHeroBatman=newSuperHero();Spiderman.Id=1;Spiderman.Nombre="SpiderMan";Spiderman.Edad=16;Spiderman.EstaEnfermo=false;Spiderman.IdentidadSecreta="Peter Parker";Spiderman.Ciudad="Nueva York";Spiderman.FechaNacimiento="10/08/2001";Spiderman.SuperPoderes=new[]{"Agilidad sobrehumana","Fuerza sobrehumana","Sentido arácnido","Paredes trepadoras","Telarañas y lanzatelarañas","Habilidad en combate","Inteligencia"};Batman.Id=2;Batman.Nombre="Batman";Batman.Edad=35;Batman.EstaEnfermo=false;Batman.IdentidadSecreta="Bruce Wayne";Batman.Ciudad="Gotham City";Batman.FechaNacimiento="19/02/1988";Batman.SuperPoderes=new[]{"Habilidades en artes marciales","Inteligencia superior","Ingeniería y tecnología avanzada","Sigilo","Recursos financieros ilimitados","Batmóvil y gadgets","Preparación y planificación exhaustiva"};classSuperHero{public int Id;public string Nombre;public int Edad;public bool EstaEnfermo;public string IdentidadSecreta;public string Ciudad;public string FechaNacimiento;public string[]SuperPoderes;public bool PuedeVolar;}
Batman si está enfermo
Así implemente la class:
aqui esta lo que hice con unas cuantas cositas extra
string swicthcontrol ="repetir";var confirmacion ="";var confirmacion2 ="";var confirmacion3 ="";var batman =new Superhero();Console.WriteLine("Diga las caracteristicas de su heroe");Console.WriteLine("ciudad");batman.ciudad = Console.ReadLine();batman.id =1;Console.WriteLine("nombre");batman.name = Console.ReadLine();Console.WriteLine("super");batman.habilidadx = Console.ReadLine();Console.WriteLine("identidad secreta");batman.identidadsecreta = Console.ReadLine();do{switch(swicthcontrol){case"repetir": Console.WriteLine("es humano S/N"); confirmacion = Console.ReadLine(); Console.WriteLine("puede volar S/N"); confirmacion2 = Console.ReadLine(); swicthcontrol ="revicion";break;case"revicion":if(confirmacion =="S"){ batman.humano = true;}elseif(confirmacion =="N"){ batman.humano = false;}else{ Console.WriteLine("valor ingresado no valido"); swicthcontrol ="repetir";}if(confirmacion2 =="S"){ batman.puedevolar = true;}elseif(confirmacion2 =="N"){ batman.puedevolar = false;}else{ Console.WriteLine("valor ingresado no valido"); swicthcontrol ="repetir";}break;}}while(!(confirmacion =="S"|| confirmacion =="N")||!(confirmacion2 =="S"|| confirmacion2 =="N"));Console.WriteLine($"escribe 3 superpoderes de {batman.name}");batman.superpoderes = new string[]{Console.ReadLine(), Console.ReadLine(), Console.ReadLine()};for(int i =0; i < batman.superpoderes.Length; i++){ Console.WriteLine($"El super poder {i} es: {batman.superpoderes[i]}");}class Superhero
{ public int id; public string name; public string identidadsecreta; public string ciudad; public string[] superpoderes; public bool puedevolar; public bool humano; public string habilidadx;}
Alguien sabe como visual studio le hace recomendaciones ? a mi no me recomienda lo del ID
Creo lo hace solo cuando justo te quiere dar una recomendación.
var allmight =newSuperHeroe();allmight.Id=2;allmight.Nombre="All Might";allmight.IdentidadSecreta="Toshinori";allmight.Ciudad="Musutafu";allmight.PuedeVolar=false;allmight.SuperPoderes=new[]{"Detroit Smash","Oklahoma Smash","Plus Ultra"};classSuperHeroe// Las clases se declaran en singular{public int Id;// se puede utilizar tambien Guidpublic string Nombre;public string IdentidadSecreta;public string Ciudad;//Propiedades (caracteristicas que tendran los objetos)public string[]SuperPoderes;public bool PuedeVolar;}
Aquí le comparto al hombre de acero y el hombre depresivo
var superman =newSuperHeroe();superman.id=01;superman.nombre="SuperMan";superman.identidadSecreta="Clark Kent";superman.ciudad="MetroPolis";superman.debilidad="Kriptonita";superman.puedeVolar=true;superman.poderes=new[]{"Super Fuerza","Vision de rayosX","Super Valocidad"};var batman =newSuperHeroe();batman.id=02;batman.nombre="El Caballero de la Noche";batman.identidadSecreta="Bruce Wayne";batman.ciudad="Gothan City";batman.debilidad="El guion";batman.puedeVolar=false;batman.poderes=new[]{"Multimillonario","Inteligente","Un galan con las damiselas"};classSuperHeroe{public int id;public string? nombre;public string? identidadSecreta;public string? ciudad;public string[]? poderes;public string? debilidad;public bool puedeVolar;}
Quiero compartirles una observación técnica sobre el ejercicio de Superhéroes. Si al intentar asignar superman.Id = 1; el programa les da un error, es por el Tipo de Dato que definimos en la clase:
¿Qué está pasando? En nuestra clase definimos public Guid Id;. Un Guid (Globally Unique Identifier) no es un número simple, es una estructura de 128 bits que genera códigos únicos como 550e8400-e29b-41d4-a716-446655440000. C# no permite asignar un número 1 a un Guid porque son "moldes" diferentes.
¿Cómo solucionarlo? Si quieren usar números correlativos (1, 2, 3...), deben cambiar el tipo a int en la definición de la clase:
public int Id;
Si quieren mantener el Guid (que es lo que se usa en aplicaciones reales de bases de datos para que nunca se repitan los IDs), deben asignarlo usando la función de C#:
superman.Id=Guid.NewGuid();
supoerpoder de batman?
Ser Millonario 💵💵💵
😆
var se utiliza en C# para declarar variables de tipo implícito. Permite que el compilador infiera el tipo de la variable en base al valor que se le asigna, lo que simplifica la declaración y mejora la legibilidad del código. Por ejemplo, var superhéroe = new Superhéroe();, donde superhéroe automáticamente es del tipo Superhéroe. Esta funcionalidad es especialmente útil con tipos complejos o cuando se trabaja con colecciones, haciendo el código más limpio.
Los métodos en una clase son funciones que definen comportamientos o acciones que los objetos de esa clase pueden realizar. Cada método puede acceder a las propiedades de la clase y manipular su estado. Por ejemplo, en la clase Superhéroe, podrías tener métodos como Volando() que permita al superhéroe volar, o MostrarIdentidad() que muestre su identidad secreta. Los métodos son fundamentales para encapsular la lógica y la funcionalidad dentro de una clase, permitiendo un diseño limpio y modular en la programación orientada a objetos.
porque los atributos parten con mayúscula, eso no aplica solo a las clases?
Por que en supermán.SuperPoderes = New paréntesis cuadrado?
SuperPoderes es una subclase de superman y nos toca crear una instancia de la clase para asignarle el valor. De todas formas si puedes agregar mejor la porción de código que no entiendes seria mejor.