Programación Orientada a Objetos – Abstracción (POO Parte 2)

La abstracción es el primer pilar que se realiza en el desarrollo de software, es la base de toda programación orientada a objetos, la abstracción es simplemente un acto mental en el que se aísla conceptualmente una propiedad o función concreta de un objeto, básicamente es aislar los elementos de su entorno.

Supongamos que nos encargan desarrollar un sistema de gestión para una agencia inmobiliaria; lo primero que tendríamos que hacer es: Observar, ¿cómo funciona? ¿Qué procesos y transacciones maneja? y toda entidad involucrada.

Por otro lado, la mayoría que inicia en el mundo de desarrollo de software, sabe que para construir un sistema o aplicación, el paso previo es modelar el sistema, conocido como UML (lenguaje de modelado unificado). El modelado del sistema es esencial para el análisis y diseño de sistemas de cómputo, y así reunir todos los requerimientos (en este caso agencia inmobiliaria), con ello logramos un nivel de abstracción superior e infaltable para la documentación del sistema. Además, gracias a la diagrama de clases que se realiza en UML, tendremos la herencia de clases más óptima.

Sin embargo, para proyectos académicos o una práctica simple, no es necesario modelar el sistema de software, tan sólo será necesario tu sentido común en la abstracción.

Aislar elementos (Entidades)

Bien, volviendo al tema y al ejemplo, luego de realizar un previo estudio a la agencia inmobiliaria, tenemos que aislar los elementos.

Los elementos aislados de la agencia inmobiliaria son: obviamente inmuebles, ya que las agencias inmobiliarias se dedican a la venta y alquiler de inmuebles, habrá clientes, empleados, transacciones y entre otras.

  • Inmuebles
  • Transacciones
  • Clientes
  • Empleados
  • Etc.

Seleccionar características del elemento (Entidad)

Luego de aislar los elementos, debemos de seleccionar todas las características importantes de cada elemento (Entidad), en términos técnicos: Identificar los atributos y comportamientos del objeto, por ejemplo.

Los atributos de inmueble sería: El tipo de inmueble (si es una casa, departamento o un simple terreno), la ubicación, el área, cantidad de dormitorios, el precio y entre otras.

Atributos – Estados

  • Tipo de inmueble.
  • Ubicación.
  • Área de terreno.
  • Área construida.
  • Cantidad de habitaciones.
  • Cantidad de baños.
  • Años de antigüedad.
  • Precio

Seguidamente identificar los comportamientos del elemento (identificar los métodos del objeto), por ejemplo.
Los comportamientos del inmueble es: se puede vender, alquilar o pre-venta.

Métodos – Comportamientos

  • Venta
  • Alquiler
  • Preventa

Con estos datos de abstracción, ya tenemos una base para crear la clase inmueble orientada a objetos, entonces pasemos este ejemplo a la programación.

Ejemplo C#, VB.NET

  • Crearemos un proyecto de nombre agencia inmobiliaria en visual estudio.
  • Agreguemos una clase de nombre inmueble.
  • Creamos los atributos y métodos.
  • Puedes crear los constructores con parámetros si es necesario (opcional).
    public class Inmueble
    {
        //Estados - Atributos
        public string tipo;
        public string ubicacion;
        public double areaConstruida;
        public double areaTerreno;
        public int cantDormitorios;
        public int cantPisos;
        public int cantBaños;
        public double precio;

        //Comportamientos - Métodos
        public void vender()
        {
            Console.WriteLine(tipo+ " VENDIDA\nMas detalles:");
            Console.WriteLine("\tUbicación: " + ubicacion);
        }

        public void Alquilar()
        {
            Console.WriteLine(tipo + " puesto en ALQUILER\nMas detalles:");
            Console.WriteLine("\tUbicación: " + ubicacion);
        }

        public void preventa()
        {
            Console.WriteLine(tipo + " en PRE-VENTA\nMas detalles:");
            Console.WriteLine("\tUbicación: " + ubicacion);
        }

        //Constructores
        public Inmueble()
        {

        }

        public Inmueble(string tipo, string ubicacion, double areaTerreno, double precio)
        {
            this.tipo = tipo;
            this.ubicacion = ubicacion;
            this.areaTerreno = areaTerreno;
            this.precio = precio;
        }

        public Inmueble(string tipo, string ubicacion, double areaConstruida, double areaTerreno, int cantDormitorios, int cantPisos, int cantBaños, double precio)
        {
            this.tipo = tipo;
            this.ubicacion = ubicacion;
            this.areaConstruida = areaConstruida;
            this.areaTerreno = areaTerreno;
            this.cantDormitorios = cantDormitorios;
            this.cantPisos = cantPisos;
            this.cantBaños = cantBaños;
            this.precio = precio;
        }
    }
    Public Class Inmueble

        'Estados - Atributos'
        Public tipo As String
        Public ubicacion As String
        Public areaConstruida As Double
        Public areaTerreno As Double
        Public cantDormitorios As Integer
        Public cantPisos As Integer
        Public cantBaños As Integer
        Public precio As Double

        'Comportamientos - Métodos'
        Public Sub vender()
            Console.WriteLine(tipo & " VENDIDA" & vbLf & "Mas detalles:")
            Console.WriteLine("" & vbTab & "Ubicación: " &  ubicacion)

        End Sub

        Public Sub Alquilar()
            Console.WriteLine(tipo  & " puesto en ALQUILER" & vbLf & "Mas detalles:")
            Console.WriteLine("" & vbTab & "Ubicación: " &  ubicacion)

        End Sub

        Public void pr Event Function RaiseEvent () As 
            Console.WriteLine(tipo  & " en PRE-VENTA" & vbLf & "Mas detalles:")
            Console.WriteLine("" & vbTab & "Ubicación: " &  ubicacion)

        End Function

        'Constructores'
        Public Sub New()


    End Sub

        Public Sub New(tipo As String, ubicacion As String, areaTerreno As Double, precio As Double)
            Me.tipo = tipo
            Me.ubicacion = ubicacion
            Me.areaTerreno = areaTerreno
            Me.precio = precio

        End Sub

        Public Sub New(tipo As String, ubicacion As String, areaConstruida As Double, areaTerreno As Double, cantDormitorios As Integer, cantPisos As Integer, cantBaños As Integer, precio As Double)
            Me.tipo = tipo
            Me.ubicacion = ubicacion
            Me.areaConstruida = areaConstruida
            Me.areaTerreno = areaTerreno
            Me.cantDormitorios = cantDormitorios
            Me.cantPisos = cantPisos
            Me.cantBaños = cantBaños
            Me.precio = precio

        End Sub

    End Class 

Para probar, crearemos un objeto Inmueble1 e Inmueble 2 a partir de la clase inmueble, definiremos los atributos e invocaremos un método.

    static void Main(string[] args)
    {
        Inmueble inmueble1 = new Inmueble();
        inmueble1.tipo = "Departamento duplex";
        inmueble1.ubicacion = "Av Jose";
        inmueble1.areaConstruida = 250;
        inmueble1.areaTerreno = 150;
        inmueble1.cantDormitorios = 4;
        inmueble1.cantPisos = 2;
        inmueble1.cantBaños = 3;
        inmueble1.precio = 159000.556;
        inmueble1.vender();

        Inmueble inmueble2 = new Inmueble(
            "Terreno",
            "Av Argentina",
            320,
            987521.56);
       inmueble2.Alquilar();
    Shared Sub Main(args As String())

        Dim inmueble1 As New Inmueble()
        inmueble1.tipo = "Departamento duplex"
        inmueble1.ubicacion = "Av Jose"
        inmueble1.areaConstruida = 250
        inmueble1.areaTerreno = 150
        inmueble1.cantDormitorios = 4
        inmueble1.cantPisos = 2
        inmueble1.cantBaños = 3
        inmueble1.precio = 159000.556
        inmueble1.vender()

        Dim inmueble2 As New Inmueble( "Terreno", "Av Argentina", 320, 987521.56)
        inmueble2.Alquilar()
End Sub

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *