jueves, 5 de noviembre de 2009

Comparando paradigma estructurado con POO

Encontre la info por la red, un experto escribe

El tema de entender porque pasar a POO es comprender el mundo y los cambios del mismo, ya que algo en estructurado para ti son 200 lineas y en POO son 500 lineas, y entonces que ventaja tiene hacer POO si terminas escribiendo mas ?

Hay muchas formas de explicarlo, y mi forma de hacerlo cambio durante los años, yo comencé a programar cuando no existía otra forma, pero quien hoy enseña formalmente en estructurado, realmente no sabe de trataesto de programar.

Existen muchas formas de armar un sistema, como por ejemplo el modelo vista controlador (MVC), un modelo de capas de datos, entidades, interfaces, etc.

Al comienzo cuando en 1994 comencé a ver el tema, no había otra que hacerlo por gusto, o para re-utilizar, ya que pascal, y clipper que usaba en esos tiempos y luego visual basic, realmente no podían aprovechar las ventajas.

La idea de programar en objetos, es simplemente tratar de facilitar tanto la manera de pensar un sistema, como la de reutilizar partes.

Por ejemplo si creas una clase persona:

Persona {
nombre string;
apellido string;
}

puedes crear objetos heredados de esa clase:

Empleado hereda de Persona {
sueldo double;
}

con solo eso, tu puedes crear un objeto de la clase empleado, algo así:

e = new Empleado();

y luego usar ese objeto, por ejemplo para mostrar los datos:

echo e.nombre;
echo e.apellido;
echo e.sueldo;

como ves si bien Persona tiene 2 campos, en realidad Empleado tiene 3 porque heredo y le agregamos uno.

Esto es posible hoy día y significa muchas ventajas. Imagina un sistema de ventas, donde tu creas tu clase Persona, haces tus métodos set y get y ademas los métodos para guardar, en la base, obtener de la base, mostrar en pantalla (o dispositivos), etc.

Eso 20 o 30 procedimientos tu los haces en Persona, pero con solo heredarlos los puedes usar en:

Empleados hereda Persona {}

Vendedores hereda Persona {}

Clientes hereda Persona {}

Proveedores hereda Persona {}

o sea que personas en estructurado ocupa 100 lineas, en POO seguramente 200 o 300, pero realmente con poder re-utilizar ganas un sistema que en vez de 5 mil lineas, tiene 1500 smile.gif

Por otra parte si hay algún cambio, lo haces en un solo logar y eso se repara para todos sus heredados.

Esta es la primer ventaja de POO.

Otra cosa que en principio parece fea, y un largo camino para hacer algo sencillo son lo de los metodos get y set, es obvio que hacer:

e.nombre = "pepe";

y echo e.nombre;

es sencillo, pero no es lo optimo, siempre es mejor crear metodos set y get, algo simple como:

setNombre(n string) {
nombre = n;
}

y

getNombre() string {
return nombre;
}

y lo usaras así:

e.setNombre("pepe");

y

echo e.getNombre();

es mas largo, y parece poco útil, pero imagina que el nombre, DNI, cedula, pasaporte deba tener cierto formato smile.gif, solo heredas y en la función SET modificas o verificas ese contenido.

La suma de todo esto nos hacen posible crear modelos como el MVC y de Capas, y vamos a un poco de historia.

Al comienzo, cuando programaba en clipper, no tenia mas que usar dbase o un derivado de este para base de datos, y mi programa lo miraban en una pantalla CGA 256 colores, en DOS o Windows. El esquema era este:

[DBASE - SISTEMA]

O sea todo en uno, y el mismo sistema contenía el manejador de base de datos.

Esa realidad ya no es así, el motivo es que existen un montón de bases de datos, un montón de sistemas operativos, un montón de dispositivos donde verlo.

Con el viejo sistema, se tenia que hacer un programar para windows, otro para linux, otro para SQL, otro para DBase, etc, todo aparte.

Si programamos en capas podemos tener:

[servidor base de datos] <=> [driver de datos] <=> [adaptador de datos] <=> [entidades de datos] <=> [sistema o reglas de negocio] <=> [interfaz]

o sea un sistema de múltiples capas, explico brevemente:

servidor de datos, es SQL, MySQL, Oracle, etc

driver de datos, es el que ejerce la conexión, por ejemplo un driver mysql para java windows, o un driver mysql para java linux, o un driver mysql para .net o php, etc

adaptador de datos, es un modulo hecho por ti, que conociendo el driver va a guardar y obtener datos desde la base, como única misión, y dejarlo disponible para tusistema.

entidades de datos, son tus clases que mantienen la info en memoria para que la utilice tu sistema, luego de obtenerla en la base, y antes de presentarla en pantalla

reglas de negocio, es un modulo que hace lo que el sistema debe hacer, calcular sueldos, preparar datos para recibos, etc

intefaz, es tu pagina web, o pantalla DOS, o windows, o en un dispositivo móvil.

Como ves, muchas piezas, pero gracias a POO puedes programarlas independiente una de otra.

En un sistema POO bien ideado, y construido ninguna capa molesta a la otra, por el contrario la potencia.

Esto quiere decir, que con solo modificar la capa de acceso a datos, tu sistema pasa de ser para SQL a MySQL u ORACLE, cambiando solo esas pocas lineas, o incluso funcionar con cualquiera de las bases de datos si lo programas de esa forma.

Lo mismo pasa con la interfaz, solo cambiando esto, todo tu sistema pasa de ser utilizado en web, red local, a ser utilizado en móviles, linux o windows.

Esa es la idea general y posibilidades de la programación orientada a objetos.

Cada lenguaje tiene frameworks o librerías que permiten utilizarse en sustitución de cada capa.

Por ejemplo en .net, acostumbro a crear un modulo de datos, para 2 o 3 tipos de base de datos (SQL, MySQL, Oracle), que con solo seleccionar el sistema funciona con cualquiera de las 3, pero todo mi sistema es re utilizable sin mas cambios. Lo mismo para que el sistema corra en LAN, Web, o Windows, o linux si MONO fuera lo que debe ser.

En PHP, lo mismo ahí utilizo ADODB para la capa de datos y driver de acceso a datos. Y smarty para la interfaz web, para lograr independencia del diseño.

No hay comentarios:

Publicar un comentario