Clase (programación informática)


En la programación orientada a objetos , una clase es una plantilla de código de programa extensible para crear objetos , proporcionando valores iniciales para el estado ( variables miembro ) e implementaciones de comportamiento (funciones miembro o métodos ). [1] [2] En muchos idiomas, el nombre de la clase se usa como el nombre de la clase (la plantilla en sí), el nombre del constructor predeterminado de la clase (una subrutina que crea objetos) y como el tipo de objetos . generado al instanciar la clase; estos conceptos distintos se combinan fácilmente. [2] Aunque, hasta el punto de la confusión, se podría argumentar que es una característica inherente a un lenguaje debido a su naturaleza polimórfica y por qué estos lenguajes son tan poderosos, dinámicos y adaptables para su uso en comparación con los lenguajes sin polimorfismo presente. Por lo tanto, pueden modelar sistemas dinámicos (es decir, el mundo real, aprendizaje automático, IA) más fácilmente.

Cuando un constructor de la clase crea un objeto, el objeto resultante se denomina instancia de la clase, y las variables miembro específicas del objeto se denominan variables de instancia , para contrastar con las variables de clase compartidas en la clase.

En algunos lenguajes, las clases son solo una función en tiempo de compilación (no se pueden declarar nuevas clases en tiempo de ejecución), mientras que en otros lenguajes las clases son ciudadanos de primera clase y, por lo general, son objetos en sí mismos (típicamente de tipo Clase o similar). En estos lenguajes, una clase que crea clases se llama metaclase .

En el uso casual, las personas a menudo se refieren a la "clase" de un objeto, pero en términos estrictos, los objetos tienen tipo : la interfaz, es decir, los tipos de variables miembro, las firmas de las funciones miembro (métodos) y las propiedades que estos satisfacen. Al mismo tiempo, una clase tiene una implementación (específicamente la implementación de los métodos), y puede crear objetos de un tipo dado, con una implementación dada. [3] En los términos de la teoría de tipos, una clase es una implementación‍—‌una estructura de datos concreta y una colección de subrutinas‍—‌mientras que un tipo es una interfaz . Diferentes clases (concretas) pueden producir objetos del mismo tipo (abstracto) (dependiendo del sistema de tipos); por ejemplo, el tipo Stackpodría implementarse con dos clases: SmallStack (rápido para pilas pequeñas, pero se escala mal) y ScalableStack (se escala bien pero tiene una sobrecarga alta para pilas pequeñas). De manera similar, una clase dada puede tener varios constructores diferentes.

Los tipos de clase generalmente representan sustantivos, como una persona, un lugar o una cosa, o algo nominalizado , y una clase representa una implementación de estos. Por ejemplo, un tipo Banana podría representar las propiedades y la funcionalidad de las bananas en general, mientras que las clases ABCBanana y XYZBanana representarían formas de producir bananas (por ejemplo, proveedores de bananas o estructuras de datos y funciones para representar y dibujar bananas en un videojuego). La clase ABCBanana podría entonces producir bananas particulares: las instancias de la clase ABCBanana serían objetos de tipo Banana. A menudo, solo se proporciona una única implementación de un tipo, en cuyo caso el nombre de la clase suele ser idéntico al nombre del tipo.

Las clases se componen de constituyentes estructurales y de comportamiento. [4] Los lenguajes de programación que incluyen clases como una construcción de programación ofrecen soporte para varias funciones relacionadas con la clase, y la sintaxis requerida para usar estas funciones varía mucho de un lenguaje de programación a otro.


notación UML para clases