Está en la página 1de 9

POO En C#

Hola a todos, hoy voy a explicar cómo funciona la programación orientada a objetos o
POO en C#.
La programación orientada a objetos es un paradigma de la programación que
descompone el código de una clase en unidades llamados objetos.
Un objeto en C# es una entidad existente en la memoria del ordenador que tiene unas
propiedades, llamados atributos, y unas operaciones disponibles específicas, llamados
métodos.
Estos objetos vienen de clases, en realidad hasta ahora hemos usado una clase, solo que
esta clase tenía un método ejecutable.
Vamos a hacer un ejemplo creando una clase Coche.
Para crear clases en C# lo tenemos que hacer es pulsar con el botón secundario en el
nombre de la solución:
Esto es lo que nos crea:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace POO1
{
    class Coche
    {
    }
}
Hemos dicho que una clase tiene atributos, normalmente los atributos suelen ser privados
y para indicarlo le vamos a poner un _ delante del nombre. Al final, crear atributos es
como crear variables. Vemos el resultado:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace POO1
{
    class Coche
    {
        // Atributos
        private int _id;
        private String _marca;
        private String _modelo;
        private int _km;
        private double _precio;
 
    }
}
Ahora tenemos que crear un método especial llamado constructor, esto nos permitirá
crearnos objetos mas adelante. Le pasaremos los datos necesarios y se lo asignaremos.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace POO1
{
    class Coche
    {
        // Atributos
        private int _id;
        private String _marca;
        private String _modelo;
        private int _km;
        private double _precio;
 
        public Coche(int id, string marca, string modelo, int km, double precio)
        {
            this._id = id;
            this._marca = marca;
            this._modelo = modelo;
            this._km = km;
            this._precio = precio;
        }
 
    }
}
Ahora vamos a crear los métodos get y set. El método get devuelve el valor de un atributo
concreto y el set modifica el valor de un atributo.
En C#, estos get y set se comportan como si fueran propiedades.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace POO1
{
    class Coche
    {
 
        private int _id;
        private String _marca;
        private String _modelo;
        private int _km;
        private double _precio;
 
        public Coche(int id, string marca, string modelo, int km, double precio)
        {
            this._id = id;
            this._marca = marca;
            this._modelo = modelo;
            this._km = km;
            this._precio = precio;
        }
 
        public int id { get => _id; set => _id = value; }
        public string marca { get => _marca; set => _marca = value; }
        public string modelo { get => _modelo; set => _modelo = value; }
        public int km { get => _km; set => _km = value; }
        public double precio { get => _precio; set => _precio = value; }
 
    }
}
Esta es la forma más básica de hacer get y set.
Por último, os recomiendo poner un método especial, que nos servirá para mostrar el
estado del objeto.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace POO1
{
    class Coche
    {
 
        private int _id;
        private String _marca;
        private String _modelo;
        private int _km;
        private double _precio;
 
        public Coche(int id, string marca, string modelo, int km, double precio)
        {
            this._id = id;
            this._marca = marca;
            this._modelo = modelo;
            this._km = km;
            this._precio = precio;
        }
 
        public int id { get => _id; set => _id = value; }
        public string marca { get => _marca; set => _marca = value; }
        public string modelo { get => _modelo; set => _modelo = value; }
        public int km { get => _km; set => _km = value; }
        public double precio { get => _precio; set => _precio = value; }
 
        public override string ToString()
        {
            return "Marca: " + marca + ", modelo: " + modelo + " con un precio de " + precio;
        }
 
    }
}
Vemos un ejemplo de cómo usar nuestra clase:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace POO1
{
    class Program
    {
        static void Main(string[] args)
        {
 
            // Creamos un objeto coche
            Coche c = new Coche(1, "BMW", "4", 100, 12000);
 
            // get de precio de coche
            Console.WriteLine(c.precio);
 
            // get de marca de coche
            Console.WriteLine(c.marca);
 
            // Modifico el precio del coche con el set
            c.precio = 15000;
 
            // Vuelvo a mostrar para ver si se ha modificado
            Console.WriteLine(c.precio);
 
            // Muestro el estado completo
            Console.WriteLine(c.ToString());
 
            Console.ReadLine();
        }
    }
}

Herencia En C#
Hola a todos, hoy voy a explicar cómo se realiza la herencia en C#. La herencia en
programación es muy importante para la reutilización de código.

En C#, tenemos algunas diferencias con Java, pero solo de sintaxis, la idea es la misma al
final.
La idea es tener varias clases, teniendo una clase como padre y otras como hijas.

Veamos un pequeño ejemplo, una clase Vehículo:


class Vehiculo {
 
    private int _id;
    private String _marca;
    private String _modelo;
    private int _km;
    private double _precio;
 
    public Vehiculo(int id, string marca, string modelo, int km, double precio)
    {
        this._id = id;
        this._marca = marca;
        this._modelo = modelo;
        this._km = km;
        this._precio = precio;
    }
 
    public int id { get => _id; set => _id = value; }
    public string marca { get => _marca; set => _marca = value; }
    public string modelo { get => _modelo; set => _modelo = value; }
    public int km { get => _km; set => _km = value; }
    public virtual double precio { get => _precio; set => _precio = value; }
 
    public override string ToString()
    {
        return "Marca: " + marca + ", modelo: " + modelo + " con un precio de " + precio;
    }
 
}
Ahora vamos a crear dos clases hijas, clase Moto y clase Coche:
— Clase Coche
class Coche : Vehiculo
{
    private bool _airbag;
 
    public Coche(int id, string marca, string modelo, int km, double precio, bool
airbag) :base(id, marca, modelo, km, precio)
    {
        this._airbag = airbag;
    }
 
    public bool airbag { get => _airbag; set => _airbag = value; }
 
    public override double precio
    {
        get
        {
            if (airbag)
            {
                return base.precio + 200;
            }
 
            return base.precio;
        }
 
 
    }
 
    public override string ToString()
    {
        if (airbag)
        {
            return base.ToString() + " tiene airbag";
        }
        else
        {
            return base.ToString() + " no tiene airbag";
        }
           
    }
 
}
— Clase Moto
class Moto : Vehiculo
{
    private bool _sidecar;
 
    public Moto(int id, string marca, string modelo, int km, double precio, bool sidecar) :
base(id, marca, modelo, km, precio)
    {
        this._sidecar = sidecar;
    }
 
    public bool sidebar { get =>
_sidecar; set => _sidecar =
value; }
 
    public override double precio
{
        get
        {
            if(sidebar)
            {
                return base.precio +
50;
            }
 
            return base.precio;
        }
                 
             
    }
 
    public override string
ToString()
    {
        if (sidebar)
        {
            return base.ToString() +
" tiene sidecar";
        }
        else
        {
            return base.ToString() +
" no tiene sidecar";
        }
 
    }
 
}
Para indicar que una clase hereda de otra, lo haremos de esta forma:
1 class Moto : Vehiculo
También podemos heredar métodos o propiedades, para ello en la clase padre deberemos
escribir en el método virtual:
1 public virtual double precio { get => _precio; set => _precio = value; }
Y en las clases hijas, se debe colocar un override en el metodo para indicar que se esta
sobrescribiendo:
public override double precio {
    get
    {
        if(sidebar)
        {
            return base.precio + 50;
        }
 
        return base.precio;
    }
                 
             
}

También podría gustarte