En este tema pretendo enseñar algunos fundamentos básicos de la programación orientada a objetos (poo) basada en clases útiles para los nuevos y no tan nuevos en el mundillo.
En este tema me centraré en Java para explicarlo, pero es aplicable a todos los lenguajes basado en clases.
IntroducciónLa orientación a objetos es un tipo de programación que se basa en emular el mundo real a la hora de programar estableciendo estructuras con sus propias características propias o estado, llamadas atributos y sus propias acciones o comportamiento llamadas métodos.
Dichos objetos, aunque puedan compartir comportamiento, pueden tener características distintas, por ejemplo, dos coches tienen los mismos comportamientos pero no tienen iguales características.
A la hora de implementar esto en un lenguaje hay dos vías, la basada en clases, que vamos a ver a continuación, y la basada en prototipos, algo más compleja y que es más común en lenguajes de scripting tipo JavaScript.
¿Qué es una clase?Una clase es una estructura que emula a un objeto o un ser, por ejemplo un cocodrilo, con su estado o características definidas como variables y su comportamiento o acciones definidas como funciones.
Inicialmente una clase tiene el siguiente aspecto:
Definir atributosLos atributos son el estado del objeto, sus características en un momento dado, y varían, o no, a lo largo de la ejecución del programa, su vida.
Estos atributos pueden ser de cualquier tipo, desde enteros (
int) hasta cadenas de texto (
String) o incluso otros objetos.
En el caso del cocodrilo son estos:
Se pueden poner en cualquier parte dentro de la clase, aunque, por convenio, se ponen dentro de la clase arriba de todo, antes que ninguna otra cosa. (Hay quien los pone abajo de todo, pero, por razones de legibilidad, mejor arriba).
La parte de private y public (ámbito), si no la entendéis dejadla, se comentará en el siguiente tutorial.
Definir métodosLos métodos son las acciones del objeto. Estas acciones perduran a lo largo de su vida, es decir, no pueden cambiarse sus acciones durante la ejecución del programa.
Dichos métodos pueden, desde devolver los valores de los atributos del objeto, hasta modificar esos valores o realizar operaciones con ellos y devolver otra cosa...
En este caso tenemos uno que devuelve la longitud del cocodrilo, otro que nos permite cambiar esa longitud en cualquier momento y otro que muestra por pantalla un mensaje conforme el cocodrilo está nadando.
La forma de definirlos es simple, casi como cualquier otra función, primero va el ámbito, luego lo que va a devolver, o bien un tipo o bien nada (void), luego el nombre del método con sus parámetros si fuesen necesarios y por último, entre llaves, lo que realiza.
Instanciarla, crear el objetoPara crear un nuevo elemento, en este caso un nuevo cocodrilo, creamos una nueva instancia u objeto de la clase, es decir, llamamos a un método especial llamado constructor que tiene el mismo nombre que la clase para que cobre vida.
Dicho constructor puede tener o no parámetros, es decir, ser genérico y crear inicialmente todos los objetos iguales o permitir que le pongamos los atributos a la par que lo creamos.
Para crearlo, en Java, basta con poner una de estas líneas:
Cocodrilo cocodrilo1 = new Cocodrilo();
Cocodrilo cocodrilo2 = new Cocodrilo(6, 800.50, 15, "Lacoste", "Verde botella");La primera crearía uno genérico, con los valores de los atributos definidos dentro del mismo, y la segunda uno parametrizado.
Usar el objetoUna vez tenemos creada la clase, si queremos usar alguno de sus métodos tan solo hay que llamarlo con el objeto que vamos a usar, por ejemplo, si queremos que el segundo cocodrilo nade, se pone así:
cocodrilo2.nadar();Y para establecerle una longitud al primero:
cocodrilo1.setLongitud(5);En caso de querer acceder a un atributo público, se haría de igual forma pero con el nombre del atributo.
A la hora de recoger lo que devuelve un método, igual que con las funciones:
int largo = cocodrilo2.getLongitud();Métodos y atributos estáticos o de claseHay un tipo de modificador especial en java,
static, que, puesto en un método o atributo, permite ser llamado sin necesidad de tener un objeto, puesto que su valor o funcionalidad es compartido entre todos los objetos.
A estos métodos o atributos se le denominan de clase, puesto que son compartidos por todos los objetos de la misma clase.
La forma de definirlos es poner static tras el ámbito del método o atributo.
Para usarlos tendríamos que hacer lo siguiente, si tenemos un atributo
public static int nCocodrilos;, se llamaría así:
Cocodrilo.nCocodrilos Poniendo el nombre de la clase '.' y el nombre del atributo, en este caso, o el método.
Esto es útil para crear, por ejemplo un contador del número de objetos creados de la clase, ya que si en un objeto modificamos el valor de ese atributo, al ser compartido, ese valor se ha modificado para todos los objetos.
También se usa para aquellos métodos que no utilizan atributos de la clase y por tanto no requieren de una instancia para ser utilizados.
Esto es muy importante, ya que a nivel de optimización, si un método o un atributo es definido como
static, solo es creado una vez y no tantas como objetos, reduciendo el consumo de memoria.
Atributos finalesOtro modificador es
final, este indica que el valor, una vez inicializado, no cambiará.
Al igual que el static, se pone tras el ámbito.
En el ejemplo del cocodrilo, podría ser su nombre, ya que una vez le pongamos uno, no se lo vamos a cambiar.
Esto también puede usarse en los métodos, pero influye en la herencia, que se tratará en el tercer tutorial.
ConstantesSi queremos definir un valor que siempre será igual, lo que en matemáticas es una constante, como por ejemplo PI y que nunca cambie sea cual sea el objeto, se puede poner como
static final.
Por convenio, el nombre de los atributos constantes se ponen con todo en mayúsculas para una mejor legibilidad.
Valores por defecto o predefinidosSi queremos que los atributos tengan un valor por defecto, ya sea porque le pondremos los valores manualmente o algunos valores permanecerán invariables, por ejemplo en el caso de una constante, se pueden inicializar en el momento en el que se declaran, por ejemplo:
private String color = "verde";Hasta aquí el primer tutorial, si tenéis alguna duda o algo que añadir, no os cortéis en comentarla.
Linkback: https://minecraftmin.net/index.php?topic=4274.0