No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Interfaces

13/19
Recursos

Aportes 34

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

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

De momento una interfaz es un contrato que debemos cumplir al momento de implementar en las diferentes clases.

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

Cuando una clase hereda o implementa la interface se esta comprometiendo a prooveer una implementacion de esos metodos.

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

Tal vez ser铆a bueno un curso un poco m谩s pr谩ctico, orientado a la construcci贸n de un proyecto tipo CRUD o similar donde se nos muestre las diferentes maneras en la que podemos construir un proyecto con POO.

Definicion de una interfaz con el ejemplo.

馃崈 Las interfaces en programaci贸n orientada a objetos son como un contrato que especifica un conjunto de m茅todos que una clase debe implementar. En otras palabras, las interfaces definen una serie de comportamientos que una clase debe seguir. Esto permite que las clases sean intercambiables y facilita la comunicaci贸n entre diferentes partes de un programa.

En PHP, las interfaces se definen con la palabra clave interface. Una interfaz no puede tener propiedades, solo m茅todos. Los m茅todos de una interfaz no tienen cuerpo, es decir, no tienen c贸digo dentro de ellos, solo especifican la firma del m茅todo (nombre, par谩metros y tipo de retorno).

Un ejemplo de interfaz en PHP podr铆a ser el siguiente:

interface iUser {
    public function login($username, $password);
    public function logout();
}

class User implements iUser {
    public function login($username, $password) {
        // L贸gica para iniciar sesi贸n
    }

    public function logout() {
        // L贸gica para cerrar sesi贸n
    }
}

En este ejemplo, la interfaz iUser especifica dos m茅todos que cualquier clase que implemente la interfaz debe tener: login() y logout(). La clase User implementa la interfaz iUser y define los m茅todos login() y logout() de acuerdo con la firma especificada en la interfaz.

El uso de interfaces permite que las clases se comuniquen entre s铆 de manera m谩s flexible. Por ejemplo, supongamos que hay una clase Authentication que necesita trabajar con cualquier objeto que tenga los m茅todos login() y logout(). En lugar de hacer que Authentication trabaje directamente con la clase User, se puede hacer que trabaje con cualquier objeto que implemente la interfaz iUser. Esto significa que si se crea otra clase que tambi茅n implemente la interfaz iUser, Authentication puede trabajar con esa clase sin necesidad de cambiar su c贸digo.

En resumen, las interfaces son una forma de definir comportamientos que una clase debe implementar y permiten que las clases sean intercambiables y se comuniquen entre s铆 de manera m谩s flexible.

Una interfaz se desarrolla y se implementa en una clase, al implementar nosotros estamos obligados a desarrollar todos los m茅todos que la interfaz define.
Una interfaz es un contrato.
En este caso la interfaz muestra de manera sencilla que sirve como contrato.

Una interfaz es un contrato que debemos cumpliar a la hora de querer utilizarla en otra clase鈥

Resumen de la clase:

<?php

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

?>

Los temas avanzados con interfaces se ven en los patrones de dise帽o, por ahora enti茅ndanlo como un contrato solamente.

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