Clases
Una "clase" es una plantilla o un plano para crear objetos. Representa un conjunto de propiedades y métodos que comparten los objetos creados a partir de ella. Las clases se utilizan para definir cómo se comportarán los objetos y qué datos pueden contener.
Clase abstracta
Es una clase que no puede ser instanciada directamente, es decir, no se pueden crear objetos directamente a partir de ella. En lugar de eso, se utilizan como plantillas o modelos para otras clases que se derivan de ellas.
Las clases derivadas son conocidas como clases concretas y deben proporcionar implementaciones para los métodos y propiedades definidos en la clase abstracta. Su finalidad es principalmente con dos objetivos:
Definir una estructura base común que será compartida por varias clases derivadas. Esto permite encapsular comportamientos y atributos comunes en una única clase abstracta, lo que puede facilitar la gestión y el mantenimiento del código.
Son útiles cuando se quiere garantizar que las clases derivadas proporcionan ciertos métodos o propiedades ya que forzan la implementación, ya que al estar definidos estos métodos como abstractos en la clase base, se obliga a las clases derivadas a proporcionar implementaciones concretas para estos métodos.
Las características clave de las clases abstractas son:
Pueden contener métodos abstractos: Métodos que solo están definidos en la clase abstracta pero no tienen una implementación. Las clases derivadas deben proporcionar la implementación concreta de estos métodos.
Pueden contener métodos concretos: Métodos que tienen implementaciones concretas y pueden ser heredados por las clases derivadas.
No se pueden instanciar: No es posible crear objetos directamente a partir de una clase abstracta.
Pueden contener propiedades y atributos: Al igual que las clases concretas, las clases abstractas pueden tener propiedades y atributos.
Método abstracto
Son declaraciones de métodos en una clase que no contienen una implementación concreta en la clase en la que son definidos. En lugar de proporcionar el código real que realiza una tarea, un método abstracto simplemente declara la firma del método, incluyendo su nombre, parámetros y tipo de retorno. Las clases que contienen métodos abstractos deben ser marcadas como abstractas y las clases derivadas deben proporcionar una implementación concreta para estos métodos.
Definen un contrato: Al declarar métodos abstractos en una clase base, se está definiendo un contrato que las clases derivadas deben cumplir. Esto asegura que todas las clases derivadas proporcionen una implementación específica para estos métodos, lo que a su vez garantiza un comportamiento consistente y predecible en todas las instancias de las clases derivadas.
Forza las implementaciones concretas: Los métodos abstractos son una forma de asegurarse de que las clases derivadas realmente implementan ciertos comportamientos. Esto es especialmente útil cuando se está diseñando una jerarquía de clases y se quiere que todas las clases derivadas cumplan ciertas expectativas de comportamiento.
Promover la especialización: Los métodos abstractos permiten definir métodos en una clase base que se espera que sean implementados de manera específica en las clases derivadas. Esto permite que las clases derivadas se especialicen y personalicen la implementación según sus propias necesidades.
Métodos estáticos
Un método estático es un método que solo pertenece a la clase y no a una instancia específica de esa clase (objeto). Un método estático sólo puede acceder a datos estáticos e invocar métodos estáticos, no operan sobre los datos específicos de un objeto y no tienen acceso directo a las propiedades o métodos de instancia de la clase. Entre sus aplicaciones y beneficios tenemos:
Pueden ser útiles para agrupar funciones que están relacionadas con una clase pero no dependen de las instancias creadas a partir de ella. Por ejemplo, una clase Math podría tener métodos estáticos para realizar cálculos matemáticos como Math.sqrt() o Math.pow(), ya que estos cálculos no están vinculados a una instancia particular de la clase.
Tienen acceso a nivel de clase ya que pueden ser llamados sin la necesidad de crear una instancia de la clase. Esto es especialmente útil cuando se quieren realizar operaciones globales o utilitarias que no requieren almacenar datos en instancias.
Son eficientes, dado que no están vinculados a instancias, no es necesario crear objetos para utilizarlos, lo que puede ahorrar memoria y recursos.
No afectan el estado del objeto, ya que no pueden modificar las propiedades de instancia de la clase, lo que puede ser útil para garantizar que ciertas funciones no afecten el estado de los objetos.
También se utilizan en ocasiones como "métodos de fábrica" para crear instancias de la clase. Estos métodos pueden realizar lógica adicional para la creación y configuración de objetos antes de devolverlos.
Es importante destacar que el uso excesivo de métodos estáticos puede llevar a una pérdida de flexibilidad en el diseño orientado a objetos, ya que no aprovechan plenamente las capacidades de encapsulación y herencia que ofrecen las clases y las instancias. Sin embargo, en situaciones donde se necesitan operaciones independientes de instancias específicas, los métodos estáticos pueden ser una herramienta valiosa.
Modificadores de acceso
Especifican el nivel de accesibilidad o alcance de un miembro o tipo, ejemplo: clase, constructor, método o atributo. Existen cuatro niveles de acceso, se nombraran en el orden de menos restrictivo a más restrictivo.
Public: nivel de accesibilidad, dentro y fuera de la clase, dentro y fuera del paquete.
Protected: nivel de accesibilidad, dentro de la clase, dentro del paquete, fuera del paquete pero con subclases.
Default: este es más accesible que private pero menos que public y protected, su nivel de accesibilidad es, dentro de la clase o interfaz, dentro del paquete.
Private: nivel de accesibilidad, solo dentro de la clase o interfaz.
Las clases son las únicas que no pueden ser privadas ya que una clase privada no puede ser accedida desde fuera de la clase.
Preguntas y Respuestas
¿Que es una clase de utilidad?
R/: Es una clase que proporciona métodos estáticos que se pueden utilizar para realizar tareas comunes. Estos métodos están diseñados para ser reutilizables y se pueden utilizar en diferentes partes de un programa.
0 Comentarios