¿Qué es la abstracción en la programación orientada a objetos?
¡Abstracción! Un término esencial en la programación orientada a objetos que nos facilita pensar y desarrollar software de forma organizada y eficiente. Imagina que estás construyendo un edificio: antes de poner un ladrillo, necesitas un plan sólido. Igual en programación, buscamos entender y diseñar el resultado final antes de embarcarnos en el proceso de codificación. La abstracción consiste en aislar los elementos críticos que requerimos y concentrarse en lo que realmente importa al definir el comportamiento de nuestras clases e interfaces.
¿Cómo aplicar la abstracción con interfaces?
Las interfaces en PHP proporcionan una forma poderosa de definir el contrato de lo que nuestras clases deben implementar. Veamos un ejemplo del proceso paso a paso:
<?phpinterfaceStoreInterface{// Declaramos lo que queremos como el resultado finalpublicfunctionsave();}
Al crear una interface, declaramos métodos, pero no los implementamos. Esto obliga a las clases que implementen esta interface a definir su comportamiento específico.
Ahora, añadamos una clase que implemente esta interface:
<?phpclassDatabaseimplementsStoreInterface{publicfunctionsave(){// Lógica de almacenamiento en base de datos}}
Este es un ejemplo claro de cómo las interfaces ayudan a definir qué métodos son necesarios y dejan que las clases se encarguen de los detalles. Si una clase decide implementar una interface, está obligada a implementar todos sus métodos, tal como un contrato legal. La programación no es diferente: cumple o enfrentas errores.
¿Qué papel juegan las clases abstractas?
Las clases abstractas son otro componente clave en la abstracción. A diferencia de las interfaces, pueden tener métodos con lógica predefinida. Sin embargo, al igual que con las interfaces, puedes declarar métodos abstractos que las subclases deben implementar.
<?php// Creamos una clase abstractaabstractclassBase{abstractpublicfunctionstore();publicfunctionget(){// Código que puede ser reutilizado por las subclases}}
Las clases que hereden de Base deben implementar el método store. Aquí tienes un ejemplo de cómo una subclase se extendería de una abstract class:
<?phpclassSomeStoreextendsBase{publicfunctionstore(){// Implementación específica para el método abstracto}}
Las clases abstractas permiten estructurar la funcionalidad común mientras obligan a las subclases a completar ciertas funcionalidades específicas.
¿Cómo podemos utilizar la abstracción en clases comunes?
Finalmente, la abstracción no se limita a interfaces o clases abstractas. También puedes aplicarla en clases "normales", organizando tu código para encapsular de manera efectiva información y métodos relevantes.
<?phpclassAuth{private$email;private$password;publicfunctionlogin(){// Lógica de autenticación}publicfunctionvalidate(){// Métodos de validación}}
Aquí, el concepto de abstracción se manifiesta al definir claramente lo que la clase Auth necesita para funcionar (atributos y métodos necesarios), sin preocuparse inicialmente por los detalles de implementación.
La abstracción en programación orientada a objetos es más que un concepto; es una práctica que promueve el orden y la claridad en el desarrollo de software. ¡Sigue explorando y aplicando estas técnicas, y observa cómo tu código se transforma en una obra maestra organizada! No olvides crear tus propios ejemplos y compartir tus descubrimientos para seguir fomentando el aprendizaje y el intercambio de ideas.
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 :D!
El caso práctico que compartes es incluso un caso de **polimorfismo, correcto?
Gracias por el aporte
Idolo.
ayúdeme con un like buen hombre XD
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:
Una clase abstracta se define como una clase padre o super clase
Una clase abstracta únicamente define o firma los métodos y atributos a implementar
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.
Excelente aporte Francisco.. gracias lo agregare a mis apuntes...
Tu apunte es súper claro, muchas gracias
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.
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.
😲 Abstraer es aislar, separar u organizar pensando siempre en el resultado final.
Excelente resumen, sólo una corrección: "Un método abstracto no se define, solo se declara.".
Muy buen video explicando la diferencia entre interfaz y clase abstracta
Vi el video, muy interesante, gracias.
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.
Yo lo comprendi tal como tu lo expresas, pero que bueno que lo hagas por que me tomo un buen ratico para hacerlo, casi me perdi por lo mismo...
No entendi nada xD
menos mal, porque yo tampco
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.
La abstracción es un temá muy importante pues es la base de comó funciona y evolucióna la programación.
Dejamos de programar en binario, cuando se creo ensamblador, dejamos de programar en ensamblador cuando se crearon lenguajes de alto nivel, el lograr abstraer a un nivel cada vez más alto nos permite desarrollar de una mánera más natural y rapida. Así también sirve para que el usuario que no conoce ni necesita saber sobre programación pueda hacer uso de ella, al implementar interfaces que abstraen su implementación
Muchas gracias
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 (medianteimplements 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 definitioninterfaceAnimal{publicfunctionmakeSound();}// Class definitionsclassCatimplementsAnimal{publicfunctionmakeSound(){echo"Meow<br>";}}classDogimplementsAnimal{publicfunctionmakeSound(){echo"Bark<br>";}}classMouseimplementsAnimal{publicfunctionmakeSound(){echo"Squeak<br>";}}// Create a list of animals$cat=newCat();$dog=newDog();$mouse=newMouse();$animals=array($cat,$dog,$mouse);// Tell the animals to make a soundforeach($animalsas$animal){$animal->makeSound();}
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
Como en otros lenguajes, una clase abstracta en PHP tampoco puede ser instanciada? es decir solamente puede ser heredada?
Exacto, vas a tener la firma de los metodos en esta clase, y en las clases que hereden su implementacion.