Sei sulla pagina 1di 4

Tecnicas de la POO

Abstractas.php
<?php
//Nos permite implementar el primer nivel de aproxim. a la realidad
//las abstractas no se pueden instanciar
abstract class Medio{
public $titulo;
public $dias;
protected function __construct($titulo,$dias) {
$this->titulo=$titulo;
$this->dias=$dias;
}
//los metodos abstractos no implementan logicas
protected abstract function CalcularPrecio();
}
//Realizando Herencia para poder usar Medio
class Libro extends Medio{
public $autor;
public $paginas;
public function __construct($tit,$dias,$autor,$pag) {
parent::__construct($tit,$dias);
$this->autor=$autor;
$this->paginas=$pag;
}
public function CalcularPrecio() {
return $this->dias*5;
}
}
class Audio extends Medio{
public $director;
public $actores;
public function __construct($tit,$dias,$dir,$act) {
parent::__construct($tit,$dias);
$this->director=$dir;
$this->actores=$act;
}
public function CalcularPrecio() {
return $this->dias*10;
}
}
//test clases
$objLibro=new Libro("SQLplus",3, "Jose S.", 132);
print $objLibro->CalcularPrecio();
echo "<hr>";
$objAudio=new Audio("Ray Charles", 4,"RCR","JF");
print $objAudio->CalcularPrecio();
echo "<hr>";
//impelmentando el polimorfismo
function Calcular(Medio $m){

return $m->CalcularPrecio();
}
echo Calcular($objAudio);
echo Calcular($objLibro);
echo "<hr>";
$objMedio=new Medio("xyz", 18);
print $objMedio->CalcularPrecio();
?>

Interfaces.php
<?php
//Nos permite tener mapeados los metodos a usar en el sistema
//define un conjunto de metodos pero no los implementa
interface Promociones {
function CalcularDescuentosEspeciales();
}
class Carrito{
private $id;
public $productos;
function __construct($id) {
$this->id=$id;
$this->productos=array();
}
public function ObtenerTotalProductos(){
return $this->productos;
}
public function ObtenerProducto($idprod){
return $this->productos[$idprod];
}
public function AgregarProducto($producto){
$this->productos[]=$producto;
}
}
//implemntando la interfaz
class CarritoPrefencial extends Carrito implements Promociones {
private $descuento;
public function __construct($id,$descuento) {
parent::__construct($id);
$this->descuento=$descuento;
}
public function CalcularDescuentosEspeciales(){
return $this->descuento*0.3;
}
}
//probando las clases
$objCarrPref=new CarritoPrefencial(12,0.01);
print $objCarrPref->CalcularDescuentosEspeciales();
?>

AtributosMetodosEstaticos.php

<?php
/*los atributos y metodos estaticos se pueden usar
* sin tener que instanciar (no es necesario crear un objeto
* para poder acceder al atributo o metodo estatico) ::
*/
class Privilegio{
public static $rol;
public $modulo=array('admin','reader','writer');
public static function asignacion(){
//$this->modulo=array('admin','reader','writer');
return self::$rol;//.$this->modulo[self::$rol];
}
}
//probando
Privilegio::$rol=2;
print Privilegio::asignacion();
//muy usado en los patrones de diseo(singleton, factory, observ, vo,dao)
?>

ConstantesFinales.php
<?php
/*Permite mantener el mismo valor a lo largo de la ejecucin
* No se puede modificar desde fuera de la clase
* pueden ser accedidas estaticamente
*/
class DatosDB{
const DB_HOST='localhost';
const DB_USER='root';
const DB_PSW='';
const DB_NAME='php_02';
}
//probando
print 'Host de la Base de Datos: '.DatosDB::DB_HOST;
echo "<hr>";
//los metodos finales no puede ser sobre escritos
class Carrito{
public final function listarOfertas(){
print "Muestra Ofertas";
}
}
class CarritoPreferencial extends Carrito{
//error
/*
public function listarOfertas(){
parent::listarOfertas();
echo " sobrescrito";
}
*/
public function listarOfertas2(){
parent::listarOfertas();
echo " sobrescrito";

}
}
//probando
$obj=new CarritoPreferencial();
$obj->listarOfertas();
echo "<br>";
$obj->listarOfertas2();
?>

Potrebbero piacerti anche