Diferencia entre revisiones de «Usuario:ManuelRomero/php/opp/introduccion»
De WikiEducator
< Usuario:ManuelRomero | php
(14 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
{{TEP}} | {{TEP}} | ||
{{:Usuario:ManuelRomero/php/opp/nav}} | {{:Usuario:ManuelRomero/php/opp/nav}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
<!--__NOEDITSECTION__--> | <!--__NOEDITSECTION__--> | ||
Línea 18: | Línea 13: | ||
[[Imagen:DWES_TituloTema6.png|center]] | [[Imagen:DWES_TituloTema6.png|center]] | ||
|} | |} | ||
− | <!-- | + | __NOTOC__ |
+ | {{#widget:Slides}} | ||
+ | <!--{{:Usuario:ManuelRomero/php/arrays/nav}}--> | ||
+ | <div class="slides layout-regular template-default"> | ||
<div class="slide"> | <div class="slide"> | ||
− | ==Programación orientada a objetos== | + | <!--1 --> |
+ | |||
+ | ===Programación orientada a objetos=== | ||
*En programación el paradigma imperativo está basado en funciones y datos, | *En programación el paradigma imperativo está basado en funciones y datos, | ||
*El paradigma orientado a objetos está basado en Objetos. | *El paradigma orientado a objetos está basado en Objetos. | ||
Línea 30: | Línea 30: | ||
<!--1 --> | <!--1 --> | ||
<div class="slide"> | <div class="slide"> | ||
− | {{Definicion| '''Objeto''' Cada | + | {{Definicion| '''Objeto''' Cada elemento activo''' que identificamos dentro de un determinado univeso de discurso}} |
+ | </div> | ||
+ | <!--1 --> | ||
+ | <div class="slide"> | ||
{{Ejemplo| | {{Ejemplo| | ||
;En un banco hay cuentas bancarias (objeto) | ;En un banco hay cuentas bancarias (objeto) | ||
Línea 39: | Línea 42: | ||
<!--1 --> | <!--1 --> | ||
<div class="slide"> | <div class="slide"> | ||
− | |||
− | |||
*Puede parecer una forma más complicada de programar, pero es una manera de dividir la naturaleza del problema que estamos estudiando en unidades independinetes que pueden interactúan entre ellas. | *Puede parecer una forma más complicada de programar, pero es una manera de dividir la naturaleza del problema que estamos estudiando en unidades independinetes que pueden interactúan entre ellas. | ||
*Cada una de ellas va a tener una identidad propia asignando valores a sus atributos | *Cada una de ellas va a tener una identidad propia asignando valores a sus atributos | ||
Línea 66: | Línea 67: | ||
<!--1 --> | <!--1 --> | ||
<div class="slide"> | <div class="slide"> | ||
+ | ;Elementos de la POO | ||
'''''Comportamiento'''''==> permiten modificar el estado de un objetos | '''''Comportamiento'''''==> permiten modificar el estado de un objetos | ||
Permiten saber como es el estado de un objeto | Permiten saber como es el estado de un objeto | ||
Línea 72: | Línea 74: | ||
También lo son acciones internas para facilitar las cosas al objeto | También lo son acciones internas para facilitar las cosas al objeto | ||
− | [[Archivo:clase.png]] | + | [[Archivo:clase.png|300px]] |
</div> | </div> | ||
<!--1 --> | <!--1 --> | ||
<div class="slide"> | <div class="slide"> | ||
− | + | ===OPP En php=== | |
− | ==OPP En php== | + | |
*PHP no se diseñó como lenguaje orientado a objetos, por lo que muchas de las carácterísticas de este paradigma se ha ido incorporando en las últimas versiones, especialemnte a partir de la versión 5.3. | *PHP no se diseñó como lenguaje orientado a objetos, por lo que muchas de las carácterísticas de este paradigma se ha ido incorporando en las últimas versiones, especialemnte a partir de la versión 5.3. | ||
*PHP Almacena el valor de un objeto como una referencia (dirección de memoria), no guarda el valor. | *PHP Almacena el valor de un objeto como una referencia (dirección de memoria), no guarda el valor. | ||
*Esto implica que si queremos pasar un objeto a través de la red, debemos serializarlo, para que viaje también el valor del mismo. Veremos este concepto más adelante. | *Esto implica que si queremos pasar un objeto a través de la red, debemos serializarlo, para que viaje también el valor del mismo. Veremos este concepto más adelante. | ||
− | + | </div> | |
+ | <!--1 --> | ||
+ | <div class="slide"> | ||
+ | ;Los elementos de una clase en php se identifican como | ||
#propiedades: son los atributos o carácterísticas de la clase. | #propiedades: son los atributos o carácterísticas de la clase. | ||
#métodos: representas el comportamiento de la misma. | #métodos: representas el comportamiento de la misma. | ||
Línea 96: | Línea 100: | ||
*'''''NombreClase''''' es un identificador válido con la siguiente expresión regular | *'''''NombreClase''''' es un identificador válido con la siguiente expresión regular | ||
^[a-zA-Z_][a-zA-Z0-9_]*$ | ^[a-zA-Z_][a-zA-Z0-9_]*$ | ||
+ | *El nombre de las clases se recomienda que empiece por mayúsculas | ||
</div> | </div> | ||
+ | |||
<!--1 --> | <!--1 --> | ||
<div class="slide"> | <div class="slide"> | ||
− | |||
*'''''propiedades''''' son las variables o constantes definidas dentro de la clase. | *'''''propiedades''''' son las variables o constantes definidas dentro de la clase. | ||
*'''''métodos''''' son las funciones que definirán el comportamiento de la clase. | *'''''métodos''''' son las funciones que definirán el comportamiento de la clase. | ||
Línea 108: | Línea 113: | ||
}} | }} | ||
</div> | </div> | ||
− | |||
<div class="slide"> | <div class="slide"> | ||
− | + | ===Pilares básicos de la POO=== | |
+ | {{Puntos clave| | ||
+ | ;Encapsulación | ||
+ | ;Herecia | ||
+ | ;Polimorfismo | ||
+ | ;Abstraccion | ||
+ | }} | ||
</div> | </div> | ||
− | |||
<div class="slide"> | <div class="slide"> | ||
− | |||
===Encapsulación: Acceso a los componentes=== | ===Encapsulación: Acceso a los componentes=== | ||
*A la hora de definir tanto las propiedades como los métodos, especificaremos el nivel de acceso que se tiene a ese elemento | *A la hora de definir tanto las propiedades como los métodos, especificaremos el nivel de acceso que se tiene a ese elemento | ||
*Es una buena práctica de programación no dejar acceso directo a los atributos de una clase, sino acceder a ellos a través de los métodos | *Es una buena práctica de programación no dejar acceso directo a los atributos de una clase, sino acceder a ellos a través de los métodos | ||
+ | |||
+ | *LA encapsulación es uno de los pilares de la programación orientada a objetos y me permite o restringe la visibilidad de sus componentes | ||
</div> | </div> | ||
+ | <div class="slide"> | ||
+ | ===visibilidad=== | ||
+ | *Visibilidad o alcance de las propiedades no constantes y los métodos de las clases | ||
+ | *Implementa el principio de encapsulación. | ||
+ | *Permite especificar el nivel de acceso que se tienen sobre los elementos | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ;Visibilidad | ||
+ | *Son tres los tipos de visibilidad que podemos especificar: | ||
+ | ;public : tipo de visibilidad asignada por defecto en caso de no especificar. | ||
+ | ;private | ||
+ | ;protected | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ;public | ||
+ | *Este tipo de visibilidad es asignada por defecto | ||
+ | *Los elementos públicos pueden ser accesibles en cualquier momento del programa. | ||
+ | *Recordemos que para acceder a un elemento debemos especificar el objeto o clase del que queremos el elemento | ||
+ | *Si el elemento es estático o constante usaremos el operador '''''::''''' llamado operador de especificación ámbito [[#::]] | ||
+ | *Si el elemento es no estático accedemos a través del operador '''''->''''' | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ;private | ||
+ | *Los elementos especificado con este modificador de acceso hace que su visibilidad se reduzca al interior de la clase, no pudiendo acceder a ellos desde fuera | ||
+ | *En OOP es una tendencia hacer todos los atributos privados y acceder a ellos por los métodos setter and getter. | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | class Usuario { | ||
+ | private $usuario; | ||
+ | private $password; | ||
+ | |||
+ | public function __construct($usuario) { | ||
+ | $this->password = 'passDefecto'; | ||
+ | $this->usuario = $usuario; | ||
+ | } | ||
+ | |||
+ | public function __destruct() { | ||
+ | echo 'Me voy......'; | ||
+ | } | ||
+ | public function getUsuario(){ | ||
+ | return $this->usuario; | ||
+ | } | ||
+ | public function getPass(){ | ||
+ | return $this->password; | ||
+ | |||
+ | } | ||
+ | public function setUsuario($user){ | ||
+ | this->usuario =$user; | ||
+ | } | ||
+ | public function setPass($pass){ | ||
+ | this->password =$pass; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $usuario = new Usuario('manolo'); | ||
+ | //.... | ||
+ | $pass = $_POST['pass']; | ||
+ | //.... | ||
+ | $usuario->setPass($pass); | ||
+ | //... | ||
+ | ?> | ||
+ | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ;protected | ||
+ | *Este tipo de visibilidad implica que los elementos así especificados solo son accesible por la propia clase y por las clases derivadas | ||
+ | *Para ello hay que ver la herencia que veremos más adelante | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | class persona{ | ||
+ | protected $nombre; | ||
+ | protected $fNac; | ||
+ | //.... | ||
+ | } | ||
+ | //..... | ||
+ | class medico extends persona{ | ||
+ | private $numColegiado; | ||
+ | |||
+ | public function __construct($nombre, $fechaNacimiento, $colegiado) { | ||
+ | $this->nombre=$nombre; | ||
+ | $this->fNac=$fechaNacimiento; | ||
+ | $this->numColegiado=$colegiado; | ||
+ | |||
+ | } | ||
+ | public function visualiza(){ | ||
+ | echo "Medico $this->nombre"; | ||
+ | } | ||
+ | } | ||
+ | $medicoPueblo1= new medico("pedro", "1/1/1969","123456"); | ||
+ | $medicoPueblo1->visualiza(); | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | </div> | ||
+ | <div class="slide"> | ||
<!--1 --> | <!--1 --> | ||
<div class="slide"> | <div class="slide"> | ||
Línea 131: | Línea 241: | ||
*Todos los objetos de la misma clase comparte el valor de la constante. Por lo que se tomará como un valor estático. | *Todos los objetos de la misma clase comparte el valor de la constante. Por lo que se tomará como un valor estático. | ||
</div> | </div> | ||
+ | |||
<!--1 --> | <!--1 --> | ||
<div class="slide"> | <div class="slide"> | ||
− | |||
;Accediendo al valor de una constante | ;Accediendo al valor de una constante | ||
#Dentro de la clase: usaremos el operador [[#self|'''''self''''']] junto con el '''''[[#::|operador de resolución de ámbito ::''''']] | #Dentro de la clase: usaremos el operador [[#self|'''''self''''']] junto con el '''''[[#::|operador de resolución de ámbito ::''''']] | ||
Línea 166: | Línea 276: | ||
*Atributos Importe Base, fecha, impuestos, Importe bruto, estado (pagada o pendiente) | *Atributos Importe Base, fecha, impuestos, Importe bruto, estado (pagada o pendiente) | ||
*Métodos: imprime }} | *Métodos: imprime }} | ||
+ | </div> | ||
+ | <div class="slide"> | ||
;Variables | ;Variables | ||
*Estas propiedades | *Estas propiedades | ||
*Las variables siguen la misma regla de construcción que vistas anteriormente. | *Las variables siguen la misma regla de construcción que vistas anteriormente. | ||
*Las propiedades de la clase al igual que los métodos pueden especificárseles una determinada [[#visibilidad]] o alcance, siendo el valor por defecto '''''public'''''. | *Las propiedades de la clase al igual que los métodos pueden especificárseles una determinada [[#visibilidad]] o alcance, siendo el valor por defecto '''''public'''''. | ||
− | *También puedes ser [[#static]] o estáticas, también conocidas como variables de la clase, si se | + | *También puedes ser [[#static]] o estáticas, también conocidas como variables de la clase, si se especifica con la palabra reservada '''''[[#static]]'''''. |
*Dado que php es de tipado dinámico, si dentro de un método de la clase quiero acceder a una propiedad de la misma he de indicarlo usando la seudovariable '''''[[#$this]]'''' | *Dado que php es de tipado dinámico, si dentro de un método de la clase quiero acceder a una propiedad de la misma he de indicarlo usando la seudovariable '''''[[#$this]]'''' | ||
*En este caso no podremos el '''''$''''' delante del nombre de la propiedad | *En este caso no podremos el '''''$''''' delante del nombre de la propiedad | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | |||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
class Propiedades{ | class Propiedades{ | ||
− | |||
public $propiedad = "rojo"; | public $propiedad = "rojo"; | ||
− | |||
public function getPropiedad(){ | public function getPropiedad(){ | ||
− | |||
echo "\$propiedad ahora es una variable local a método y no tiene valor: --$propiedad--<br/>"; | echo "\$propiedad ahora es una variable local a método y no tiene valor: --$propiedad--<br/>"; | ||
− | |||
$propiedad="azul"; | $propiedad="azul"; | ||
− | |||
echo "Ahora visualizo el valor de \$propiedad del método: --$propiedad--<br/>"; | echo "Ahora visualizo el valor de \$propiedad del método: --$propiedad--<br/>"; | ||
− | |||
echo "Ahora visualizo el valor de \$propiedad de la clase: --$this->propiedad--<br/>"; | echo "Ahora visualizo el valor de \$propiedad de la clase: --$this->propiedad--<br/>"; | ||
− | |||
} | } | ||
} | } | ||
Línea 196: | Línea 304: | ||
?> | ?> | ||
</source> | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | |||
===Métodos=== | ===Métodos=== | ||
Línea 202: | Línea 313: | ||
*Los métodos de detallan usando la palabra reservada '''''function''''' | *Los métodos de detallan usando la palabra reservada '''''function''''' | ||
*En php dentro de la programación orientada a objetos tenemos una serie o tipo de métodos que conviene conocer y que posteriormente estudiaremos | *En php dentro de la programación orientada a objetos tenemos una serie o tipo de métodos que conviene conocer y que posteriormente estudiaremos | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | |||
;[[#métodos contructor y destructor]] | ;[[#métodos contructor y destructor]] | ||
*son el método __construct(..) y __destruct(..) | *son el método __construct(..) y __destruct(..) | ||
Línea 208: | Línea 322: | ||
*El nombre es __construct y __destruct respectivamente, si bien, la lista de argumentos que pueden recibir, así como las acciones que pueden realizar es libre de implementar. | *El nombre es __construct y __destruct respectivamente, si bien, la lista de argumentos que pueden recibir, así como las acciones que pueden realizar es libre de implementar. | ||
*Estos métodos que se invocan automáticamente cuando ocurre algo, en php se conocen como métodos mágicos. | *Estos métodos que se invocan automáticamente cuando ocurre algo, en php se conocen como métodos mágicos. | ||
− | + | </div> | |
+ | <div class="slide"> | ||
+ | |||
;[[#métodos mágicos]] | ;[[#métodos mágicos]] | ||
*Una serie de métodos cuyos nombres están reservados y se pueden usar con cualquier objeto de cualquier clase. | *Una serie de métodos cuyos nombres están reservados y se pueden usar con cualquier objeto de cualquier clase. | ||
Línea 214: | Línea 330: | ||
*Un ejemplo son el __construct(...) y __destruct(...) | *Un ejemplo son el __construct(...) y __destruct(...) | ||
http://php.net/manual/es/language.oop5.magic.php | http://php.net/manual/es/language.oop5.magic.php | ||
− | + | </div> | |
+ | <div class="slide"> | ||
===Instancias: Operador '''''new'''''=== | ===Instancias: Operador '''''new'''''=== | ||
*Una clase describe lo común de unos determinados objetos | *Una clase describe lo común de unos determinados objetos | ||
Línea 233: | Línea 350: | ||
{{Actividad| | {{Actividad| | ||
*Crea una clase llamada producto con los atributos código, nombre y precio}} | *Crea una clase llamada producto con los atributos código, nombre y precio}} | ||
+ | </div> | ||
+ | <div class="slide"> | ||
;Accediendo a los atributos de un objeto: seudovariable $this | ;Accediendo a los atributos de un objeto: seudovariable $this | ||
*$this es una seudovariable que referenica al objeto del ámbito en el cual está usado | *$this es una seudovariable que referenica al objeto del ámbito en el cual está usado | ||
*Se utiliza dentro de la definición de la propia clase y hará referencia a un objeto concreto en un momento dado de la clase en la que está siendo utilizado | *Se utiliza dentro de la definición de la propia clase y hará referencia a un objeto concreto en un momento dado de la clase en la que está siendo utilizado | ||
− | + | </div> | |
+ | |||
+ | <div class="slide"> | ||
+ | ;Ejemplo | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
Línea 252: | Línea 374: | ||
− | + | </div> | |
+ | <div class="slide"> | ||
{{Actividad| | {{Actividad| | ||
=Empleado= | =Empleado= | ||
Confeccionar una clase Empleado, definir como atributos su nombre y sueldo. | Confeccionar una clase Empleado, definir como atributos su nombre y sueldo. | ||
Definir un método inicializar que lleguen como dato el nombre y sueldo. Plantear un segundo método que imprima el nombre y un mensaje si debe o no pagar impuestos (si el sueldo supera a 3000 paga impuestos) | Definir un método inicializar que lleguen como dato el nombre y sueldo. Plantear un segundo método que imprima el nombre y un mensaje si debe o no pagar impuestos (si el sueldo supera a 3000 paga impuestos) | ||
− | + | ||
<source lang=php> | <source lang=php> | ||
<html> | <html> | ||
Línea 296: | Línea 419: | ||
</html> | </html> | ||
</source> | </source> | ||
− | |||
− | = | + | ===Actividades=== |
− | Confeccionar una clase Menu. Permitir añadir la cantidad de opciones que necesitemos. Mostrar el menú en forma horizontal o vertical (según que método llamemos | + | <br/> |
− | + | {{Actividad| | |
+ | Confeccionar una clase Menu. Permitir añadir la cantidad de opciones que necesitemos. Mostrar el menú en forma horizontal o vertical (según que método llamemos) | ||
+ | }} | ||
<source lang = php> | <source lang = php> | ||
<html> | <html> | ||
Línea 343: | Línea 467: | ||
</html> | </html> | ||
</source> | </source> | ||
− | + | ||
− | + | ||
{{Actividad| | {{Actividad| | ||
Construir una clase llamado racional que podamos inicializar con un string del tipo por ejemplo "8/5" | Construir una clase llamado racional que podamos inicializar con un string del tipo por ejemplo "8/5" | ||
− | + | }} | |
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
Línea 368: | Línea 491: | ||
</source> | </source> | ||
− | + | ||
;Sobrecarga | ;Sobrecarga | ||
Un concepto muy importante es la sobre carga. | Un concepto muy importante es la sobre carga. | ||
Línea 397: | Línea 520: | ||
{{Actividad|Vamos a simular la sobre carga de la clase racional | {{Actividad|Vamos a simular la sobre carga de la clase racional | ||
<source lang=php> | <source lang=php> | ||
+ | |||
<?php | <?php | ||
/** | /** | ||
Línea 506: | Línea 630: | ||
*Código implementado en clase | *Código implementado en clase | ||
+ | <!-- | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
Línea 635: | Línea 760: | ||
</source> | </source> | ||
− | === | + | ===Métodos mágicos=== |
*Corresponde a un conjunto de métodos que tiene ya una utilidad concreta | *Corresponde a un conjunto de métodos que tiene ya una utilidad concreta | ||
*Son nombres reservados y no se pueden utilizar para identificar otros elementos | *Son nombres reservados y no se pueden utilizar para identificar otros elementos | ||
Línea 813: | Línea 938: | ||
</source> | </source> | ||
− | |||
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==::== | ==::== | ||
Línea 834: | Línea 951: | ||
# '''''parent''''' : si el elemento pertenece a la clase de la que heredo | # '''''parent''''' : si el elemento pertenece a la clase de la que heredo | ||
#'''''static''''' Al igual que self se puede usar la palabra reservada estatic, para acceder a un elemento estático de la clase. | #'''''static''''' Al igual que self se puede usar la palabra reservada estatic, para acceder a un elemento estático de la clase. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Línea 964: | Línea 991: | ||
===pseudovariables '''''this'''''=== | ===pseudovariables '''''this'''''=== | ||
===operador '''''self''''' y '''''parent'''''=== | ===operador '''''self''''' y '''''parent'''''=== | ||
− | |||
Última revisión de 02:33 1 jul 2016
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
|