SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
12
© Abril, 2015 Eugenia Bahit – Creative Commons Atribución CompartirIgual - Silueta de Mujer creada por Leonardo B. Cunha
Pocket Edition 2015
OBJETOS RECURSIVOS
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
2
PROBLEMA
El cliente necesita tener la 
libertad de anidar 
categorías unas dentro de 
otras con niveles de 
agrupamiento variable”
1
1,1 1,2 1,3
1,1,1 1,1,2 1,3,1 1,3,2
1,1,2,1 1,1,2,2 1,1,2,3
Categorías anidadas en
Europio Engine
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
3
SOLUCIÓNCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
Objeto recursivo
Objeto que se compone de
una colección de objetos de
su mismo tipo
Lo que en realidad necesita 
el cliente se denomina 
«objeto recursivo»
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
4
IMPLEMENTACIÓNCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
Objeto recursivo Un objeto recursivo se 
compone de sí mismo en 
forma cíclica, tantas veces 
como sea necesario
La relación entre objetos 
recursivos es creada por un 
conector lógico
+ objetorecursivo_id: int
+ denominacion: string
+ objetorecursivo_collection: array
+ save()
+ get()
+ destroy()
+ add(ObjetoRecursivo $obj)
ObjetoRecursivo
+ compositor: int
+ compuesto: int
ConectorLógico
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
5
TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
1Crear un modelo
heredado de StandardObject
class Categoria extends BranchedObject {}
Si el modelo requiere de propiedades adicionales, agregarlas
sobrescribiendo el método constructor:
class Categoria extends BranchedObject {
public function __construct() {
parent::__construct();
$this->producto_collection = array();
}
}
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
6
TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
2Crear la tabla
para persistencia del nuevo modelo
CREATE TABLE IF NOT EXISTS categoria (
categoria_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
denomination VARCHAR(60) NOT NULL,
state INT(1) DEFAULT 0
) ENGINE=InnoDB;
/* crea una categoría raíz por defecto */
INSERT IGNORE
INTO categoria (categoria_id, denomination, state)
VALUES (1, 'Root', 1);
denomination y state son dos
propiedades heradadas que
deben incluirse de forma
obligatoria al mapear el modelo
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
7
TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
3Crear la tabla del conector lógico
desde el CLI de Europio Engine
~$ ./europio -t
Para crear una nueva tabla, indique a qué tipo de objeto pertenece.
(m) Relacional Multiplicador
(c) Conector Lógico Relacional
(s) Objeto Serializado
(q) CANCELAR
Su opción (m/c/s/q): c
Nombre del Objeto Compuesto: Categoria
Nombre del Objeto Compositor: Categoria
Nombre de la base de datos: midatabase
QUERY:
=================================================================
CREATE TABLE IF NOT EXISTS categoriacategoria ( connector_id INT(11) NOT NULL AUTO_INCREMENT
PRIMARY KEY , compuesto INT(11) NOT NULL , INDEX (compuesto) , FOREIGN KEY (compuesto)
REFERENCES categoria (categoria_id) ON DELETE CASCADE , compositor INT(11) NOT NULL , INDEX
(compositor) , FOREIGN KEY (compositor) REFERENCES categoria (categoria_id) ON DELETE
CASCADE )ENGINE=InnoDB;
Enter password:
Listo!
¿Desea crear otra tabla en foo? (s/n) n
Hasta luego!
~$
El CLI arrojará en pantalla la sentencia SQL
que utilizará para crear la tabla
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
8
TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
4Crear formulario HTML
para agregar nuevas categorías
function agregar() {
Dict::set_dict_for_webform($GLOBALS['plain_tree'], 'denomination');
$form = new WebFormPRO('/modulo/categoria/guardar');
$form->add_text('denomination', 'Nueva categoría:', null, null, 3);
$form->add_select('categoria', 'Anidar en:', $GLOBALS['plain_tree'], null, 3);
$form->add_hidden('state', 1);
$form->add_submit('Guardar');
$form->add_errorzone(array());
$form->get_form();
print Template('Agregar categoría')->show($form->form);
}
$GLOBALS['plain_tree']es un
árbol de objetos anidados en texto
plano, provisto por BranchedObject.
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
9
TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
5Completar el recurso “agregar” en el controlador
para mostrar el formulario del paso 4
public function agregar() {
$this->model->get_tree();
$this->view->agregar();
}
get_tree() es el método
encargado de agregar el árbol
de objetos anidados al array
$GLOBALS.
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
10
TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
6Completar el recurso “guardar” en el controlador
para almacenar la nueva categoría
public function guardar() {
extract($_POST);
$this->model->denomination = $denomination;
$this->model->state = $state;
$this->model->save();
$obj = Pattern::factory('Categoria', $categoria);
$obj->add_section($this->model);
$lc = new LogicalConnector($obj, 'Categoria');
$lc->save();
HTTPHelper::go("/modulo/categoria/ver");
}
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
11
TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
7Completar el método “ver” en la vista
para mostrar el árbol completo de categorías
public function ver() {
print "<pre>{$GLOBALS['plain_tree']}</pre>";
}
Esta vista puede ser mejorada
Tenga en cuenta que ésta, se
trata de una vista temporal, solo
a fines prácticos para entender el
concepto de objeto recursivo.
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
12
TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE
8Completar el recurso “ver”
en el controlador
public function ver() {
$this->model->get_tree();
$this->view->ver();
}
Para probar, ingresar en:
http://<hostname>/<modulo>/categoria/agregar
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
13
TUTORIAL
¿Te gustaría aprender más
sobre Europio Engine?
CATEGORÍAS ANIDADAS EN EUROPIO ENGINE
Sitio Web oficial:
http://www.europio.org
Wiki del rpoyecto:
http://wiki.europio.org
Ayuda y soporte gratuito:
http://ayuda.europio.org
Curso online (profesional):
http://curso.europio.org
wiki
ayuda
curso
.europio.orghttp://
WEB PERSONAL:
www.eugeniabahit.com
TWITTER:
@eugeniabahit
REPOSITORIOS:
http://repo.eugeniabahit.com
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
14
Eugenia Bahit
GLAMP Hacker & programadora eXtrema
Especializada en seguridad
informática y desarrollo de
Software mediante
Ingeniería Inversa de
código en Python y PHP.
Miembro de
Free Software Foundation
presidida por Richard Stallman
(creador del proyecto GNU y el
Software Libre) y
The Linux Foundation presidida
por Linus Torvalds (creador del
kernel Linux).
Creadora de los proyectos
Europio Engine, Jack The
Stripper, python-printr y
Enhancement CLI for PHP.
Fundadora de las revistas
The Original Hacker y Hackers &
Developers Magazine.
Dedicada actualmente a la
docencia e investigación y
a la Formación
Profesional de Hackers y
Programadores
© 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual
15
Licencia Libre
Creative Commons Atribución CompartirIgual
Eres libre de:
Compartir
copiar y distribuir este documento por cualquier medio y formato
Modificar
crear documentos derivados y distribuirlos
Pero:
Hazlo con respeto hacia al autor
Manteniendo la leyenda de copyright que ves al pie de cada página
(cuando hagas cambios, indica que eres el responsable de esos cambios)
No quites la libertad a otros
Cuando distribuyas este documento y/o tus modificaciones, deberás
mantener la licencia original

Más contenido relacionado

Destacado

técnicas de hackers
técnicas de hackerstécnicas de hackers
técnicas de hackershhfd526374848
 
Hackers Black Book Español
Hackers Black Book EspañolHackers Black Book Español
Hackers Black Book Españoldegarden
 
Comandos ms dos(simbolo de sistema)
Comandos ms dos(simbolo de sistema)Comandos ms dos(simbolo de sistema)
Comandos ms dos(simbolo de sistema)castillodavid
 
Tecnicas avanzadas de penetracion a sistemas
Tecnicas avanzadas de penetracion a sistemasTecnicas avanzadas de penetracion a sistemas
Tecnicas avanzadas de penetracion a sistemasRafael Seg
 
El libro negro del hacker
El libro negro del hackerEl libro negro del hacker
El libro negro del hackermaster192
 
Manual para romper contraseñas WEP y WPA
Manual para romper contraseñas WEP y WPAManual para romper contraseñas WEP y WPA
Manual para romper contraseñas WEP y WPAPaulo Colomés
 
Manual de hacker 131 trucos elhacker hacking webs, hack msn messenger 7, se...
Manual de hacker   131 trucos elhacker hacking webs, hack msn messenger 7, se...Manual de hacker   131 trucos elhacker hacking webs, hack msn messenger 7, se...
Manual de hacker 131 trucos elhacker hacking webs, hack msn messenger 7, se...kelvinst
 
Proyecto areas-hackers-faik-aliev
Proyecto areas-hackers-faik-alievProyecto areas-hackers-faik-aliev
Proyecto areas-hackers-faik-alievfaikaliev
 

Destacado (10)

Hackers y crackers
Hackers y crackersHackers y crackers
Hackers y crackers
 
técnicas de hackers
técnicas de hackerstécnicas de hackers
técnicas de hackers
 
La biblia del hacker
La biblia del hackerLa biblia del hacker
La biblia del hacker
 
Hackers Black Book Español
Hackers Black Book EspañolHackers Black Book Español
Hackers Black Book Español
 
Comandos ms dos(simbolo de sistema)
Comandos ms dos(simbolo de sistema)Comandos ms dos(simbolo de sistema)
Comandos ms dos(simbolo de sistema)
 
Tecnicas avanzadas de penetracion a sistemas
Tecnicas avanzadas de penetracion a sistemasTecnicas avanzadas de penetracion a sistemas
Tecnicas avanzadas de penetracion a sistemas
 
El libro negro del hacker
El libro negro del hackerEl libro negro del hacker
El libro negro del hacker
 
Manual para romper contraseñas WEP y WPA
Manual para romper contraseñas WEP y WPAManual para romper contraseñas WEP y WPA
Manual para romper contraseñas WEP y WPA
 
Manual de hacker 131 trucos elhacker hacking webs, hack msn messenger 7, se...
Manual de hacker   131 trucos elhacker hacking webs, hack msn messenger 7, se...Manual de hacker   131 trucos elhacker hacking webs, hack msn messenger 7, se...
Manual de hacker 131 trucos elhacker hacking webs, hack msn messenger 7, se...
 
Proyecto areas-hackers-faik-aliev
Proyecto areas-hackers-faik-alievProyecto areas-hackers-faik-aliev
Proyecto areas-hackers-faik-aliev
 

Similar a Objetos recursivos

Directorio betabeers - symfony madrid
Directorio betabeers - symfony madridDirectorio betabeers - symfony madrid
Directorio betabeers - symfony madridbetabeers
 
Abap presentacion-ALV_Orientado_a_Objetos.ppt
Abap presentacion-ALV_Orientado_a_Objetos.pptAbap presentacion-ALV_Orientado_a_Objetos.ppt
Abap presentacion-ALV_Orientado_a_Objetos.pptEdgarpea71
 
Presentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFPresentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFjuansoto86
 
Crear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroCrear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroEduardo Turiño
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con phpFer Nando
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3Milaly
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework SymfonyAlejandro Hernández
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosJavier Eguiluz
 
Examen unidad 1 ortiz enciso antonio aldahir
Examen unidad 1 ortiz enciso antonio aldahirExamen unidad 1 ortiz enciso antonio aldahir
Examen unidad 1 ortiz enciso antonio aldahirNEQUIZ URIEL
 
Presentacion Tesis
Presentacion TesisPresentacion Tesis
Presentacion TesisGEOVAN21
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Raul Fraile
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2Mario IC
 

Similar a Objetos recursivos (20)

Directorio betabeers - symfony madrid
Directorio betabeers - symfony madridDirectorio betabeers - symfony madrid
Directorio betabeers - symfony madrid
 
Guía práctica Herencia
Guía práctica HerenciaGuía práctica Herencia
Guía práctica Herencia
 
Abap presentacion-ALV_Orientado_a_Objetos.ppt
Abap presentacion-ALV_Orientado_a_Objetos.pptAbap presentacion-ALV_Orientado_a_Objetos.ppt
Abap presentacion-ALV_Orientado_a_Objetos.ppt
 
Presentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFPresentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoF
 
Cómo domar SonataAdminBundle
Cómo domar SonataAdminBundleCómo domar SonataAdminBundle
Cómo domar SonataAdminBundle
 
Crear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroCrear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde Cero
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Programación de Componentes para Joomla (Gabriel Cuesta)
Programación de Componentes para Joomla (Gabriel Cuesta)Programación de Componentes para Joomla (Gabriel Cuesta)
Programación de Componentes para Joomla (Gabriel Cuesta)
 
MODELO VISTA CONTROLADOR EN PHP
MODELO VISTA CONTROLADOR EN PHPMODELO VISTA CONTROLADOR EN PHP
MODELO VISTA CONTROLADOR EN PHP
 
Doctrine2 sf2Vigo
Doctrine2 sf2VigoDoctrine2 sf2Vigo
Doctrine2 sf2Vigo
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework Symfony
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
 
Examen unidad 1 ortiz enciso antonio aldahir
Examen unidad 1 ortiz enciso antonio aldahirExamen unidad 1 ortiz enciso antonio aldahir
Examen unidad 1 ortiz enciso antonio aldahir
 
Enclausulamiento java
Enclausulamiento javaEnclausulamiento java
Enclausulamiento java
 
Presentacion Tesis
Presentacion TesisPresentacion Tesis
Presentacion Tesis
 
Backend (sf2Vigo)
Backend (sf2Vigo)Backend (sf2Vigo)
Backend (sf2Vigo)
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2
 
Abstract Factory
Abstract FactoryAbstract Factory
Abstract Factory
 

Más de Huehue 1

Gimp magazine número 10
Gimp magazine número 10Gimp magazine número 10
Gimp magazine número 10Huehue 1
 
Gimp magazine 9
Gimp magazine 9Gimp magazine 9
Gimp magazine 9Huehue 1
 
Tuxinfo número 71.
Tuxinfo número 71.Tuxinfo número 71.
Tuxinfo número 71.Huehue 1
 
Gimp magazine número 7
Gimp magazine número 7Gimp magazine número 7
Gimp magazine número 7Huehue 1
 
Gimp magazine número 6.
Gimp magazine número 6.Gimp magazine número 6.
Gimp magazine número 6.Huehue 1
 
The Original Hacker número 11.
The Original Hacker número 11.The Original Hacker número 11.
The Original Hacker número 11.Huehue 1
 
TuxInfo número 70
TuxInfo número 70TuxInfo número 70
TuxInfo número 70Huehue 1
 
Tux Info número 69.
Tux Info número 69.Tux Info número 69.
Tux Info número 69.Huehue 1
 
Full Circle número 90
Full Circle número 90Full Circle número 90
Full Circle número 90Huehue 1
 
Full Circle 89
Full Circle 89Full Circle 89
Full Circle 89Huehue 1
 
The Original Hacker número 9.
The Original Hacker número 9.The Original Hacker número 9.
The Original Hacker número 9.Huehue 1
 
The Original Hacker número 8.
The Original Hacker número 8.The Original Hacker número 8.
The Original Hacker número 8.Huehue 1
 
Full Circle 88
Full Circle 88Full Circle 88
Full Circle 88Huehue 1
 
Curso linux
Curso linuxCurso linux
Curso linuxHuehue 1
 
TuxInfo número 68
TuxInfo número 68TuxInfo número 68
TuxInfo número 68Huehue 1
 
Full Circle 87
Full Circle 87Full Circle 87
Full Circle 87Huehue 1
 
Primeros pasos con Libre Office
Primeros pasos con Libre OfficePrimeros pasos con Libre Office
Primeros pasos con Libre OfficeHuehue 1
 
Full Circle 86
Full Circle 86Full Circle 86
Full Circle 86Huehue 1
 
Manual Inkscape
Manual InkscapeManual Inkscape
Manual InkscapeHuehue 1
 
Aprenda Gimp a los tropezones.
Aprenda Gimp a los tropezones.Aprenda Gimp a los tropezones.
Aprenda Gimp a los tropezones.Huehue 1
 

Más de Huehue 1 (20)

Gimp magazine número 10
Gimp magazine número 10Gimp magazine número 10
Gimp magazine número 10
 
Gimp magazine 9
Gimp magazine 9Gimp magazine 9
Gimp magazine 9
 
Tuxinfo número 71.
Tuxinfo número 71.Tuxinfo número 71.
Tuxinfo número 71.
 
Gimp magazine número 7
Gimp magazine número 7Gimp magazine número 7
Gimp magazine número 7
 
Gimp magazine número 6.
Gimp magazine número 6.Gimp magazine número 6.
Gimp magazine número 6.
 
The Original Hacker número 11.
The Original Hacker número 11.The Original Hacker número 11.
The Original Hacker número 11.
 
TuxInfo número 70
TuxInfo número 70TuxInfo número 70
TuxInfo número 70
 
Tux Info número 69.
Tux Info número 69.Tux Info número 69.
Tux Info número 69.
 
Full Circle número 90
Full Circle número 90Full Circle número 90
Full Circle número 90
 
Full Circle 89
Full Circle 89Full Circle 89
Full Circle 89
 
The Original Hacker número 9.
The Original Hacker número 9.The Original Hacker número 9.
The Original Hacker número 9.
 
The Original Hacker número 8.
The Original Hacker número 8.The Original Hacker número 8.
The Original Hacker número 8.
 
Full Circle 88
Full Circle 88Full Circle 88
Full Circle 88
 
Curso linux
Curso linuxCurso linux
Curso linux
 
TuxInfo número 68
TuxInfo número 68TuxInfo número 68
TuxInfo número 68
 
Full Circle 87
Full Circle 87Full Circle 87
Full Circle 87
 
Primeros pasos con Libre Office
Primeros pasos con Libre OfficePrimeros pasos con Libre Office
Primeros pasos con Libre Office
 
Full Circle 86
Full Circle 86Full Circle 86
Full Circle 86
 
Manual Inkscape
Manual InkscapeManual Inkscape
Manual Inkscape
 
Aprenda Gimp a los tropezones.
Aprenda Gimp a los tropezones.Aprenda Gimp a los tropezones.
Aprenda Gimp a los tropezones.
 

Último

Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxKarlaMassielMartinez
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
Éteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesÉteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesLauraColom3
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdfenelcielosiempre
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfPaolaRopero2
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 

Último (20)

Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
Éteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesÉteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reacciones
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 

Objetos recursivos

  • 1. 12 © Abril, 2015 Eugenia Bahit – Creative Commons Atribución CompartirIgual - Silueta de Mujer creada por Leonardo B. Cunha Pocket Edition 2015 OBJETOS RECURSIVOS
  • 2. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 2 PROBLEMA El cliente necesita tener la  libertad de anidar  categorías unas dentro de  otras con niveles de  agrupamiento variable” 1 1,1 1,2 1,3 1,1,1 1,1,2 1,3,1 1,3,2 1,1,2,1 1,1,2,2 1,1,2,3 Categorías anidadas en Europio Engine
  • 3. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 3 SOLUCIÓNCATEGORÍAS ANIDADAS EN EUROPIO ENGINE Objeto recursivo Objeto que se compone de una colección de objetos de su mismo tipo Lo que en realidad necesita  el cliente se denomina  «objeto recursivo»
  • 4. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 4 IMPLEMENTACIÓNCATEGORÍAS ANIDADAS EN EUROPIO ENGINE Objeto recursivo Un objeto recursivo se  compone de sí mismo en  forma cíclica, tantas veces  como sea necesario La relación entre objetos  recursivos es creada por un  conector lógico + objetorecursivo_id: int + denominacion: string + objetorecursivo_collection: array + save() + get() + destroy() + add(ObjetoRecursivo $obj) ObjetoRecursivo + compositor: int + compuesto: int ConectorLógico
  • 5. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 5 TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE 1Crear un modelo heredado de StandardObject class Categoria extends BranchedObject {} Si el modelo requiere de propiedades adicionales, agregarlas sobrescribiendo el método constructor: class Categoria extends BranchedObject { public function __construct() { parent::__construct(); $this->producto_collection = array(); } }
  • 6. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 6 TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE 2Crear la tabla para persistencia del nuevo modelo CREATE TABLE IF NOT EXISTS categoria ( categoria_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, denomination VARCHAR(60) NOT NULL, state INT(1) DEFAULT 0 ) ENGINE=InnoDB; /* crea una categoría raíz por defecto */ INSERT IGNORE INTO categoria (categoria_id, denomination, state) VALUES (1, 'Root', 1); denomination y state son dos propiedades heradadas que deben incluirse de forma obligatoria al mapear el modelo
  • 7. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 7 TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE 3Crear la tabla del conector lógico desde el CLI de Europio Engine ~$ ./europio -t Para crear una nueva tabla, indique a qué tipo de objeto pertenece. (m) Relacional Multiplicador (c) Conector Lógico Relacional (s) Objeto Serializado (q) CANCELAR Su opción (m/c/s/q): c Nombre del Objeto Compuesto: Categoria Nombre del Objeto Compositor: Categoria Nombre de la base de datos: midatabase QUERY: ================================================================= CREATE TABLE IF NOT EXISTS categoriacategoria ( connector_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY , compuesto INT(11) NOT NULL , INDEX (compuesto) , FOREIGN KEY (compuesto) REFERENCES categoria (categoria_id) ON DELETE CASCADE , compositor INT(11) NOT NULL , INDEX (compositor) , FOREIGN KEY (compositor) REFERENCES categoria (categoria_id) ON DELETE CASCADE )ENGINE=InnoDB; Enter password: Listo! ¿Desea crear otra tabla en foo? (s/n) n Hasta luego! ~$ El CLI arrojará en pantalla la sentencia SQL que utilizará para crear la tabla
  • 8. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 8 TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE 4Crear formulario HTML para agregar nuevas categorías function agregar() { Dict::set_dict_for_webform($GLOBALS['plain_tree'], 'denomination'); $form = new WebFormPRO('/modulo/categoria/guardar'); $form->add_text('denomination', 'Nueva categoría:', null, null, 3); $form->add_select('categoria', 'Anidar en:', $GLOBALS['plain_tree'], null, 3); $form->add_hidden('state', 1); $form->add_submit('Guardar'); $form->add_errorzone(array()); $form->get_form(); print Template('Agregar categoría')->show($form->form); } $GLOBALS['plain_tree']es un árbol de objetos anidados en texto plano, provisto por BranchedObject.
  • 9. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 9 TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE 5Completar el recurso “agregar” en el controlador para mostrar el formulario del paso 4 public function agregar() { $this->model->get_tree(); $this->view->agregar(); } get_tree() es el método encargado de agregar el árbol de objetos anidados al array $GLOBALS.
  • 10. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 10 TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE 6Completar el recurso “guardar” en el controlador para almacenar la nueva categoría public function guardar() { extract($_POST); $this->model->denomination = $denomination; $this->model->state = $state; $this->model->save(); $obj = Pattern::factory('Categoria', $categoria); $obj->add_section($this->model); $lc = new LogicalConnector($obj, 'Categoria'); $lc->save(); HTTPHelper::go("/modulo/categoria/ver"); }
  • 11. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 11 TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE 7Completar el método “ver” en la vista para mostrar el árbol completo de categorías public function ver() { print "<pre>{$GLOBALS['plain_tree']}</pre>"; } Esta vista puede ser mejorada Tenga en cuenta que ésta, se trata de una vista temporal, solo a fines prácticos para entender el concepto de objeto recursivo.
  • 12. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 12 TUTORIALCATEGORÍAS ANIDADAS EN EUROPIO ENGINE 8Completar el recurso “ver” en el controlador public function ver() { $this->model->get_tree(); $this->view->ver(); } Para probar, ingresar en: http://<hostname>/<modulo>/categoria/agregar
  • 13. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 13 TUTORIAL ¿Te gustaría aprender más sobre Europio Engine? CATEGORÍAS ANIDADAS EN EUROPIO ENGINE Sitio Web oficial: http://www.europio.org Wiki del rpoyecto: http://wiki.europio.org Ayuda y soporte gratuito: http://ayuda.europio.org Curso online (profesional): http://curso.europio.org wiki ayuda curso .europio.orghttp://
  • 14. WEB PERSONAL: www.eugeniabahit.com TWITTER: @eugeniabahit REPOSITORIOS: http://repo.eugeniabahit.com © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 14 Eugenia Bahit GLAMP Hacker & programadora eXtrema Especializada en seguridad informática y desarrollo de Software mediante Ingeniería Inversa de código en Python y PHP. Miembro de Free Software Foundation presidida por Richard Stallman (creador del proyecto GNU y el Software Libre) y The Linux Foundation presidida por Linus Torvalds (creador del kernel Linux). Creadora de los proyectos Europio Engine, Jack The Stripper, python-printr y Enhancement CLI for PHP. Fundadora de las revistas The Original Hacker y Hackers & Developers Magazine. Dedicada actualmente a la docencia e investigación y a la Formación Profesional de Hackers y Programadores
  • 15. © 2015 Eugenia Bahit, The Original Hacker Pocket Edition Nro. 12 – Creative Commons Atribución CompartirIgual 15 Licencia Libre Creative Commons Atribución CompartirIgual Eres libre de: Compartir copiar y distribuir este documento por cualquier medio y formato Modificar crear documentos derivados y distribuirlos Pero: Hazlo con respeto hacia al autor Manteniendo la leyenda de copyright que ves al pie de cada página (cuando hagas cambios, indica que eres el responsable de esos cambios) No quites la libertad a otros Cuando distribuyas este documento y/o tus modificaciones, deberás mantener la licencia original