A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Interfaces

13/19
Recursos

Aportes 25

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Sigo pensando que una interfaz es como una plantilla, una plantilla estricta que te dice qu茅 es lo que debes de poner de manera obligatoria y ya tu terminas de rellenarla con los datos que necesites, en este caso, una plantilla de una clase.

Compa帽eros, una interface es un elemento de 鈥淎n谩lisis Orientado a Objetros (por cierto, deber铆a haber un curso de esto antes de POO para entender bien este mundo)鈥 donde lo que se busca es romper dependencias estrictas de un objeto X con un objeto Y y ser m谩s flexibles. Esto lo van a ver mucho cuando empiecen a trabajar en proyectos complejos. Voy a tratar de hacer un ejemplo:

Supongamos que tienes una empresa de transporte y tienes una flota de taxis y personas que solicitan el servicio:

<?php

class Taxi
{
    public $matricula;

    public function __construct($matricula)
    {
        $this->matricula = $matricula;
    }
    
    public function viajar($inicio, $destino)
    {
        return "Se ha trasladado desde $inicio hasta $destino";
    }

}


class Person 
{
    public $name;

    public function __construct($name)
    {
        $this->name = $name;
    }

    public function solicitarTraslado(Taxi $taxi, $lugarInicio, $lugarDestino)    
    {
        echo "$this->name ha solicitado servicio de traslado del veh铆culo $taxi->matricula</br>";
        echo $taxi->viajar($lugarInicio, $lugarDestino);
    }
}

$taxi = new Taxi("ABC123");
$persona = new Person("Jos茅");
$persona->solicitarTraslado($taxi,"Av Fuerzas Armadas", "Av Baralt");

Ahora imaginen que te fue muy bien en tu negocio y no solo tienes taxis, ahora tienes aviones, trenes, barcos (Wao!!! adoptame!! jejeje)鈥 Bueno deben modificar su sistema porque ahora el cliente puede solicitar un traslado en cualquier tipo de transporte que tengamos. Si ven, aqu铆 tenemos una dependencia estricta de dos objetos:

class Person 
{
    public $name;

    public function__construct($name)
    {
        $this->name= $name;
    }

    public function solicitarTransporte(Taxi $taxi (AQU脥!!!!),
 $lugarInicio, $lugarDestino)    
    {
        echo "$this->name he solicitado servicio de traslado del veh铆culo $taxi->matricula</br>";
        echo $taxi->viajar($lugarInicio, $lugarDestino);
    }
}

La persona solo puede solicitar traslado en taxi y queremos que pueda solicitar traslado en lo que tengamos. Aqu铆 es donde entra la INTERFACE

Quiero que cualquier persona pueda trasladarse en los tipos de veh铆culos disponibles (taxi, barco y tren. Pr贸ximamente en unidades de spaceX jajajajaja). Deber铆amos hacer esta implementaci贸n:

interface Transporte
{
    public function viajar($inicio, $destino);
}


class Taxi implements Transporte
{
    public $matricula;

    public $type = 'Taxi';

    public function __construct($matricula)
    {
        $this->matricula = $matricula;
    }
    
    public function viajar($inicio, $destino)
    {
        return "Se ha trasladado en el $this->type desde $inicio hasta $destino";
    }
}

class Barco implements Transporte
{
    public $matricula;

    public $type = 'Barco';

    public function __construct($matricula)
    {
        $this->matricula = $matricula;
    }
    
    public function viajar($inicio, $destino)
    {
        return "Se ha trasladado $this->type desde $inicio hasta $destino";
    }
}


class Tren implements Transporte
{
    public $matricula;

    public $type = 'Tren';

    public function __construct($matricula)
    {
        $this->matricula = $matricula;
    }
    
    public function viajar($inicio, $destino)
    {
        return "Se ha trasladado $this->type desde $inicio hasta $destino";
    }
}


class Person 
{
    public $name;

    public function __construct($name)
    {
        $this->name= $name;
    }

    public function solicitarTraslado(Transporte $transporte, $lugarInicio, $lugarDestino)    
    {
        echo "$this->name he solicitado servicio de traslado del veh铆culo $transporte->matricula</br>";
        echo $transporte->viajar($lugarInicio, $lugarDestino).'<hr>';
    }
}

$taxi = new Taxi("ABC123");
$persona = new Person("Jos茅");
$persona->solicitarTraslado($taxi,"Av Fuerzas Armadas", "Av Baralt");

$barco = new Barco("DEF456");
$persona = new Person("Mar铆a");
$persona->solicitarTraslado($barco,"Av Fuerzas Armadas", "Av Baralt");

$tren = new Tren("XXX654");
$persona = new Person("Pablo");
$persona->solicitarTraslado($tren,"Av Fuerzas Armadas", "Av Baralt");

Si ven ahora lo que se le pasa a la clase Person es un objeto de tipo Transporte. As铆 rompemos la dependencia estricta de mi sistema que solo pod铆a ofrecer traslados en taxi. Ahora a facturar m谩s!!!

Espero este ejemplo haya aclarado el uso de las interfaces.

Interfaces


Una interfaz se desarrolla y se implementa en una clase, al implementarla nosotros estamos obligados a desarrollar todos los m茅todos que la interfaz define.

Esto quiere decir, que una interfaz no puede hacer nada por si sola, lo que significa que las clases hijas est谩n encargadas de definir el comportamiento de todos los m茅todos abstractos de forma obligatoria.

En palabras m谩s sencillas, las interfaces ser谩n contratos que indicar谩n que es lo que se debe de hacer sin proveer ninguna funcionalidad.

<?php

class User {
    public $name;

    public function __construct($name) {
        $this->name = $name;
    }
}

馃搶Una interfaz nos obliga a implementar los m茅todos que posee dentro de una clase.

Una interfaz es como un contrato, en ese contrato se especifican m茅todos que quiero que sean obligatorios implementar en una clase.

Aunque sigo sin entender bien el porque debo usar las interfaces, me quedo con que es una buena practica de programaci贸n y es la forma en que se debe hacer la programaci贸n profesional.

Una interfaz se desarrolla y se implementa en una clase. Al implementarse nosotros estamos obligados a desarrollar todos los m茅todos que la interfaz define.

Digamos que el que se va hacer se define en una Interfaz
y el como se va hacer y la implementaci贸n se define en una clase

-ItaloMorales

who is Lynda???

INTERFACES

Si quieres recordar bien esto, te dejo una referencia gr谩fica, con esto podemos decir.

La diferencia entre clase abstracta e interfaz es muy conceptual. La clase abstracta lo que hace es llevar la idea de algo abstracto a algo m谩s concreto. Por ejemplo definimos una clase abstracta Transporte y decimos que un transporte tiene color, capacidad de pasajeros, cantidad de puertas (estos son atributos) y el Transporte puede acelerar y frenar (estos son m茅todos). La clase abstracta permite que al heredar en otras clases sus hijos pueden tener esos conceptos abstractos (todos los atributos y m茅todos que le definimos). De esta manera, todos sus hijos tienen transporte tambi茅n. De hecho si hacemos un arreglo en un lenguaje fuertemente tipado y definimos que su tipo es Transporte, por poliformismo todos los hijos de transporte, entran en el array.

La interfaz habla m谩s de comportamiento. Te dice qu茅 comportamiento va a tener una clase que la implemente. Por ejemplo si implementamos Transporte (con los mismos m茅todos) como interfaz, sabemos que todas las clases que implementen necesitan acelerar y frenar porque ese es el comportamiento que se define con la interfaz.

La diferencia es conceptual pero a fines pr谩cticos sirven para hacer lo mismo. Hoy en d铆a se usa m谩s la interfaz.

Las interfaces se definen de la misma manera que una clase,
aunque reemplazando la palabra reservada class por la palabra
reservada interface y sin que ninguno de sus m茅todos tenga su
contenido definido.

Seg煤n lo que he entendido , una interfaz es un requerimiento obligatorio m铆nimo para ser desarrollado en la implementaci贸n de una clase determinada.

"Crea la l贸gica necesaria, para que sea desarrollada a trav茅s de clases"

13. Interfaces

Aquella clase que implemente (implements) un interface, debe cumplir un contrato, es decir, est谩 obligada a implementar los m茅todos que tiene la interface.

Comparto el c贸digo de la clase:

<?php

//contratos
// Database, get, delete, store, edit, update

interface Person
{
    public function getName();
}

class Admin implements Person
{
    public $name;

    public function __construct($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

$admin = new Admin('Aldo');
echo $admin->getName();
<?php
/**
 * 驴que se va a hacer?
 */
 //Ejemplo la clase persona  necesita nombre, apellido paterno, apelido materno
 // GetName es un metodo de php
interface Person
{
public function getName();

}

/**
 *  驴como lo va a hacer?
 */
 class Admin implements Person
   {
       public $name;

       public function __construct($name)
       {
           $this->name = $name;  
       }

       public function getName() // funcion de la interfaz
       {
           return $this->name; // lo que te regresara
       }
   }
/**
 * crea un nuevo objeto con:
 */
 $admin = new Admin('linda');// en este espacio podemos poner el nombre que quueramos
    echo $admin->getName();


 ?>

Realmenete estaba muy esc茅ptico en aprender php pero el profesor ha demostrado que esto es un gran lenguaje! Dir铆a que mucho m谩s f谩cil que javascrip se asemeja mucho al superSet typescript que hace que la programaci贸n orientada a objeto sea mas comprensible!

En este cap铆tulo creo que lo tome el hilo.

Una Interfaz: Viene siendo la pre-implementaci贸n de la l贸gica y/o funciones/m茅todos/clases que se vaya a desarrollar para X m贸dulo.

Como explica el profe:

creamos la interfaz Database:

En esta declaramos todos los m茅todos que su clase o funci贸n deber铆an de existir.

Pero una pregunta, este archivo v谩lida que esas funciones o m茅todos son creados en otro lado?

Para mi una interfaz es un contrato, que otras clases deben cumplir si se implementa dicha interfaz.

Es un contrato donde se define que se va ha realizar; posteriormente en las clases que implementen esta interfaz, se desarrolla la l贸gica del negocio.
//Persona.php

<?php
namespace Interf;

interface Persona{

public function getDatosPersonales();
public function setDatosPersonales($nombre,$apellido);

}

//Cliente.php
<?php
namespace PooPHP;
use Interf\Persona;

class Cliente implements Persona{

public $nombre;
public $apellido;

public function __construct($nombre,$apellido){
	$this->nombre=$nombre;
	$this->apellido=$apellido;
}

public function getDatosPersonales(){
$datp=["nombre"=>$this->nombre,
       "apellido"=>$this->apellido
];	
	echo json_encode($datp);
}

public function setDatosPersonales($nombre,$apellido){
	$this->nombre=$nombre;
	$this->apellido=$apellido;
}

}

//poo.php

<?php
echo 鈥<!DOCTYPE html>
<html lang=鈥渆s鈥>
<head>
<meta charset=鈥淯TF-8鈥/>
<title>POO CON PHP</title>
</head>
<body>鈥;

require_once DIR."/vendor/autoload.php";
use \PooPHP\Cliente;

$cliente=new Cliente(鈥淛uan Esteban鈥,鈥淢oreno Grajales鈥);
$cliente->getDatosPersonales();

echo 鈥</body>
</html>鈥;

Una interfaz es b谩sicamente un esqueleto para definir la forma y el comportamiento esperado de nuestras clases, toda clase que implemente dicha interfaz deber谩 desarrollar sus m茅todos y atributos

Excelente

Considero que las interfaces son importantes ya que de esta manera 鈥渁marramos鈥 todas nuestras pruebas unitarias.

Algo similar ocurre con los traits, pero esos traits se pueden implementar en cualquier clase que las use, con la diferencia que all铆 se puede definir los bloques de c贸digo que se van reusar.

Interfaces

Se desarrolla y se implementa en una clase, al ser implementada estamos obligados a desarrollar todos los m茅todos que la interfaz define.

Se puede considerar como:

  • El que se va hacer, se define en una interface.
  • El como se va hacer en una implementaci贸n se define en una clase.

Podemos resumir que una interface es un contracto donde nos indica como debemos desarrollar los m茅todos que se tienen.

En la interface definimos los diferentes m茅todos que quiero que sean obligatorios dentro de una clase.

<?php
    // Contractamos
    interface Person
    {
        public function getName();
    }

    class Admin implements Person
    {
        public $name;

        public function __construct($name)
        {
            $this->name = $name;
        }

        public function getName()
        {
            return $this->name;
        }
    }


    $admin = new Admin('Lynda');
    echo $admin->getName();
?>