Diferencia entre revisiones de «Plantilla:PHP/ConceptosBasicos 1»

De WikiEducator
Saltar a: navegación, buscar
(Elementos en la programación orientada a objetos)
(Un ejemplo concreto)
 
(2 revisiones intermedias por el mismo usuario no mostrado)
Línea 60: Línea 60:
 
<div class="slide">
 
<div class="slide">
  
===Un ejemplo concreto ===
+
===Pilares básicos de la POO===
 
<br />
 
<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 ===
 +
<br />
 +
{{MRM_Actividad|Title=Clase Fecha|
 +
*Vamos a hacer un ejemplo, usando la clase Fecha
 +
*Lo primero que tenemos que saber qué es Fecha va a ser un programa  independiente que tiene sus variables y sus acciones
 +
*Procederemos con el ejemplo para aprender a crear clases y objetos
 +
}}
  
 
===Elementos en la programación orientada a objetos===
 
===Elementos en la programación orientada a objetos===

Última revisión de 03:27 26 mar 2019

Programación orientada a objetos

  • En programación el paradigma imperativo está basado en funciones y datos.


Icon activity.jpg
Programación estructurada y modular
  • Los programas los realizamos en un fichero o programa principal, realizando en él las acciones para resolver el problema
  • Se llama estructurada ya que todo es una estructura de
#Instrucciones en estructruas secuencias (asignar, invocar, declarar)
#Estructras selectivas (si (condicione) ....)
#Estructuras repetitivas (mientras (condicion) ....




  • El paradigma orientado a objetos está basado en Objetos.
  • Ahora plantearemos los programas desde dos aspectos.


Icon activity.jpg
Enfoque Orientado a Objetos
  • Tendré un programa principal que va a resolver el problema o a implementar el algoritmo
  • Para ello voy a utilizar pequeños componentes de software u objetos que son programas que hacen cosas




  • Los objetos son el elemento básico y central de la programación orientada a objetos (OOP) o (POO).
  • Podemos hablar de universo de discurso como el sistema que queremos automatizar por software
  • Un Objeto es una entidad (concreta o abstracta) que presenta una actividad en un entorno concreto, en un determinado universo de discurso.



Icon define.gif
Definición
Objeto Cada elemento activo que identificamos dentro de un determinado universo de discurso.
Serán nuestros componentes software para ensamblar nuestros programas



Icon casestudy.gif
Ejemplo
En un banco hay cuentas bancarias (objeto)
Las cuentas bancarias se identifican con un número y un titular (nombre, apellido y dni) atributos
Las cuentas se pueden dar de alta, de baja, hacer extracciones e ingresos y transferencias... métodos




Icon casestudy.gif
Ejemplo
En la gestión de una empresa, a nivel de información tenemos
  • Empleados
  • Nómigas
  • Base de datos
  • Proveedores
  • Facturas
  • Pedidos

UNIVERSO DISCUROS OBJETOS.png




  • Puede parecer una forma más complicada de programar, pero es una manera de dividir la naturaleza del problema que estamos estudiando en unidades independientes que pueden interactúar entre ellas.
  • Cada una de ellas va a tener una identidad propia asignando valores a sus atributos
  • Cada una de ellas va a tener un comportamiento concreto que va a ser lo que sabe hacer para que los demás o el programa principal lo utilice

Pilares básicos de la POO


  • Son 4 las características o principios de la programación orientada a objetos


Icon key points.gif

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


Icon key points.gif

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


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
Visibilidad
  • Son tres los tipos de visibilidad que podemos especificar:
  1. public
  2. private
  3. protected
Icon present.gif
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


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 ->


Icon casestudy.gif
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
....
$f = new Fecha(5,10,2017)
...
$f->verFecha();
...
  • Pero no puedo hacer
....
$f = new Fecha(5,10,2017)
...
$f->dia= 5;
...
Icon present.gif
Tip: En el caso de que las propiedades fueran public, sí podría hacerlo




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.
<?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
?>
Icon present.gif
Tip: A un elemento private de una clase, tampoco podrá acceder desde clases que deriven de ésta


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
<?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();
 
?>


Un ejemplo concreto



Icon activity.jpg
Clase Fecha
  • Vamos a hacer un ejemplo, usando la clase Fecha
  • Lo primero que tenemos que saber qué es Fecha va a ser un programa independiente que tiene sus variables y sus acciones
  • Procederemos con el ejemplo para aprender a crear clases y objetos




Elementos en la programación orientada a objetos

  • De lo dicho anteriormente deducimos que tenemos dos elementos:
  1. Los atributos o características de la clase.
  2. Los métodos o comportamiento de la clase .
  • Para crear objetos, previamente hay que definir su estructura.
  • La definición de la estructura (atributos y métodos ) de componentes software se llama clase


Icon define.gif
Clase
La descripción y especificación de componentes software para su posterior uso en los programas
  • Una clase es la estructura de un tipo concreto de objetos.
  • Los objetos son elementos concretos en mi sistema. Instancias de la clase en memoria para ser usadas por un programa


Elementos de la POO


Icon define.gif
Atributo
  • Son las características o datos de un objeto.
  • Sus valores nos da el estado de un objeto en un momento dado.
  • Normalmente al instanciar un objeto en memoria lo primero que hacemos es dar valores a sus atributos
  • Es recomendado que los atributos entén encapsulados solo al objeto (privados)



Elementos de la POO


Icon define.gif
Métodos
  • Especifican el comportamiento de los objetos.
  • Permiten modificar y conocer el estado de un objetos (métodos getter and setter).
  • Permiten que un objeto haga cosas en el sistema (comunicación entre objetos) .
  • Los métodos son las acciones que el objeto sabe hacer, servicios que ofrece
  • También son las acciones internas para facilitar las acciones al objeto


Clase.png