Categoria: Programacion Tema: Php Titulo: Colaboracion de objetos en php
Fecha del Tema: 2013-04-25 22:42:21 Colaboración de objetos Hasta ahora nuestros ejemplos han presentado una sola clase, de la cual hemos definido uno o varios objetos. Pero una aplicación real consta de muchas clases. Veremos que hay dos formas de relacionar las clases. La primera y la que nos concentramos en este concepto es la de COLABORACIóN. Cuando dentro de una clase definimos un atributo o una variable de otra clase decimos que esta segunda clase colabora con la primera. Cuando uno a trabajado por muchos años con la metodología de programación estructurada es difícil subdividir un problema en clases, tiende a querer plantear una única clase que resuelva todo. Presentemos un problema:Una página web es común que contenga una cabecera, un cuerpo y un pié de página. Estas tres secciones podemos perfectamente identificarlas como clases. También podemos identificar otra clase pagina. Ahora bien como podemos relacionar estas cuatro clases (pagina, cabecera, cuerpo, pie), como podemos imaginar la cabecera, cuerpo y pie son partes de la pagina. Luego podemos plantear una clase pagina que contenga tres atributos de tipo objeto. En forma simplificada este problema lo podemos plantear así: <?php class Cabecera { [atributos y métodos] } class Cuerpo { [atributos y métodos] } class Pie { [atributos y métodos] } class Pagina { private $cabecera; private $cuerpo; private $pie; [métodos] } $pag=new Pagina(); ?> Como podemos ver declaramos cuatro clases (Cabecera, Cuerpo, Pie y Pagina), fuera de cualquier clase definimos un objeto de la clase Pagina: <?php $pag=new Pagina(); ?> Dentro de la clase Pagina definimos tres atributos de tipo objeto de las clases Cabecera, Cuerpo y Pie respectivamente. Luego seguramente dentro de la clase Pagina crearemos los tres objetos y llamaremos a sus métodos respectivos. Veamos una implementación real de este problema: <html> <head> <title>Pruebas</title> </head> <body> <?php class Cabecera { private $titulo; public function __construct($tit) { $this->titulo=$tit; } public function mostrar() { echo `<h1 style="text-align:center">`.$this->titulo.`</h1>`; } } class Cuerpo { private $lineas=array(); public function insertarParrafo($li) { $this->lineas[]=$li; } public function mostrar() { for($f=0;$f<count($this->lineas);$f++) { echo `<p>`.$this->lineas[$f].`</p>`; } } } class Pie { private $titulo; public function __construct($tit) { $this->titulo=$tit; } public function mostrar() { echo `<h4 style="text-align:left">`.$this->titulo.`</h4>`; } } class Pagina { private $cabecera; private $cuerpo; private $pie; public function __construct($texto1,$texto2) { $this->cabecera=new Cabecera($texto1); $this->cuerpo=new Cuerpo(); $this->pie=new Pie($texto2); } public function insertarCuerpo($texto) { $this->cuerpo->insertarParrafo($texto); } public function mostrar() { $this->cabecera->mostrar(); $this->cuerpo->mostrar(); $this->pie->mostrar(); } } $pagina1=new Pagina(`Título de la Página`,`Pie de la página`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 1`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 2`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 3`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 4`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 5`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 6`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 7`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 8`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 9`); $pagina1->mostrar(); ?> </body> </html> La primer clase llamada Cabecera define un atributo llamada $titulo que se carga en el constructor, luego se define otro método que imprime el HTML: <?php class Cabecera { private $titulo; public function __construct($tit) { $this->titulo=$tit; } public function mostrar() { echo `<h1 style="text-align:center">`.$this->titulo.`</h1>`; } } ?>
Colaboración de objetos Hasta ahora nuestros ejemplos han presentado una sola clase, de la cual hemos definido uno o varios objetos. Pero una aplicación real consta de muchas clases. Veremos que hay dos formas de relacionar las clases. La primera y la que nos concentramos en este concepto es la de COLABORACIóN. Cuando dentro de una clase definimos un atributo o una variable de otra clase decimos que esta segunda clase colabora con la primera. Cuando uno a trabajado por muchos años con la metodología de programación estructurada es difícil subdividir un problema en clases, tiende a querer plantear una única clase que resuelva todo. Presentemos un problema:Una página web es común que contenga una cabecera, un cuerpo y un pié de página. Estas tres secciones podemos perfectamente identificarlas como clases. También podemos identificar otra clase pagina. Ahora bien como podemos relacionar estas cuatro clases (pagina, cabecera, cuerpo, pie), como podemos imaginar la cabecera, cuerpo y pie son partes de la pagina. Luego podemos plantear una clase pagina que contenga tres atributos de tipo objeto. En forma simplificada este problema lo podemos plantear así: <?php class Cabecera { [atributos y métodos] } class Cuerpo { [atributos y métodos] } class Pie { [atributos y métodos] } class Pagina { private $cabecera; private $cuerpo; private $pie; [métodos] } $pag=new Pagina(); ?> Como podemos ver declaramos cuatro clases (Cabecera, Cuerpo, Pie y Pagina), fuera de cualquier clase definimos un objeto de la clase Pagina: <?php $pag=new Pagina(); ?> Dentro de la clase Pagina definimos tres atributos de tipo objeto de las clases Cabecera, Cuerpo y Pie respectivamente. Luego seguramente dentro de la clase Pagina crearemos los tres objetos y llamaremos a sus métodos respectivos. Veamos una implementación real de este problema: <html> <head> <title>Pruebas</title> </head> <body> <?php class Cabecera { private $titulo; public function __construct($tit) { $this->titulo=$tit; } public function mostrar() { echo `<h1 style="text-align:center">`.$this->titulo.`</h1>`; } } class Cuerpo { private $lineas=array(); public function insertarParrafo($li) { $this->lineas[]=$li; } public function mostrar() { for($f=0;$f<count($this->lineas);$f++) { echo `<p>`.$this->lineas[$f].`</p>`; } } } class Pie { private $titulo; public function __construct($tit) { $this->titulo=$tit; } public function mostrar() { echo `<h4 style="text-align:left">`.$this->titulo.`</h4>`; } } class Pagina { private $cabecera; private $cuerpo; private $pie; public function __construct($texto1,$texto2) { $this->cabecera=new Cabecera($texto1); $this->cuerpo=new Cuerpo(); $this->pie=new Pie($texto2); } public function insertarCuerpo($texto) { $this->cuerpo->insertarParrafo($texto); } public function mostrar() { $this->cabecera->mostrar(); $this->cuerpo->mostrar(); $this->pie->mostrar(); } } $pagina1=new Pagina(`Título de la Página`,`Pie de la página`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 1`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 2`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 3`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 4`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 5`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 6`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 7`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 8`); $pagina1->insertarCuerpo(`Esto es una prueba que debe aparecer dentro del cuerpo de la página 9`); $pagina1->mostrar(); ?> </body> </html> La primer clase llamada Cabecera define un atributo llamada $titulo que se carga en el constructor, luego se define otro método que imprime el HTML: <?php class Cabecera { private $titulo; public function __construct($tit) { $this->titulo=$tit; } public function mostrar() { echo `<h1 style="text-align:center">`.$this->titulo.`</h1>`; } } ?>