Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porRosa María Amparo Segura Lozano Modificado hace 9 años
1
ECOM-6030 CAPÍTULO 6 OBJECT ORIENTED PHP Prof. Nelliud D. Torres © - Derechos Reservados
2
CONTENIDO Conceptos Object-oriented Classes, atributos y operaciones Invocar métodos Inheritance Polimorfismo Clases Abstractas Diseño de clases Funcionalidades avanzadas del OO 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 2
3
PROGRAMACIÓN ORIENTADA A OBJETOS La programación moderna apoya o requiere un enfoque orientado a objetos en cuanto al desarrollo de software se refiere. En el contexto de OOP, un objeto puede ser cualquier ítem o concepto. A nivel físico nos podemos referir a un escritorio o cliente o a nivel conceptual nos podemos referir a un área de entrada de texto o a un archivo. A nivel de software vamos a utilizar objetos de la vida real y a nivel de software. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 3 Pag. 158
4
PROGRAMACIÓN ORIENTADA A OBJETOS – CONTINUACIÓN - 1 El software Object-Oriented (OO) está diseñado como un conjunto de objetos con atributos y operaciones que interactúan para poder completar lo que uno necesita. Atributos – Son propiedades o variables relacionados a un objeto. (También se le conoce como: member variable, property) Operaciones – Métodos, acciones o funciones que el objeto puede ejecutar para modificarse a si mismo o para ejecutar algún efecto externo. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 4 Pag. 158
5
PROGRAMACIÓN ORIENTADA A OBJETOS – CONTINUACIÓN - 2 La ventaja central del OOP es su capacidad de dar apoyo a la encapsulación. (data hiding) Esto significa que el acceso a la data dentro de un objeto está disponible sólo a través de las operaciones del objeto mejor conocido como la interfaz del objeto. Cambiar la interfaz del objeto es fácil y su alcance no interfiere con otras partes del programa. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 5 Pag. 158
6
PROGRAMACIÓN ORIENTADA A OBJETOS – CONTINUACIÓN - 3 En el caso de la programación Web, se recomienda el uso de la programación OO. En el caso de pequeños proyectos, estos pueden ser desarrollados utilizando la programación tradicional. Sin embargo para complejos proyectos o pequeños proyectos que en un futuro van a convertirse en proyectos grandes o complejos, se recomienda utilizar desde un principio la programación orientada a objetos. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 6 Pag. 158
7
PROGRAMACIÓN ORIENTADA A OBJETOS – CONTINUACIÓN - 4 La programación orientada a objetos (POO) ayuda en el manejo de problemas complejos. Aumenta la reusabilidad del código y por ende reduce los costos de mantenimiento. Un objeto es una colección única e identificable de datos almacenados y operaciones que operan sobre esos datos. Por ejemplo se puede tener dos botones en un programa que tengan el mismo ancho y alto y otros atributos similares, pero aún así uno tiene que identificar un botón del otro. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 7 Pag. 159
8
OBJETOS Para poder trabajar objetos similares, se utilizan variables como identificadores únicos. Los objetos se pueden agrupar en clases. Las clases representan un conjunto de objetos que pueden tener atributos que varíen entre ellos, pero aún así deben tener unas propiedades en común. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 8 Pag. 159
9
EJEMPLO DE CLASE Y OBJETO Se puede pensar en bicicleta como una clase que describe a diferentes bicicletas. Las bicicletas tienen atributos y capacidades similares. Por ejemplo tienes dos ruedas, tienen color y tamaño y poseen operaciones como la de moverse (pedalear). La bicicleta de una persona en particular cae en esa clase ya que cumple con los atributos y capacidades, sin embargo los atributos pueden ser únicos ya que si es de color verde, no todas son verdes y así por el estilo. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 9 Pag. 159
10
POLIMORFISMO Polimorfismo significa que diferentes clases pueden tener diferentes comportamientos para la misma operación. Por ejemplo si se tiene la clase carro y la clase bicicleta, la operación de moverse (move) es diferente en ambas. EL verbo move se asocia con un conjunto de acciones sólo cuando se sabe a que objeto se le van a ejecutar. Esto se conoce como abstracción. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 10 Pag. 159
11
INHERITANCE Permite crear una relación jerárquica entre las clases al utilizar sub-clases. Una sub-clase hereda (inheritance) atributos y operaciones de otra clase (superclase). Por ejemplo el carro y la bicicleta tienen ciertas cosas en común. Se puede crear una clase llamada vehículo que contenga atributos como color y operaciones como move que son comunes en todos los vehículos. Las sub-clases carro y bicicleta heredan entonces esos atributos y operaciones. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 11 Pag. 160
12
USO DEL INHERITANCE Permite que el código sea más reusable. Las operaciones se pueden escribir en una superclase una sola vez y ser reutilizadas en múltiples sub-clases. Esto elimina el tener que re-escribir una operación en múltiples sub-clases. Esta es una de las grandes ventajas de la POO. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 12 Pag. 160
13
CREACIÓN DE CLASES Para crear una clase en PHP utilizamos el siguiente formato: class classname { } Para crear atributos, se declaran variables dentro de la definición de la clase. Ejemplo: class classname { var $attribute1; var $attribute2; } 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 13 Pag. 160
14
OPERACIONES EN LAS CLASES Las operaciones se declaran al utilizar funciones dentro de la definición de la clase. El ejemplo a continuación crea una clase con dos operaciones que no hacen nada. Una de ellas no utiliza parámetros y la otra utiliza dos. class classname { function operation1() { } function operation2($param1, $param2) { } 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 14 Pag. 161
15
CONSTRUCTORS Es un tipo de operación especial. Se invoca cuando un objeto es creado. Su función es inicializar tareas, variables o crear objetos. La forma de definir un constructor se puede ver en el siguiente ejemplo: class classname { function __construct($param) { echo “Contructor called with parameter $param ”; } 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 15 Pag. 161
16
DESTRUCTORS Es lo opuesto a los contructors. Se ejecutan justo antes de que una clase se destruya. Esto ocurre automáticamente cuando todas las referencias a una clase están unset o están fuera de alcance (scope). Su formato es similar al del constructor, solo que debe llamarse de la siguiente forma: __destruct() No utilizan parámetros. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 16 Pag. 161
17
CREANDO INSTANCIAS DE LAS CLASES Después de haber declarado una clase, necesitamos crear un objeto. Este objeto sería un individuo particular que es miembro de una clase. Esto se conoce como crear una instancia. El objeto se crea al utilizar el keyword new. Cuando se crea, hay que especificar de cual clase el objeto va a ser creado (instancia) y se provee cualquier parámetro requerido por el constructor. En el próximo slide se ve un ejemplo de una clase con su constructor y tres objetos. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 17 Pag. 162
18
CREANDO INSTANCIAS DE LAS CLASES – EJ. class classname { function __construct($param) { echo “Contructor called with parameter $param ”; } $a = new classname(‘First’); $b = new classname(‘Second’); $c = new classname( ); 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 18 Pag. 162
19
CREANDO INSTANCIAS DE LAS CLASES – EJ. La corrida del código anterior es: Constructor called with parameter First Constructor called with parameter Second Constructor called with parameter Recuerden que el constructor se ejecuta cada vez que un objeto se crea. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 19 Pag. 162
20
USO DE ATRIBUTOS EN LAS CLASES Para utilizar atributos(variables) de la clase dentro de una operación (función) se utiliza un pointer especial llamado $this para poder capturar su valor. Ejemplo: class classname { var $attribute; function operation($param) { $this->attribute = $param echo $this->attribute; } 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 20 Pag. 162-163 Aquí captura el valor de la variable attribute (en forma de pointer) y lo puede utilizar dentro de la función.
21
USO DE ATRIBUTOS FUERA DE LAS CLASES Para acceder una variable fuera de la clase, existen restricciones que lo limitan, esto se verá más adelante. El siguiente ejemplo muestra como accederlo sin aplicar ningún tipo de restricción. class classname { var $attribute; } $a = new classname(); $a->attribute = ‘value’; echo $a->attribute; 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 21 Pag. 163 Creando el objeto Asignando el valor al atributo que pertenece al objeto llamado a Mostrando el valor en el browser del objeto a con su variable llamada attribute.
22
USO DE ATRIBUTOS FUERA DE LAS CLASES Generalmente no es buena idea acceder atributos fuera de la clase. Esto se puede prevenir utilizando las funciones __get y __set como se ven en el siguiente ejemplo: class classname { var $attribute; function __get($name) { return $this->$name; } function __set ($name, $value) { $this->$name = $value; } 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 22 Pag. 163 Se conocen como accesor functions permite hacer todos los accesos por una sola sección de código Devuelve el valor de $attribute Coge la variable attribute y le asigna el valor que se le sometio a través de la operación (función)
23
USO DE ATRIBUTOS FUERA DE LAS CLASES – CONT. Las funciones __get y __set no tienen que llamarse directamente. El doble underscore le dice a PHP que son funciones especiales al igual que lo son __construct() y __destruct(). ¿Como se utilizan entonces? $a = new classname(); $a->$attribute = 5; $a->attribute 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 23 Pag. 164 Esta instrucción implícitamente llama a la función __set() que tiene el parámetro $name, lo asigna a la variable attribute y le modifica su valor a 5. Esta instrucción implícitamente llama a la función __get() con el parámetro $name y lo devuelve (captura) fuera de la clase.
24
CONTROL DE ACCESO – private y public Los access modifiers controlan la visibilidad de los atributos y métodos. PHP da apoyo a los siguientes 3 access modifiers: public – La variable u objeto que no tenga definida su método de acceso o se defina public, puede ser accesada dentro y fuera de la clase. private – La variable u objeto sólo se puede acceder dentro de la clase. protected – Sólo se puede utilizar dentro de la clase. Además existe en las sub-clases. Se puede decir que es un término medio entre public y private. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 24 Pag. 165
25
CONTROL DE ACCESO – EJEMPLO El siguiente ejemplo muestra el uso de los access modifiers dentro de una clase. class classname { public $attribute; public function __get($name) { return $this->$name; } public function __set ($name, $value) { $this->$name = $value; } 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 25 Pag. 165
26
LLAMADAS A OPERACIONES DE LAS CLASES Las operaciones (funciones) de las clases se pueden llamar de la misma forma en que se llaman los atributos de las clases. Ejemplo: class classname { function operation1() { } function operation2($param1, $param2) { } $a = new classname(); 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 26 Pag. 165 - 166
27
LLAMADAS A OPERACIONES DE LAS CLASES – CONT. Para llamar a las operaciones del objeto creado en el slide anterior, se necesita especificar a cual objeto pertenece. Ejemplo. $a->operation1(); $a->operation(12, ‘test’); Si la operación devuelve algo, se puede poner: $x = $a->operation1(); $y = $a->operation(12, ‘test’); 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 27 Pag. 166
28
IMPLEMENTAR INHERITANCE Si la clase es una sub-clase de otra se utiliza el keyword extends. Ejemplo. class A { var $attribute1; function operation1() { } class B extends A { var $attribute2; function operation2() { } 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 28 Pag. 166-167 Los siguientes accesos, operaciones y atributos del objeto tipo B son válidos: $b = new B(); $b->operation1(); $b->attribute1 = 10; $b->operation2(); $b->attribute2 = 10; Sin embargo las últimas 2 líneas de este otro ejemplo son inválidos: $a = new A(); $a->operation1(); $a->attribute1 = 10; $a->operation2(); $a->attribute2 = 10;
29
CONTROLAR VISIBILIDAD EN INHERITANCE Si un atributo o método se especifica como private no se le puede hacer inheritance, si se especifica como protected, no es visible fuera de la clase pero se le puede hacer inheritance. Ejemplo. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 29 Pag. 167-168 Da error ya que es un método privado y no se puede llamar desde una sub-clase. Aunque es inherit pero sólo se puede usar en la sub-clase. Lo siguiente da error: $b->operation2(); No da problema al invocarla porque es pública.
30
OVERRIDING EN LAS CLASES - 1 Los atributos y operaciones se pueden redefinir en las sub- clases. Ejemplo. class A { var $attribute = ‘default value’; function operation() { echo ‘Something ’; echo “The value of \$attribute is $this->attribute ”; } Para alterar los valores default de $attribute y proveer una nueva funcionalidad a operation(), se puede crear una clase llamada B que redefina. Ejemplo: 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 30 Pag. 169
31
OVERRIDING EN LAS CLASES - 2 class B extends A { var $attribute = ‘different value’; function operation() { echo ‘Something else ’; echo “The value of \$attribute is $this->attribute ”; } Al declarar B no se afectan las definiciones originales de A. Al ejecutar las siguiente 2 líneas: $a = new A(); $a -> operation(); El output sería: Something The value of $attribute is default value 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 31 Pag. 169
32
OVERRIDING EN LAS CLASES - 3 Al ejecutar las siguiente 2 líneas: $b = new B(); $b -> operation(); El output sería: Something else The value of $attribute is different value 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 32 Pag. 169
33
PREVENIR INHERITANCE y OVERRIDING PHP utiliza el keyword llamado final. Al utilizarse frente a la declaración de una función, esta no puede ser redefinida por ninguna sub-clase. Por ejemplo: class A { var $attribute = ‘default value’; final function operation() { echo ‘Something ’; echo “The value of \$attribute is $this->attribute ”; } 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 33 Pag. 170
34
PREVENIR SUB-CLASES El keyword final también puede utilizarse para prevenir que una clase tenga sub-clases. Por ejemplo: final class A {…} Si uno trata de hacer inheritance de una clase a la clase A, PHP le va a indicar un mensaje de error. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 34 Pag. 170
35
ENTENDIENDO MÚLTIPLES INHERITANCES PHP no apoya múltiples inheritances. Esto significa que una sub-clase puede heredar métodos y datos de más de una super clase. C++ y Smalltalk son lenguajes que utilizan este concepto. El siguiente ejemplo que aclara este concepto. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 35 Pag. 171 - 172
36
IMPLEMENTAR INTERFACES PHP produce interfaces. La idea de las interfaces es especificar un conjunto de funciones que tienen que ser implementados en clases que implementan esa interfaz. Esto puede sustituir a una superclase. Si deseamos ejecutar una serie de clases que necesitan mostrarse o ejecutarse a si mismas, en lugar de utilizar una superclase con una función llamada display() podemos hacer lo siguiente: 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 36 Pag. 172
37
IMPLEMENTAR INTERFACES - EJEMPLO interface Displayable { function display(); } class webPage implements Displayable { function display() { // …….. } La clase webPage puede heredar (inherit) de una clase y puede implementar una o más interfaces. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 37 Pag. 172
38
IDEAS PARA IMPLEMENTAR CLASES De primera impresión se hace difícil pensar en cómo utilizar clases para implementar la POO en PHP. A continuación se muestran algunas ideas de cómo implementar clases. 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 38 Pag. 172 CLASECONCEPTO PáginaLa clase Página puede permitir la creación de otras páginas. Componentes de interfaz del usuarioBotones, cajas de texto, cuestionarios, etc. Shopping cartPuede tener varios métodos que indican el comportamiento de la aplicación. Error handlingComo reaccionar a los diferentes errores. Clientes y productosComo manejarlos. (comprar, caracteristicas, etc.)
39
LABORATORIO 1 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 39 Correr y utilizar el código que trae el capítulo para crear una página para la compañía TLA orientada a objetos. A continuación se dan unas guías del capítulo que pueden ayudar a comprender el código. Deben poder ejecutar el programa orientado a objetos de la misma forma que se ejecutaron los scripts anteriores. Pag. 173
40
LABORATORIO 1 – Cont. - 1 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 40 La clase a crear en este proyecto necesita un nombre lógico. En este caso lo vamos a llamar Page. La clase necesita atributos, para este ejemplo estos elementos pueden cambiar de página en página y se componen de tags de HTML y texto. Lo podemos llamar $content y declararlo público debido a que se desea acceder desde varias puntos del programa. Ej. public $content; Se desea tener títulos en cada página, se puede definir una variable pública que la tenga. Ej. public $title = ‘TLA Consulting Pty Ltd’; Pag. 173
41
LABORATORIO 1 – Cont. - 2 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 41 Muchas páginas comerciales incluyen metatags para facilitar su búsqueda por los search engines. Para este ejemplo lo podemos definir en una variable pública y de ese modo los tags se pueden cambiar cuando se cambia de página. Ej. public $keywords = ‘TLA Consulting….’; Para cambiar y trabajar más fácilmente el menú, se puede definir en un arreglo publico, el cual se puede cambiar cuando el cliente cambia de página. Ejemplo: Pag. 173 - 174
42
LABORATORIO 1 – Cont. - 3 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 42 Muchas páginas comerciales incluyen metatags para facilitar su búsqueda por los search engines. Para este ejemplo lo podemos definir en una variable pública y de ese modo los tags se pueden cambiar cuando se cambia de página. Ej. public $keywords = ‘TLA Consulting….’; Para cambiar y trabajar más fácilmente el menú, se puede definir en un arreglo publico, el cual se puede cambiar cuando el cliente cambia de página. Ejemplo: Para incluir funcionalidad la clase, se debe incluir el accessor function para cambiar (set) y obtener (get) valores. Ejemplo : public function_set($name, $value) { $this->$name = $value; } Pag. 174
43
LABORATORIO 1 – Cont. - 4 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 43 El propósito principal de esta clase es mostrar la página, por lo que hace falta una función que lo haga. Ejemplo: Pag. 174 Aparte de mostrar (echo) tags de HTML, esta función tiene varias llamadas a otras funciones de la clase.
44
LABORATORIO 1 – Cont. - 5 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 44 Para que el método (función) Display() trabaje, se necesita definir las funciones que esta invocando. Estas otras funciones son parte de la misma clase. Más adelante se puede override los métodos que se deseen cambiar. En la página 175 está el listado 6.1 que contiene la definición de la clase por completo. En la página del curso hay un enlace que provee el código. Favor de pasarlo y probarlo en la computadora. En la página 180 hay un código para crear otra pantalla. Se usa inheritance y por lo tanto se crea una sub-clase que responde a la superclase page. Esto facilita la creación de nuevas páginas. Pag. 175 - 180
45
LABORATORIO 1 – Cont. - 6 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 45 De la página 181 a la página 190 se discuten diferencias en el manejo de objetos en las versiones de PHP 4 y PHP5. También se discuten conceptos más avanzados que no vamos a discutir en clase. Sin embargo deben leerlos y estudiarlos detenidamente, sobre todo si van a crear su proyecto utilizando programación orientada a objetos. La nueva página creada de una sub-clase, debe verse como la pantalla del próximo slide. Recuerden probar todo este código y sobre todo entenderlo. Pag. 175 - 180
46
LABORATORIO 1 – Cont. - 7 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 46 El archivo que crea esta pantalla se llama: services.php Pag. 181
47
REFERENCIAS PHP and MySQL Web Development, Third Edition, Luke Welling, and Laura Thomson http://www.easyphp.org/ http://www.php.net/zend-engine-2.php (Manual de PHP de Object Oriented en línea) http://www.php.net/zend-engine-2.php 8/12/2007 © - Derechos Reservados - Prof. Nelliud D. Torres 47
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.