Bienvenidos

Bienvenidos

jueves, 9 de octubre de 2014

Conceptos de Programación Orientada a Objetos

       La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos.

Ejercicios con orientación a objetos PHP, AÑADIENDO PROPIEDADES

Añadiendo propiedades

Una propiedad no es más que una variable, y la usaremos para guardar información sobre el objeto en sí. Veamos cómo añadir nuestras propiedades.
1
2
3
4
class Usuario {
    public $usuario;
    public $password;
}
En seguida veremos qué es public. Por ahora quédate con que la propiedad es pública lo cual quiere decir que cualquiera puede acceder a ella. Después de public, tenemos el nombre de la propiedad.
Veamos cómo escribir y leer estas propiedades.
1
2
3
4
5
6
7
8
9
10
class Usuario {    
    public $usuario;   
    public $password;
}
$juan = new Usuario;
$juan->usuario = 'juan';
$juan->password = '01juan01';
echo $juan->usuario; // juan
Si te fijas, estamos usando $juan->[nombre_propiedad]. Quizá te estés preguntando… ¿por qué no puedo hacer algo así? Usuario->usuario. La respuesta es, que puede haber un número indeterminado de usuarios y, el valor 01juan01 está dentro del objeto, no de la clase.

Ejercicios con orientación a objetos PHP, AÑADIENDO METODOS

Añadiendo métodos

Añadir métodos es tan sencillo como añadir propiedades. Vamos a añadir un método para saludar.

1
2
3
4
5
6
7
8
class Usuario {
    public $usuario;
    public $password;
    public function saludar() {
        echo '¡Hola '.$this->usuario.'!';
    }
}
Lo primero que te estarás preguntando es… ¿qué es $this? $this es la forma que tienen los objetos de referirse a sí mismos. Por ende, para poder acceder al valor de $usuario desde el propio objeto, tendremos que valernos de $this.
Llamar al método no tiene mucho misterio:

1
2
3
$juan = new Usuario;
$juan->usuario= 'juan';
$juan->saludar(); // ¡Hola juan!
Ahora, si usamos varios objetos, podemos almacenar valores distintos en ellos y llamar a sus métodos:
1
2
3
4
5
6
7
8
9
10
11
12
$usuarios = null;
$usuarios[] = new Usuario;
$usuarios[] = new Usuario;
$usuarios[0]->usuario = 'juan';
$usuarios[1]->usuario = 'manolo';
foreach ($usuarios as $usuario) {
    $usuario->saludar();
}
// '¡Hola juan!'
// '¡Hola manolo!'

Ejercicios con orientación a objetos PHP, de CONSTRUCTORES Y DESTRUCTORES

Constructores y destructores

Cuando una clase se crea o se destruye, se llama a unos métodos mágicos como ya hemos adelantado. Si queremos realizar alguna acción en cualquiera de los dos eventos, tendremos que definir esos métodos e implementar su funcionalidad.
El método __construct() se llama cuando creamos una clase y suele ser un buen punto para rellenar información por defecto, o formar un objeto con algo que venga de la base de datos, etc.
1
2
3
4
5
6
7
8
9
10
11
class Usuario {
    public $usuario;
    public $password;
    public function __construct() {
        $this->password = '1234'; //Seguridad al poder!
    }
}
$usuario = new Usuario;
echo $usuario->password; // 1234
Cabe destacar que podemos pasar datos al constructor:
1
2
3
4
5
6
7
8
9
10
11
12
class Usuario {
    public $usuario;
    public $password;
    public function __construct($usuario) {
        $this->password = '1234';
        $this->usuario = $usuario;
    }
}
$usuario = new Usuario('juan');
echo $usuario->usuario; // juan
Por otro lado, el destructor se llama cuando la clase es destruida. Esto ocurre automáticamente cuando PHP termina de ejecutarse, libera todos los recursos que tenga asociados y va llamando al método __destruct() de todas las clases en caso de que lo tengan. También podemos forzarlo usando la función unset sobre el objeto. En el destructor se suelen implementar cierres de conexiones a bases de datos, liberación de memoria, etc.
Veámoslo en un breve ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Usuario {
    public $usuario;
    public $password;  
    public function __construct($usuario) {
        $this->password = '1234';
        $this->usuario = $usuario;
    }
    public function __destruct() {
        echo 'Muero...';
    }
}
$usuario = new Usuario('juan');
unset($usuario); // 'Muero...';

Ejercicios con orientación a objetos PHP , de HERENCIA DE CLASES

Herencia de clases

Aquí es donde veremos uno de los aspectos más potentes de la orientación a objetos. Una clase puede heredar propiedades y métodos de otra clase. Esto es útil cuando quieres añadir funcionalidad a una clase ya existente.
Siguiendo nuestro ejemplo, nuestra clase padre es Usuario y ahora, vamos a crear una clase hija que sea Administrador.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Usuario {
    public $usuario;
    public $password;  
    public function saludar() {
        echo 'Hola '.$this->usuario;
    }
}
class Administrador extends Usuario {
    public function banear($usuario) {
        echo $usuario->usuario." ha sido baneado";
    }
}
$usuario = new Usuario;
$usuario->usuario = 'juan';
$admin = new Administrador;
$admin->usuario = 'Súper López';
$admin->saludar(); // Hola Súper López
$admin->banear($usuario); // juan ha sido baneado
Usando la palabra clave extends, la clase Administrador ha heredado las propiedades usuario y password y el método saludar y hemos añadido un nuevo método banear a esta clase extendiendo las funcionalidades básicas de un usuario. Quizá el ejemplo sea muy absurdo pero tened en cuenta que podemos querer implementar funciones más complejas como login, logout, etc. y de esta forma nos acabamos ahorrando muchísimo código.

Ejercicios con orientación a objetos PHP, SOBREESCRIBIENDO METODOS

Sobreescribiendo métodos

Sobreescribir un método es tan sencillo como… ¡volverlo a definir! En la clase hija, volvemos a definir el método saludar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Usuario {
    public $usuario;
    public $password;  
    public function saludar() {
        echo 'Hola '.$this->usuario;
    }
}
class Administrador extends Usuario {
    public function saludar() {
        echo 'Hola admin>> '.$this->usuario;
    }
    public function banear($usuario) {
        echo $usuario->usuario." ha sido baneado";
    }
}
$admin = new Administrador;
$admin->usuario = 'Súper López';
$admin->saludar(); // Hola admin>> Súper López
Si además queremos mantener la funcionalidad original, podemos hacerlo llamando a la función del padre:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Usuario {
    public $usuario;
    public $password;  
    public function saludar() {
        echo 'Hola '.$this->usuario;
    }
}
class Administrador extends Usuario {
    public function saludar() {    
        echo '¡';
        parent::saludar();
        echo '!';
    }
    public function banear($usuario) {
        echo $usuario->usuario." ha sido baneado";
    }
}
$admin = new Administrador;
$admin->usuario = 'Súper López';
$admin->saludar(); // ¡Hola Súper López!
Como verás, hemos mezclado funcionalidades de ambos métodos.

Ejercicios con orientación a objetos PHP, de VISIBILIDAD DE METODOS Y PROPIEDADES

Visibilidad de métodos y propiedades

Hasta ahora tanto las propiedades como los métodos que hemos vistos, eran todos public. Ahora vamos a ver qué significa eso y el resto de tipos que tenemos.
public A los métodos y propiedades public, se puede acceder desde cualquier sitio. Tanto dentro de la clase como fuera.
protected Cuando declaramos una propiedad o método como protected, solo podremos accederlos desde la propia clase o sus descendientes (las clases hijas).
private Los métodos y propiedades private solo pueden ser leídos dentro de la propia clase que lo define. Este breve ejemplo nos muestra lo que pasaría:
1
2
3
4
5
6
7
class Usuario {
    public $usuario;
    private $password;
}
$usuario = new Usuario;
$usuario->password = 'Argofifa'; // <-- ERROR!

Ejercicios con orientación a objetos PHP, de CLASES y METODOS ESTATICOS

Clases y métodos estáticos

Las clases y métodos estáticos pueden ser de cualquiera de los tipos anteriores, public, protected o private pero tienen la peculiaridad de que no requieren que la clase sea instanciada. Además, las propiedades estáticas guardan el valor durante la ejecución del script. Veamos un breve ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Usuario {
    public $usuario;
    public $password;
    public static $contador = 0;   
    public function __construct() {
        self::$contador++;
    }
}
$usuario1 = new Usuario;
echo Usuario::$contador; // 1
$usuario1 = new Usuario;
echo Usuario::$contador; // 2
Ten en cuenta, que cuando nos referimos a una propiedad o método estático, no podremos hacer uso de $this, pero tendremos acceso a self, que viene a ser lo mismo solo que únicamente podremos usar métodos y propiedades estáticas. Puedes llamar a métodos y usar propiedades estáticas desde un método público pero no al contrario.

Operadores De Incremento y Decremento

<?php

echo "OPERADORES INCREMENTO";
$a = 3;


echo "</br>VARIABLE a = $a ";
$a++;
echo "</br>VARIABLE a = $a ";

echo "</br>OPERADORES DECREMENTO";

$b = 34;


echo "</br>VARIABLE a = $b ";
$b--;
echo "</br>VARIABLE a = $b ";



?>

Ejercicios con IF y ELSE

<?php

// ejemplos con if  else

/* En una compra, si el descuento es 7%
     si el monto es superior a 2000, el desceunto es 10%   */


 $monto1 = 11230000;
 $monto2 = 2000;
 $descuento1 = 10.0;
 $descuento2 = 0.5;

 if ($monto1 > 11230000)
 {
   $descuento1 = $monto1 * 10.0;
 }
 else
 {
    $descuento1 = $monto1 * 0.05;
 }



 if ($monto2 > 2000)
 {
   $descuento2 = $monto2 * 10.0;
 }
 else
 {
    $descuento2 = $monto2 * 0.05;
 }


 echo "</br> monto = $monto1  descuento =  $descuento1 ";
 echo "</br> monto = $monto2  descuento =  $descuento2 ";




?>



;



IF



<?php

// ejemplos con if

/* En una compra, si el monto es superior a 100000, el desceunto es
  17%*/


 $monto1 = 1230000;
 $descuento = 0.17;

 if ($monto1 > 100000)
 {
   $descuento = $monto1 * 0.17;
 }

 echo "</br> monto = $monto1  descuento =  $descuento ";


 $monto1 = 3140;
 $descuento = 0;

 if ($monto1 > 100000)
 {
   $descuento = $monto1 * 0;
 }

 echo "</br> monto = $monto1  descuento =  $descuento ";



?>

Ejemplos Con While, listando PAR E IMPAR

<?php

// ejemplos con while

/* Escribir un programa que lista los numeros del 1 al 1000  */


$numero = 1;

while ($numero <= 1000)
  {

    echo "</br> $numero  ";
    $numero++;

  }



?>


;


<?php

// ejemplos con while

/* Escribir un programa que lista los numeros del 1 al 100  */


$numero = 0;

while ($numero < 100)
  {
    $numero++;
    echo "</br> $numero  ";

  }



?>


;

PAR

En Orden Par

<?php

// ejemplos con while

/* Escribir un programa que lista los numeros pares  entre
     1 y 100  */


$numero = 0;

while ($numero <= 100)
  {
    $numero++;
    if ($numero % 2 == 0)
      {
        echo "</br> $numero  ";
      }

  }



?>


IMPAR

En Orden impar

<?php

// ejemplos con while

/* Escribir un programa que lista los numeros impares  entre
     2 y 101  */


$numero = 2;

while ($numero <= 101)
  {
    $numero++;
    if ($numero %2  == 1)
      {
        echo "</br> $numero  ";
      }

  }



?>

Ejemplo Arreglo For

<?php

// ejemplos con arreglos y for


// CREAR EL ARREGLO $a

$a = array(1000, 900, 800, 700, 600, 500);

// LISTAR LOS VALORES DEL ARREGLOS $a

// CREAR EL ARREGLO $b

$b = array(400, 300, 200, 100, 50, 0);

// LISTAR LOS VALORES DEL ARREGLOS $b


 for ($i = 0; $i <= 5; $i++)
  {
    echo " $a[$i] ";
  } 
 for ($i = 0; $i <= 5; $i++)
  {
    echo " $b[$i] ";
  } 



?>



;


Calcular

 <?php

// ejemplos con for

/* Calcular el factorial de un numero   */

 $factorial = 21;
 $numero = 55;

 for ($i=1; $i <=$numero; $i++)
 {
   $factorial = $factorial * $i;
 }

 echo "numero = $numero  factorial = $factorial  ";


?>


;


Listando


<?php

// ejemplos con for

/* Escribir un programa que lista los numeros entre
     1 y 100  */



 for ($i=1; $i <=100; $i++)
 {
    echo "</br> $i ";
 }


?>


 

Ejemplo Con Arreglos y For

<?php

// ejemplos con arreglos y for


// CREAR EL ARREGLO $a

$a = array("VICTOR ORTIZ", "JUAN VEGA", "MARIA SUAREZ", "OCTAVIO MACHADO", "MANUEL PEREZ", "IVAN LOPEZ");

// LISTAR LOS VALORES DEL ARREGLOS $a

//CREAR EL ARREGLO $b

$b = array("LUIS MARTINEZ", "CARLOS GARCIA", "HENDERSON RODRIGUEZ", "ALEJANDRA PAEZ", "NEHOMAR ESTEVEZ", "JUNIOR INFANTE");
// LISTAR LOS VALORES DEL ARREGLOS $b

 foreach ($a as $salida )
  {
    echo "</br> $salida ";
  }
 foreach ($b as $salida )
  {
    echo "</br> $salida ";
  } 


?>



;



 
<?php

// ejemplos con arreglos y for


// CREAR EL ARREGLO $a

$a = array("LINDOLFO", "FEDERICO", "RAMON", "ROMAN");

// LISTAR LOS VALORES DEL ARREGLOS $a

// CREAR EL ARREGLO $b

$b = array("PETRA", "RAMONA", "ATRONOMELIA", "FEDERICA");

// LISTAR LOS VALORES DEL ARREGLOS $B

  for ($i = 0; $i <= 3; $i++)
  {
    echo "</br> $a[$i] ";
  } 
 for ($i = 0; $i <= 3; $i++)
  {
    echo "</br> $b[$i] ";
  } 



?>

Ejemplo Simple

<?php
  echo "HOLA MUNDO";

?>


;

<?php
  $nombre = "SR.RYAN BLAKE";

  echo "HOLA MAESTER, COMO ESTA? ". $nombre;
?>