Está en la página 1de 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){

} } //implemntando la interfaz class CarritoPrefencial extends Carrito implements Promociones { private $descuento. } class Carrito{ private $id.3. $this->descuento=$descuento. } public function ObtenerTotalProductos(){ return $this->productos.0. print $objCarrPref->CalcularDescuentosEspeciales(). $this->productos=array(). echo Calcular($objLibro).01).php . $objMedio=new Medio("xyz". public $productos.$descuento) { parent::__construct($id). ?> AtributosMetodosEstaticos. 18). } public function AgregarProducto($producto){ $this->productos[]=$producto. } public function CalcularDescuentosEspeciales(){ return $this->descuento*0. } } //probando las clases $objCarrPref=new CarritoPrefencial(12. echo "<hr>". } echo Calcular($objAudio). public function __construct($id.return $m->CalcularPrecio(). ?> Interfaces. function __construct($id) { $this->id=$id. } public function ObtenerProducto($idprod){ return $this->productos[$idprod].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(). print $objMedio->CalcularPrecio().

//muy usado en los patrones de diseño(singleton. echo " sobrescrito". factory.php <?php /*Permite mantener el mismo valor a lo largo de la ejecuciòn * No se puede modificar desde fuera de la clase * pueden ser accedidas estaticamente */ class DatosDB{ const DB_HOST='localhost'. vo.dao) ?> ConstantesFinales.'reader'. } //probando print 'Host de la Base de Datos: '. . echo "<hr>". public $modulo=array('admin'. const DB_NAME='php_02'. echo " sobrescrito". return self::$rol. observ. } } class CarritoPreferencial extends Carrito{ //error /* public function listarOfertas(){ parent::listarOfertas(). print Privilegio::asignacion(). //los metodos finales no puede ser sobre escritos class Carrito{ public final function listarOfertas(){ print "Muestra Ofertas".'writer').'writer'). } } //probando Privilegio::$rol=2. } */ public function listarOfertas2(){ parent::listarOfertas(). const DB_PSW=''.'reader'.DatosDB::DB_HOST. public static function asignacion(){ //$this->modulo=array('admin'.//.<?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.$this->modulo[self::$rol]. const DB_USER='root'.

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