Programación Orientada a Objetos (POO - en inglés OOP)

Image courtesy of digitalart - FreeDigitalPhotos.net
La programación orientada a objetos es un paradigma o un modelo de programación que pretende representar por medio de atributos y métodos (codificados en un lenguaje de programación) cualquier cosa, ya sea del mundo real o no.

Conceptos iniciales

Antes de explicar como funciona es necesario conocer algunas palabras que forman parte del lenguaje común de la programación orientada a objetos. Aquí unas definiciones como las transmito a mis alumnos.

Clase:

Una clase es una representación mediante código (C#, Java y otros) de cualquier cosa, es es la forma en que el programador define que caracteriza a algo y que comportamientos tiene, por ejemplo:

Si se quiere representar un vehículo se podrían obtener las siguientes características (Atributos):
  • Un vehículo tiene un número de llantas
  • También tendrá una marca
  • Un número de caballos de fuerza
  • Un color
  • Entre otras cualidades que diferencia a un vehículo de cualquier cosa que no es un vehículo.
 Pero un vehículo no es solo las cualidades que lo definen como tal, también es las acciones que puede realizar:
  • Arrancar
  • Frenar
  • Girar
  • Acelerar
Cada acción (Método) además de ejecutarse puede recibir una determinada información (parámetro) que puede modificar la forma en que dicha acción se realiza, por ejemplo se puede acelerar con más o menos potencia.

Así como existe la forma de representar lo anterior mediante código, también existen formas para representarlo de una manera gráfica, la siguiente es una representación mediante un lenguaje de modela comúnmente utilizado cuando se realiza programación orientada a objetos (UML):



El equivalente en código (Todo el código en esta página usará C# como lenguaje de programación)


    class Vehiculo
    {
        public int Numero_llantas;
        public string Marca;
        public float Caballos;
        public string Color;

        public bool Arrancar()
        {
            // Aquí lo que debe hacer para arrancar
            return true;
        }

        public bool Frenar(float Fuerza)
        {
            // Aquí lo que debe hacer para frenar
            return true;
        }

        public void Girar(float Angulo)
        {
            // Aquí lo que debe hacer para girar
        }

        public void Acelerar(float Fuerza)
        {
            // Aquí lo que debe hacer para Acelerar
        }
    }

Objeto: 

Recurriendo a la definición más conocida, un objeto es la instancia de una clase. Aunque este concepto es bastante especifico para cualquiera que lleve algún tiempo con la OOP, es de esperar esto no diga nada a alguien nuevo en la programación, incluso puede crear más confusión, como lo he podido identificar en muchos alumnos, por tal razón presento una definición un tanto personal que busca que aquellos que apenas están empezando a conocer la programación entiendan de mejor manera que es un objeto.

Como se vio, una clase es la forma en que un programador busca representar mediante código algo (cualquier cosa), pues dicho código no deja de ser simplemente código, inerte inanimado es como es como tener el ADN de una persona, pero mientras no exista ninguna persona ese ADN no será más que una serie de bases nitrogenadas: adenina, guanina, citosina y timina, en un archivo. Siguiendo esta descripción una persona (en sentido de POO), vendría a ser el objeto es decir la representación en vida de las capacidades y cualidades descritas en clase.

Al igual que pueden existir 7 mil millones de personas, se podrían tener cualquier numero de representaciones o instancias de una clase, donde cada representación (objeto), podría tener valores diferentes para cada uno de sus atributos, por ejemplo, un atributo de las personas puede ser el color de los ojos, todas las personas tienen color de ojos, solo que algunos los tienen azules otros verdes, otros marrón, etc.


Siguiendo con el ejemplo del vehículo, la forma de crear (dar vida), y por ende poder dar valor a sus cualidades e invocar o ejecutar sus métodos, es mediante el uso de la palabra new, y la forma de hacer referencia a sus atributos y métodos es poniendo un punto entre el objeto y el atributo. Es importante resaltar que en programación un objeto no es más que una variable (aunque una variable que es la representación viva de la clase). A continuación como se representa lo anterior en código:



            Vehiculo Camion = new Vehiculo();
            Camion.Numero_llantas = 16;
            Camion.Marca = "MACK";
            Camion.Caballos = 1000;
            Camion.Color = "Azúl";

            Vehiculo Motocicleta = new Vehiculo();
            Motocicleta.Numero_llantas = 2;
            Motocicleta.Marca = "Ducati";
            Motocicleta.Caballos = 150;
            Motocicleta.Color = "Roja";

Como se puede ver, un vehículo puede ser cualquier cosa que se considere como tal, una motocicleta, un camión, un auto familiar, etc, siempre y cuando se pueda representar con las características y las acciones definidas en la clase.

Atributo:

Un atributo es una cualidad de los muchos que caracterizan algo, por ejemplo: Color de piel, número de patas, Valor de una factura, etc. Todo atributo es un dato y como tal está enmarcado en lo que en programación se conoce como tipo de datos, es decir la naturaleza del dato, siendo más concretos un tipo de dato puede ser: numérico (Número de llantas), texto (Nombre de la persona), fecha (Fecha de nacimiento), etc.

Método:

Toda acción que pueda realizar un objeto se conoce como método, aunque este no es necesariamente original de la programación orientada a objetos, ésta si hace uso intensivo de ella. Un método en otros términos es una función, es la forma en que se puede por u lado reducir la construcción de código mediante la re-utilización y por otro lado simplifica la misma mediante el encapsulamiento (ocultamiento) de funcionalidades. Un ejemplo habitual es el envío de correos electrónicos, para un programador es ineficiente si tuviera, siempre que necesite envía un correo, escribir la lógica que permite comunicarse con un servidor de correo y solicitarle el envío de uno. En lugar de ello simplemente invoca una función diseñada para tal fin pasando los parámetros que requiera la función.

Es muy importante tener en cuenta que una función, al igual que un atributo, puede tener un valor determinado, lo que se conoce como valor de retorno (o simplemente retorno). Por ejemplo la función bool Frenar(float Fuerza) retorna un valor de falso o verdadero que puede indicar si el vehículo se detuvo o no.

Parámetro: 

Un parámetro es un dato que se envía a una función para modificar el comportamiento de la misma dependiendo el valor mismo que se envíe, por ejemplo en bool Frenar(float Fuerza), se envía una variable tipo float llamada Fuerza quele dira a la función con que intensidad debe frenar el vehículo.

Padre - Hijo - Herencia:

Este es uno de los conceptos más significativos de la POO, permite optimizar la forma en que se programa ya que reduce las líneas de código necesarias para muchas tareas. De igual manera en que un padre hereda cualidades a sus hijos, color de ojos, contextura física, color de piel, etc, una clase puede heredar sus cualidades a otras.

Anteriormente se dijo que un vehículo puede ser cualquier cosa que se identifique como tal, sin embargo hay vehículos que tiene características especiales, que los diferencian de otros vehículos sin dejar de ser vehículos en si mismos. Por ejemplo una motocicleta es un vehículo tanto como lo es un camión, pero ambos tienen características especiales que los diferencian unos de otros.

Un camión tiene puertas en tanto que una motocicleta no, por otro lado la motocicleta tiene manillar (casi no encuentro algo que tengan las motos y los Camiones nos ;)), es caso es que no es simplemente que los valores en sus atributos sean diferentes como es el caso del número de llantas, sino que tienen diferentes atributos por eso son dos cosas diferentes aun que con un mismo padre.

En el ejemplo anterior el padre sería el Vehículo en tanto que Motocicleta y Camión Serían los hijos:



Para representar la herencia cada lenguaje puede usar sus propias palabras, por ejemplo en C# se usan los dos puntos ":" para decir que una clase A hereda de una clase B, Así:


    class Camion : Vehiculo
    {
        public int Numero_Puertas;
    }

De  igual manera se pueden creaqr objetos específicos de cada hijo con la salvedad que no será necesario reescribir los atributos o métodos del padres, sino que la clase hijo los hereda y por tanto puede hacer uso de ellos.


    class Camion : Vehiculo
    {
        public int Numero_Puertas;
    }


y para crear los objetos se podría usar:


        Camion Camion1 = new Camion();
        Camion1.Numero_llantas = 16;
        Camion1.Marca = "MACK";
        Camion1.Caballos = 1000;
        Camion1.Color = "Azúl";
        Camion1.Numero_Puertas = 2;

        Motocicleta Motocicleta1 = new Motocicleta();
        Motocicleta1.Numero_llantas = 2;
        Motocicleta1.Marca = "Ducati";
        Motocicleta1.Caballos = 150;
        Motocicleta1.Color = "Roja";
        Motocicleta1.Manillar = "Muy chulo";









No hay comentarios:

Publicar un comentario

Programación Orientada a Objetos (POO - en inglés OOP)

Image courtesy of digitalart - FreeDigitalPhotos.net La programación orientada a objetos es un paradigma o un modelo de programación qu...