Diferencia entre revisiones de «Plantilla:PHP/SintasixPHPOOP»
De WikiEducator
Línea 55: | Línea 55: | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
− | === | + | ===Visibilidad=== |
*Visibilidad o alcance de las propiedades no constantes y los métodos de las clases | *Visibilidad o alcance de las propiedades no constantes y los métodos de las clases | ||
*Implementa el principio de encapsulación. | *Implementa el principio de encapsulación. | ||
Línea 63: | Línea 63: | ||
;Visibilidad | ;Visibilidad | ||
*Son tres los tipos de visibilidad que podemos especificar: | *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> | ||
<div class="slide"> | <div class="slide"> | ||
Línea 206: | Línea 206: | ||
*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 | + | *Las propiedades de la clase al igual que los métodos se les puede especificar 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 especifica con la palabra reservada '''''[[#static]]'''''. | *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> | ||
<div class="slide"> | <div class="slide"> | ||
Línea 242: | Línea 242: | ||
;[[#métodos contructor y destructor]] | ;[[#métodos contructor y destructor]] | ||
− | * | + | *En php, al igual que ocurre en Java, podemos tener un método con el mismo nombre que la clase. |
− | * | + | *Cuando instanciamos un objeto de una determinada clase, si existe este método se ejecuta y podríamos entenderlo como constructor de la clase. |
− | *Su invocación es transparente para el programador y se realiza siempre respectivamente al crear el objeto, y cuando este es destruido | + | *Pero realmente el constructor corresponde a un [[#método mágico]] llamado '''''__construct()''''que es invocado y ejecutado siempre que se instancie un nuevo objeto de la clase. En este caso no se ejecutará el método con el nombre de la case si es que existiera. |
− | * | + | *El igual que tenemos un método que se ejecuta cuando instanciamos un objeto de la clase, existe otro [[#método mágico]] que se ejecuta siempre que se destrulla una instancia de una clase u objeto, y es el método '''''__destruct()''''' |
− | + | *Las impelementaciones de estos dos métodos, lógicamente son libre para cada clase, | |
+ | *Su invocación es transparente para el programador (esto es como ocurre en todos los [[#métodos mágicos]] y se realiza siempre respectivamente al crear el objeto, y cuando este es destruido, | ||
+ | *En el caso de '''''__construct''''', podemos pasarle argumentos, que serían los valores que aportamos al construir un objeto de la case | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
Línea 253: | Línea 255: | ||
*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. | ||
*Su nombre siempre empieza por __ | *Su nombre siempre empieza por __ | ||
+ | *Estos métodos que se invocan automáticamente cuando ocurre algo, en php se conocen como métodos mágicos. | ||
*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> | ||
<div class="slide"> | <div class="slide"> | ||
− | === | + | === Operador '''''new'''''=== |
+ | *Permite crear instancias de un objeto en memoria. | ||
*Una clase describe lo común de unos determinados objetos | *Una clase describe lo común de unos determinados objetos | ||
*Las clases en principio no se usan durante la ejecución, salvo si queremos acceder a métodos o ṕropiedades estáticas como veremos un poco más adelante | *Las clases en principio no se usan durante la ejecución, salvo si queremos acceder a métodos o ṕropiedades estáticas como veremos un poco más adelante | ||
Línea 266: | Línea 270: | ||
*hay que pensar que en memoria tenemos '''toda''' la estructura del la clase por cada objeto | *hay que pensar que en memoria tenemos '''toda''' la estructura del la clase por cada objeto | ||
[[Archivo:Objetos4.png]] | [[Archivo:Objetos4.png]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
− | + | ====$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 | ||
Línea 302: | Línea 298: | ||
<div class="slide"> | <div class="slide"> | ||
{{Actividad| | {{Actividad| | ||
− | + | ;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 | + | Definir un método inicializarlo para 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> | ||
Línea 345: | Línea 341: | ||
</source> | </source> | ||
}} | }} | ||
− | + | {{MRM_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) | 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) | ||
}} | }} | ||
Línea 417: | Línea 411: | ||
− | + | ===Sobrecarga=== | |
Un concepto muy importante es la sobre carga. | Un concepto muy importante es la sobre carga. | ||
*Este concepto es básico en la programación Orientada a objetos; | *Este concepto es básico en la programación Orientada a objetos; | ||
Línea 443: | Línea 437: | ||
} | } | ||
</source> | </source> | ||
− | {{Actividad| | + | {{Actividad|Title=Sobrecargar el constructor de un racional| |
+ | Siguiendo el ejemplo establecido anteriormente realiza un constructor que permita instanciar un objeto de la clase racional de la siguiente manera | ||
<source lang=php> | <source lang=php> | ||
+ | $a = new racional ("8/5");/* 8/5 */ | ||
+ | $b = new racional (5,4); /* 5/6 */ | ||
+ | $c = new racional (5); /* 5/1 */ | ||
+ | $d = new racional (); /* 1/1 */ | ||
+ | </source> | ||
+ | }} | ||
+ | <!-- | ||
+ | Vamos a simular la sobre carga de la clase racional | ||
+ | |||
+ | <source lang=php> | ||
+ | <!-- | ||
<?php | <?php | ||
/** | /** | ||
Línea 582: | Línea 588: | ||
} | } | ||
− | //Sobrecargamos el | + | //Sobrecargamos el método asigna de modo que se pueda implementar de las siguientes maneras |
/*asigna("6/4"); | /*asigna("6/4"); | ||
asigna(); | asigna(); | ||
Línea 684: | Línea 690: | ||
</source> | </source> | ||
− | + | --> | |
− | + | ;métodos mágicos y la sobrecarga | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
*Hemos visto __construct y __destruct | *Hemos visto __construct y __destruct | ||
*Vamos a analizar un método mágico para implementar la sobrecarga y exponer su funcionamiento | *Vamos a analizar un método mágico para implementar la sobrecarga y exponer su funcionamiento | ||
Línea 714: | Línea 713: | ||
# $argumentos es un array con los argumentos de la función | # $argumentos es un array con los argumentos de la función | ||
{{Actividad| vamos a sobrecargar el método asigna() de la clase racional de modo que accepte sobrecarga | {{Actividad| vamos a sobrecargar el método asigna() de la clase racional de modo que accepte sobrecarga | ||
+ | }} | ||
+ | <!-- | ||
<source lang=php> | <source lang=php> | ||
Línea 864: | Línea 865: | ||
</source> | </source> | ||
}} | }} | ||
− | + | --> | |
==::== | ==::== | ||
*Operador de resolución de ámbito | *Operador de resolución de ámbito | ||
Línea 880: | Línea 881: | ||
<!-- Dejo esto aquí a ver si lo completo o no | <!-- Dejo esto aquí a ver si lo completo o no | ||
===métodos abstractos=== | ===métodos abstractos=== | ||
+ | *Son métodos que no se implementan en una clase, si no en la clase que herede de ésta. | ||
+ | Las clases que contengan métodos abstractos no se pueden instanciar en memoria. | ||
===métodos estáticos=== | ===métodos estáticos=== | ||
=Herencia= | =Herencia= |
Revisión de 23:40 8 nov 2016
Contenido
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 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.
</div>