Clase

En la programación orientada a objetos, una
clase es una construcción que se utiliza como un modelo (o plantilla) para crear
objetos de ese tipo. El modelo describe el estado y el comportamiento que todos
los objetos de la clase comparten. Un objeto de una determinada clase se
denomina una instancia de la clase. La clase que contiene (y se utilizó para
crear) esa instancia se puede considerar como del tipo de ese objeto, por
ejemplo, una instancia del objeto de la clase "Personas" sería del tipo
"Personas".

Una clase por lo general representa un
sustantivo, como una persona, lugar o (posiblemente bastante abstracta) cosa -
es el modelo de un concepto dentro de un programa de computadora.
Fundamentalmente, encapsula el estado y el comportamiento del concepto que
representa. Encapsula el estado a través de marcadores de datos llamados
atributos (o variables miembro o variables de instancia), encapsula el
comportamiento a través de secciones de código reutilizables llamados
métodos.

Objeto

En el paradigma de programación orientada a
objetos (POO, o bien OOP en inglés), un objeto se define como la unidad que en
tiempo de ejecución realiza las tareas de un programa. También a un nivel más
básico se define como la instancia de una clase.

Estos objetos interactúan unos con otros, en
contraposición a la visión tradicional en la cual un programa es una colección
de subrutinas (funciones o procedimientos), o simplemente una lista de
instrucciones para el computador. Cada objeto es capaz de recibir mensajes,
procesar datos y enviar mensajes a otros objetos de manera similar a un
servicio.

Abstracción

La abstracción consiste en aislar un elemento
de su contexto o del resto de los elementos que lo acompañan. En programación,
el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo
hace?" (característica de caja negra). El común denominador en la evolución de
los lenguajes de programación, desde los clásicos o imperativos hasta los
orientados a objetos, ha sido el nivel de abstracción del que cada uno de ellos
hace uso.

Los lenguajes de programación son las
herramientas mediante las cuales los diseñadores de lenguajes pueden implementar
los modelos abstractos. La abstracción ofrecida por los lenguajes de
programación se puede dividir en dos categorías: abstracción de datos
(pertenecientes a los datos) y abstracción de control (perteneciente a las
estructuras de control).

Los diferentes paradigmas de programación han
aumentado su nivel de abstracción, comenzando desde los lenguajes de máquina, lo
más próximo al ordenador y más lejano a la comprensión humana; pasando por los
lenguajes de comandos, los imperativos, la orientación a objetos (OO), la
Programación Orientada a Aspectos (POA); u otros paradigmas como la programación
declarativa, etc.

Modularidad

En programación modular, y más específicamente
en programación orientada a objetos, se denomina Modularidad a la propiedad que
permite subdividir una aplicación en partes más pequeñas (llamadas módulos),
cada una de las cuales debe ser tan independiente como sea posible de la
aplicación en sí y de las restantes partes.

Estos módulos que se puedan compilar por
separado, pero que tienen conexiones con otros módulos. Al igual que la
encapsulación, los lenguajes soportan la Modularidad de diversas formas.

Según Bertrand Meyer "El acto de particionar un
programa en componentes individuales para reducir su complejidad en algún grado.
. . . A pesar de particionar un programa es útil por esta razón, una
justificación más poderosa para particionar un programa es que crea una serie de
límites bien definidos y documentados en el programa. Estos límites, o
interfaces, son muy valiosos en la comprensión del programa.

Encapsulamiento

En programación modular, y más específicamente
en programación orientada a objetos, se denomina encapsulamiento al ocultamiento
del estado, es decir, de los datos miembro, de un objeto de manera que sólo se
puede cambiar mediante las operaciones definidas para ese objeto.

Cada objeto está aislado del exterior, es un
módulo natural, y la aplicación entera se reduce a un agregado o rompecabezas de
objetos. El aislamiento protege a los datos asociados a un objeto contra su
modificación por quien no tenga derecho a acceder a ellos, eliminando efectos
secundarios e interacciones.

Herencia

En orientación a objetos la herencia es el
mecanismo fundamental para implementar la reutilización y extensibilidad del
software. A través de ella los diseñadores pueden construir nuevas clases
partiendo de una jerarquía de clases ya existente (comprobadas y verificadas)
evitando con ello el rediseño, la modificación y verificación de la parte ya
implementada. La herencia facilita la creación de objetos a partir de otros ya
existentes, obteniendo características (métodos y atributos) similares a los ya
existentes.

Es la relación entre una clase general y otra
clase más especifica. Por ejemplo: Si declaramos una clase párrafo derivada de
una clase texto, todos los métodos y variables asociadas con la clase texto, son
automáticamente heredados por la subclase párrafo.

Polimorfismo

En programación orientada a objetos el
polimorfismo se refiere a la capacidad para que varias clases derivadas de una
antecesora utilicen un mismo método de forma diferente.

Por ejemplo, podemos crear dos clases
distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene
el método abstracto mover que se implementa de forma distinta en cada una de las
subclases (peces y aves se mueven de forma distinta).

Como se mencionó anteriormente, el concepto de
polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Así nacen
los conceptos de funciones polimórficas y tipos polimórficos. Las primeras son
aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de
datos de forma indistinta; los tipos polimórficos, por su parte, son aquellos
tipos de datos que contienen al menos un elemento cuyo tipo no está
especificado.