{"id":656,"date":"2023-11-16T13:27:08","date_gmt":"2023-11-16T16:27:08","guid":{"rendered":"https:\/\/stackcodelab.com\/blog\/?p=656"},"modified":"2023-12-03T11:29:41","modified_gmt":"2023-12-03T14:29:41","slug":"programacion-orientada-a-objetos-en-c","status":"publish","type":"post","link":"https:\/\/stackcodelab.com\/blog\/programacion-orientada-a-objetos-en-c\/","title":{"rendered":"Programaci\u00f3n Orientada a Objetos en C#"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En este cap\u00edtulo, nos adentraremos en el emocionante mundo de la Programaci\u00f3n Orientada a Objetos (POO) y exploraremos c\u00f3mo se aplica en el lenguaje de programaci\u00f3n C#. La POO es un paradigma fundamental en el desarrollo de software moderno y ofrece una forma poderosa y eficiente de dise\u00f1ar y organizar programas. En este cap\u00edtulo, presentaremos los conceptos clave de la POO y discutiremos su importancia en el desarrollo de software. Tambi\u00e9n destacaremos c\u00f3mo C# es un lenguaje orientado a objetos de primera clase que facilita la implementaci\u00f3n de conceptos de POO.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Conceptos Clave de la Programaci\u00f3n Orientada a Objetos (POO):<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La Programaci\u00f3n Orientada a Objetos es un paradigma de programaci\u00f3n que se basa en el concepto de \u00abobjetos\u00bb. Estos objetos son representaciones de entidades del mundo real que tienen propiedades y comportamientos. Los conceptos clave de la POO incluyen:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Clases y Objetos:<\/strong> Las clases son plantillas que definen las propiedades y m\u00e9todos de los objetos. Los objetos son instancias concretas de una clase.<\/li>\n\n\n\n<li><strong>Encapsulamiento:<\/strong> El encapsulamiento es el principio de ocultar los detalles internos de una clase y exponer solo lo necesario. Proporciona seguridad y control sobre los datos y el comportamiento de un objeto.<\/li>\n\n\n\n<li><strong>Herencia:<\/strong> La herencia permite que una clase herede propiedades y m\u00e9todos de otra clase. Esto fomenta la reutilizaci\u00f3n de c\u00f3digo y la creaci\u00f3n de jerarqu\u00edas de clases.<\/li>\n\n\n\n<li><strong>Polimorfismo:<\/strong> El polimorfismo permite que objetos de diferentes clases respondan de manera diferente a la misma acci\u00f3n. Facilita la extensibilidad y flexibilidad del c\u00f3digo.<\/li>\n\n\n\n<li><strong>M\u00e9todos:<\/strong> Los m\u00e9todos son funciones que est\u00e1n asociadas a una clase y definen el comportamiento de los objetos de esa clase. Los m\u00e9todos pueden realizar acciones y manipular las propiedades de los objetos. Por ejemplo, un m\u00e9todo \u00abarrancar\u00bb de la clase \u00abCoche\u00bb podr\u00eda cambiar el estado del coche a \u00aben marcha\u00bb.<\/li>\n\n\n\n<li><strong>Propiedades:<\/strong> Las propiedades son caracter\u00edsticas o atributos de un objeto que almacenan datos. Pueden ser de diferentes tipos, como n\u00fameros, cadenas de texto, booleanos, etc. Por ejemplo, la propiedad \u00abcolor\u00bb de un objeto \u00abCoche\u00bb podr\u00eda almacenar el color del coche.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Importancia de la POO en el Desarrollo de Software Moderno:<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La POO ha revolucionado la forma en que desarrollamos software. Algunas de sus ventajas clave incluyen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Reutilizaci\u00f3n de C\u00f3digo:<\/strong> La herencia y la creaci\u00f3n de clases base permiten la reutilizaci\u00f3n de c\u00f3digo, lo que reduce la duplicaci\u00f3n y facilita el mantenimiento.<\/li>\n\n\n\n<li><strong>Modelado del Mundo Real:<\/strong> La POO permite modelar sistemas y procesos del mundo real de manera m\u00e1s natural, lo que facilita la comprensi\u00f3n y el dise\u00f1o de software.<\/li>\n\n\n\n<li><strong>Flexibilidad y Escalabilidad:<\/strong> Los conceptos de POO como la encapsulaci\u00f3n y el polimorfismo permiten que el c\u00f3digo sea m\u00e1s flexible y escalable, lo que facilita la adaptaci\u00f3n a cambios futuros.<\/li>\n\n\n\n<li><strong>Colaboraci\u00f3n en Equipo:<\/strong> La POO fomenta la divisi\u00f3n del trabajo en equipos de desarrollo y la gesti\u00f3n de componentes individuales como objetos.<\/li>\n\n\n\n<li><strong>Mantenimiento Simplificado:<\/strong> El c\u00f3digo orientado a objetos tiende a ser m\u00e1s f\u00e1cil de mantener y depurar debido a su estructura organizada.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">En este cap\u00edtulo, exploraremos estos conceptos y m\u00e1s, y aprenderemos c\u00f3mo aplicarlos en C# para dise\u00f1ar y desarrollar software de manera efectiva y eficiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Clases y Objetos en C#<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En C#, las clases y los objetos son elementos esenciales de la Programaci\u00f3n Orientada a Objetos (POO). A continuaci\u00f3n, exploraremos en detalle c\u00f3mo definir y utilizar clases y objetos en C#:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Definici\u00f3n y Creaci\u00f3n de Clases en C#:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una clase en C# es una plantilla o un molde que define la estructura y el comportamiento de los objetos. Las clases se utilizan para representar entidades del mundo real en un programa. Aqu\u00ed tienes un ejemplo simple de c\u00f3mo se define una clase en C#:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Coche\r\n{\r\n    \/\/ Propiedades de la clase\r\n    public string Marca { get; set; }\r\n    public string Modelo { get; set; }\r\n    \r\n    \/\/ Constructor de la clase\r\n    public Coche(string marca, string modelo)\r\n    {\r\n        Marca = marca;\r\n        Modelo = modelo;\r\n    }\r\n    \r\n    \/\/ M\u00e9todo de la clase\r\n    public void Arrancar()\r\n    {\r\n        Console.WriteLine(\"El coche {0} {1} est\u00e1 en marcha.\", Marca, Modelo);\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En el ejemplo anterior, hemos definido una clase llamada <code>Coche<\/code> que tiene propiedades como <code>Marca<\/code> y <code>Modelo<\/code>, un constructor que permite inicializar estas propiedades y un m\u00e9todo llamado <code>Arrancar<\/code> que muestra un mensaje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creaci\u00f3n de Objetos a partir de Clases:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez que hemos definido una clase, podemos crear objetos a partir de ella. Los objetos son instancias concretas de una clase y se crean utilizando el operador <code>new<\/code>. Por ejemplo: Coche miCoche = new Coche(\u00abToyota\u00bb, \u00abCamry\u00bb);&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hemos creado un objeto <code>miCoche<\/code> de la clase <code>Coche<\/code> y hemos proporcionado valores para las propiedades <code>Marca<\/code> y <code>Modelo<\/code> mediante el constructor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Propiedades y M\u00e9todos de Clase:<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las propiedades son caracter\u00edsticas o atributos de un objeto, mientras que los m\u00e9todos son funciones que definen el comportamiento de un objeto. En el ejemplo de la clase <code>Coche<\/code>, las propiedades son <code>Marca<\/code> y <code>Modelo<\/code>, y el m\u00e9todo es <code>Arrancar<\/code>. Puedes acceder a las propiedades y m\u00e9todos de un objeto de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Acceder a propiedades\r\nstring marcaDelCoche = miCoche.Marca;\r\nstring modeloDelCoche = miCoche.Modelo;\r\n\r\n\/\/ Llamar a m\u00e9todos\r\nmiCoche.Arrancar();\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, estamos accediendo a las propiedades <code>Marca<\/code> y <code>Modelo<\/code> del objeto <code>miCoche<\/code> y llamando al m\u00e9todo <code>Arrancar<\/code> para iniciar el coche.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las clases y objetos son fundamentales en la POO y permiten organizar y estructurar el c\u00f3digo de manera efectiva al modelar entidades del mundo real en programas C#. En los cap\u00edtulos siguientes, exploraremos m\u00e1s conceptos de POO y c\u00f3mo trabajar con ellos en C#.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Herencia en C#<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La herencia es un concepto fundamental en la Programaci\u00f3n Orientada a Objetos (POO) que permite la creaci\u00f3n de clases derivadas o subclases a partir de una clase base o superclase. En C#, la herencia se implementa utilizando la palabra clave <code>:<\/code>, y esto permite que las clases derivadas hereden propiedades y m\u00e9todos de la clase base. A continuaci\u00f3n, se detallan los conceptos clave relacionados con la herencia en C#:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Explicaci\u00f3n de la Herencia:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La herencia es un mecanismo que permite la creaci\u00f3n de una nueva clase (clase derivada) basada en una clase existente (clase base). La clase derivada hereda las propiedades y m\u00e9todos de la clase base, lo que fomenta la reutilizaci\u00f3n de c\u00f3digo y la creaci\u00f3n de una jerarqu\u00eda de clases. La clase derivada puede agregar nuevas propiedades y m\u00e9todos o modificar el comportamiento heredado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Creaci\u00f3n de Clases Derivadas en C#:<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para crear una clase derivada en C#, se utiliza la siguiente sintaxis:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class ClaseDerivada : ClaseBase\r\n{\r\n    \/\/ Propiedades y m\u00e9todos adicionales de la clase derivada\r\n}\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Donde <code>ClaseDerivada<\/code> es la nueva clase que estamos creando, y <code>ClaseBase<\/code> es la clase de la cual queremos heredar. La clase derivada heredar\u00e1 todas las propiedades y m\u00e9todos p\u00fablicos o protegidos de la clase base.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Uso de la Palabra Clave \u00abbase\u00bb y \u00aboverride\u00bb:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En C#, la palabra clave <code>base<\/code> se utiliza para acceder a miembros de la clase base desde la clase derivada. Por ejemplo, si deseamos llamar a un constructor de la clase base desde la clase derivada, podemos hacerlo de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ClaseBase\r\n{\r\n    public ClaseBase(int valor)\r\n    {\r\n        \/\/ Constructor de la clase base\r\n    }\r\n}\r\n\r\npublic class ClaseDerivada : ClaseBase\r\n{\r\n    public ClaseDerivada(int valor) : base(valor)\r\n    {\r\n        \/\/ Constructor de la clase derivada\r\n    }\r\n}\r\n\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>La palabra clave <code>override<\/code> se utiliza para indicar que un m\u00e9todo en la clase derivada reemplaza un m\u00e9todo con el mismo nombre en la clase base. Esto se conoce como \u00absobreescritura de m\u00e9todos\u00bb. La firma del m\u00e9todo en la clase derivada debe coincidir con la firma del m\u00e9todo en la clase base.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ClaseBase\r\n{\r\n    public virtual void Metodo()\r\n    {\r\n        Console.WriteLine(\"M\u00e9todo de la clase base\");\r\n    }\r\n}\r\n\r\npublic class ClaseDerivada : ClaseBase\r\n{\r\n    public override void Metodo()\r\n    {\r\n        Console.WriteLine(\"M\u00e9todo de la clase derivada\");\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, hemos sobreescrito el m\u00e9todo <code>Metodo<\/code> en la clase derivada, y cuando se llama a <code>Metodo<\/code> en una instancia de la clase derivada, se ejecuta el c\u00f3digo de la clase derivada en lugar del c\u00f3digo de la clase base.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Ejemplo: Herencia en Acci\u00f3n &#8211; Clases \u00abVeh\u00edculo\u00bb y \u00abCoche\u00bb<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a crear un ejemplo pr\u00e1ctico para ilustrar c\u00f3mo funciona la herencia en C# utilizando las clases \u00abVeh\u00edculo\u00bb y \u00abCoche\u00bb. La clase \u00abVeh\u00edculo\u00bb ser\u00e1 la clase base, y la clase \u00abCoche\u00bb ser\u00e1 la clase derivada que hereda de \u00abVeh\u00edculo\u00bb. Comencemos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using System;\r\n\r\n\/\/ Clase base: Veh\u00edculo\r\nclass Vehiculo\r\n{\r\n    \/\/ Propiedades de la clase base\r\n    public string Marca { get; set; }\r\n    public string Modelo { get; set; }\r\n\r\n    \/\/ Constructor de la clase base\r\n    public Vehiculo(string marca, string modelo)\r\n    {\r\n        Marca = marca;\r\n        Modelo = modelo;\r\n    }\r\n\r\n    \/\/ M\u00e9todo de la clase base\r\n    public void Arrancar()\r\n    {\r\n        Console.WriteLine(\"El veh\u00edculo {0} {1} est\u00e1 en marcha.\", Marca, Modelo);\r\n    }\r\n}\r\n\r\n\/\/ Clase derivada: Coche\r\nclass Coche : Vehiculo\r\n{\r\n    \/\/ Propiedades adicionales de la clase derivada\r\n    public int A\u00f1o { get; set; }\r\n\r\n    \/\/ Constructor de la clase derivada\r\n    public Coche(string marca, string modelo, int a\u00f1o) : base(marca, modelo)\r\n    {\r\n        A\u00f1o = a\u00f1o;\r\n    }\r\n\r\n    \/\/ M\u00e9todo adicional de la clase derivada\r\n    public void Acelerar()\r\n    {\r\n        Console.WriteLine(\"El coche {0} {1} ({2}) est\u00e1 acelerando.\", Marca, Modelo, A\u00f1o);\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        \/\/ Crear un objeto de la clase derivada \"Coche\"\r\n        Coche miCoche = new Coche(\"Toyota\", \"Camry\", 2022);\r\n\r\n        \/\/ Acceder a propiedades y m\u00e9todos heredados de la clase base \"Veh\u00edculo\"\r\n        miCoche.Arrancar(); \/\/ M\u00e9todo heredado de la clase base\r\n        Console.WriteLine(\"Marca: {0}, Modelo: {1}, A\u00f1o: {2}\", miCoche.Marca, miCoche.Modelo, miCoche.A\u00f1o);\r\n\r\n        \/\/ Llamar al m\u00e9todo adicional de la clase derivada \"Coche\"\r\n        miCoche.Acelerar();\r\n\r\n        \/\/ Salida:\r\n        \/\/ El veh\u00edculo Toyota Camry est\u00e1 en marcha.\r\n        \/\/ Marca: Toyota, Modelo: Camry, A\u00f1o: 2022\r\n        \/\/ El coche Toyota Camry (2022) est\u00e1 acelerando.\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, hemos creado una clase base llamada \u00abVeh\u00edculo\u00bb con propiedades y un m\u00e9todo. Luego, creamos una clase derivada llamada \u00abCoche\u00bb que hereda de \u00abVeh\u00edculo\u00bb y agrega una propiedad y un m\u00e9todo adicionales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el m\u00e9todo <code>Main<\/code>, creamos un objeto de la clase derivada \u00abCoche\u00bb y demostramos c\u00f3mo se pueden acceder a las propiedades y m\u00e9todos tanto de la clase base como de la clase derivada. Esto ilustra c\u00f3mo la herencia permite compartir atributos y comportamientos entre clases relacionadas en C#.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Encapsulamiento en C#<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El encapsulamiento es uno de los conceptos clave en la Programaci\u00f3n Orientada a Objetos (POO) y se refiere a la pr\u00e1ctica de ocultar los detalles internos de una clase y proporcionar una interfaz p\u00fablica para interactuar con ella. En C#, el encapsulamiento se logra mediante el uso de modificadores de acceso, como <code>public<\/code>, <code>private<\/code>, <code>protected<\/code>, e <code>internal<\/code>, para controlar la visibilidad y accesibilidad de los miembros de una clase, como propiedades y m\u00e9todos. Aqu\u00ed hay una explicaci\u00f3n detallada del encapsulamiento en C#:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Definici\u00f3n del Encapsulamiento:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El encapsulamiento consiste en ocultar los detalles internos de una clase y proporcionar una interfaz p\u00fablica clara y controlada para interactuar con la clase. Esto se hace para proteger los datos y el comportamiento de la clase, evitando que se modifiquen de manera incorrecta desde fuera de la clase.<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Modificadores de Acceso:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En C#, existen cuatro modificadores de acceso principales que se utilizan para controlar la visibilidad de los miembros de una clase:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>public<\/code>: Los miembros marcados como <code>public<\/code> son accesibles desde cualquier parte del programa, incluso desde fuera de la clase.<\/li>\n\n\n\n<li><code>private<\/code>: Los miembros marcados como <code>private<\/code> solo son accesibles desde dentro de la misma clase.<\/li>\n\n\n\n<li><code>protected<\/code>: Los miembros marcados como <code>protected<\/code> son accesibles desde la misma clase y sus clases derivadas.<\/li>\n\n\n\n<li><code>internal<\/code>: Los miembros marcados como <code>internal<\/code> son accesibles desde cualquier clase dentro del mismo ensamblado (assembly).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Propiedades y M\u00e9todos Encapsulados:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para aplicar el encapsulamiento en C#, se suelen utilizar propiedades y m\u00e9todos encapsulados. Las propiedades encapsuladas permiten controlar el acceso a los campos privados de una clase, mientras que los m\u00e9todos encapsulados permiten realizar operaciones controladas en esos campos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tienes un ejemplo de c\u00f3mo se utiliza el encapsulamiento en C# con propiedades encapsuladas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Persona\r\n{\r\n    \/\/ Campo privado\r\n    private string nombre;\r\n\r\n    \/\/ Propiedad encapsulada\r\n    public string Nombre\r\n    {\r\n        get { return nombre; }\r\n        set { nombre = value; }\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, el campo <code>nombre<\/code> est\u00e1 encapsulado dentro de la propiedad <code>Nombre<\/code>. Esto permite que el valor del campo solo sea accesible y modificable a trav\u00e9s de la propiedad, lo que proporciona un mayor control sobre los datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El encapsulamiento es fundamental para mantener la integridad de los datos y el comportamiento de una clase en C#. Al ocultar los detalles internos, una clase puede evolucionar sin afectar a otras partes del programa que la utilizan, lo que facilita el mantenimiento y la expansi\u00f3n del c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Ejemplo: Encapsulamiento en la Clase \u00abCuenta Bancaria\u00bb<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a crear un ejemplo de una clase \u00abCuenta Bancaria\u00bb que demuestra el uso de encapsulamiento en C#. Esta clase tendr\u00e1 atributos encapsulados y m\u00e9todos para depositar y retirar dinero de la cuenta. Aqu\u00ed est\u00e1 el c\u00f3digo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using System;\r\n\r\npublic class CuentaBancaria\r\n{\r\n    private string titular;\r\n    private double saldo;\r\n\r\n    \/\/ Constructor\r\n    public CuentaBancaria(string titular)\r\n    {\r\n        this.titular = titular;\r\n        saldo = 0.0;\r\n    }\r\n\r\n    \/\/ Propiedad encapsulada para el saldo\r\n    public double Saldo\r\n    {\r\n        get { return saldo; }\r\n    }\r\n\r\n    \/\/ M\u00e9todo para depositar dinero en la cuenta\r\n    public void Depositar(double cantidad)\r\n    {\r\n        if (cantidad > 0)\r\n        {\r\n            saldo += cantidad;\r\n            Console.WriteLine(\"Dep\u00f3sito de {0} realizado. Saldo actual: {1:C}\", cantidad, saldo);\r\n        }\r\n        else\r\n        {\r\n            Console.WriteLine(\"El monto del dep\u00f3sito debe ser mayor que cero.\");\r\n        }\r\n    }\r\n\r\n    \/\/ M\u00e9todo para retirar dinero de la cuenta\r\n    public void Retirar(double cantidad)\r\n    {\r\n        if (cantidad > 0 &amp;&amp; cantidad &lt;= saldo)\r\n        {\r\n            saldo -= cantidad;\r\n            Console.WriteLine(\"Retiro de {0} realizado. Saldo actual: {1:C}\", cantidad, saldo);\r\n        }\r\n        else\r\n        {\r\n            Console.WriteLine(\"Monto de retiro no v\u00e1lido o insuficiente saldo.\");\r\n        }\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        \/\/ Crear una cuenta bancaria\r\n        CuentaBancaria cuenta = new CuentaBancaria(\"Juan P\u00e9rez\");\r\n\r\n        \/\/ Realizar operaciones\r\n        cuenta.Depositar(1000.0);\r\n        cuenta.Retirar(500.0);\r\n        cuenta.Retirar(700.0);\r\n\r\n        \/\/ Consultar saldo\r\n        Console.WriteLine(\"Saldo final de la cuenta de {0}: {1:C}\", cuenta.Saldo, cuenta.Saldo);\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, hemos encapsulado los atributos <code>titular<\/code> y <code>saldo<\/code> dentro de la clase \u00abCuenta Bancaria\u00bb. La propiedad <code>Saldo<\/code> permite obtener el saldo actual de la cuenta, pero no permite modificarlo directamente. Los m\u00e9todos <code>Depositar<\/code> y <code>Retirar<\/code> proporcionan una forma controlada de realizar operaciones en la cuenta, verificando que las cantidades sean v\u00e1lidas y que haya suficiente saldo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este ejemplo ilustra c\u00f3mo el encapsulamiento permite controlar el acceso a los datos y el comportamiento de la clase, proporcionando un alto grado de seguridad y coherencia en la manipulaci\u00f3n de objetos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Polimorfismo en C#<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El polimorfismo es uno de los principios fundamentales de la Programaci\u00f3n Orientada a Objetos (POO) que permite que objetos de diferentes clases puedan ser tratados de manera uniforme. En C#, el polimorfismo se puede lograr de varias maneras, incluyendo la implementaci\u00f3n de interfaces y el uso de clases abstractas. Aqu\u00ed tienes una explicaci\u00f3n detallada del polimorfismo y sus tipos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Explicaci\u00f3n del Polimorfismo:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El polimorfismo es un principio de la POO que permite que objetos de diferentes clases puedan ser tratados de manera uniforme a trav\u00e9s de una interfaz com\u00fan. Esto significa que un objeto puede tomar diferentes formas o comportamientos seg\u00fan el contexto en el que se utilice. El polimorfismo se basa en dos conceptos clave:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Polimorfismo Est\u00e1tico (Compile-time Polymorphism):<\/strong> Tambi\u00e9n conocido como enlace temprano, ocurre en tiempo de compilaci\u00f3n. Se relaciona con la sobrecarga de m\u00e9todos y operadores, donde una clase tiene m\u00faltiples m\u00e9todos con el mismo nombre pero diferentes par\u00e1metros.<\/li>\n\n\n\n<li><strong>Polimorfismo Din\u00e1mico (Run-time Polymorphism):<\/strong> Tambi\u00e9n conocido como enlace tard\u00edo, ocurre en tiempo de ejecuci\u00f3n. Se relaciona con la implementaci\u00f3n de m\u00e9todos virtuales y la anulaci\u00f3n (override) de m\u00e9todos en clases derivadas. Permite que un objeto de una clase derivada se comporte como un objeto de su clase base.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Implementaci\u00f3n de Polimorfismo en C#:<\/strong><\/a><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Polimorfismo Est\u00e1tico:<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sobrecarga de M\u00e9todos:<\/strong> En C#, puedes definir varios m\u00e9todos con el mismo nombre en una clase, pero con diferentes par\u00e1metros. El compilador seleccionar\u00e1 el m\u00e9todo apropiado en funci\u00f3n de la lista de argumentos utilizada en la llamada.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Calculadora\r\n{\r\n    public int Sumar(int a, int b)\r\n    {\r\n        return a + b;\r\n    }\r\n\r\n    public double Sumar(double a, double b)\r\n    {\r\n        return a + b;\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Polimorfismo Din\u00e1mico:<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>M\u00e9todos Virtuales y Anulaci\u00f3n (Override):<\/strong> En C#, puedes declarar un m\u00e9todo como <code>virtual<\/code> en una clase base y luego anularlo en clases derivadas utilizando la palabra clave <code>override<\/code>. Esto permite que un objeto de la clase derivada se comporte de manera espec\u00edfica, incluso cuando se llama a trav\u00e9s de una referencia de la clase base.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Figura\r\n{\r\n    public virtual void Dibujar()\r\n    {\r\n        Console.WriteLine(\"Dibujando una figura gen\u00e9rica\");\r\n    }\r\n}\r\n\r\npublic class Circulo : Figura\r\n{\r\n    public override void Dibujar()\r\n    {\r\n        Console.WriteLine(\"Dibujando un c\u00edrculo\");\r\n    }\r\n}\r\n\r<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Interfaces y Polimorfismo:<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Las interfaces en C# permiten definir un contrato com\u00fan que las clases pueden implementar. Puedes utilizar interfaces para lograr el polimorfismo, ya que varios objetos de diferentes clases pueden implementar la misma interfaz y ser tratados de manera uniforme a trav\u00e9s de esa interfaz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public interface IDibujable\r\n{\r\n    void Dibujar();\r\n}\r\n\r\npublic class Circulo : IDibujable\r\n{\r\n    public void Dibujar()\r\n    {\r\n        Console.WriteLine(\"Dibujando un c\u00edrculo\");\r\n    }\r\n}\r\n\r\npublic class Cuadrado : IDibujable\r\n{\r\n    public void Dibujar()\r\n    {\r\n        Console.WriteLine(\"Dibujando un cuadrado\");\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El polimorfismo es fundamental en la POO, ya que permite escribir c\u00f3digo m\u00e1s gen\u00e9rico y reutilizable al tratar objetos de manera uniforme a trav\u00e9s de interfaces comunes y al permitir que las clases derivadas definan su propio comportamiento.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Ejemplo: Interfaces y Polimorfismo en Figuras Geom\u00e9tricas<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, crearemos una interfaz llamada <code>IFigura<\/code> que define un m\u00e9todo para calcular el \u00e1rea de una figura geom\u00e9trica. Luego, implementaremos esta interfaz en varias clases que representan diferentes figuras geom\u00e9tricas, como c\u00edrculos y rect\u00e1ngulos. Utilizaremos el polimorfismo para calcular el \u00e1rea de estas figuras de manera uniforme a trav\u00e9s de la interfaz com\u00fan.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using System;\r\n\r\n\/\/ Definici\u00f3n de la interfaz IFigura que incluye un m\u00e9todo para calcular el \u00e1rea.\r\npublic interface IFigura\r\n{\r\n    double CalcularArea();\r\n}\r\n\r\n\/\/ Implementaci\u00f3n de la interfaz IFigura para un c\u00edrculo.\r\npublic class Circulo : IFigura\r\n{\r\n    public double Radio { get; set; }\r\n\r\n    public Circulo(double radio)\r\n    {\r\n        Radio = radio;\r\n    }\r\n\r\n    public double CalcularArea()\r\n    {\r\n        return Math.PI * Math.Pow(Radio, 2);\r\n    }\r\n}\r\n\r\n\/\/ Implementaci\u00f3n de la interfaz IFigura para un rect\u00e1ngulo.\r\npublic class Rectangulo : IFigura\r\n{\r\n    public double Largo { get; set; }\r\n    public double Ancho { get; set; }\r\n\r\n    public Rectangulo(double largo, double ancho)\r\n    {\r\n        Largo = largo;\r\n        Ancho = ancho;\r\n    }\r\n\r\n    public double CalcularArea()\r\n    {\r\n        return Largo * Ancho;\r\n    }\r\n}\r\n\r\npublic class Program\r\n{\r\n    public static void Main()\r\n    {\r\n        \/\/ Creaci\u00f3n de instancias de figuras geom\u00e9tricas.\r\n        IFigura circulo = new Circulo(5.0);\r\n        IFigura rectangulo = new Rectangulo(4.0, 6.0);\r\n\r\n        \/\/ C\u00e1lculo de \u00e1reas utilizando polimorfismo.\r\n        double areaCirculo = circulo.CalcularArea();\r\n        double areaRectangulo = rectangulo.CalcularArea();\r\n\r\n        \/\/ Mostrar resultados.\r\n        Console.WriteLine($\"\u00c1rea del c\u00edrculo: {areaCirculo}\");\r\n        Console.WriteLine($\"\u00c1rea del rect\u00e1ngulo: {areaRectangulo}\");\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, creamos una interfaz <code>IFigura<\/code> que incluye el m\u00e9todo <code>CalcularArea()<\/code>. Luego, implementamos esta interfaz en las clases <code>Circulo<\/code> y <code>Rectangulo<\/code>. Utilizamos el polimorfismo para calcular el \u00e1rea de estas figuras de manera uniforme a trav\u00e9s de la interfaz com\u00fan, lo que facilita el c\u00e1lculo de \u00e1reas sin importar el tipo de figura geom\u00e9trica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Resumen:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este cap\u00edtulo, exploramos los fundamentos de la Programaci\u00f3n Orientada a Objetos (POO) en el contexto del lenguaje de programaci\u00f3n C#. Aqu\u00ed est\u00e1n los puntos clave que hemos cubierto:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Conceptos de POO (Programaci\u00f3n Orientada a Objetos): <\/strong>Explicamos en detalle los conceptos fundamentales de la POO, incluyendo objetos, clases, m\u00e9todos, propiedades, herencia, encapsulamiento y polimorfismo. Destacamos las ventajas de la POO en el dise\u00f1o de software<\/li>\n\n\n\n<li><strong>Clases y Objetos en C#: <\/strong>Definimos y creamos clases en C#. Mostramos c\u00f3mo crear objetos a partir de clases y c\u00f3mo trabajar con propiedades y m\u00e9todos de clase.<\/li>\n\n\n\n<li><strong>Herencia en C#: <\/strong>Explicamos la herencia como un concepto fundamental de la POO. Demostramos la creaci\u00f3n de clases derivadas y base en C#, as\u00ed como el uso de las palabras clave \u00abbase\u00bb y \u00aboverride\u00bb.<\/li>\n\n\n\n<li><strong>Ejemplo: Herencia en Acci\u00f3n: Clases \u00abVeh\u00edculo\u00bb y \u00abCoche\u00bb: <\/strong>Creamos una clase base \u00abVeh\u00edculo\u00bb y una clase derivada \u00abCoche\u00bb para mostrar c\u00f3mo la herencia permite compartir atributos y comportamientos.<\/li>\n\n\n\n<li><strong>Encapsulamiento en C#: <\/strong>Definimos el encapsulamiento y su importancia en la POO. Explicamos el uso de modificadores de acceso como public, private, protected e internal, as\u00ed como propiedades y m\u00e9todos encapsulados.<\/li>\n\n\n\n<li><strong>Polimorfismo en C#: <\/strong>Explicamos el polimorfismo y sus tipos, est\u00e1tico y din\u00e1mico. Implementamos polimorfismo utilizando interfaces y clases abstractas.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Este cap\u00edtulo sienta las bases para comprender la POO en C# y c\u00f3mo utilizarla para dise\u00f1ar aplicaciones eficientes y flexibles. Los conceptos de herencia, encapsulamiento y polimorfismo son fundamentales para crear software escalable y mantenible en C#. En el pr\u00f3ximo cap\u00edtulo, exploraremos a\u00fan m\u00e1s los conceptos avanzados de C# y su aplicaci\u00f3n en el desarrollo de software pr\u00e1ctico.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a><strong>Ejemplo: Creaci\u00f3n de una Jerarqu\u00eda de Clases de Animales en C#<\/strong><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejercicio, crearemos una jerarqu\u00eda de clases que representan diferentes tipos de animales utilizando herencia y polimorfismo en C#. El objetivo es modelar diferentes comportamientos de estos animales en un programa simple. Aqu\u00ed est\u00e1 el paso a paso:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Paso 1: Definir la Clase Base \u00abAnimal\u00bb<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Animal\r\n{\r\n    public string Nombre { get; set; }\r\n    public int Edad { get; set; }\r\n\r\n    public virtual void HacerSonido()\r\n    {\r\n        Console.WriteLine(\"El animal hace un sonido.\");\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este paso, hemos creado una clase base llamada \u00abAnimal\u00bb que tiene propiedades comunes como Nombre y Edad. Tambi\u00e9n hemos definido un m\u00e9todo virtual llamado \u00abHacerSonido\u00bb que imprimir\u00e1 un mensaje gen\u00e9rico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Paso 2: Crear Clases Derivadas para Tipos de Animales Espec\u00edficos<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Perro : Animal\r\n{\r\n    public override void HacerSonido()\r\n    {\r\n        Console.WriteLine(\"El perro ladra.\");\r\n    }\r\n}\r\n\r\npublic class Gato : Animal\r\n{\r\n    public override void HacerSonido()\r\n    {\r\n        Console.WriteLine(\"El gato maulla.\");\r\n    }\r\n}\r\n\r\npublic class Pajaro : Animal\r\n{\r\n    public override void HacerSonido()\r\n    {\r\n        Console.WriteLine(\"El p\u00e1jaro canta.\");\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este paso, hemos creado clases derivadas para representar tipos de animales espec\u00edficos como \u00abPerro,\u00bb \u00abGato\u00bb y \u00abP\u00e1jaro.\u00bb Cada una de estas clases hereda de la clase base \u00abAnimal\u00bb y proporciona su propia implementaci\u00f3n del m\u00e9todo \u00abHacerSonido.\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Paso 3: Crear Instancias de Animales y Usar Polimorfismo<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Program\r\n{\r\n    static void Main(string&#91;] args)\r\n    {\r\n        Animal miAnimal = new Perro();\r\n        miAnimal.Nombre = \"Max\";\r\n        miAnimal.Edad = 3;\r\n\r\n        Animal otroAnimal = new Gato();\r\n        otroAnimal.Nombre = \"Whiskers\";\r\n        otroAnimal.Edad = 2;\r\n\r\n        Animal tercerAnimal = new Pajaro();\r\n        tercerAnimal.Nombre = \"Tweetie\";\r\n        tercerAnimal.Edad = 1;\r\n\r\n        Console.WriteLine($\"Nombre: {miAnimal.Nombre}, Edad: {miAnimal.Edad}\");\r\n        miAnimal.HacerSonido();\r\n\r\n        Console.WriteLine($\"Nombre: {otroAnimal.Nombre}, Edad: {otroAnimal.Edad}\");\r\n        otroAnimal.HacerSonido();\r\n\r\n        Console.WriteLine($\"Nombre: {tercerAnimal.Nombre}, Edad: {tercerAnimal.Edad}\");\r\n        tercerAnimal.HacerSonido();\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En el m\u00e9todo Main, hemos creado instancias de diferentes tipos de animales y las hemos inicializado con valores de nombre y edad. Luego, hemos llamado al m\u00e9todo \u00abHacerSonido\u00bb de cada animal, y gracias al polimorfismo, cada animal emite su propio sonido espec\u00edfico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este ejercicio demuestra c\u00f3mo utilizar herencia y polimorfismo en C# para modelar diferentes comportamientos en una jerarqu\u00eda de clases. Puedes expandir esta jerarqu\u00eda agregando m\u00e1s clases de animales y comportamientos seg\u00fan sea necesario.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este cap\u00edtulo, nos adentraremos en el emocionante mundo de la Programaci\u00f3n Orientada a Objetos (POO) y exploraremos c\u00f3mo se aplica en el lenguaje de programaci\u00f3n C#. La POO es un paradigma fundamental en el desarrollo de software moderno y ofrece una forma poderosa y eficiente de dise\u00f1ar y organizar programas. En este cap\u00edtulo, presentaremos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2107,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[34],"tags":[],"class_list":["post-656","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-y-otras-hierbas"],"uagb_featured_image_src":{"full":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Programacion-Orientada-a-Objetos-en-C.jpg",1000,666,false],"thumbnail":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Programacion-Orientada-a-Objetos-en-C-150x150.jpg",150,150,true],"medium":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Programacion-Orientada-a-Objetos-en-C-300x200.jpg",300,200,true],"medium_large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Programacion-Orientada-a-Objetos-en-C-768x511.jpg",768,511,true],"large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Programacion-Orientada-a-Objetos-en-C.jpg",1000,666,false],"1536x1536":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Programacion-Orientada-a-Objetos-en-C.jpg",1000,666,false],"2048x2048":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Programacion-Orientada-a-Objetos-en-C.jpg",1000,666,false]},"uagb_author_info":{"display_name":"arquitecto","author_link":"https:\/\/stackcodelab.com\/blog\/author\/arquitecto\/"},"uagb_comment_info":0,"uagb_excerpt":"En este cap\u00edtulo, nos adentraremos en el emocionante mundo de la Programaci\u00f3n Orientada a Objetos (POO) y exploraremos c\u00f3mo se aplica en el lenguaje de programaci\u00f3n C#. La POO es un paradigma fundamental en el desarrollo de software moderno y ofrece una forma poderosa y eficiente de dise\u00f1ar y organizar programas. En este cap\u00edtulo, presentaremos&hellip;","_links":{"self":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/comments?post=656"}],"version-history":[{"count":2,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/656\/revisions"}],"predecessor-version":[{"id":2108,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/656\/revisions\/2108"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media\/2107"}],"wp:attachment":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media?parent=656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/categories?post=656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/tags?post=656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}