En este artículo se muestra un ejemplo sencillo de utilizar recusive OCL dentro de un patrón compuesto.
"Para entender la recursividad debemos primero entender la recursividad" [Fuente desconocida]
Seguramente no hay un programador profesional por ahí que no ha utilizado la recursividad? Yo apuesto que la primera rutina recursiva que la mayoría de los programadores se escribió algún tipo de FindAllFiles rutina. La belleza de la recursividad es que es tan simple y, sin embargo, los resultados dan la ilusión de que el código debe ser mucho más complicado.
Estoy lentamente reescritura www.HowToDoThings.comen mi muy poco tiempo libre. Antes de la clasificación de los artículos es de tres niveles de profundidad, nada más y nada menos; Tema-> Categoría-> subcategoría. Una de las mejoras que he decidido añadir a la web es la capacidad de anidar una cantidad ilimitada de niveles. Para ello he puesto en marcha una base bastante OOP compuestos como patrón a fin de

A "BaseCategory" es una clase abstracta, es único propósito en la vida es tener un nombre propio y subcategorías. A "subcategoría" existe a la propiedad de más artículos y subcategorías. A "MainCategory" tiene una imagen de la página principal, y posee subcategorías. Mi clasificación puede consistir de un mínimo de dos niveles (MainCategory-> subcategoría), o como muchos niveles como me gusta.
A continuación, en el modelo de base de la clase I derivados aplicado un atributo llamado "DisplayName: String". Este atributo fue agregado para que yo podría utilizar una única página web ConfirmDelete.aspx para mostrar el nombre del objeto que el usuario quiere borrar (lo que suele ser un artículo, pero puede reutilizar para cualquier objeto en absoluto). El código de este atributo es la siguiente
DisplayNameDeriveAndSubscribe cadena pública ( |
Se limita a evaluar "self.asString" en contra de la actual instancia. Esto tiene el efecto de la evaluación de la expresión OCL DefaultStringRepresentation entró en el modelo y devolverla como una cadena. BaseCategory su DefaultStringRepresentation ha ajustado a "nombre".
Ahora aquí es donde viene la recursividad en ella. Como estaba entrando en una nueva subcategoría que no tardó en darse cuenta de que "ASP.NET" me dijo nada acerca de que en la categorización estructura estaba trabajando. ¿No sería agradable si en vez de sólo ver "ASP.NET" Quiero ver "Computadoras-> Programación-> Delphi 2005 -> ASP.NET"? Así que eso es lo que hice, y la belleza es que no tener una sola línea de código para trabajar en el camino, porque he usado una muy simple expresión OCL recursivo.
He añadido una nueva "Ruta de acceso: La cadena" atribuir a la subcategoría de clase, establecidos derivados a True, y luego la derivación a OCL "parentCategory.displayName". Recuerde que DisplayName sólo por defecto de retorno de la Representación de cadena, por lo que en este caso, la SubCategory.Path es sólo el retorno de la DisplayName de su padre. Esto no es ningún uso en absoluto, hasta que cambie la representación de cadena por defecto también, al igual que ...
parentCategory.asString + '->' + nombre |
El DisplayName de cualquier categoría es su padre de la Representación de cadena por defecto un separador + + su propio nombre. ¿Cuál es su padre por defecto de la representación? Bueno, si el padre es un MainCategory entonces la expresión "nombre" se utiliza, sin embargo, si el padre es también una subcategoría entonces la expresión "parentCategory.asString + '->' + nombre" se utiliza - todo el camino hasta que llegar a la MainCategory.
Esto no sólo dame un camino muy informativo atributo, sino como una muy agradable por producto, sino que también me da la ruta completa + nombre en el formulario web ConfirmDelete.aspx cada vez que intenta eliminar una subcategoría objeto.

Delicious
Digg
Google
Yahoo