No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Abstracción

7/19
Recursos

Aportes 59

Preguntas 8

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Recuerdo que cuando aprendí abstracción me costó entender qué era y para qué servía.

Una definición más sencilla es: “Abstracció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.

No entendi nada xD

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.

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
}

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 “curioso” 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 “Abstract 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.
**Elección entre una clase abstracta y una interfaz:** * Use una clase abstracta cuando: * Necesita definir una estructura y características comunes para las clases derivadas. * Desea proporcionar implementaciones predeterminadas para algunos métodos. * Quiere establecer una jerarquía de clases clara. * Use una interfaz cuando: * Se centra en definir el comportamiento que las clases deben exhibir. * Quiere promover el acoplamiento laxo y la dependencia de la interfaz. * Necesita habilitar el polimorfismo entre clases sin restricciones de herencia. * Desea especificar contratos para la colaboración entre objetos.
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 “abstracto”.
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 ‘class’ se coloca ‘interface’, 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!

Mi intento por entender Abstracción: ![](https://static.platzi.com/media/user_upload/image-7d4901c0-d470-461d-a717-da17aa74aab3.jpg)

Utilizando la tecnología de composer:

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

public function get(){
return json_encode([“rta”=>“Mensaje 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=“es”>
<head>
<meta charset=“UTF-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
}