Paradigma Orientado a Objetos

 
Bueno empecemos con un proceso fundamental de la OO (Orientación a Objetos), denominada “Abstracción”, este proceso propiamente dicho consiste en la “Acción y efecto de abstraer o abstraerse” y abstraer es “Separar por medio de una operación intelectual las cualidades de un objeto para considerarlas aisladamente o para considerar el mismo objeto en su pura esencia o noción”; esta definición esta bonita, pero esta un tanto confusa, entonces lo que nos queda es analizar un poco, esta nos dice que es “Separar por medio de una operación intelectual las cualidades de un objeto”, esto nos hace una referencia a obtener las características de un objeto o cosa, además la definición nos dice también que se hace esto “para considerarlas aisladamente o para considerar el mismo objeto en su pura esencia o noción”, entonces este proceso nos ayuda a aislar características especificas de un objeto, para de esta manera definir la esencia de un objeto,  ahora está un poco mas entendible, pero por si acaso resumámoslo:
“Abstraer cosiste en observar y obtener las características que deseamos de un objeto en particular para de esta manera definir el objeto desde nuestro punto de vista.”
Hagamos un ejemplo, esto siempre es bueno, supongamos que deseamos abstraer las características más relevantes de la siguiente foto:


Por mi parte yo puedo abstraer lo siguiente:

“En la foto se tienen tres autos deportivos de marca Lamborguini, de la serie Gallardo, el auto del fondo es de color Amarillo, el siguiente es rojo y el ultimo es blanco, además el auto blanco posee aros de la marca Enkie y como no olvidar que existe en la parte delantera una bella modelo rubia, con lentes de color rojo”

Después de haber leído mi abstracción alguno de ustedes podrá decirme que me olvide por ejemplo que existe una carpa en el fondo con gente paseando a su alrededor o también que los autos están sobre césped o que me falto obtener mas características de la modelo ^^, ahh pero si revisamos la definición, la abstracción consiste en obtener las características que deseamos, de tal manera mi abstracción, la tuya o la de otra persona está bien, lo único que la percepción que poseemos es distinta. Pero aunque ambas percepciones son igualmente validas, hay que tomar en cuenta que dependiendo del problema que debemos modelar a través de objetos solo debemos de abstraer lo que el problema requiera y no así características innecesarias que solo perjudicaran el manejo de los objetos.
Objeto
Ya entendido que es una abstracción y sabiendo más o menos como se hace una, pasamos a los objetos, pero antes de aprehender que son estos, primero les describo las ventajas de ver todo orientado a objetos, ya que si no se sabe para qué sirve o que ventajas nos proporciona aprender no existirá una buen asimilación del nuevo conocimiento.
Las ventajas de ver todo orientado a objeto son las siguientes:
- Con sw desarrollado OO, primero nos enfocamos en el diseño de la estructura de datos de la aplicación y pasado esto recién nos enfocamos en la funciones, esta es una ventaja en relación a el paradigma estructurado, que lo hace al revés, primero enfocándose en las funciones y luego en la estructura de datos, el hacer esto tiene el defecto que si la estructura de los datos cambia el efecto “ripple” afecta de una manera más severa, un ejemplo de esto es el famosísimo Y2K.
- Los datos son encapsulados dentro del objeto (el termino de encapsulamiento lo veremos más adelante), de esta manera se resguardan los datos del objeto para que no puedan ser manipulados de mala manera o de una manera que no hayamos definido nosotros.
- Cada objeto es responsable de asegurar la integridad de sus propios datos, al suceder esto nos es más fácil identificar donde se produjo el error y por lo tanto solo deberíamos de ocuparnos del objeto que posee el bug y no así de todo el sistema.
- Reutilización de código, esta es una de las características que atraen de sobremanera a los que migran del paradigma estructurado a este paradigma, ya que gracias a esto, los tiempos de desarrollo de una aplicación se aminoran bastante.
Ahora si entremos de lleno a los objetos, para esto primero definimos que es un objeto en la vida real, el diccionario nos dice lo siguiente:
“Algo material que puede ser percibido por nuestros sentidos.” o
“Aquello que sirve de materia o asunto al ejercicio de las facultades mentales.”
De ambas definiciones sacamos que los objetos pueden ser físicos o no, a estos objetos no físicos los podemos nombrar objetos conceptuales; ya entendido que puede ser un objeto en la vida real pasemos a la definición informática de un objeto, que es la que nos interesa:
“Un objeto es un fardo donde están tanto los datos/atributos como las operaciones/métodos y unidos representan una abstracción de un objeto del mundo real (físico o conceptual)” (1)
Datos/Atributos
Si nosotros estuviésemos modelando un sistema de control de automóviles y tuviéramos un objeto llamado auto, que características le pondríamos, o mejor dicho que características abstraeríamos?, veamos qué les parece las siguientes:
- Número Chasis
- Número de Motor
- Color
- Marca
- Modelo
-Año
-  Número de Placa
- Nombre del Propietario
A todas estas características según la nomenclatura informática las vamos a denominar atributos del objeto, todos estos atributos son los que definen la estructura del objeto, aun así hay algunos objetos tan abstractos que no poseen ni un solo atributo, esto les digo por si acaso.
Operaciones/Métodos
Continuemos con el ejemplo del objeto auto, a este objeto le ponemos algunas operaciones que puede realizar como las siguientes:
- Cambiar Número Placa
- Cambiar Nombre Propietario
- Mostrar Numero de Chasis
A estas operaciones se las denomina Métodos, estos métodos lo que hacen es definir el comportamiento del objeto, a través de estos métodos es que el objeto se relaciona con otros objetos, en un objeto siempre debe de existir las operaciones, ya que sin estas el objeto deja de ser funcional y por lo tanto inservible.
Clases
Ya sabiendo que es un objeto y de que está compuesto, ahora nos enfocamos a las clases.
Para poder explicar un poco que son las clases voy a darles un ejemplo, tal vez un poco rayado pero que me ayuda a comprender que son las clases. Entonces, una clase es como un molde de chocolate, con figura de conejito de pascua, con este molde nosotros podemos hacer varios chocolates de múltiples sabores y colores, estos chocolates viene a ser los objetos, tenemos chocolates blanco con sabor a coco, otro con sabor a frutilla y así en mas, pero hay que tomar en cuenta lo siguiente, todos tiene forma de Conejo de pascua, esto se debe a que el molde tiene esa forma y por más que quisiéramos no podremos fabricar chocolates con otra forma a menos que cambiemos de molde.
Con ese ejemplo espero que hayan podido asimilar la correlación que existe entre un objeto y una clase. Con la relación asimilada pasemos a la definición formal de Clase que es la siguiente:
“Una clase es una abstracción que describe características comunes de todos los objetos en un grupo de objetos similares”
Creo la definición esta clarísima y junto con el ejemplo creo que no hay dudas respecto a las clases.
Encapsulamiento, Herencia y Polimorfismo
Bueno espero que hayan hecho caso de ir a descansar, porque ahora vamos a ver los tres pilares fundamentales del paradigma orientado a objetos.
El encapsulamiento ya lo mencionamos antes, vendría a ser un término formal referente al mecanismo que resguarda a los atributos y a las operaciones de un objeto en una unidad lógica simple.
Esto nos hace referencia a que como dijimos anteriormente evita que objetos ajenos al nuestro tengan acceso a los atributos de nuestro objeto y de esta manera la relación que exista entre estos dos objetos sea la que definimos a través de las operaciones.
La herencia es la idea derivada del hecho que un objeto es formado por una clase, esto nos da la idea de que se puede definir una clase superior o superclase que posee algunos atributos y operaciones muy generales, de esta clase luego se crea otra y esta otra clase hereda los atributos y parámetros de la superclase. Como un ejemplo tendríamos por ejemplo una superclase con el nombre “Persona”, que tiene atributos como nombre, dirección, sexo y edad, luego tendríamos otras dos clases que heredan de la superclase, estas son “Empleado” con los atributos fecha_contratacion, cargo_ocupado, horas_trabajadas y “Cliente” que tiene los atributos numero_cliente, producto_comprado, viéndolo en grafico podemos ver lo siguiente:
     Persona
Nombre
Dirección
Sexo
CI

           Empleado
Fecha_contratacion
Cargo_ocupado
Horas_trabajadas

                Cliente
Numero_cliente
Producto_comprado
 
Ahora si creamos a los objetos del tipo Empleado y cliente, vemos que ambos tiene los atributos Nombre, Direccion, Sexo y CI, pero se diferencias en el resto de atributos, a esto denominamos herencia, es la cualidad que tienen las clases de heredar atributos y operaciones de una superclase, que por lo general es la factorización de atributos y operaciones comunes entre un grupo del clases.
Y ahora por último el Polimorfismo, este es un concepto interesante que a veces es un poco complicado de entender, pero que si se lo entiende de una manera adecuada, nos servirá de mucho cuando estemos desarrollando.
Según el Diccionario polimorfismo se lo define de la siguiente manera:
“Es la ocurrencia de algo en varias formas distintas”
Esta definición nos da una idea muy general de lo que sería el polimorfismo; se nos indica que es la ocurrencia de algo, en el caso de la informática lo podríamos traducir como una operación o método, después se nos dice que se da en formas distintas, esto nos da a entender que ese método u operación se lo realiza en maneras distintas, pero sin dejar de ser la misma operación, para entender esto de una mejor manera podemos descomponer las raíces de la palabra, “poli” que viene a ser múltiples o muchos y “morfismo” que viene a ser forma, entendiendo de esta manera tenemos que significa “muchas formas” o “varias formas”, creo que ya lo tenemos relativamente claro que viene a ser el polimorfismo, pero para un mejor entendimiento y por supuesto para saber donde usarlo, este pilar hay que relacionarlo con otro pilar, la Herencia.

Como vimos en la herencia lo que hacemos es heredar las operaciones y atributos de una superclase, ahora el polimorfismo no hace referencia a los métodos con distintas manera de realizarse, uniendo ambas ideas tenemos el hecho de que si por ejemplo tenemos el método “jugar”, de una clase llamada “consola” y tenemos dos clases que heredan de esta y son “Xbox 360” y “PlayStation 3” ambos por supuesto habrán heredado el método “jugar”, pero como sabemos el hecho de jugar es muy diferente en ambas consolas, entonces lo que hacemos es reescribir cada método acorde a cada consola y por lo tanto tenemos lo de la definición de polimorfismo, el nombre del método es el mismo, pero la manera de hacerlo es diferente en cada clase hija.
Bueno creo que hasta aquí es suficiente, así que me voy despidiendo esperando que les haya servido de ayuda esta entrada.
Bye
Bibliografía
1. - Beginning Java Objects: From Concepts to Code, Second Edition by Jacquie Barker, Apress 2005
2. - Systems Analysis and Design, Second edition by Donald Yeates and Tony Wakefield, Prentice Hall 2004

Comentarios

Entradas populares de este blog

Conectarse a un Web Service en PHP con WPF

Ejecutar comandos en el CMD de Windows desde C#

Usar Log4Net en un proyecto ASP.NET MVC