OOP(I)- Clases y objetos

Creo que todos hemos oído hablar de la Programación Orientada a Objetos, (POO en castellano, OOP en ingles), e incluso puede que os halláis enfrentado a diagramas UML, e incluso ya estáis utilizando lenguajes de programación orientados a objetos. Es por eso que me he decidido a escribir unas pocas lineas para ayudaros a organizar vuestras ideas, y acercaros a unas herramientas altamente eficientes.

Lo primero de todo, es aconsejaros que empecéis vuestro programa “en papel”. Todo lo que voy a presentar se debería realizar en papel, sin utilizar ninguna herramienta informática, por lo menos, de momento.

Análisis, diseño y programación son las etapas por las que hemos de pasar para realizar nuestro trabajo, en este caso, estamos hablando de

Análisis, diseño y programación orientada a objetos

Estos tres pasos nos permitirán :

  • Análisis – Saber lo que tenemos que hacer
  • Diseño – Cómo lo tenemos que hacer
  • Programación – Hacerlo

Remarcando que cuando hablamos de diseño, no hablamos del diseño estético, ni de las interfaces gráficas, si no del diseño funcional de nuestra aplicación, de

“como vamos a realizar lo que el análisis ha detectado como necesidades”

Y todo esto, no lo haremos una vez, si no que lo repetiremos de forma iterativa hasta conseguir que nuestro programa cubra todas las facetas que el análisis detecte. En cada ciclo, iremos ampliando y mejorando el análisis, y como consecuencia, adaptaremos el diseño como paso previo a la mejora de nuestra programación.

Esto no significa que en nuestro primer análisis podamos escribir cuatro cosas, sin investigar demasiado, no, se trata que nuestro primer análisis detecte los requerimientos imprescindibles de nuestro proyecto, y establezca esos requerimientos aunque no sean a un nivel de detalle demasiado bajo

Objetos

Pienso que antes de empezar a hablar de “Análisis orientado a objetos”, deberíamos dejar muy claro que son objetos, y reconozco que la definición se hace difícil.

Los objetos serian pequeñas partes del diseño que son capaces de resolver problemas concretos, con la información de que disponen.

Reconozco que no es demasiado preciso, aunque el concepto es sencillo. Un objeto ha de contener los datos y la lógica necesaria para resolver un aspecto concreto de nuestra aplicación. Por ejemplo, en una aplicación de ventas, podríamos tener objetos como:

  • Cliente
  • Articulo
  • Pedido
  • pago
  • ….

Observad que los objetos pueden contener a su vez a objetos mas pequeños; por ejemplo, nos podemos imaginar que “Pedido” debe estar relacionado con “Cliente”, “Articulo”, y “Pago”

Cada objeto deberá tener la lógica para resolver todo lo relacionado con él; por ejemplo, el “Pedido” debería de ser capaz de entregar datos de Importe, o la lista de artículos,….

Los objetos tienen características que lo identifican incluso frente a otros objetos de su misma clase.

  • el cliente tendrá un nombre, una dirección, …
  • el articulo tendrá una descripción, un precio, un peso, un color,…..

Estas características es lo que vamos a llamar “Atributos” o “Propiedades”

Por otra parte, y dado que hemos dicho que los objetos han de resolver todo lo relacionado con ellos, deberán tener comportamientos que lo permitan,

  • el pedido tendrá un comportamiento que sea calcularTotal

Estos comportamientos que a nivel de programación se resuelven con funciones, es lo que llamaremos “Métodos”

Tras esto, podemos redefinir un objeto diciendo que debe tener una identificación que lo hace único, y puede tener Atributos y métodos

Clases

Si hablamos de objetos, deberemos hablar de clases. Una clase es la que establece el “como” han de ser los objetos, los atributos que tienen y los métodos que poseen, aunque no necesariamente el valor de esos atributos.

Por medio de una clase, podremos crear tantos objetos como necesitemos; por ejemplo, podemos pensar en una clase Cliente, que nos permitirá crear distintos objetos clientes, cada uno con el nombre, la dirección,…y demás atributos con valores distintos. Cada uno sera un objeto, y lo habremos construido con la clase cliente.

Según esto, una clase tendrá:

  • un nombre, que nos permite identificarla y que en algunos casos tambien podremos hablar de “Tipo”
  • Unas propiedades, atributos para contener los datos
  • unos  métodos, que establecerán los comportamientos de la clase

Entonces la clase Cliente podría contener:

  • nombre – Cliente
  • Atributos – numerocliente, nombre, Direccion,
  • comportamientos – leer(), guardar(), listaPreferencias()…

Aunque todos sus atributos estarían vacíos, y se llenarían al crear un objeto de dicha clase.

Tenemos que ver la “Clase” como la generalización de un conjunto de objetos, o el planos que nos permite construir un tipo concreto de objetos.

Luego, para cada objeto que tenga comportamientos distintos o distintos atributos,necesitaremos una “Clase” para construirlo, y eso es lo que deberemos escribir durante la programación.

Gráficamente, podríamos representarlo mas o menos así:

UML-Un ejemplo de clase

de momento, no necesitamos mas; si os fijáis hemos indicado el nombre de la clase, en la segunda caja los atributos o propiedades, y en la tercera, los comportamientos o métodos.

En nuestro siguiente artículo, avanzaremos con Abstraccion, herencia, polimorfismo y encapsulacion.

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Orientacion a objetos y etiquetada , . Guarda el enlace permanente.

3 respuestas a OOP(I)- Clases y objetos

  1. Henry dijo:

    Jeje Preparando al personal para la llegada de PHP 7, ¿eh? 😀

    • Miguel dijo:

      Realmente, tengo que dar unas clases de UML y queria refrescar el lenguaje…y realmente la necesidad de conocer como tratar objetos se está haciendo cada vez mas necesaria. PHP ya implementa mucha parte, y esperemos que siga implementando mas

  2. Pingback: OOP(II)-Comprendiendo la orientación a objetosRecursos para formacion

Deja un comentario