Diferencia entre revisiones de «Plantilla:PHP/ConceptosBasicos 1»
De WikiEducator
(→Un ejemplo concreto) |
(→Un ejemplo concreto) |
||
Línea 60: | Línea 60: | ||
<div class="slide"> | <div class="slide"> | ||
+ | ===Pilares básicos de la POO=== | ||
+ | <br /> | ||
+ | *Son 4 las características o principios de la programación orientada a objetos | ||
+ | {{MRM_Puntos clave| | ||
+ | ;Encapsulación | ||
+ | ;Herecia | ||
+ | ;Polimorfismo | ||
+ | ;Abstraccion | ||
+ | }} | ||
+ | |||
+ | ====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 | ||
+ | *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 | ||
+ | {{MRM_Puntos clave| | ||
+ | *La encapsulación es uno de los pilares de la programación orientada a objetos | ||
+ | ;permite o restringe la visibilidad de sus componentes | ||
+ | }} | ||
+ | </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 | ||
+ | #private | ||
+ | #protected | ||
+ | {{Tip|'''''public''''' tipo de visibilidad asignada por defecto en caso de no especificar. | ||
+ | *En el caso de los atributos hay que declararlo de forma explícita. | ||
+ | *Las funciones podemos no declararlo tomando el valor por defecto '''public''' | ||
+ | *Por herencia podemos usar la palabra reservada '''var''' para declarar los atributos en cuyo caso son pùblic | ||
+ | }} | ||
+ | </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"> | ||
+ | {{MRM_Ejemplo| | ||
+ | *En el código anterior ver el método '''''verFecha()''''' que es '''públic''' | ||
+ | *Sin embargo las propiedades '''''dia''''', '''''mes''''','''''year''''', son '''private''' | ||
+ | *Esto implica que en el programa principal puedo hacer | ||
+ | <source lang=php > | ||
+ | .... | ||
+ | $f = new Fecha(5,10,2017) | ||
+ | ... | ||
+ | $f->verFecha(); | ||
+ | ... | ||
+ | </source> | ||
+ | *Pero no puedo hacer | ||
+ | <source lang=php > | ||
+ | .... | ||
+ | $f = new Fecha(5,10,2017) | ||
+ | ... | ||
+ | $f->dia= 5; | ||
+ | ... | ||
+ | </source> | ||
+ | {{Tip|En el caso de que las propiedades fueran '''public''', sí podría hacerlo}} | ||
+ | |||
+ | }} | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | <br /> | ||
+ | ;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); | ||
+ | //... | ||
+ | unset $usuario; //Ejecutaría el método mágico destroy | ||
+ | ?> | ||
+ | </source> | ||
+ | {{Tip| A un elemento '''''private''''' de una clase, tampoco podrá acceder desde clases que deriven de ésta }} | ||
+ | </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 dónde propondremos un ejemplo | ||
+ | </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 --> | ||
+ | <div class="slide"> | ||
+ | |||
+ | |||
+ | <div class="slide"> | ||
===Un ejemplo concreto === | ===Un ejemplo concreto === | ||
<br /> | <br /> |