Skip to content
Inicio » Data Science » Programación Orientada a Objetos (Lo Básico)

Programación Orientada a Objetos (Lo Básico)

Este artículo tiene como fin explicar de forma simple que es una programación orientada a objetos. Nótese las palabras destacas. No será una explicación exhaustiva, sino que el foco es entender la idea de esta programación. Este tema se toca porque es relevante entender un poco de este concepto para el curso de Data Science. Python que es el programa que se usa en el curso, ¡tiene una programación orientada a objetos!.

En esta unidad por temas pedagógicos los ejemplos de código son realizado en Java. Esto se justifica, ya que en Java hay que ser más específicos cuando se definen las variables, y este extra esfuerzo será útil para entender varios conceptos.

Primero que todo hay que definir que es un objeto. Ya que para entender en que se enfoca está programación hay que entender por lo menos, todas las palabras de “programación orientada a objetos”.

Un objeto en simple es todo lo que existe en el mundo real como un objeto y más.

De seguro se debe preguntar ¿A qué se refiere que todo es un objeto ?

Todo es Un Objeto

Campos o Atributos (Fields)

Por ejemplo, al mirar nuestro escritorio si vemos un lápiz, eso es un objeto y el escritorio donde está también. En concreto, lo que define a un objeto son ciertas características básicas que son sus campos (Fields) que los definen. Por ejemplo, un escritorio tiene:

  • Un número entero (1,2,..,n) de patas.
  • Una tabla para apoyar cosas con un cierto largo y ancho (dimensiones pueden ser números reales positivos ej. 12,5 cm).
  • Una altura (ya sea fija o móvil).
  • Estado (nuevo, deteriorado, destruida)

A su vez un lápiz también tiene ciertas características:

  • Largo (número real).
  • Diámetro (suponiendo todos los lápices son relativamente cilíndricos)
  • Tipo de lápiz (tinta, plumón, etc)
  • Cantidad de tinta restante (o grafito).

Ejemplo de código (java):

private int patas;
private double ancho;
private double largo;
private double alto;
private boolean rota; 
// Este es una variable binaria. Si es verdadera (true) la mesa no
// se puede usar
private int estado; 
// 5 excelente estado, ...,1 pésimo estado, 0 mesa rota
// la palabra private evita que por accidente se cambien algún atributo del objeto 
// mesa. Si se quiere cambiar algún atributo es aconsejable hacerlo con un método 
// public.
// Note que es necesario definir de antemano el tipo de variable (entera, decimal, boolean, etc).
Lista

Ahora imagínese usted creará estos objetos (de alguna forma) en un computador. ¿Siente que falta algo?

Quizás presintió que falto algo pero no supo qué, y la respuesta es…

Métodos (Methods)

Si usted define los objetos lápiz y escritorio, su ordenador lo único que hará es guardar ciertos valores para un objeto llamado escritorio y otro lápiz. Pero probablemente a usted le gustaría que esos objetos hicieran algo (o les sucediera algo en el tiempo). Por ejemplo, su escritorio podría:

  • Tener un método que fuera sostener. Básicamente si un objeto se pone encima de él, el escritorio lo sostiene.
  • Moverse. Si necesita mover la mesa y la empuja o jala con una fuerza mayor a la que produce el roce de esta con el suelo, se mueve.
  • Además ser reparada. Si la mesa está deteriorada ¡sería estupendo que se tuviera el método para renovarla o repararla!
  • Ser dañada. Esto no es algo que se quisiera le pasará a una mesa. Pero es algo que sí ocurre. Si no existiera este método, las mesas que se crean serían eternas.

Todo lo marcado en negro se puede programar con líneas de código simple como if.

Ejemplo de código (java):

// Se programa solo el último método, los otros quedan propuestos al entusiasta
void loseLife (int estado){
    this.estado=estado-1;
}
// Este método se ocupa para dañar (o deteriorar) el objeto mesa. 
// Void se ocupa para indicar que el método no entrega ningún valor cuando se llama.
// this.estado modifica el estado del objeto (mesa en este caso) dañándolo en 1.
//Básicamente esto se lee así: Es un método que cuando se llama no crea ninguna //variable nueva pero sí modifica uno de los fields o atributos del objeto que lo llama
// en particular modifica el atributo estado. 
// void es una palabra clave que define una característica del método. Hay otras //palabras así que definen un método como por ejemplo public, private (estas son para definir temas de privacidad) o static (este se explicará más adelante).

¿Cómo acceder a este método? Respuesta con un punto “. ” Así:

mesaLiving.loseLife(mesaLiving.estado); // Así podemos dañar la mesa del living!

Se deja propuesto que piense en los métodos que esperaría cumpliera un lápiz. ¡Si quiere puede escribirlos en la sección de comentarios!

Ahora suponga el siguiente escenario, usted quiere programar un juego (como los Sims). En donde existen muchas mesas distintas. ¿Tendrá que definir todos los campos y métodos para cada una ellas? La respuesta es: ¡no necesariamente gracias a las clases y sus constructores!

Clases

Las clases hay que imaginarlas como una abstracción de lo que es y puede hacer (y suceder) a un objeto. Es decir las clases son:

  • Las que indican que puede hacer y no un objeto. Además los campos que definen a ese objeto. Es decir, las clases son como los diccionarios que definen a sus objetos en algún programa. E incluso, se podría decir que las clases son más que un diccionario, ya que aparte de definir que hace un objeto, detallan como lo hacen (como un manual). Esto lo realizan con los métodos. Es decir, todos los objetos son casos particulares, pero existentes de alguna clase. Las clases son abstractas en el sentido que existen para crear objetos o métodos que funcionan una vez que son llamados por el objeto creado.
  • Abstractas. Es decir que “no existen en el mundo”. Si se crea un juego como los Sims existen solo los objetos mesa. Estás mesas llaman a la clase Mesa que las definen. Pero la Clase mesa no está explícitamente en el juego.
alguien trabajando en un diseño

Dicho de otra forma las clases contienen todos los métodos y campos que necesita sus objetos. Los objetos solo hacen usos de estos métodos y contienen ciertos valores para sus campos. Vale decir, los programas contienen solo los objetos y cada objeto es definido por alguna Clase y creado por su constructor (¡siguiente apartado!).

Ejemplo construcción de una clase (java):

public class Mesa{
// Así se crea una clase Mesa 
// Importantísimo, note que Mesa se escribió con MAYÚSCULA la primera letra! estos 
// siempre es así en java!!
// ¡Aquí van los métodos y constructores!
}

Constructores

maquina de construcción en la playa

Ellos son un método especial dentro de las clases que indican como parten los campos una vez que se crea (e inicializa) un objeto.

Por ejemplo, un constructor de mesa es una mesa “típica”. Y a esa mesa típica le podríamos modificar sus atributos o campos “típicos”. Pero, ¿Qué es una mesa típica?

Podríamos decir que es una mesa con estas características (ejemplo en Java) corresponde a una mesa típica:

Mesa(double ancho,double largo,double alto){
   this.estado=5;
   this.patas=4;
   this.ancho=ancho;
   this.largo=largo;
   this.alto=alto;
   rota=false;
}

Para crear una mesa hay que escribir las siguientes lineas de código.

Mesa mesaLiving=New Mesa(12, 15, 50.5);

Claramente hay mucho más cuando se trabaja con programación orientada a objetos. Como la capacidad que tienen estos de heredar atributos y métodos entre otros cosas. Sin embargo, lo presentado son los ladrillos con lo que se construye el resto. A opinión del autor esto es de suma importancia, y el formato de Java es vital de entender (pese a que en el curso de Data Science se trabaje en Python), esto porque:

  • Se especifica el formato de las variables. Ciertas métodos funcionan con ciertos tipos de variables solamente como String o números (doubles o “integer”). Por ejemplo, sacar el promedio entre dos variables tiene sentido solamente entre números. Esto de repente en python se olvida, pero es siempre importante saber con tipo de data estamos trabajando.
  • Pensar en los atributos de los objetos y sus métodos asociados. En python, también se trabajan con objetos y cada uno de ellos tiene ciertas características y funciones posibles asociadas. Usar librerías y acceder a sus métodos con el “.” nos permite usar estas funciones.
  • ¡Entender que es objeto (por lo menos a muy grandes rasgos)! Python es un lenguaje con programación orientada a objetos. Entender sus componentes abre las puertas para usar mejor sus funciones.

Deja un comentario