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 fusió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 característica en tiempo de compilación (las clases nuevas no se pueden declarar en tiempo de ejecución), mientras que en otros lenguajes las clases son ciudadanos de primera clase y generalmente son objetos en sí mismos (típicamente de tipo Class o similar). En estos lenguajes, una clase que crea clases se llama metaclase .

En el uso casual, la gente a menudo se refiere a la "clase" de un objeto, pero en términos estrictos, los objetos tienen un tipo : la interfaz, es decir, los tipos de variables miembro, las firmas de las funciones miembro (métodos) y las propiedades que 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 determinado, con una implementación determinada. [3] En 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 Pilapodría implementarse con dos clases: SmallStack (rápido para pilas pequeñas, pero escala mal) y ScalableStack (escala bien pero sobrecarga alta para pilas pequeñas). De manera similar, una clase determinada puede tener varios constructores diferentes.

Los tipos de clase generalmente representan sustantivos, como una persona, lugar o 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 producir plátanos particulares: las instancias de la clase ABCBanana serían objetos de tipo Banana. A menudo, 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 componentes estructurales y de comportamiento. [4] Los lenguajes de programación que incluyen clases como una construcción de programación ofrecen soporte para varias características relacionadas con la clase, y la sintaxis requerida para usar estas características varía mucho de un lenguaje de programación a otro.


Notación UML para clases