|
Orientado a Objetos (Teoria) |
Orientado a Objetos
Hace unos 10 años atrás o quizás menos tiempo. La
programación Orientada a Objetos no era mas que una
simple elección del Programador. Una rama extraña y
misteriosa de la Programación.
Uno como Programador elegia lenguajes Estructurados
como COBOL o Lineales como Basic, Clipper o FoxPro.
Luego apareció en escena el lenguaje “C” toda una
revolución debido a su rapidez de ejecución y su
bajo nivel (Prácticamente no existía ningún aspecto
del Hardware que no puediera manejarse con este
lenguaje).
El paradigma de hoy nos empuja a tener que
desarrollar si o si pensando en objetos.
De todos modos viejos lenguajes como COBOL están
aun vigentes por su robustez y por su fiabilidad.
.NET es 100 % Orientado a Objetos, por la cual para
comprender su estructura no nos queda otro remedio
que empaparnos con terminología y conceptos que son
fundamentales para poder seguir actualizados en
este camino que hemos escogido.
El objetivo de esta nota es poder llevar al
Programador Medio o Principiante a comprender
conceptos que conforman la programación Orientada a
Objetos.
Estos conceptos son :
Clases
Objetos
Propiedades
Métodos
Eventos
Herencia
Abstracción
Polimorfismo
Encapsulamiento
Trataré de explicar cada uno de estos conceptos de
la manera más comprensible y didáctica posible.
Clases y Objetos
Estos 2 conceptos deben explicarse juntos para que
sean mejor comprendidos.
Si tuviera que rápidamente definir con un ejemplo
cual es la diferencia entre una Clase y un Objeto,
se me ocurre la misma diferencia entre una RECETA y
una COMIDA.
Nuestra Clase, no es mas que una RECETA, que carece
de sentido y funcionalidad hasta que creamos un
Objeto (COMIDA).
Esta Clase (RECETA) nos dice de que propiedades, y
características estará conformado nuestro Objeto.
Ejemplo….
Dim MiComida as NEW Paella
Aquí estamos creando un Objeto llamado MiComida y
será de tipo PAELLA.
PAELLA es una clase que contiene todas las
Propiedades necesarias (RECETA) que indica como
debe ser creado nuestro objeto.
Coincidirán conmigo que una RECETA no es
absolutamente nada hasta que se convierte en algo
tangible como es una COMIDA.
Entonces..
Un Objeto gracias al código contenido en la clase..
va a tener Propiedades y Métodos.
Un Objeto no es mas que una Instancia en memoria de
una Clase… es por eso que al igual que en un
Restaurante un cocinero puede crear una Paella
(OBJETO) muchísimas veces tomando de referencia la
Receta (CLASE), en memoria, pueden existir
innumerables Objetos creados por la misma Clase.
Cada Objeto creado en memoria, será pasible de
cambios en sus propiedades por parte de la
aplicación y cada unos será absolutamente
independiente del otro.
Por Ejemplo…
Si tuviera una Clase PERRO y dotara a mi Clase de
la Propiedad ColordePelo. Podría escribir el
siguiente código.
Dim Perro1 as New Perro, Perro2 as New Perro
Perro1.ColordePelo=”Blanco”
Perro2.ColordePelo=”Marron”
En este Ejemplo he creado 2 PERROS, uno llamado
Perro1 y otro Perro2. Y le modifiqué la propiedad
ColordePelo a Perro1 y a Perro2, pero cada uno de
ellos es totalmente independiente y ahora tengo 2
Objetos que fueron creados Exactamente Iguales en
su origen, pero que ahora tienen características
diferentes.
No vamos a ahondar en esta Nota acerca de cómo
dotar a una clase de propiedades, ni a extendernos
mucho en el Código, ya que estos conceptos no son
propios de un lenguaje determinado sino de decenas
de lenguajes.
Otra Última comparación entre Clases y Objetos que
se me ocurre, es la que existe entre un Plano y una
Casa.
El PLANO es la CLASE que contiene todas las
propiedades y características que tendrá que
contener mi OBJETO (CASA) coincidirán nuevamente
conmigo de que un simple Plano no es mas que una
IDEA que tomará forma cuando se lleve a cabo
creando nuestro Objeto CASA.
PROPIEDADES
Como ya hemos visto en nuestra explicación anterior
un OBJETO contiene (entre otras cosas que luego
explicaremos) Propiedades.
Volviendo a nuestro ejemplo, de nuestro Objeto
PERRO, podríamos con solo pensarlo definir un
conjunto de Propiedades que debería contener
nuestro Objeto.
Por Ejemplo :
ColordePelo de tipo String
Raza de tipo String
Edad de tipo Integer
EsAgresivo de tipo Boolean
Por supuesto a Uds. Se le ocurrirán otras
Propiedades, y caracteristicas.
Si pensamos en Programación Visual, Un Formulario
no es mas que un Objeto que fue creado tomando como
base una Clase que contiene todas las Propiedades
que debe contener dicho Objeto.
Por Ejemplo :
Caption , Font, Width, Height, Picture, ControlBox,
etc, etc.
Una Propiedad puede ser de Solo Lectura (ReadOnly)
o con permisos de Lectura/Escritura.
Esto significa que existen propiedades a las cuales
NO Podremos asignarle valores, solamente podemos
leer su contenido.
MÉTODOS
Ya sabemos que un Objeto no es más que una
Instancia de una Clase.
También sabemos que un Objeto contiene una o muchas
Propiedades.
Sabemos que nuestro “PERRO” tiene propiedades, pero
también es cierto que nuestro PERRO al igual que
muchos objetos, es capaz de realizar ACCIONES.
Por Ejemplo….
CORRER
SALTAR
COMER
Esas acciones se denominan Métodos , volviendo al
ejemplo del FORMULARIO, un Formulario contiene
muchísimas Propiedades tal como hemos señalado,
pero también es capaz de ejecutar acciones CLOSE,
RESIZE, MOVE, SHOW, etc.
En nuestra Clase PERRO, deberemos programar cada
uno de los Métodos que necesitemos que sea capaz de
llevar a cabo nuestro Objeto y dichos métodos no
son mas que SUBs.
Debemos colocar en cada unos de esos SUBs o
Procedimientos, todo el código necesario que se
debe ejecutar cuando una aplicación ejecuta por
ejemplo…
miPerro.Saltar
Cuando pensemos en Objetos nos daremos cuenta de
que el objetivo primario es Imitar a la vida real..
a Objetos reales, que gozan de Propiedades,
ejecutan acciones y como veremos a continuación
sufren estímulos externos e Internos.
EVENTOS
Como acabamos de ver un Objeto es capaz de realizar
acciones pero también esta expuesto a estímulos que
lo condicionan y nosotros podremos determinar
cuales serán los estímulos que a los cuales se les
prestará atención.
Esos estímulos se llaman EVENTOS.
El ejemplo mas claro es el del EVENTO CLICK de un
BOTON. , el cual dota a nuestro Objeto para que sea
SENSIBLE al CLICK del MOUSE ejecutado por algún
usuario en un momento indeterminado.
Entonces, podemos hacer que nuestro OBJETO sea
sensible a determinados estímulos.
Podríamos crear un OBJETO “SER HUMANO” y volverlo
sensible al CALOR, al HAMBRE, al FRIO, etc, etc.
Conclusión :
Un Objeto es una Instancia de una Clase, y puede
constar o no, de Propiedades, Métodos y ser
sensible de sufrir Eventos.
HERENCIA
La HERENCIA es sin lugar a dudas la característica
más Importante que tienen los OBJETOS y nos indica
que un OBJETO puede HEREDAR las Propiedades,
Métodos y Eventos de otro OBJETO.
Supongamos que creamos una CLASE llamada ANIMALES.
Dotaremos a nuestra Clase ANIMALES de todas las
Propiedades inherentes a los ANIMALES y lo haremos
de manera tal, que dicha clase nos servirá para
referenciar a cualquier Animal.
Pero luego se nos ocurre crear una CLASE llamada
PERRO.
Como ya poseemos una CLASE desarrollada de tipo
ANIMAL y que contiene innumerables propiedades que
me sirven para conformar mi nueva CLASE PERRO,
simplemente debo decir mediante código que mi CLASE
PERRO, hereda las propiedades de la CLASE ANIMALES,
entonces ya no necesito escribir código para
muchísimas propiedades y métodos que son comunes a
todos los animales.
Viendo un ejemplo en Visual Basic .NET esto seria
mas o menos así…
Public Class PERRO()
Inherits Animales
End Class
Entonces….
Si ya poseo una Clase MUEBLES y deseo crear una
Clase SILLA, para que voy a volver a programar la
propiedad MATERIAL, o la propiedad MEDIDAS ?, si
esas Propiedades son comunes a todos los muebles ?
Esta filosofía nos enseña a programar de lo General
a lo Particular.
Y por sobre todas las cosas a Programar lo mas
ABSTRACTO posible.
ABSTRACCIÓN
La ABSTRACCIÓN es también uno de los Aspectos
fundamentales que tenemos que tener en cuenta a la
hora de programar Objetos.
Nuestra CLASE ANIMALES debe ser lo suficientemente
ABSTRACTA para que podamos utilizarla para la
creación de un numero importante de Animales.
En definitiva… NO debe contener características
peculiares ni delimitantes.
Si creamos la CLASE ANIMALES e internamente le
indicamos que estamos hablando de MAMIFEROS., esa
CLASE no nos servirá para crear un PEZ.
Si creamos la CLASE PERSONAS y le decimos que son
todos RUBIOS.. esa clase no nos permitirá crear
ningún OBJETO que nos sirva para manejar PERSONAS
MORENAS.
Si creamos la CLASE MUEBLES y si forzamos nuestra
CLASE indicandole que posee 2 puertas… como creamos
una SILLA ?
Es muy común caer en este error, y habitualmente
cuando debemos contra reloj crear aplicaciones, nos
olvidamos de la ABSTRACCION y creamos código que
luego no podemos reutilizar en otras aplicaciones
debido a su particularidad.
La consigna es la REUTILIDAD de nuestros OBJETOS..
que sean lo suficientes ABSTRACTOS para que puedan
amoldarse a nuestros nuevos proyectos y no
necesitemos escribir nuevamente tanto código.
LA ABSTRACCIÓN y LA HERENCIA entonces se convierten
en amigos INSEPARABLES e FUNDAMENTALES en la
Programación ORIENTADA a OBJETOS.
POLIMORFISMO
POLIMORFISMO nos da idea de MULTIPLES FORMAS, y es
en realidad la necesidad de dotar a nuestra clase
de la posibilidad de que sus métodos o propiedades
se comporten de manera diferente dependiendo de
parámetros.
Existen muchas maneras de generar POLIMORFISMO y la
más común (Por ejemplo en .NET) es la Sobrecarga de
Procedimientos o Funciones.
Supongamos que necesitamos dar salida a una
determinada información y construimos una CLASE que
contiene un método DarSalida y dicho método es el
encargado de formatear la información necesaria y
generar el OUTPUT de la mima.
Pero… a donde saldrá la información ?
Saldrá por la Impresora ?, Se enviará por Email ?
Se exportará a un Archivo ?
El usuario deberá manejar 3 métodos diferentes para
cada una de estas variantes ?
NO
Debemos programar nuestros métodos para que se
adapten a los parámetros externos y se comporten de
manera diferente.
Los datos de tipo VARIANT (inexistentes en .NET)
son el mejor ejemplo de Polimorfismo, dependiendo
del contenido asignado a este tipo de variables, el
comportamiento cambiará.
En .NET se permite la sobrecarga de Procedimientos
y/o Funciones y se trata de poder crear multiples
SUBs con el mismo nombre pero con diferente lista
de parámetros.
Por Ejemplo…
Public Class Matematicas()
Public Function Calculo (ByVal a as integer, Byval
b as Integer) as integer
Return a+b
End Function
Public Function Calculo(Byval a as decimal) as
decimal
Return a/2
End Function
Public Function Calculo(ByVal a as decimal, ByVal b
as decimal, ByVal c as decimal) as decimal
Return a*b*c
End Function
End Class
Como vemos en este ejemplo tenemos 3 Funciones
llamadas Calculo y dependiendo de la cantidad de
parámetros y los tipos de datos recibidos se
ejecutarán distintas funciones.
Esta es una novedad de Visual Studio .NET y nos
permite de manera fácil y práctica arribar al
Polimorfismo.
ENCAPSULAMIENTO
La consigna de ENCAPSULAMIENTO nos orienta
programar OBJETOS que solamente hagan pública la
información mínima y necesaria que necesita el
usuario de ese Objeto.
QUE SE HACE pero NO COMO SE HACE.
De esta manera nuestro código estará seguro
previniendo de que el Usuario pueda interferir en
procesos internos.
Cuando nosotros le decimos a un Formulario que se
cierre … Form1.Close Ese formulario simplemente
hace lo que le indicamos.. pero no tenemos acceso
al código que se ejecuta en el momento de disparar
el método.
La abundancia de Información a veces es
contraproducente, se trata de que un Objeto
exteriorice solo lo estrictamente necesario.
De esta manera nuestro OBJETO estará mas protegido
de errores, y crearemos así una capa adicional
entre el NUCLEO del OBJETO y el USUARIO.
Es Evidente que para cada uno de estos términos
pueden existir miles de Explicaciones diferentes y
ejemplos diferentes a los que yo he dado. Esta es
simplemente mi visión de las cosas y realmente
espero que sirva para muchos.

Nombre
Pablo
Gustavo Tilotta
Ubicación
Buenos Aires - Argentina
Si quieres
conocer más sobre Chiaravel haz clic
aquí
Si quieres acceder a nuestros foros haz clic
aquí
|
|