miércoles, 19 de agosto de 2009

Introducción al uso adecuado de UML

UML por sus siglas en ingles ha sido ampliamente aceptado como el lenguaje de modelado orientado a objetos por excelencia. Este lengua no se limita unicamente al diseño de software su ambito de uso es mucho mas amplio, es aplicable desde el modelado de negocios hasta diseño de software y modelado de aplicaciones web. Es decir tiene un ambito muy amplio y abarca un conjunto de dominios de aplicacion sumamente diverso.

Este lenguaje puede ser estructurado de forma modular con la posibilidad de utilizar solo aquellas partes del lenguaje que nos sean de utilidad. Aunque un exceso de esta flexibilidad incrementa la posibilidad de que herramientas UML diferentes soporten diferentes subconjuntos del lenguaje causando problemas de intercambio entre las mismos. Por tanto la para un a definicion de conformidad con UML es necesario establecer un balance entre modularidad y facilidad de intercambio.

Para entender mejor la utilidad de este lengueje sera mejor que hablemos en terminos prácticos. Hablemos primeramente del modelado de sistemas.

El modelado es un técnica utilizada en todas las ingenierías. Como tal la ingeniería software debe basarse en el modelado como una parte central de toda la actividades que conducen a la producción de software de calidad. La gestión del proceso software exige de forma general el disponer de un modelo. Construimos modelos para comunicar la arquitectura y el comportamiento deseado en nuestro sistema. Construimos modelos para visualizar y controlar la arquitectura del sistema y para comprender mejor el sistema que estamos construyendo, muchas veces descubriendo posibilidades de simplificación y reutilización.

Cuanto más grande y complejo sea un sistema mayor es la importancia de la utilización de buenas técnicas de modelado: existe un límite en la capacidad humana de comprender la complejidad. Por tanto, en un sistema software de magnitud industrial el desarrollar un modelo antes de su construcción o renovación es esencial para la comunicación entre equipos de trabajo y para asegurar la solidez de la arquitectura.

Dado que UML es un leguaje semanticamente ríco no podremos ahondar en todos sus conceptos. En entradas anteriores hemos abordado conceptos basicos de la orientaion a objetos que forman parte del lenguaje. en esta entrada nos ceentraremos en algo poco abordado dado que puede obtener información acerca de tales conceptos en internet, además de un sinnumero de tutoriales y libros acerca del tema.

El proposito aqui no es enseñar aquellas cosas en las cuales todos estamos de acuerdo que entendemos igual respecto al lenguaje unificado de modelado, tales como los diagrmas y contruccion de los mismos, aunque aun en ese tema podría discutirse mucho. El proposito fundamental sera el cómo, cuándo y porqué utilizar algunos conceptos del lenguaje, y errores cometidos frecuentemente en la implementacion del mismo para representar los sistemas que modelamos.

El primer error cometido y que se sostiene a lo largo de la enseñanza en la mente de los estudiantes es que confundir UML (un lenguaje) con un proceso de desarrollo. Un proceso de desarrollo de software es un método de organizar las actividades para creación, presentación y mantenimiento de los sistemas software. El lenguaje UML no define un proceso de desarrollo, en relidad UML se combina con un proceso de desarrollo para obtener un producto final. Uno de los procesos mas utilizado y recomendados y de los que hay abundante informacion es RUP(Rational Unified Process) tambien conocido como Proceso Unificado de Desarrollo.

Otro error se deriva de una interpretación incorrecta de los casos de uso, esto lo aprenden frecuentemente los estudiantes de sus maestros. El problema con los casos de uso es que el grado descomposicion del problema queda sujeto al criterio de analista, con lo cual cada quien entiende que los casos de uso llegen a un nivel de datalle diferente. Lo adescuado seria determinar la cantidad y grado adecuado de analisis requerido para el proyecto. Algunos docentes enseñan a los estudiantes que los casos de uso estan asociados a las interfaces graficas de usuario, algo erróneo dado que la interfaz gráfica es parte de las labores de implementación y los casos de uso deben ser utilizados enlas etapas de análisis.

En relaidad es bastante complejo determinar hasta donde debe ser de especifico un caso de uso, sobre todo en sistemas grandes o muy complejos. Lo importante para cada proyecto es determinar la cantidad necesaria de análisis requerida. Sin olvidar como ya mencionabamos que los casos deben ser utilizados para la captura de requerimientos del sistema, segun la la espeficación de superestructura de UML de la OMG.

Los errores en el uso de las relaciones en los diagramas uml son frecuentes especialmente si no se ha tenido alguna experiencia de trabajo ene equipo con los modelos. Utilizar no solo el tipo correcto de relación que expresa lo que acurre en el sistemas real y es a la vez conceptualmente claro para todo el que lea el diagrama, es difícil de conseguir. Les insto a buscar siempre la manera mas sencilla y clara de represnetar las relaciones, agregar los roles en los extremos de las relaciones, especificar el tipo adecuado de multiplicidad de una relación. No siempre el funcionamiento del sistemas real puede representarse o implementarse de tal y como ocurre en la vida real.

Recuerden los modelos son simplificaciones de la realidad que que nosotros y los demás involucrados en un proyecto de sistemas opera. Los modelos de sistemas constituyen al ugual que en arquitectura la base sobre la que se contruira un producto tangible, y es por tanto indispensable que sena correctos y sin ambiguedades. Utilizemos correctamente las herramientas con que contamos para obtener de ellas todo su potencial expresivo.

jueves, 16 de julio de 2009

Algunas herramientas útiles para programar y modelar

En mi labor como analista y programador he tenido la oportunidad de trabajar con algunas herramientas que pueden resultarles de utilidad a alguno de ustedes. Cada herramienta tiene lo suyo y regularmente tiendo a utilizar varias de ellas en aspectos diferentes desde modelado, pasando por bases de datos, hasta codificación.

Entornos de desarrollo integrados 
  
Eclipse: Es un entono integrado de desarrollo, basado en java y con versiones en la mayoría de los sistemas operativos usado actualmente, se han desarrollado una gran cantidad de herramientas para este entorno. Entre los recursos de que dispone y que he utilizado se encuentran:

  • PHP Development Tools - excelente para desarrollo de aplicaciones usando php, tiene asistencia para creación y chequeo del código, un excelente explorado de proyectos, facilita documentar tu código y mucho mas.
  • Modelador de base de datos Clay - la versión gratuita de esta herramienta es increíble, hace ingeniería inversa, permite tener una vista logica yla física, genera script con varias opciones útiles como comentarios, forma de declaración de llaves e indices, para casi cualquier gestor de base de datos que tenga un driver jdbc.
  • ERMaster - es una excelente para el diseño de bases de datos, soporta varias notaciones, permite generar documentación de nuestro modelo. Permite crear vistas o regiones en el modelo y visualizar solamente esa perspectiva, además navegar por la demas perspectivas mediante pestañas.
  • Data Tools - esta herramienta es excelente para el desarrollo y depuración de base de datos. Puedes complementar o utilizar alternativamente SQLExplorer o Quantum.
  • Editores XML - facilita muchísimo explorar y construir documentos xml, dtd y estilos xsl.
Lo mejor de eclipse es que es un entorno integrado, y tienes todo al alcance de la mano en un solo entorno. El soporte que tiene para java lo lo hace el mas grande rival de NetBeans.

NetBeans: Entorno de desarrollo integrado muy bueno, el único inconveniente es el uso excesivo de memoria es lo que me consta, para desarrollo java y de interfaz gráfica en java.


Modelado de software

ArgoUML: Para modelar sistemas y aplicaciones ArgoUML es una de esas herramientas que no debe faltar en tu colección. Soporta la especificación 1.4 de UML (el soporte para UML 2 es experimental aun). Permite generar código para varios lenguajes de programación entre ellos java, C++, php4, php5. Cuenta con varias extensiones útiles como la extensión para base de datos, la cual también te permite hacer ingeniería inversa de base de datos.

DBDesigner: Aunque se ha pretendido que WorkBench de MySQL reemplaze a esta herramienta le falta mucho para alcanzar la versatilidad que tenia esta herramienta. Permite realizar diseños de base de datos y conectarte a diferentes gestores de bases de datos. los diseños ademas de útiles son muy bonitos excelentes para presentarlos. Cuenta con dos complementos para crear reportes a modo de diccionario de datos de tu modelo y crear un sitio web para tu pagina de forma rápida con varias opciones para configurar y agrupar tus paginas.

MagicDraw Community Edition: La uso para crear modelos de sistemas web basados en UWE, cuenta con complemento y los diagramas son estéticamente atractivos. Puedes crear desde cero tu modelo o bien trabajar la base lógica con ArgoUML y luego exportar tu modelo como un XMI e importarlo con esta herramienta. Existe una versión de ArgoUML que cuenta con complementos para modelado con UWE la cual no me gusta mucho y solo es compatible con una versión mas antigua de ArgoUML.


Planeación de proyectos

Planner: Herramienta para planeación de proyectos corre en múltiples plataformas y genera reportes útiles para presentar e imprimir.

GanttProyect: Para planeación de proyectos desarrollado en java, es muy buena herramienta, genera un gráfico pert de la ruta critica de tu proyecto, es muy intuitivo.

XMaind: Crea mapas conceptuales fácilmente, incluye plantillas de diagramas de pescado, organigramas, de árbol , tablas y otros, para los que conozcan el Mainjet déjeme decir que esta herramienta tiene casi toda su funcionalidad y es de uso libre.


Diseño web

DreamWeaver: A pesar de lo que muchos tienen en contra de las tecnologías de paga, no he encontrado un editor de paginas web comparable a este, en la cantidad de funciones y su editor visual.

Mozilla Web Developer ToolBar: agrega varias herramientas de diseño al navegador, esta extensión esta disponible para Firefox y Chrome, y corre en todas las plataformas donde estos navegadores estén soportados. Provee muchas opciones útiles para formularios, estilos, imágenes, tamaño de la ventana, elementos de bloque y posicionamiento, entre otras.

Firebug: es una de las herramientas más populares entre los desarrolladores web. Este complemento para firefox esta ahora también disponible en chrome, tiene una interfaz amigable con pestañas que facilitan la inspección y depuración de cada aspecto de la web. Permite editar y ver los cambio de forma inmediata, analizar la velocidad de carga, los requisitos realizados y los parámetros y cabeceras enviados.


Validación, Formato de código y miscelaneos


CSS Formatter and Optimiser: permite dar formato al css y ademas tiene varias opciones de compresión y reducción de código.

JavaScript Formatter: permite dar formato el código js.

Validación

  • Validación HTML de W3C -  http://validator.w3.org
  • Validación CSS de W3C -  http://jigsaw.w3.org/css-validator/
  • Validación XML - http://www.xmlvalidation.com/
  • CSS Test de Selectores -  http://www.css3.info/selectors-test/

Generadores de contenido

  • Generador de texto - http://www.procato.com/lipsum/
  • Generador de Imágenes -  http://dummyimage.com/
  • Generador de MetaTags - http://www.aemilius.net/soporte/utilidades/generador-meta-tags.php



Transferencia de archivos

FileZila: Cliente ftp, aunque no es tan bueno si se trata de archivos muy grandes pero la naturaleza del protocolo tampoco le ayuda con eso.

FireFTP:  es un complemento de Mozilla Firefox para transferencia de  archivos por FTP.

UWE el camino a la orientación a objetos en la web


UML-Based Web Engineering (UWE) es una conjunto de herramientas para modelar aplicaciones web. UWE incluye una expansión del lenguaje UML y nuevos diagramas para modelar algunos aspectos específicos del las aplicaciones web. Integra conceptos de UML y la metodología OOHDM (Modelo de Diseño Hipermedia Orientado a Objetos). Me ha parecido interesante abordar este modelo como una herramienta de gran utilidad dado que esta basada en UML y además cuenta con todo el poder expresivo necesario para el desarrollo de aplicaciones web.

La mayoría de los que nos dedicamos a desarrollo web hemos sentido que las herramientas y el uml convencional quedaba cortos de expresividad ante conceptos que necesitábamos representar y debíamos recurrir a otras herramientas para modelar el comportamiento de nuestras aplicaciones web, si es que realizábamos algún tipo de modelado.

Para los que hayan trabajado anteriormente con la metodología OOHDM trabajar con UWE les resultara alga muy familiar porque muchos de los conceptos son análogos. En la página que tiene el enlace a UWE (http://uwe.pst.ifi.lmu.de/teachingTutorialSpanish.html), encontraran mucho material para estudiar, varios tutoriales, la especificación del modelo que es una extensión del UML y muchos artículos y publicaciones de expertos que ayudan ha entender como se relacionan los modelos de UWE y sus diagramas con los diagramas ya conocidos de UML.


En el ambito del desarrollo web no es usual modelar mucho las aplicaciones. Quizá es una de las razones por las que que los desarrollos se tornan mas complejos de lo pensado. La mayoría de los proyectos complejos ya sean estos basados en web o de otro tipo, el cliente espera ver resultados rápidamente, de modo que se suele desestimar la importancia del buen análisis y modelado. Esta es una muy mala práctica, tomando en cuenta que muchas de la aplicaciones que se desarrollan hoy día y que interactuan en la red son sistemas de complejidad media o alta con la salvedad que opera sobre una plataforma web.

La utilización de UWE en nuestros proyectos, no solo forma parte de las buenas practicas de desarrollo. También provee la documentación necesaria para dar soporte a las aplicaciones desarrolladas y facilita la implementación de las soluciones desarrolladas. UWE nos permite crear un modelo conceptual con todo el poder expresivo de UML, un modelo de navegación claro y un modelo abstracto de la interfaz de usuario.

Se podrían señalar muchas razones para que el uso de herramientas de representación adecuadas dos de ellas sin embargo pueden ser significativas a mediano plazo. 1) Los lenguajes de programación web estan evolucionando hacia la orientación a objetos, los lenguajes más utilizados PHP y ASP ya estan en ese camino, otros como Java, Python y C# son ya orientados a objetos. 2) Las aplicaciones, programas y servicios están cada ves mas integradas o encaminadas a la web. Pese a esto muchos programadores, desarrolladores y analistas aun no actualizan sus "cajas de herramientas". Esta tendencia ponte frente a nosotros la necesidad de utilizar las herramientas de que disponemos para construir aplicaciones web con calidad.

jueves, 15 de enero de 2009

Conceptos básicos de orientación a objetos


La orientación a objetos se basa en los siguientes conceptos elementales, que facilitan el abstraer los diferentes:

Clase
Objeto
Atributo
Método
Herencia
Polimorfismo
Encapsulamiento


Clases e instancias

Una Clase es un conjunto de objetos que comparten una estructura y comportamiento comunes. En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto celular es una instancia de una clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.). Podemos extrapolar esta concepto a cualquier conjunto ya sean entidades tangibles o abstracciones, reales, imaginarias, etc.

Las clases nos permiten tener todas las características y comportamientos (las variables y métodos) en una sola entidad,  algo que en los lenguajes estructurados esto era imposible. A esto se le conoce como encapsulamiento y lo abordaremos más adelante.

Entonces ¿qué es un objeto? Entender que es un objeto es la clave para entender cualquier lenguaje o método orientado a objetos. Un objeto representa un ítem individual e identificable, o una entidad real o abstracta, con un papel definido en el dominio del problema. Un objeto no es un dato sino una instancia de una clase, contiene en su interior cierto número de componentes bien estructurados. Es posible intercambiar los términos objeto o instancia, los objetos son pues ejemplares de una clase cualquiera. La estructura y el comportamiento de objetos similares se definen en sus clases comunes.

Un objeto dado se caracteriza por tener:
  1. Estado
  2. Comportamiento
  3. Identidad

El Comportamiento es como un objeto actuá y reacciona, en términos de sus cambios de estado y de los mensajes que intercambia. El Estado de un objeto representa los resultados acumulados de su comportamiento. Los Objetos de Software mantiene sus características (identidad) en una o más "variables" o "atributos" (su estado), e implementa su comportamiento con "métodos" mediante los que interactúa con otros objetos o altera sus propios atributos.

La Identidad es la propiedad de un objeto que lo lleva a distinguirse de otros. En programación la identidad de los objetos sirve para comparar si dos objetos son iguales o no. En muchos lenguajes de programación la identidad de un objeto esté determinada por la dirección de memoria de la computadora en la que se encuentra el objeto.



La API, Atributos y Métodos

Un Atributo es una variable, un contenedor de algún tipo de dato asociado a la clase. Los valores de los tributos pueden ser alterados por la ejecución de algun método.

Método: es un término utilizado en algunos lenguajes de programación para referirse a algún comportamiento de los objetos de una clase, un algoritmo asociado a una clase que se desencadena después de recibir un mensaje. Es lo que el objeto puede hacer.


Características de la Programación orientada a objetos (POO)

La Herencia es el mecanismo fundamental de relación entre clases en la orientación a objetos. Relaciona las clases de manera jerárquica; una clase padre o superclase sobre otras clases hijas o subclases. Es decir que una clase puede heredar sus variables y métodos a varias subclases. Por tanto la subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. Los métodos heredados pueden ser polimorfos, de forma que las subclases pueden responder de forma diferente al mismo mensaje que se envía a su clase base. De esta manera se crea una jerarquía de herencia, una jerarquía de clases cada vez más especializada.

En la orientación a objetos, se consideran dos tipos de herencia, simple y múltiple. En el caso de la primera, una clase sólo puede derivar de una única superclase. Para el segundo tipo, una clase puede descender de varias superclases.

Algunos lenguajes orientados a objetos, como C++ permiten herencias múltiples, lo que significa que una clase puede heredar los atributos de otras dos superclases. Este método puede utilizarse para agrupar atributos y métodos desde varias clases dentro de una sola.

En otros lenguajes, como Java, sólo se dispone de herencia simple, para una mayor sencillez del lenguaje, si bien se compensa de cierta manera la inexistencia de herencia múltiple con un concepto denominado interface.

La herencia ofrece una ventaja importante, permite la reutilización del código. Una vez que una clase ha sido depurada y probada, el código fuente de dicha clase no necesita modificarse. Su funcionalidad se puede cambiar derivando una nueva clase que herede la funcionalidad de la clase base y le añada otros comportamientos. Reutilizando el código existente, el programador ahorra tiempo y dinero, ya que solamente tiene que verificar la nueva conducta que proporciona la clase derivada. 


La palabra Polimorfismo proviene del griego y significa que posee varias formas diferentes. Así como la herencia está relacionada con las clases y su jerarquía, el polimorfismo se relaciona con los métodos. Es la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación.

 El polimorfismo es una característica que merece un artículo propio, por ahora nos limitaremos a conocer lo tipos. Se puede clasificar el polimorfismo en dos grandes clases:

Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.

Resulta mucho más fácil ilustrar esto con un ejemplo, tomemos un ejemplo utilizando Java.

class Mamifero {
  public void mover() {
    System.out.println("Ahora es un mamifero el que se mueve");
  }
}

class Perro extends Mamifero {
  public void mover() {
    System.out.println("Ahora es un perro el que se mueve");
  }
}

class Gato extends Mamifero {
  public void mover() {
    System.out.println("Ahora es un gato el que se mueve");
  }
}

public class Polimorfismo {
  public static void muevete(Mamifero m) {
    m.mover();
  }
  public static void main(String[] args) {
    Gato bisho = new Gato();
    Perro feo = new Perro();
    muevete(bisho);
    muevete(feo);
  }
}

Vemos que el método “muevete” llama al método mover de un mamífero y aunque no sabe con qué clase de mamífero trata, funciona y se llama al método correspondiente al objeto específico que lo llama (es decir, primero un gato y luego un perro).

Este ejemplo esta relacionado con la ligadura dinamica, termino usado para referirse a ese mecanismo que pospone hasta el momento de ejecutar una llamada, la eleccion del metodo a ejecutar. Gracias a la ligadura dinámica, pueden invocarse operaciones en objetos obviando el tipo actual del éstos hasta el momento de la ejecución del código, es decir que me perite definir elementos como un tipo e instanciarlos como un tipo heredado.

Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.
 
Por lo tanto, podemos por ejemplo, definir varios métodos homónimos de addition() efectuando una suma de valores.  
  • El método int addition(int,int) devolvería la suma de dos números enteros.
  • float addition(float, float) devolvería la suma de dos flotantes.
  • char addition(char, char) daría por resultado la suma de dos caracteres definidos por el autor.
 se diferencian entre sí por:

  • La cantidad de parámetros.
  • El orden en que se ubican los parámetros al invocar al método.
  • El tipo de dato de los parámetros.
  • Clasificación

Diferencias entre polimorfismo y sobrecarga

La sobrecarga se da siempre dentro de una sola clase, mientras que el polimorfismo se da entre clases distintas.

Un método está sobrecargado si dentro de una clase existen dos o más declaraciones de dicho método con el mismo nombre pero con parámetros distintos, por lo que no hay que confundirlo con polimorfismo.

La sobrecarga se resuelve en tiempo de compilación utilizando los nombres de los métodos y los tipos de sus parámetros; el polimorfismo se resuelve en tiempo de ejecución del programa, esto es, mientras se ejecuta, en función de que clase pertenece un objeto.


Encapsulamiento

Hay muchos datos que no tiene porque conocerlo aquel que este usando una clase; ya que son inherentes al objeto y solo controlan su funcionamiento interno, es decir el usuario no necesita conocer la implementación. Al evitar que el usuario modifique los atributos directamente y forzándolo a utilizar funciones definidas para modificarlos (llamadas interfaces), se garantiza la integridad de los datos.

Esto es el Encapsulamiento, encapsulación u ocultación. Consiste en el ocultamiento del estado, es decir, de los datos miembro, de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto. El aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones.
El encapsulamiento es muy conveniente y nos permite colocar en funcionamiento nuestro objeto en cualquier tipo de sistema, de una manera modular y escalable.
La encapsulación da lugar a que las clases se dividan en dos partes:
  • Interface: captura la visión externa de una clase, abarcando la abstracción del comportamiento común a los ejemplos de esa clase.
  • Implementación: comprende la representación de la abstracción, así como los mecanismos que conducen al comportamiento deseado.
La encapsulación define los niveles de acceso para elementos de la clase. Estos niveles de acceso definen los derechos de acceso para los datos, permitiéndonos el acceso a datos a través de un método de esa clase en particular, desde una clase heredada o incluso desde cualquier otra clase. En forma general la visibilidad se aplica tanto a métodos como atributos. Cada lenguaje implementa la forma de aplicar el principio de ocultación.

Existen tres niveles de acceso:
  1. Privado: Son los elementos que solo pueden ser accedidos directamente por la clase que los define. El símbolo usado para su representación es el menos "-".
  2. Protegido: Los elementos protegidos son aquellos que pueden ser accedidos por las clases descendientes o clases que compartan el mismo espacio físico "paquete", "namespace", etc. El símbolo usado es el numeral "#".
  3. Público: Estos son los elementos en los cuales no hay restricción alguna y pueden ser accedidos por cualquier clase y objeto del modelo. El símbolo usado es el más "+".

El Origen de la Orientación a Objetos


El concepto de orientación a objetos surgio inicialmente en el ambito de los lenguajes de programación y posteriormente se extendio a los metodos de analisis y diseño. Los conceptos de la programación orientada a objetos tienen origen en Simula 67. Fueron refinados más tarde en Smalltalk. La programación orientada a objetos tomó posición como el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++.

La orientación a objetos toma su lugar entre los metodos de análisis y diseño a finales de los 80's y principios de los 90's con UML (Unified Modeling Language) por sus siglas en ingles.es el sucesor de la ola de métodos de A y DOO, unifica principalmente los métodos de Booch, Rumbaught (OMT) y Jacobson; pero pretende dar una visión más amplia de los mismos.

Finalmente ADOO (Análisis y diseño orientado a objetos) aplica técnicas de modelado de objetos para analizar los requerimientos para un contexto y para diseñar una solución para mejorar los procesos involucrados. No está restringido al diseño de programas de computadora, sino que cubre sistemas enteros de distinto tipo.

La Orientación a Objetos


Hoy en día, más que hace varios años, se habla mucho de orientación a objetos, pero mucha gente tiene concepciones erradas sobre los conceptos de esto, de su uso y potencial. Cuando inicie en la universidad en 2003 apenas y lo mencionaban. Esto no significa que que los paradigmas anteriores no funcionen, por supuesto que son potentes; pero los problemas que abordamos actualmente requieren de la potencialidad del paradigma orientado a objetos.

Estando en la universidad entendi que en ocasiones nuestros maestros son gente mayor, acostumbrada ha hacer las cosa a su modo y a con menos posibilidades de persibir la grandesa de los nuevos paradigmas. Esto sumado a la lentitud de los cambios curriculares en las instituciones de educación de nivel superior, causan que los estudiantes no aprendan los principios basicos de la orientación a objetos de manera correcta.

Actualmete, al menos en la universidad donde yo estudie, tratan de enseñar desde los primeros años la orientación a objetos. Los estudientes trabajan desde el inicio en entornos orientados a objetos, esto resulta de mucha importancia pero lo mas importante que capten los conceptos. Aun asi, si los estudiantes no entienden la orientación a objetos no pueden aprovechar todo el potencial de los entornos de desarrollo y producen sistemas menos eficientes, mantenibles y flexibles.

La orientación a objetos es algo que no debe aprenderse mal, porque la mayoria de las tecnologías conocidas esta evolucionando o ya evoluciono a la orientación a objetos, y debe aprovecharse las capacidades y bondades de las mismas de la forma más optima. Ejemplo de esto es la tecnologia .Net de la Microsoft, las versiones 5 y 6 de PHP, la creciente tendencia a usar Java como lenguaje de programación en proyectos grandes, hasta en JavaScrip puede usarse la orientación a objetos.

Otro aspecto importante de resaltar es que la orientación a objetos no solo debe utilizarse al programar. Los sistemas deben diseñarse y los negocios analizarse y modelarse con orientación a objetos si se quiere que que sea realmente desarrollar sistemas orientados a objetos.

Por estas razones inicio este blog con la esperanza de compartir algo de lo poco que se sobre un tema tan interesante y tan mal interpretado en algunas ocasiones. En el futuro abordaremos temas como el Lenguage Unificado de Modelado (UML), programacion orientada a objetos, herramientas de diseño y programacion y más...