No tienes acceso a esta clase

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

Abstracci贸n

7/19
Recursos

Aportes 57

Preguntas 7

Ordenar por:

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

o inicia sesi贸n.

Recuerdo que cuando aprend铆 abstracci贸n me cost贸 entender qu茅 era y para qu茅 serv铆a.

Una definici贸n m谩s sencilla es: 鈥淎bstracci贸n es simplemente crear una plantilla de la clase que queremos crear鈥 es eso, una plantilla, porque al implementarla nos vemos obligados a respetar esa plantilla.

Un caso pr谩ctico para los m茅todos abstractos es cuando quieres tener una clase que va a ser heredada por otras dos clases, y esas dos clases van a tener una funci贸n con nombre similar, pero que van a realizar acciones completamente distintas, por ende, no puedes definir las instrucciones en la clase padre, pero necesitas definir algo, en ese caso usas un m茅todo abstracto, es decir, una plantilla del m茅todo que posteriormente ser谩 definido en las clases hijas.

Se que es complicado de entender, pero realizando pr谩cticas y ech谩ndole cabeza se logra comprender 馃槃!

Una clase abstracta es aquella en donde 煤nicamente se definen o firman los atributos y/o m茅todos que otras clases deber谩n implementar al querer utilizar esta clase. En otras palabras, una clase abstracta es una clase que tiene m茅todos generales que definen que es lo que debe hacer pero no se sabe c贸mo va a realizar estas acciones y es tarea de las clases que implementan esta clase abstracta definir como van a realizar estas tareas.

Estas clases son conocidas como Super Clases o Clases Padre y tienen las siguientes caracter铆sticas:

  1. Una clase abstracta se define como una clase padre o super clase
  2. Una clase abstracta 煤nicamente define o firma los m茅todos y atributos a implementar
  3. Una clase abstracta no puede ser instancia directamente

Un ejemplo de clase abstracta puede ser la clase Figura la cual tiene 2 m茅todos, calcularArea y calcularPerimetro as铆 como la propiedad nombre
Esta clase abstracta deber谩 ser implementada por la clase Cuadrado, Circulo, Triangulo.

Abstracci贸n


Es b谩sicamente lo que nos ayuda a abstraer, a pensar en el resultado final antes de que vayamos a la programaci贸n.

En este momento estamos declarando en la interfaz lo que queremos.

<?php

interface StoreInterface {
    public function get();
}

馃懆鈥嶐煉 Las interfaces ser谩n contratos que indicar谩n que es lo que se debe de hacer sin proveer ninguna funcionalidad.

Se acostumbra que los archivos que contengan al final la palabra interface.

Para implementar una interfaz en una clase ponemos la palabra reservada implements despu茅s del nombre de la clase.

<?php

require_once './store_interface';

class Database implements StoreInterface {
    public function get() {
        # code...
    }
}

Las clases abstractas cuando tienen m茅todos define lo que tienen qu茅 hacer pero no c贸mo se debe de hacer. Estas clases pueden ser heredadas por X clases que necesitemos pero no pueden ser instanciadas.

Un m茅todo abstracto solo se define, no se declara.

<?php

abstract class Base {
    public function get() {
        # code...
    }

    abstract public function store();
}

Y para implementar una clase abstracta ponemos:

<?php

require_once './base.php';

class Cached extends Base
{
    public function store() {
        # code...
    }
}

馃槻 Abstraer es aislar, separar u organizar pensando siempre en el resultado final.

De nada sirve aprender esto mec谩nicamente, si no se aprende aplicarlo en un proyecto con casos reales y usando alg煤n framework.

Este video es bien pobre pens茅 encontrar algo mejor trabajado con un contenido de valor no lo mismo de siempre que se encuentra en todo lado.

Para los que est谩n confundidos:
Solo entiendan que es abstracci贸n.
Lo de clases abstract e interface por el momento d茅jenlo. El profe solo dio varias formas de usar la abstracci贸n, m谩s no explic贸 a detalle cada una. Sigan con curso o tomen el curso de POO que imparte Anah铆 aqu铆 en Platzi.

7. Abstracci贸n

Por interface (por favor corregirme si me equivoco), entiendo que es una clase, que tiene declarados nombres de m茅todos, inclusive con los par谩metros a aceptar, pero que no tienen instrucciones definidas, as铆 una o m谩s clases pueden heredar (mediante implements en vez de extends) de esta interface ****y definir c贸mo se realiza el m茅todo en cada una de ellas.

Abstraer es aislar, separar u organizar, pensando siempre en el resultado final.

Un ejemplo de ello ser铆a, definir una interface llamada Animal que tenga un m茅todo llamado makeSound(), y luego definir una clase de cada animal que herede mediante ****implements y defina su propio sonido:

<?php
// Interface definition
interface Animal {
  public function makeSound();
}

// Class definitions
class Cat implements Animal {
  public function makeSound() {
    echo "Meow<br>";
  }
}

class Dog implements Animal {
  public function makeSound() {
    echo "Bark<br>";
  }
}

class Mouse implements Animal {
  public function makeSound() {
    echo "Squeak<br>";
  }
}

// Create a list of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);

// Tell the animals to make a sound
foreach($animals as $animal) {
  $animal->makeSound();
}

Output:

Comparto tambi茅n el c贸digo de la clase:

I. Ejemplo interface:

StoreInterface.php

<?php

interface StoreInterface
{
    public function get();
}

Database.php

<?php

class Database implements StoreInterface
{
    public function get()
    {
        // desarrollar el c贸digo
    }
}

II. Ejemplo Abstract:

Base.php

<?php

abstract class Base
{
    public function get()
    {
        //... code
    }

    abstract public function store(); //only declare
}

Cached.php

<?php

class Cached extends Base
{
    public function store()
    {
        //code
    }
}

III. Ejemplo con Class:

Auth.php

<?php

class Auth
{
    protected $email;
    protected $password;

    public function login()
    {
        //code
    }

    public function validate()
    {
        //code
    }

    //failed, response
}

Pero que mala explicaci贸n de abstraci贸n, el profe le da demasiada vuelta.
Las abstracci贸n simplemente es aislar lo escencial de algo.
La abstracci贸n nos sirve para cuando queremos crear una Clase, Ejemplo: si pensamos un Tesla de color negro y queremos crear su clase, tenemos que abstraer que tesla es un automovil, y tiene propiedades como marca y el color.
Otra m谩nera de ver la abstraci贸n es cuando usamos ya un objeto, al usar sus m茅todos y propiedades abstraemos su implementaci贸n, y no nos interesa saber como funciona sino solamente las salidas que obtenemos.
Estas son las dos m谩neras de ver la abstraci贸n, para crear clases y para usar una implementaci贸n.

No entendi nada xD

Las interfaces contienen m茅todos vac铆os que obligan a una clase a emplearlos, promoviendo as铆 un est谩ndar de desarrollo.

interface Automovil {
    public function getTipo();
    public function getRuedas();
}
class Coche implements Automovil {
    public function getTipo(){
        echo "Coche";
    }
    public function getRuedas(){
        echo "4";
    }
}
class Moto implements Automovil {
    public function getTipo(){
        echo "Moto";
    }
    public function getRuedas(){
        echo "2";
    }
}

Las interfaces se hacen para que clases puedan heredar de ellas extendiendo (o con implements). Los metodos que hay en la interfaz son obligatorios para la clase y deben ser definidos en esta. Lo 鈥渃urioso鈥 es que en la interfaz solo se declara el m茅todo, pero no se le d谩 m谩s l贸gica, eso se har谩 en la clase. Todos los m茅todos en las interfaces tienen que ser p煤blicos.

馃挕 El nivel de abstracci贸n determina en ocasiones la calidad de soluci贸n a un problema.

Lo interesante es tener el conocimiento y la practica para decidir cuando utilizar una clase abstracta, cuando usar herencia cuando crear una interfaz鈥

Concepto simple, pero me perdi en la gramatica.
.
Ya quedo claro despues de ver la clase varias veces y leer comentarios 馃ぃ

Para m铆 falta algo importante sobre 鈥淎bstract class鈥 y es que tengo entendido que este tipo de clases no se pueden instanciar, no se pueden generar objetos a partir de ellas; s贸lo se pueden tomar como modelos para las herencias.

Aqui se puede observar la importancion y lo bien que algunas ocaciones estan dise帽adas las rutas de aprendizaje, Se facilita el aprendizaje si se toma el curso de POO

La abstracci贸n significa aislar, separar o sacar

no entendi nada 馃槮

  • CLASES ABSTRACTAS -CARACTERISTICAS
    • NO permite crear objetos a partir de una clase abstracta - Es decir permite crear Jerarquiar, pero no permite crear instancias
    • Pueden tener estado (Atributos de las propiedades de los valores que se pueden guardar ) y comportamiento (M茅todos o funciones)
    • Inician Jerarqu铆as de clases (clases generales y otras clases especializadas)
  • INTERFACES - CARACTERISTICAS
    • Ayudan a crear jerarqu铆as de clases.
    • Nos ayudan a simular la HERENCIA m煤ltiple
      • HERENCIA MULTIPE
        • Quiere decir que una clase puede heredar mas de una clase a la vez

La abstraccion puede verse c贸mo sacar, separar o definir lo com煤n de varias objetos que se modelan, (atributos y comportamientos), para crear con esto una plantilla, que de utilizarse (implement o extent) en una clase, se deben desarrollar como m铆nimo en esa clase agrendo lo especifico.

Lo entiendo como => Simplificar, generalizar caracteristicas y comportamientos que sean comunes a un grupo de elementos. Al crear un modelo estamos aplicando abstracci贸n. Tambien cuando creamos una superclase de una familia estamos aplicando abstracci贸n.

Abstraer es entender un elemento del mundo real y construirlo usando POO, entender que propiedades y acciones conforman a dicho elemento a tal punto que su representaci贸n en c贸digo sea similar o igual.

Abstraer es aislar, separar u organizar.

Las interfaces de objetos permiten crear c贸digo con el cual especificar qu茅 m茅todos deben ser implementados por una clase, sin tener que definir c贸mo estos m茅todos son manipulados.

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.

Todos los m茅todos declarados en una interfaz deben ser p煤blicos, ya que 茅sta es la naturaleza de una interfaz.

  • Una clase puede implementar mas de una interface.
  • Las interfaces pueden contener m茅todos y/o constantes pero no atributos.
  • Los m茅todos en una interface son impl铆citamente abstractos.
Segun como lo entiendo, la abstraccion en lo que corresponde a las clases, hace referencia a los moldes para crear estas clases, moldes que si bien son rigidos en lo que ya esta definido, permite libertad para que se agreguen mas metodos o atributos. Es como el molde del molde馃
un poco de c贸digo interface```ts

Yo no tenia claro para que se utilizaba la abstracci贸n, pero ahora con la clasa ya me quedo claro que se para organizar, separar y trabajar de una forma m谩s limpia. Las interfaces son como plantillas o guias que nos permitiran crear nuestras clases completas y bien gobernadas.

Abstraccion:
la abstraccion se refiere a la capacidad de representar entidades del mundo real como clases abstractas o interfaces.
Una clase abastracta es una clase que no puede ser instanciada directamente, sino que sirve como una plantilla para clases
derivadas o subclases.
Una clase abstracta puede contener propiedades(atributos), metodos y definiciones de un metodo abstracto,
Los m茅todos abstractos no tienen implementaci贸n en la clase abstracta misma, sino que deben ser implementados en las clases
derivadas OSEA cuando hablamos de inplementacion nos referimos a los metodos y que no pueden realizar una accion,
sino que esta accion se realiza recien en una subclase.

Los metodos concretos significa que ya tiene algun tipo de accion y se definen con la palabra clave public, protected o private.
y los metodos sin implementacion significa que no tienen definido un tipo de accion,
y recien se definira la accion en una clase derivada

En estas clases deberian evitar crear clases llamadas como Base, Base no representa ningun tipo de datos modelo o logica, Base es un nombre tan generico que no da a ententer a que se refiere, cuando comenzamos a estudiar deberiamos intentar aprender a darle un nombre coherente a las clases.

no entend铆 馃槮

Aqui hay una parte clave que falto decir, la abstraccion es un proceso intelectual.

Formar mediante una operaci贸n intelectual una idea mental o noci贸n de un objeto extrayendo de los objetos reales particulares los rasgos esenciales, comunes a todos ellos

Por lo tanto dos personas pueden abstraer de manera diferente, porque tienen diferentes procesos de organizacion diferentes niveles intelectuales, diferentes herramientas para interpretar las realidades.

Veamos en esta clase un concepto interesante propio de la caracter铆stica de programaci贸n orientada a objetos, es una de las caracter铆sticas que quiz谩s estemos utilizando y que ni siquiera sab铆amos que tenia este nombre; la abstracci贸n
La abstracci贸n significa aislar, separar o sacar y es b谩sicamente lo que nos ayuda a extraer, a pensar en el resultado final antes de que hagamos una programaci贸n.
Un m茅todo abstracto no se define, solo se declara.

Este es uno de los ejemplos de abstracci贸n vistos en la clase, abstraer quiere decir que aislamos, separamos y creamos como una estructura que debemos seguir, en este ejemplo implementamos la abstracci贸n con una interface donde declaramos que usaremos la function get. Esto nos obliga ha implementar el m茅todo get en la clase que creemos implementando la interface, de lo contrario nos dar铆a un error

Creo que logre entender la diferencia entre Interfaz y clases abstractas. Al menos la idea principal, si.
Les comparto mi apunte de esta clase por si a alguien le sirve de repaso.
.
Base

<?php
  // La abstracci贸n no es m谩s que una plantilla de la clase que queremos crear.
  // Existen clases abstractas y m茅todos abstractos
  // Una clase abstracta puede tener m茅todos normales que definen que hace el c贸digo.
  // Si una clase tiene m茅todos abstractos, estos solo deben ser inicializados m谩s no definir que hara el c贸digo pues esta es tarea de la clase que herede de est谩 clase abstracta

  // Creaci贸n de clase abstracta
  abstract class Base{

    // Definiendo m茅todo normal
    public function saludar(){
      echo "Hola Mundo desde Base";
    }

    // Definiendo m茅todo abstracto
    abstract public function despedir(); // Solo se define la funci贸n obligatoria que deben tener las clases que hereden de esta clase, m谩s no el cuerpo de la funci贸n

  }
?>

.

Cached

<?php

// Incluyendo el archivo donde se tiene la clase 'Base'
include_once('Base.php');

// Creando clase que hereda de super clase 'Base'
class Cached extends Base{

  // Si no se implementa el m茅todo 'despedir', la clase marca error puesto que es obligatorio
  function despedir(){
    echo "Adios mundo desde Cached!";
  }

  function soyCache(){
    echo "Mensaje normal desde cached";
  }

}

// Creando instancia de la clase 'Cached'
$cached1 = new Cached;
$cached1->soyCache(); // Mensaje normal desde cached
echo("\n");
$cached1->despedir(); // Adios mundo desde Cached!
echo("\n");
$cached1->saludar(); // Hola Mundo desde Base

?>

.
Resultado

Implementar una interface o heredar de una clase abstracta significa hacer un contrato en el cual se compromete a la clase que implementa o hereda en crear los m茅todos que solicitan.
Un checklist -> OBLIGATORIO.

La abstracci贸n es simplemente un nivel superior a la clase donde se define o declara lo que se necesita para posteriormente desarrollarlo en una clase.

Clase de interfaz
Como ya sabemos, una interfaz se define en realidad mediante una palabra clave de interfaz donde todos los m茅todos son abstractos. Adem谩s de esto, todos los m茅todos declarados en este tipo de clase deben declararse en p煤blico, lo que refleja la verdadera naturaleza de una interfaz.
Clase abstracta
En PHP, una clase abstracta es una que est谩 siendo parcialmente implementada por cualquier desarrollador. Puede contener al menos un m茅todo abstracto que es b谩sicamente un m茅todo sin ning煤n c贸digo escrito. Solo contiene el nombre y los par谩metros y se ha marcado como 鈥渁bstracto鈥.
Por definici贸n, una clase abstracta es simplemente una definici贸n de funci贸n cuyo prop贸sito es servir al programador dici茅ndole que el m茅todo en cuesti贸n debe implementarse en una clase hija.

Les comparto un video donde explica de forma detallada la diferencia entre clases abstractas y interfaces

Tengo entendido que la abstracci贸n es cuando analizamos un objetos y tomamos sus caracter铆sticas principales como sus atributos y comportamientos m谩s importantes para el contexto que queremos programar para convertirlos en una clase.
No sabia que exist铆a varias formas de hacer abstracci贸n, quiero conocer en que casos se utilizan cada forma de abstraer.

Estaba enredado con el concepto, ahora estoy muy enredado. Creo que tocara buscar un poco mas en youtube.

Interfaz:
Me ha gustado este tipo de abstracci贸n, he hecho un ejemplo que me llamo la atenci贸n y me ayudo a entender mas esta poderosa funcion, por ejemplo si nos solicitan describir la ficha tecnica de una planta, como su especie de que familia proviene y q genero, se puede organizar y dividir o separar (Abstracci贸n) el codigo de manera genial.

  1. Cree la Interfaz, donde se crea solo la funcion sin codigo de logica:
    *en vez de iniciar con 鈥榗lass鈥 se coloca 鈥榠nterface鈥, utilice el nombre catalogia para catalogar la planta, y defini solamente sin codigo el metodo darforma().
<?php

interface  Catalogia {

    public function darforma();
}
  1. Cree una clase de planta que es el Cactus, y como queremos darle forma o catalogar se implementa esa interfaz de Catalogia:
    *Defini las variables basicas para catalogarlo y defini el constructor, y emplee el metodo que estaba definido en la interfaz.
<?php
include "Catalogia.php";
class Cactus implements Catalogia{

    protected  $familia;
    protected  $genero;
    protected  $especie;

    public function __construct($familia,$genero,$especie){
        $this->familia=$familia;
        $this->genero=$genero;
        $this->especie=$especie;
    }

    public function darforma(){
        echo "A continuacion encontraras info de la planta <br>"."Familia: $this->familia  - Genero: $this->genero - Especie: $this->especie";
    }
    
}
  1. Solamente tuve que incluir la clase de planta que iba a mostrar y definir las varibles y crear una nueva instancia.
<?php
include "Cactus.php";

$familia="STRADIVIRUS";
$genero="HEMBRA";
$especie="LOPIDUS";

$MiCactus= new Cactus($familia,$genero,$especie);
$MiCactus->darforma();

Gracias por esta clase!!!

Pongo mi c贸digo que vimos en la clase:

carpeta interface: archivo database y store
carpeta abstract: base cached
carpeta class: auth

Base.php

<?php

abstract class Base 
{
    //Una clase abstracta puede tener m茅todos abstractos.
    public function get()
    {
        //....
    }

    //un m茅todo abstracto no se define solo se declara
    abstract public function store ();
}

?>

cached.php

<?php

class Cached extends Base 
{
    //cuando extiendo estoy obligado a implementar eso que declare como abstracto.
    public function store ()
    {
        //...
    }
}

Auth.php

<?php

class Auth
{
    protected $email;
    protected $password;


    public function login()
    {
        //
    }

    public function validate()
    {
        //
    }

    //failed, response
    //esto tambi茅n es abstracci贸n es desribir en escencia lo que yo requiero para mi clase.
     
}

Database.php

<?php

class Database implements StoreInterface 
{
    //Desarrollamos la l贸gica/c贸digo.
    
}

StoreInterface.php

<?php

interface StoreInterface 
{
    public function get ();//declaramos lo que queremos como resultado final.
}

Ufff tremenda explicacion!

Utilizando la tecnolog铆a de composer:

//Base.php
<?php
namespace PooPHP;
abstract class Base{

public function get(){
return json_encode([鈥渞ta鈥=>鈥淢ensaje del Get鈥漖);
}

abstract protected function tienda();

}

//Cached.php
<?php
namespace PooPHP;
class Cached extends Base{

public function tienda(){
	
	echo json_encode(["rta"=>"https://oldstore.com.co"]);
	
}

}
//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\Cached;

$r= new Cached();
$r->tienda();
echo $r->get();

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

Interface

Una interface no puede definir m茅todos (S贸lo puede declararlos).

Un punto importante: una clase (en PHP al menos) puede implementar tantas interfaces como se desee (pero s贸lo puede extender una clase base).

Abstract

Una clase se dice abstracta si no es posible utilizarla para crear objetos (instancias).

La explicaci贸n viene asociada al concepto de Herencia (Tema para otro art铆culo en todo caso).

Una clase abstracta puede usarse como base de una jerarqu铆a.

pienso que la programaci贸n orientada a objetos se parece mucho normalizar una base de datos.

no entendi mucho de esta clase me salvo creo yo por el curso de poo de anays en el cual ella explica que la abstraccion es crear una plantilla con lo necesario para ecrear el objeto que queremos, el tener los requeridos

A como lo entiendo, la abstraccion es crear toda la infraestructura de mi proyecto. Desde carpetas, archivos, clases y metodos antes de implementar la logica del codigo, y de esta manera tener el panorama completo de lo que debera hacer el proyecto. 驴Es correcto mi planteamiento compa帽erxs?

驴Que criterio debo considerar para saber cual es la mejor opci贸n de abstracci贸n durante el desarrollo de un proyecto?

Cuando se extiende de una clase abstracta solo est谩s obligado a implementar los m茅todos abstractos:

Sinceramente no terminaba de entender el concepto de interfaz en la facultad, pero tu ejemplo fue 10000000 de veces mejor que cualquier otro que haya escuchado, Gracias

Va mi definici贸n:
Abstracci贸n es conceptualizar, es definir los m茅todos que requieren ser implementados en una o varias clases. Los podemos definir con interfaces o clases abstractas para hacer dichos m茅todos obligatorios de implementar, o simplemente en las clases definir estos m茅todos con nombre y modificador (sin c贸digo), todo a nivel concepto.

Me encantan estos curso! la verdad fantastico

M茅todo abstracto
Un m茅todo abstracto es un m茅todo declarado pero no implementado, es decir, es un m茅todo del que solo se escribe su nombre, par谩metros y tipo devuelto pero no su c贸digo.

Los m茅todos abstractos se escriben sin llaves {} y con ; al final de la declaraci贸n.

Por ejemplo:

public abstract double area();

Un m茅todo se declara como abstracto porque en ese momento (en esa clase) no se conoce c贸mo va a ser su implementaci贸n.

Por ejemplo: A partir de una clase Pol铆gono se pueden derivar las clases Rect谩ngulo y Tri谩ngulo. Ambas clases derivadas usar谩n un m茅todo 谩rea. Podemos declararlo en la clase Pol铆gono como m茅todo abstracto y dejar que cada clase lo implemente seg煤n sus necesidades.

Al incluir el m茅todo abstracto en la clase base se obliga a que todas las clases derivadas lo sobrescriban con el mismo formato utilizado en la declaraci贸n. Si la clase derivada no implementa el m茅todo abstracto que ha heredado, deber谩 ser declarada como abstracta.
Si una clase contiene un m茅todo abstracto se convierte en clase abstracta y debe ser declarada como tal.

La forma general de declarar un m茅todo abstracto en Java es:
[modificador] abstract tipoDevuelto nombreMetodo([par谩metros]);

Abstracci贸n

Significa aislar, separar o sacar, esto nos ayuda a extraer, pensar en el resultado final antes de realizar una programaci贸n

Una clase abstracta puede tener m茅todos abstractos

Un m茅todo abstracto no se define, solo se declara y es obligatorio definirlo cuando se extiende de la clase abstracta.

En resumen la Abstraci贸n es la forma en la que aislamos, separamos y organizamos la l贸gica en el resultado del problema.

Archivos realizado en los siguientes directorios:

  • abstract
# Base.php
abstract class Base
{
    public function get(){
       // <div class=""></div>
    }

    abstract public function store();//declara
}

# Cached.php
class Cached extends Base{
    public function store()
    {
        //..
    }
}
  • Interface
# StoreInterface.php

interface StoreInterface
{
    public function get(); //Declaramos, lo que queremos como resultado final.    
}

# Database.php
class Database implements StoreInterface
{
    public function get(){
       // Desarrollar el c贸digo
    }
}
  • class
# Auth.php
class Auth
{
    protected $email;
    protected $password;

    public function login()
    {
        //...
    }

    public function validate()
    {
        //...
    }

    //Failed, response
}